diff --git a/cellbase-app/pom.xml b/cellbase-app/pom.xml
index 235c0f146..da0a4585e 100644
--- a/cellbase-app/pom.xml
+++ b/cellbase-app/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
../pom.xml
diff --git a/cellbase-client/pom.xml b/cellbase-client/pom.xml
index 7f49ade0e..60c447798 100644
--- a/cellbase-client/pom.xml
+++ b/cellbase-client/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
../pom.xml
diff --git a/cellbase-core/pom.xml b/cellbase-core/pom.xml
index 4275ef5be..2c497a573 100644
--- a/cellbase-core/pom.xml
+++ b/cellbase-core/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
../pom.xml
diff --git a/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationCalculator.java b/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationCalculator.java
index f220ec998..a0df55d77 100644
--- a/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationCalculator.java
+++ b/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationCalculator.java
@@ -1102,6 +1102,10 @@ private ConsequenceTypeCalculator getConsequenceTypeCalculator(Variant variant)
case BREAKEND:
return new ConsequenceTypeBNDCalculator();
default:
+ logger.error("There is no ConsequenceTypeCalculator for variant %s of type %s",
+ variant,
+ VariantAnnotationUtils.getVariantType(variant)
+ );
throw new UnsupportedURLVariantFormat();
}
}
diff --git a/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationUtils.java b/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationUtils.java
index c462d87ad..805275ee4 100644
--- a/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationUtils.java
+++ b/cellbase-core/src/main/java/org/opencb/cellbase/core/variant/annotation/VariantAnnotationUtils.java
@@ -5,6 +5,8 @@
import org.opencb.biodata.models.variant.annotation.ConsequenceTypeMappings;
import org.opencb.biodata.models.variant.annotation.exceptions.SOTermNotAvailableException;
import org.opencb.biodata.models.variant.avro.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.*;
@@ -146,6 +148,8 @@ public class VariantAnnotationUtils {
public static final String MT = "MT";
public static final String UNKNOWN_AMINOACID = "X";
+ private static final int MAX_MNV_THRESHOLD = 1000;
+ private static Logger logger = LoggerFactory.getLogger(VariantAnnotationUtils.class);
static {
@@ -670,6 +674,12 @@ public static VariantType getVariantType(Variant variant) throws UnsupportedURLV
} else {
return VariantType.MNV;
}
+ } else if (!variant.isSymbolic() && variant.getReference().length() > 1 && variant.getAlternate().length() > 1) {
+ if (variant.getReference().length() <= MAX_MNV_THRESHOLD && variant.getAlternate().length() <= MAX_MNV_THRESHOLD) {
+ return VariantType.MNV;
+ } else {
+ logger.warn("Provided alleles for variant are too long to be considered an MNV: %s", variant);
+ }
}
return variant.getType();
// return getVariantType(variant.getReferenceStart(), variant.getAlternate());
diff --git a/cellbase-lib/pom.xml b/cellbase-lib/pom.xml
index 64b471320..daf607aa2 100644
--- a/cellbase-lib/pom.xml
+++ b/cellbase-lib/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
../pom.xml
diff --git a/cellbase-lib/src/test/java/org/opencb/cellbase/lib/impl/VariantAnnotationCalculatorTest.java b/cellbase-lib/src/test/java/org/opencb/cellbase/lib/impl/VariantAnnotationCalculatorTest.java
index 3b403bb34..0e632ff68 100644
--- a/cellbase-lib/src/test/java/org/opencb/cellbase/lib/impl/VariantAnnotationCalculatorTest.java
+++ b/cellbase-lib/src/test/java/org/opencb/cellbase/lib/impl/VariantAnnotationCalculatorTest.java
@@ -20,6 +20,7 @@
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
+import org.apache.commons.lang3.StringUtils;
import org.hamcrest.CoreMatchers;
import org.junit.Before;
import org.junit.Test;
@@ -28,6 +29,7 @@
import org.opencb.biodata.models.variant.avro.*;
import org.opencb.cellbase.core.variant.AnnotationBasedPhasedQueryManager;
import org.opencb.cellbase.core.variant.annotation.VariantAnnotationCalculator;
+import org.opencb.cellbase.core.variant.annotation.UnsupportedURLVariantFormat;
import org.opencb.cellbase.lib.GenericMongoDBAdaptorTest;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.commons.datastore.core.QueryResult;
@@ -40,7 +42,6 @@
import static org.junit.Assert.*;
-
public class VariantAnnotationCalculatorTest extends GenericMongoDBAdaptorTest {
ObjectMapper jsonObjectMapper;
@@ -2379,7 +2380,53 @@ public void testSpliceAnnotation() throws Exception {
"splice_acceptor_variant"))
);
}
+ @Test
+ public void testLongMNVConsequenceTypes() throws Exception {
+ Variant variant = new Variant("22", 17668822, "TCTCTACTAAAAATACAAAAAATTAGCCAGGCGTGGTGGCAGGTGCCTGTAGTAC", "CC");
+ QueryOptions queryOptions = new QueryOptions("useCache", false);
+ queryOptions.put("include", "consequenceType");
+ queryOptions.put("skipDecompose", true);
+ QueryResult queryResult = variantAnnotationCalculator
+ .getAnnotationByVariant(variant, queryOptions);
+ List consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
+ assertFalse(consequenceTypeList.isEmpty());
+ String sequenceOntologyTerms = getSequenceOntologyTerms("ENST00000399839", consequenceTypeList);
+ assertEquals("[{\"accession\": \"SO:0001627\", \"name\": \"intron_variant\"}]", sequenceOntologyTerms);
+
+ // Deletion instead of MNV produces feature_truncation in addition to intron_variant
+ variant = new Variant("22", 17668822, "TCTCTACTAAAAATACAAAAAATTAGCCAGGCGTGGTGGCAGGTGCCTGTAGTAC", "");
+ queryResult = variantAnnotationCalculator
+ .getAnnotationByVariant(variant, queryOptions);
+ consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
+ assertFalse(consequenceTypeList.isEmpty());
+ sequenceOntologyTerms = getSequenceOntologyTerms("ENST00000399839", consequenceTypeList);
+ assertEquals("[{\"accession\": \"SO:0001906\", \"name\": \"feature_truncation\"}, {\"accession\": \"SO:0001627\", \"name\": \"intron_variant\"}]", sequenceOntologyTerms);
+ }
+ @Test(expected = UnsupportedURLVariantFormat.class)
+ public void testLongMNVConsequenceTypesFailsForAboveThresholdLength() throws Exception {
+ QueryOptions queryOptions = new QueryOptions("useCache", false);
+ queryOptions.put("include", "consequenceType");
+ queryOptions.put("skipDecompose", true);
+ // Very long MNV > MAX_MNV_THRESHOLD should return no consequence type
+ String alt = "C" + StringUtils.repeat('A', 1001);
+ Variant aboveThresholdVariant = new Variant("22", 17668822, "TCTCTACTAAAAATACAAAAAATTAGCCAGGCGTGGTGGCAGGTGCCTGTAGTAC",alt);
+ QueryResult queryResult = variantAnnotationCalculator
+ .getAnnotationByVariant(aboveThresholdVariant, queryOptions);
+ List consequenceTypeList = queryResult.getResult().get(0).getConsequenceTypes();
+ assertTrue(consequenceTypeList.isEmpty());
+ // Very long MNV > MAX_MNV_THRESHOLD throws UnsupportedURLVariantFormat
+ variantAnnotationCalculator.getAllConsequenceTypesByVariant(aboveThresholdVariant, queryOptions);
+ }
+
+ public String getSequenceOntologyTerms(String transcriptID, List consequenceTypeList){
+ for (ConsequenceType consequenceType : consequenceTypeList) {
+ if (consequenceType.getEnsemblTranscriptId().equals("ENST00000399839")){
+ return consequenceType.getSequenceOntologyTerms().toString();
+ };
+ }
+ return null;
+ }
private void assertObjectListEquals(String expectedConsequenceTypeJson, List actualList,
Class clazz) throws IOException {
ObjectReader reader = jsonObjectMapper
diff --git a/cellbase-server/pom.xml b/cellbase-server/pom.xml
index e7f9784e8..cc8c17d5b 100644
--- a/cellbase-server/pom.xml
+++ b/cellbase-server/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
../pom.xml
diff --git a/cellbase-test/pom.xml b/cellbase-test/pom.xml
index 12637dcc0..937b5c45f 100644
--- a/cellbase-test/pom.xml
+++ b/cellbase-test/pom.xml
@@ -22,7 +22,7 @@
org.opencb.cellbase
cellbase-test
- 4.12.3
+ 4.12.4
pom
diff --git a/pom.xml b/pom.xml
index 58dc6efc7..a0b37e445 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.opencb.cellbase
cellbase
- 4.12.3
+ 4.12.4
pom
CellBase project