baseCodon[1] = fromSeq.getCharAt(codonPos[1] - cdsStart);
baseCodon[2] = fromSeq.getCharAt(codonPos[2] - cdsStart);
- // todo avoid duplication of code in AlignmentUtils.buildDnaVariantsMap
-
for (SequenceFeature sf : features)
{
+ /*
+ * VCF data may already contain the protein consequence
+ */
+ String hgvsp = sf.getValueAsString("CSQ", "HGVSp");
+ if (hgvsp != null)
+ {
+ int colonPos = hgvsp.indexOf(':');
+ if (colonPos >= 0)
+ {
+ String var = hgvsp.substring(colonPos + 1);
+ if (!vars.contains(var))
+ {
+ vars.add(var);
+ }
+ continue;
+ }
+ }
+
+ /*
+ * otherwise, compute codon and peptide variant
+ */
+ // todo avoid duplication of code in AlignmentUtils.buildDnaVariantsMap
int cdsPos = sf.getBegin();
if (cdsPos != sf.getEnd())
{
String peptide = ResidueProperties.codonTranslate(codon);
if (fromResidue != peptide.charAt(0))
{
- String to3 = StringUtils.toSentenceCase(
+ String to3 = ResidueProperties.STOP.equals(peptide) ? "STOP"
+ : StringUtils.toSentenceCase(
ResidueProperties.aa2Triplet.get(peptide));
String var = "p." + from3 + fromPosition + to3;
if (!vars.contains(var))