X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignedCodonFrame.java;h=9c642cf09b9d4e70bcad9e65c5f6b0f4f4ee820c;hb=16359e92bebc20edafc4958b7b580c8ceedd4d37;hp=1f5d827ed54461888f3daf44664c107655ff4cc3;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/jalview/datamodel/AlignedCodonFrame.java b/src/jalview/datamodel/AlignedCodonFrame.java index 1f5d827..9c642cf 100644 --- a/src/jalview/datamodel/AlignedCodonFrame.java +++ b/src/jalview/datamodel/AlignedCodonFrame.java @@ -23,6 +23,9 @@ package jalview.datamodel; import jalview.util.MapList; import jalview.util.MappingUtils; +import java.util.ArrayList; +import java.util.List; + /** * Stores mapping between the columns of a protein alignment and a DNA alignment * and a list of individual codon to amino acid mappings between sequences. @@ -30,12 +33,12 @@ import jalview.util.MappingUtils; public class AlignedCodonFrame { - /* + /** * tied array of na Sequence objects. */ private SequenceI[] dnaSeqs = null; - /* + /** * tied array of Mappings to protein sequence Objects and SequenceI[] * aaSeqs=null; MapLists where each maps from the corresponding dnaSeqs * element to corresponding aaSeqs element @@ -370,7 +373,8 @@ public class AlignedCodonFrame if (dnaSeqs[mi] == targetDs && dnaToProt[mi].to == sourceDs) { int[] codon = dnaToProt[mi].map.locateInFrom(pos, pos); - if (codon != null) { + if (codon != null) + { return codon; } } @@ -395,13 +399,13 @@ public class AlignedCodonFrame return null; } MapList ml = null; - char[] dnaSeq = null; + SequenceI dnaSeq = null; for (int i = 0; i < dnaToProt.length; i++) { if (dnaToProt[i].to == protein) { ml = getdnaToProt()[i]; - dnaSeq = dnaSeqs[i].getSequence(); + dnaSeq = dnaSeqs[i]; break; } } @@ -419,8 +423,42 @@ public class AlignedCodonFrame * Read off the mapped nucleotides (converting to position base 0) */ codonPos = MappingUtils.flattenRanges(codonPos); - return new char[] - { dnaSeq[codonPos[0] - 1], dnaSeq[codonPos[1] - 1], - dnaSeq[codonPos[2] - 1] }; + char[] dna = dnaSeq.getSequence(); + int start = dnaSeq.getStart(); + return new char[] { dna[codonPos[0] - start], dna[codonPos[1] - start], + dna[codonPos[2] - start] }; + } + + /** + * Returns any mappings found which are to (or from) the given sequence, and + * to distinct sequences. + * + * @param seq + * @return + */ + public List getMappingsForSequence(SequenceI seq) + { + List result = new ArrayList(); + if (dnaSeqs == null) + { + return result; + } + List related = new ArrayList(); + SequenceI seqDs = seq.getDatasetSequence(); + seqDs = seqDs != null ? seqDs : seq; + + for (int ds = 0; ds < dnaSeqs.length; ds++) + { + final Mapping mapping = dnaToProt[ds]; + if (dnaSeqs[ds] == seqDs || mapping.to == seqDs) + { + if (!related.contains(mapping.to)) + { + result.add(mapping); + related.add(mapping.to); + } + } + } + return result; } }