Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.9.8</version>
<version>4.10.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ public class ClinVarIndexer extends ClinicalIndexer {
private int numberGermlineRecords = 0;
private int numberNoDiseaseTrait = 0;
private int numberMultipleInheritanceModels = 0;
private static final String RCVIDS = "rcvIds";
private static final String SCVIDS = "scvIds";
private static final Set<ModeOfInheritance> DOMINANT_TERM_SET
= new HashSet<>(Arrays.asList(ModeOfInheritance.monoallelic,
ModeOfInheritance.monoallelic_maternally_imprinted,
Expand Down Expand Up @@ -213,7 +215,7 @@ private boolean updateRocksDB(AlleleLocationData alleleLocationData, PublicSetTy
String mateVariantString, Map<String, EFO> traitsToEfoTermsMap)
throws RocksDBException, IOException {

// More than one variant being returned from the normalisatio process would mean it's and MNV which has been
// More than one variant being returned from the normalisation process would mean it's and MNV which has been
// decomposed
List<String> normalisedVariantStringList = getNormalisedVariantString(
alleleLocationData.getSequenceLocation().getChromosome(),
Expand All @@ -232,32 +234,42 @@ private boolean updateRocksDB(AlleleLocationData alleleLocationData, PublicSetTy
clinicalHaplotypeString = StringUtils.join(normalisedVariantStringList, HAPLOTYPE_STRING_SEPARATOR);
}

// get VCV ID
String vcvId = getVcvId(publicSet);

// parse RCVs
String accession = publicSet.getReferenceClinVarAssertion().getClinVarAccession().getAcc();
String rcvAccession = publicSet.getReferenceClinVarAssertion().getClinVarAccession().getAcc();
String clinicalSignficanceDescription = publicSet.getReferenceClinVarAssertion()
.getClinicalSignificance()
.getDescription();
String reviewStatusName = publicSet.getReferenceClinVarAssertion().getClinicalSignificance()
.getReviewStatus().name();
List<ObservationSet> getObservedIn = publicSet.getReferenceClinVarAssertion().getObservedIn();
addNewEntries(variantAnnotation, publicSet, alleleLocationData.getAlleleId(), mateVariantString,
clinicalHaplotypeString, traitsToEfoTermsMap, accession, clinicalSignficanceDescription,
reviewStatusName, getObservedIn);
clinicalHaplotypeString, traitsToEfoTermsMap, rcvAccession, clinicalSignficanceDescription,
reviewStatusName, getObservedIn, vcvId);

List<String> scvAccessions = new ArrayList<>();

// parse SCVs
for (MeasureTraitType measureTraitType : publicSet.getClinVarAssertion()) {
accession = measureTraitType.getClinVarAccession().getAcc();
String scvAccession = measureTraitType.getClinVarAccession().getAcc();
clinicalSignficanceDescription
= StringUtils.join(measureTraitType.getClinicalSignificance().getDescription(),
CLINICAL_SIGNIFICANCE_SEPARATOR);

reviewStatusName = getReviewStatusIfPresent(measureTraitType);
getObservedIn = measureTraitType.getObservedIn();
addNewEntries(variantAnnotation, publicSet, alleleLocationData.getAlleleId(), mateVariantString,
clinicalHaplotypeString, traitsToEfoTermsMap, accession, clinicalSignficanceDescription,
reviewStatusName, getObservedIn);
clinicalHaplotypeString, traitsToEfoTermsMap, scvAccession, clinicalSignficanceDescription,
reviewStatusName, getObservedIn, vcvId);
scvAccessions.add(scvAccession);
}

if (StringUtils.isNotEmpty(vcvId)) {
// add SCVs and RCVs to VCV entry
addAdditionalProperties(variantAnnotation, vcvId, rcvAccession, scvAccessions);
}
rdb.put(normalisedVariantString.getBytes(), jsonObjectWriter.writeValueAsBytes(variantAnnotation));
}
return true;
Expand All @@ -266,6 +278,46 @@ private boolean updateRocksDB(AlleleLocationData alleleLocationData, PublicSetTy
return false;
}

private String getVcvId(PublicSetType publicSet) {
if (publicSet.getReferenceClinVarAssertion() == null || publicSet.getReferenceClinVarAssertion().getMeasureSet() == null
|| publicSet.getReferenceClinVarAssertion().getMeasureSet().getID() == null) {
return null;
}
return publicSet.getReferenceClinVarAssertion().getMeasureSet().getID().toString();
}

private void addAdditionalProperties(VariantAnnotation variantAnnotation, String vcvId, String rcvAccession,
List<String> scvAccessions) {
List<Property> properties = getTraitAssociation(variantAnnotation, vcvId).getAdditionalProperties();
boolean hasRCVIds = false;
boolean hasSCVIds = false;
for (Property property : properties) {
if (RCVIDS.equals(property.getName())) {
hasRCVIds = true;
property.setValue(property.getValue() + "," + rcvAccession);
}
if (SCVIDS.equals(property.getName())) {
hasSCVIds = true;
property.setValue(property.getValue() + "," + String.join(",", scvAccessions));
}
}
if (!hasRCVIds) {
properties.add(new Property(null, RCVIDS, rcvAccession));
}
if (!hasSCVIds) {
properties.add(new Property(null, SCVIDS, String.join(",", scvAccessions)));
}
}

private EvidenceEntry getTraitAssociation(VariantAnnotation variantAnnotation, String vcvId) {
for (EvidenceEntry evidenceEntry: variantAnnotation.getTraitAssociation()) {
if (vcvId.equals(evidenceEntry.getId())) {
return evidenceEntry;
}
}
return null;
}

private String getReviewStatusIfPresent(MeasureTraitType measureTraitType) {
if (measureTraitType.getClinicalSignificance().getReviewStatus() != null) {
return measureTraitType.getClinicalSignificance().getReviewStatus().name();
Expand Down Expand Up @@ -355,10 +407,13 @@ private void addNewEntries(VariantAnnotation variantAnnotation, PublicSetType pu
String mateVariantString, String clinicalHaplotypeString,
Map<String, EFO> traitsToEfoTermsMap, String accession,
String clinicalSignficanceDescription, String reviewStatusName,
List<ObservationSet> getObservedIn)
List<ObservationSet> getObservedIn, String vcvId)
throws JsonProcessingException {

List<Property> additionalProperties = new ArrayList<>(3);
List<Property> additionalProperties = new ArrayList<>();
if (StringUtils.isNotEmpty(vcvId)) {
additionalProperties.add(new Property(null, "vcvIds", vcvId));
}
EvidenceSource evidenceSource = new EvidenceSource(EtlCommons.CLINVAR_DATA, null, null);
// String accession = publicSet.getReferenceClinVarAssertion().getClinVarAccession().getAcc();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ private void initGrch38() throws Exception {
(new ClinicalVariantParser(clinicalVariantFolder, true, genomeSequenceFilePath, "GRCh38", serializer)).parse();
}



@Test
public void testUnexpectedAccession() throws Exception {
cleanUp();
Expand All @@ -80,8 +82,31 @@ public void testUnexpectedAccession() throws Exception {
assertEquals("G", variant.getReference());
assertEquals("A", variant.getAlternate());

// variant should have list of SCVs and RCVs and VCVs
EvidenceEntry evidenceEntry = getEvidenceEntryByAccession(variant, "RCV000007529");
assertEquals(4, evidenceEntry.getAdditionalProperties().size());
assertEquals("7109", getValueByName(evidenceEntry, "vcvIds"));

evidenceEntry = getEvidenceEntryByAccession(variant, "SCV000053488");
assertEquals(4, evidenceEntry.getAdditionalProperties().size());
assertEquals("7109", getValueByName(evidenceEntry, "vcvIds"));

evidenceEntry = getEvidenceEntryByAccession(variant, "7109");
assertEquals(4, evidenceEntry.getAdditionalProperties().size());
assertEquals("RCV000007529", getValueByName(evidenceEntry, "rcvIds"));
assertEquals("SCV000053488", getValueByName(evidenceEntry, "scvIds"));
}

private String getValueByName(EvidenceEntry evidenceEntry, String name) {
for (Property property : evidenceEntry.getAdditionalProperties()) {
if (property.getName().equals(name)) {
return property.getValue();
}
}
return null;
}


@Test
public void testReallyLongVariant() throws Exception {
cleanUp();
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.9.8</version>
<version>4.10.0-SNAPSHOT</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.9.8</version>
<version>4.10.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,8 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
consequenceType3.setSequenceOntologyTerms(soTerms);

// Flag these transcripts as already updated for this variant
flagTranscriptAnnotationUpdated(variant2, consequenceType1.getEnsemblTranscriptId());
flagTranscriptAnnotationUpdated(variant2, consequenceType1.getEnsemblTranscriptId(),
Arrays.asList(variant0, variant1));

variant2DisplayCTNeedsUpdate = true;

Expand Down Expand Up @@ -745,8 +746,8 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
consequenceType2.setSequenceOntologyTerms(soTerms);

// Flag these transcripts as already updated for this variant
flagTranscriptAnnotationUpdated(variant0, consequenceType1.getEnsemblTranscriptId());
flagTranscriptAnnotationUpdated(variant1, consequenceType1.getEnsemblTranscriptId());
flagTranscriptAnnotationUpdated(variant0, consequenceType1.getEnsemblTranscriptId(), Arrays.asList((variant1)));
flagTranscriptAnnotationUpdated(variant1, consequenceType1.getEnsemblTranscriptId(), Arrays.asList((variant0)));

variant0DisplayCTNeedsUpdate = true;
variant1DisplayCTNeedsUpdate = true;
Expand All @@ -771,24 +772,25 @@ private void adjustPhasedConsequenceTypes(Object[] variantArray) {
}
}

private void flagTranscriptAnnotationUpdated(Variant variant, String ensemblTranscriptId) {
private void flagTranscriptAnnotationUpdated(Variant variant, String ensemblTranscriptId, List<Variant> phasedVariants) {
Map<String, AdditionalAttribute> additionalAttributesMap = variant.getAnnotation().getAdditionalAttributes();
if (additionalAttributesMap == null) {
additionalAttributesMap = new HashMap<>();
AdditionalAttribute additionalAttribute = new AdditionalAttribute();
Map<String, String> transcriptsSet = new HashMap<>();
transcriptsSet.put(ensemblTranscriptId, null);
transcriptsSet.put(ensemblTranscriptId, VariantAnnotationUtils.buildVariantIds(phasedVariants));
additionalAttribute.setAttribute(transcriptsSet);
additionalAttributesMap.put("phasedTranscripts", additionalAttribute);
variant.getAnnotation().setAdditionalAttributes(additionalAttributesMap);
} else if (additionalAttributesMap.get("phasedTranscripts") == null) {
AdditionalAttribute additionalAttribute = new AdditionalAttribute();
Map<String, String> transcriptsSet = new HashMap<>();
transcriptsSet.put(ensemblTranscriptId, null);
transcriptsSet.put(ensemblTranscriptId, VariantAnnotationUtils.buildVariantIds(phasedVariants));
additionalAttribute.setAttribute(transcriptsSet);
additionalAttributesMap.put("phasedTranscripts", additionalAttribute);
} else {
additionalAttributesMap.get("phasedTranscripts").getAttribute().put(ensemblTranscriptId, null);
additionalAttributesMap.get("phasedTranscripts").getAttribute().put(ensemblTranscriptId,
VariantAnnotationUtils.buildVariantIds(phasedVariants));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,12 +601,33 @@ public static SequenceOntologyTerm newSequenceOntologyTerm(String name) throws S
return new SequenceOntologyTerm(ConsequenceTypeMappings.getSoAccessionString(name), name);
}

public static String buildVariantId(Variant variant) {
if (variant == null) {
return null;
}
return buildVariantId(variant.getChromosome(), variant.getStart(), variant.getReference(), variant.getAlternate());
}

public static String buildVariantIds(List<Variant> variants) {
StringBuilder variantIds = new StringBuilder();
for (Variant variant : variants) {
if (variant == null) {
continue;
}
variantIds.append(buildVariantId(variant.getChromosome(), variant.getStart(), variant.getReference(), variant.getAlternate()));
}
if (variantIds == null) {
return null;
}
return variantIds.toString();
}

public static String buildVariantId(String chromosome, int start, String reference, String alternate) {
StringBuilder stringBuilder = new StringBuilder();

appendChromosome(chromosome, stringBuilder)
.append(SEPARATOR_CHAR)
.append(StringUtils.leftPad(Integer.toString(start), 10, " "))
.append(start)
.append(SEPARATOR_CHAR);

// if (reference.length() > Variant.SV_THRESHOLD) {
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.9.8</version>
<version>4.10.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Loading