Skip to content

Commit

Permalink
Merge pull request #665 from awab-ahmed/fix-decomposed-mnv-codon-change
Browse files Browse the repository at this point in the history
Fix decomposed mnv codon change
  • Loading branch information
julie-sullivan authored Sep 12, 2023
2 parents 59d7ad3 + 81dff04 commit c9af263
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 21 deletions.
2 changes: 1 addition & 1 deletion cellbase-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion cellbase-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion cellbase-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -652,9 +652,6 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
= findCodingOverlappingConsequenceType(consequenceType1, variant1.getAnnotation().getConsequenceTypes());
// The two first variants affect the same codon
if (consequenceType2 != null) {
// WARNING: assumes variants are sorted according to their coordinates
int cdnaPosition = consequenceType1.getCdnaPosition();
int cdsPosition = consequenceType1.getCdsPosition();
String codon = null;
String alternateAA = null;
List<SequenceOntologyTerm> soTerms = null;
Expand All @@ -673,12 +670,12 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
String alternateCodon = null;

// negative strand
if ("-".equals(variant0.getStrand())) {
alternateCodon = "" + VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant2.getAlternate())
+ VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant1.getAlternate())
+ VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant0.getAlternate());
if ("-".equals(consequenceType1.getStrand())) {
alternateCodon = "" + VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant2.getAlternate().toUpperCase().toCharArray()[0])
+ VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant1.getAlternate().toUpperCase().toCharArray()[0])
+ VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant0.getAlternate().toUpperCase().toCharArray()[0]);
} else {
alternateCodon = variant0.getAlternate() + variant1.getAlternate() + variant2.getAlternate();
alternateCodon = variant0.getAlternate().toUpperCase() + variant1.getAlternate().toUpperCase() + variant2.getAlternate().toUpperCase();
}


Expand All @@ -689,8 +686,6 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
variant1.getChromosome().equals("MT"));

// Update consequenceType3
consequenceType3.setCdnaPosition(cdnaPosition);
consequenceType3.setCdsPosition(cdsPosition);
consequenceType3.setCodon(codon);
consequenceType3.getProteinVariantAnnotation().setAlternate(alternateAA);
newProteinVariantAnnotation = getProteinAnnotation(consequenceType3);
Expand All @@ -716,7 +711,7 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
char[] alternateCodonArray = referenceCodonArray.clone();

// negative strand
if ("-".equals(variant0.getStrand())) {
if ("-".equals(consequenceType1.getStrand())) {
alternateCodonArray[codonIdx1] =
VariantAnnotationUtils.COMPLEMENTARY_NT.get(variant0.getAlternate().toUpperCase().toCharArray()[0]);
alternateCodonArray[codonIdx2] =
Expand All @@ -739,8 +734,6 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
consequenceType1.setProteinVariantAnnotation(newProteinVariantAnnotation == null
? getProteinAnnotation(consequenceType1) : newProteinVariantAnnotation);
consequenceType1.setSequenceOntologyTerms(soTerms);
consequenceType2.setCdnaPosition(cdnaPosition);
consequenceType2.setCdsPosition(cdsPosition);
consequenceType2.setCodon(codon);
consequenceType2.getProteinVariantAnnotation().setAlternate(alternateAA);
consequenceType2.setProteinVariantAnnotation(consequenceType1.getProteinVariantAnnotation());
Expand Down
2 changes: 1 addition & 1 deletion cellbase-lib/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,106 @@ public void testQueryResultGroupingDecomposedMNVs() throws Exception {



}


@Test
public void testDecomposedMNVReturnsCorrectCodonChange() throws Exception {
QueryOptions queryOptions = (new QueryOptions("normalize", true));
queryOptions.put("skipDecompose", true);
queryOptions.put("include", "consequenceType,hgvs");
Variant variant = new Variant("18", 30517979, "CC", "AA");
String transcriptID = "ENST00000581852";
// Negative strand with no decompose
QueryResult<VariantAnnotation> queryResult = variantAnnotationCalculator
.getAnnotationByVariant(variant, queryOptions);
List<ConsequenceType> consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
assertFalse(consequenceTypeList.isEmpty());
ConsequenceType consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("-", consequenceType.getStrand());
assertEquals("GGT/TTT", consequenceType.getCodon());
assertEquals("GLY", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(262, consequenceType.getCdnaPosition().intValue());
assertEquals(214, consequenceType.getCdsPosition().intValue());
// For negative strand with decompose, amino acid change should be similar to the non-decomposed one
queryOptions.put("skipDecompose", false);
queryResult = variantAnnotationCalculator
.getAnnotationByVariant(variant, queryOptions);
// First variant
consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("-", consequenceType.getStrand());
assertEquals("GGt/TTt", consequenceType.getCodon());
assertEquals("GLY", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(30517979, queryResult.getResult().get(0).getStart().intValue());
assertEquals(263, consequenceType.getCdnaPosition().intValue());
assertEquals(215, consequenceType.getCdsPosition().intValue());
// Second variant
consequenceTypeList = queryResult.getResult().get(1).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("-", consequenceType.getStrand());
assertEquals("GGt/TTt", consequenceType.getCodon());
assertEquals("GLY", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(30517980, queryResult.getResult().get(1).getStart().intValue());
assertEquals(262, consequenceType.getCdnaPosition().intValue());
assertEquals(214, consequenceType.getCdsPosition().intValue());

// Test for negative strand decomposed mnv made of 3 changes in the same codon
variant = new Variant("18", 30517978, "ACC", "GGG");
queryResult = variantAnnotationCalculator
.getAnnotationByVariant(variant, queryOptions);
consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("-", consequenceType.getStrand());
assertEquals("GGT/CCC", consequenceType.getCodon());
assertEquals("GLY", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PRO", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(30517978, queryResult.getResult().get(0).getStart().intValue());
assertEquals(264, consequenceType.getCdnaPosition().intValue());
assertEquals(216, consequenceType.getCdsPosition().intValue());

// Positive strand, no decompose
variant = new Variant("19", 33167329, "AC", "TT");
transcriptID = "ENST00000334176";
queryOptions.put("skipDecompose", true);
queryResult = variantAnnotationCalculator
.getAnnotationByVariant(variant, queryOptions);
consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("+", consequenceType.getStrand());
assertEquals("ACC/TTC", consequenceType.getCodon());
assertEquals("THR", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(33167329, queryResult.getResult().get(0).getStart().intValue());
assertEquals(1017, consequenceType.getCdnaPosition().intValue());
assertEquals(160, consequenceType.getCdsPosition().intValue());
// Positive strand with decompose
queryOptions.put("skipDecompose", false);
queryResult = variantAnnotationCalculator
.getAnnotationByVariant(variant, queryOptions);
// First variant
consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("+", consequenceType.getStrand());
assertEquals("ACc/TTc", consequenceType.getCodon());
assertEquals("THR", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(33167329, queryResult.getResult().get(0).getStart().intValue());
assertEquals(1017, consequenceType.getCdnaPosition().intValue());
assertEquals(160, consequenceType.getCdsPosition().intValue());
// Second variant
consequenceTypeList = queryResult.getResult().get(1).getConsequenceTypes();
consequenceType = getConsequenceType(consequenceTypeList,transcriptID);
assertEquals("+", consequenceType.getStrand());
assertEquals("ACc/TTc", consequenceType.getCodon());
assertEquals("THR", consequenceType.getProteinVariantAnnotation().getReference());
assertEquals("PHE", consequenceType.getProteinVariantAnnotation().getAlternate());
assertEquals(33167330, queryResult.getResult().get(1).getStart().intValue());
assertEquals(1018, consequenceType.getCdnaPosition().intValue());
assertEquals(161, consequenceType.getCdsPosition().intValue());
}

@Test
Expand Down
2 changes: 1 addition & 1 deletion cellbase-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion cellbase-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase-test</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<packaging>pom</packaging>

<dependencies>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.opencb.cellbase</groupId>
<artifactId>cellbase</artifactId>
<version>4.12.5</version>
<version>4.12.6</version>
<packaging>pom</packaging>

<name>CellBase project</name>
Expand All @@ -22,7 +22,7 @@
</modules>

<properties>
<cellbase.version>4.12.5</cellbase.version>
<cellbase.version>4.12.6</cellbase.version>
<compileSource>1.8</compileSource>
<java-common-libs.version>3.7.5</java-common-libs.version>
<biodata.version>1.5.6</biodata.version>
Expand Down

0 comments on commit c9af263

Please sign in to comment.