X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FMappedFeatures.java;h=57c8c375b4d65c651d37379bd03c84935c67bc9d;hp=a42f34af553f03b2af4e47d796c0e43bddf2d735;hb=c6018dc0dc12720e13b75850a5303279ac7094b7;hpb=5a631296dd1dcc1df7b50487a647c27333696c74 diff --git a/src/jalview/datamodel/MappedFeatures.java b/src/jalview/datamodel/MappedFeatures.java index a42f34a..57c8c37 100644 --- a/src/jalview/datamodel/MappedFeatures.java +++ b/src/jalview/datamodel/MappedFeatures.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; import java.util.HashSet; @@ -29,21 +49,16 @@ public class MappedFeatures /* * the sequence the mapped features are on */ - private final SequenceI linkedSeq; + private final SequenceI featureSequence; /* * the mapping between sequences; - * NB this could be in either sense + * NB this could be in either sense (from or to featureSequence) */ private final Mapping mapping; /* - * if true, mapping is from the linked sequence, else to the linked sequence - */ - private boolean mappingIsFromLinkedSequence; - - /* - * features on linkedSeq that overlap the mapped positions + * features on featureSequence that overlap the mapped positions */ public final List features; @@ -70,22 +85,23 @@ public class MappedFeatures * Constructor * * @param theMapping - * @param from - * the sequence mapped from (e.g. CDS) + * sequence mapping (which may be either to, or from, the sequence + * holding the linked features) + * @param featureSeq + * the sequence hosting the virtual features * @param pos - * the residue position in the sequence mapped to + * the residue position in the sequence mapped to * @param res - * the residue character at position pos + * the residue character at position pos * @param theFeatures - * list of mapped features found in the 'from' sequence at - * the mapped position(s) + * list of mapped features found in the 'featureSeq' sequence at the + * mapped position(s) */ - public MappedFeatures(Mapping theMapping, SequenceI from, int pos, + public MappedFeatures(Mapping theMapping, SequenceI featureSeq, int pos, char res, List theFeatures) { mapping = theMapping; - linkedSeq = from; - mappingIsFromLinkedSequence = mapping.to != linkedSeq; + featureSequence = featureSeq; toPosition = pos; toResidue = res; features = theFeatures; @@ -101,13 +117,13 @@ public class MappedFeatures { codonPos = codonPositions; baseCodon = new char[3]; - int cdsStart = linkedSeq.getStart(); + int cdsStart = featureSequence.getStart(); baseCodon[0] = Character - .toUpperCase(linkedSeq.getCharAt(codonPos[0] - cdsStart)); + .toUpperCase(featureSequence.getCharAt(codonPos[0] - cdsStart)); baseCodon[1] = Character - .toUpperCase(linkedSeq.getCharAt(codonPos[1] - cdsStart)); + .toUpperCase(featureSequence.getCharAt(codonPos[1] - cdsStart)); baseCodon[2] = Character - .toUpperCase(linkedSeq.getCharAt(codonPos[2] - cdsStart)); + .toUpperCase(featureSequence.getCharAt(codonPos[2] - cdsStart)); } else { @@ -119,11 +135,14 @@ public class MappedFeatures /** * Computes and returns comma-delimited HGVS notation peptide variants derived * from codon allele variants. If no variants are found, answers an empty - * string. + * string. The peptide variant is either simply read from the "CSQ:HGVSp" + * attribute if present, else computed based on the "alleles" attribute if + * present. If neither attribute is found, no variant (empty string) is + * returned. * * @param sf - * a sequence feature (which must be one of those held in this - * object) + * a sequence feature (which must be one of those held in this + * object) * @return */ public String findProteinVariants(SequenceFeature sf) @@ -252,7 +271,7 @@ public class MappedFeatures */ public String getLinkedSequenceName() { - return linkedSeq == null ? null : linkedSeq.getName(); + return featureSequence == null ? null : featureSequence.getName(); } /** @@ -275,16 +294,22 @@ public class MappedFeatures public int[] getMappedPositions(int begin, int end) { MapList map = mapping.getMap(); - return mappingIsFromLinkedSequence ? map.locateInTo(begin, end) - : map.locateInFrom(begin, end); + return mapping.to == featureSequence ? map.getOverlapsInFrom(begin, end) + : map.getOverlapsInTo(begin, end); } + /** + * Answers true if the linked features are on coding sequence, false if on + * peptide + * + * @return + */ public boolean isFromCds() { if (mapping.getMap().getFromRatio() == 3) { - return mappingIsFromLinkedSequence; + return mapping.to != featureSequence; } - return !mappingIsFromLinkedSequence; + return mapping.to == featureSequence; } }