X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2Fseqfeatures%2FFeatureRendererModel.java;h=4fc143e4a88da2d4c22e8d9eba09b5c24831341c;hb=c6d5255c09855fc1b0d03a085da9988a75cd3898;hp=2324a646e3c616caf8fb930de7d481779109c2f8;hpb=442ca8fed9a8cd9a65388c5537ebbbc078b02961;p=jalview.git diff --git a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java index 2324a64..4fc143e 100644 --- a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java +++ b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java @@ -25,6 +25,7 @@ import jalview.api.FeatureColourI; import jalview.api.FeaturesDisplayedI; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.AlignmentI; +import jalview.datamodel.MappedFeatures; import jalview.datamodel.Mapping; import jalview.datamodel.SearchResultMatchI; import jalview.datamodel.SearchResults; @@ -1164,9 +1165,16 @@ public abstract class FeatureRendererModel * @param pos * @return */ - public List findComplementFeaturesAtResidue(SequenceI sequence, int pos) + public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence, + int pos) { SequenceI ds = sequence.getDatasetSequence(); + if (ds == null) + { + ds = sequence; + } + final char residue = ds.getCharAt(pos - ds.getStart()); + List found = new ArrayList<>(); List mappings = this.av.getAlignment() .getCodonFrame(sequence); @@ -1175,9 +1183,12 @@ public abstract class FeatureRendererModel * todo: direct lookup of CDS for peptide and vice-versa; for now, * have to search through an unordered list of mappings for a candidate */ + Mapping mapping = null; + SequenceI mapFrom = null; + for (AlignedCodonFrame acf : mappings) { - Mapping mapping = acf.getMappingForSequence(sequence, true); + mapping = acf.getMappingForSequence(sequence, true); if (mapping == null || mapping.getMap().getFromRatio() == mapping .getMap().getToRatio()) { @@ -1189,6 +1200,7 @@ public abstract class FeatureRendererModel { int fromRes = match.getStart(); int toRes = match.getEnd(); + mapFrom = match.getSequence(); List fs = findFeaturesAtResidue( match.getSequence(), fromRes, toRes); for (SequenceFeature sf : fs) @@ -1199,7 +1211,16 @@ public abstract class FeatureRendererModel } } } + + /* + * just take the first mapped features we find + */ + if (!found.isEmpty()) + { + break; + } } + /* * sort by renderorder, inefficiently */ @@ -1213,13 +1234,14 @@ public abstract class FeatureRendererModel result.add(sf); if (result.size() == found.size()) { - return result; + return new MappedFeatures(mapping, mapFrom, pos, residue, + result); } } } } - return result; + return new MappedFeatures(mapping, mapFrom, pos, residue, result); } }