Skip to content

Commit

Permalink
Add intergenicConsequenceSummaries in annotationSummary and add varia…
Browse files Browse the repository at this point in the history
…ntClassification
  • Loading branch information
leexgh committed Aug 27, 2024
1 parent 9aa5768 commit 2ff71d8
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

@Component
public class VariantClassificationResolver
Expand Down Expand Up @@ -46,6 +47,21 @@ public String resolve(VariantAnnotation variantAnnotation, TranscriptConsequence
this.consequencePrioritizer.pickHighestPriorityConsequence(transcriptConsequence.getConsequenceTerms()),
variantType, isInframe);
}
// if variant has no transcript and has intergenicConsequences instead, try to resolve the variant classification from intergenicConsequences
else if (variantAnnotation != null && variantAnnotation.getIntergenicConsequences() != null && !variantAnnotation.getIntergenicConsequences().isEmpty()) {
// pick the highest priority consequence from the intergenic consequences
// get every getConsequenceTerms() from each intergenic consequence and put in a list
variantClassification = this.resolveVariantClassification(
this.consequencePrioritizer.pickHighestPriorityConsequence(
variantAnnotation.getIntergenicConsequences()
.stream()
.flatMap(consequence -> consequence.getConsequenceTerms()
.stream())
.collect(Collectors.toList())),
variantType,
isInframe
);
}
// use the most severe consequence to resolve the variant classification
else if (variantAnnotation != null)
{
Expand Down Expand Up @@ -186,9 +202,13 @@ private static Map<String, String> initVariantMap()
variantMap.put("missense_variant", "Missense_Mutation");
variantMap.put("protein_altering_variant", "Missense_Mutation"); // Not always correct, resolveVariantClassification handles the exceptions
variantMap.put("coding_sequence_variant", "Missense_Mutation"); // Not always correct, resolveVariantClassification handles the exceptions
variantMap.put("coding_transcript_variant", "Missense_Mutation"); // Not always correct, resolveVariantClassification handles the exceptions
variantMap.put("conservative_missense_variant", "Missense_Mutation");
variantMap.put("rare_amino_acid_variant", "Missense_Mutation");
variantMap.put("transcript_amplification", "Intron");
variantMap.put("feature_elongation", "Feature_Elongation");
variantMap.put("feature_truncation", "Feature_Elongation");
variantMap.put("sequence_variant", "Sequence_Variant");
variantMap.put("splice_region_variant", "Splice_Region");
variantMap.put("splice_donor_region_variant", "Splice_Region");
variantMap.put("splice_polypyrimidine_tract_variant", "Splice_Region");
Expand Down Expand Up @@ -216,6 +236,7 @@ private static Map<String, String> initVariantMap()
variantMap.put("regulatory_region_variant", "IGR");
variantMap.put("regulatory_region_amplification", "IGR");
variantMap.put("regulatory_region", "IGR");
variantMap.put("regulatory_region_ablation", "IGR");
variantMap.put("intergenic_variant", "IGR");
variantMap.put("intergenic_region", "IGR");
variantMap.put("upstream_gene_variant", "5'Flank");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.cbioportal.genome_nexus.model;

import java.util.List;

public class IntergenicConsequenceSummary {
private String impact;

public String getImpact()
{
return impact;
}

public void setImpact(String impact)
{
this.impact = impact;
}

private String variantAllele;

public String getVariantAllele()
{
return variantAllele;
}

public void setVariantAllele(String variantAllele)
{
this.variantAllele = variantAllele;
}

private List<String> consequenceTerms;

public List<String> getConsequenceTerms()
{
return consequenceTerms;
}

public void setConsequenceTerms(List<String> consequenceTerms)
{
this.consequenceTerms = consequenceTerms;
}

private String variantClassification;

public String getVariantClassification()
{
return variantClassification;
}

public void setVariantClassification(String variantClassification)
{
this.variantClassification = variantClassification;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public class VariantAnnotationSummary
// most impactful canonical annotation, when looking to pick a single
// annotation
private TranscriptConsequenceSummary transcriptConsequenceSummary;

private Vues vues;
private List<IntergenicConsequenceSummary> intergenicConsequenceSummaries;

private AlphaMissense alphaMissense;

Expand Down Expand Up @@ -113,4 +113,12 @@ public Vues getVues() {
public void setVues(Vues vues) {
this.vues = vues;
}

public List<IntergenicConsequenceSummary> getIntergenicConsequenceSummaries() {
return intergenicConsequenceSummaries;
}

public void setIntergenicConsequenceSummaries(List<IntergenicConsequenceSummary> intergenicConsequenceSummaries) {
this.intergenicConsequenceSummaries = intergenicConsequenceSummaries;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import org.cbioportal.genome_nexus.component.annotation.*;
import org.cbioportal.genome_nexus.model.TranscriptConsequenceSummary;
import org.cbioportal.genome_nexus.model.VariantAnnotationSummary;
import org.cbioportal.genome_nexus.model.IntergenicConsequenceSummary;
import org.cbioportal.genome_nexus.model.IntergenicConsequences;
import org.cbioportal.genome_nexus.model.RevisedProteinEffectJsonRecord;
import org.cbioportal.genome_nexus.model.TranscriptConsequence;
import org.cbioportal.genome_nexus.model.VariantAnnotation;
Expand All @@ -21,6 +23,7 @@

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -109,20 +112,35 @@ public VariantAnnotationSummary getAnnotationSummaryForCanonical(VariantAnnotati
VariantAnnotationSummary annotationSummary = this.getVariantAnnotationSummary(annotation);
TranscriptConsequence canonicalTranscript = this.canonicalTranscriptResolver.resolve(annotation);

if (annotationSummary != null && canonicalTranscript != null)
{
annotationSummary.setTranscriptConsequenceSummary(this.getTranscriptSummary(annotation, canonicalTranscript, vuesMap));
annotationSummary.setCanonicalTranscriptId(canonicalTranscript.getTranscriptId());

// for backwards compatibility set transcriptConsequences
List<TranscriptConsequenceSummary> transcriptConsequences = new ArrayList<>(1);
transcriptConsequences.add(annotationSummary.getTranscriptConsequenceSummary());
annotationSummary.setTranscriptConsequences(transcriptConsequences);
// if this variant is VUE, add Vues infomation
if (annotationSummary.getTranscriptConsequenceSummary() != null &&
annotationSummary.getTranscriptConsequenceSummary().getIsVue() != null &&
annotationSummary.getTranscriptConsequenceSummary().getIsVue() == true) {
annotationSummary.setVues(this.vuesMap.get(annotationSummary.getTranscriptConsequenceSummary().getTranscriptId()));
if (annotationSummary != null) {
if (canonicalTranscript == null && annotation.getIntergenicConsequences() != null && !annotation.getIntergenicConsequences().isEmpty()) {
// Set intergenicConsequenceSummaries when variant is "intergenic_variant", add variant classification based on consequence terms.
// This is useful for genome nexus annotation pipeline, so when doing curation, those mutations will be filtered out by "IGR" rule, instead of being imported as "MUTATED".
List<IntergenicConsequenceSummary> intergenicConsequenceSummaries = new ArrayList<>();
for (IntergenicConsequences intergenicConsequence : annotation.getIntergenicConsequences()) {
IntergenicConsequenceSummary intergenicConsequenceSummary = new IntergenicConsequenceSummary();
intergenicConsequenceSummary.setVariantClassification(this.variantClassificationResolver.resolve(annotation, canonicalTranscript));
intergenicConsequenceSummary.setImpact(intergenicConsequence.getImpact());
intergenicConsequenceSummary.setVariantAllele(intergenicConsequence.getVariantAllele());
intergenicConsequenceSummary.setConsequenceTerms(intergenicConsequence.getConsequenceTerms());
intergenicConsequenceSummaries.add(intergenicConsequenceSummary);
}
annotationSummary.setIntergenicConsequenceSummaries(intergenicConsequenceSummaries);
}
else {
annotationSummary.setTranscriptConsequenceSummary(this.getTranscriptSummary(annotation, canonicalTranscript, vuesMap));
annotationSummary.setCanonicalTranscriptId(canonicalTranscript.getTranscriptId());
// for backwards compatibility set transcriptConsequences
List<TranscriptConsequenceSummary> transcriptConsequences = new ArrayList<>(1);
transcriptConsequences.add(annotationSummary.getTranscriptConsequenceSummary());
annotationSummary.setTranscriptConsequences(transcriptConsequences);

// if this variant is VUE, add Vues information
if (annotationSummary.getTranscriptConsequenceSummary() != null &&
annotationSummary.getTranscriptConsequenceSummary().getIsVue() != null &&
annotationSummary.getTranscriptConsequenceSummary().getIsVue()) {
annotationSummary.setVues(this.vuesMap.get(annotationSummary.getTranscriptConsequenceSummary().getTranscriptId()));
}
}
}

Expand Down

0 comments on commit 2ff71d8

Please sign in to comment.