X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2Fseqfeatures%2FFeatureRendererModel.java;h=8f513c94ed9dc17cb16b61a6b9472b4d284c56b3;hb=87a707afdbbe1675330f7e82faaf9443af89cefe;hp=8efe9acecf7d1d5111403e4f8b3b36dba7d272ca;hpb=f4990f6e5cedd6d2277cb5edbd1ecd14d9a80184;p=jalview.git diff --git a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java index 8efe9ac..8f513c9 100644 --- a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java +++ b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java @@ -20,13 +20,27 @@ */ package jalview.viewmodel.seqfeatures; +import java.awt.Color; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + import jalview.api.AlignViewportI; import jalview.api.FeatureColourI; import jalview.api.FeaturesDisplayedI; import jalview.datamodel.AlignedCodonFrame; +import jalview.datamodel.AlignedCodonFrame.SequenceToSequenceMapping; import jalview.datamodel.AlignmentI; import jalview.datamodel.MappedFeatures; -import jalview.datamodel.Mapping; import jalview.datamodel.SearchResultMatchI; import jalview.datamodel.SearchResults; import jalview.datamodel.SearchResultsI; @@ -38,20 +52,6 @@ import jalview.renderer.seqfeatures.FeatureRenderer; import jalview.schemes.FeatureColour; import jalview.util.ColorUtils; -import java.awt.Color; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - public abstract class FeatureRendererModel implements jalview.api.FeatureRenderer { @@ -1168,8 +1168,8 @@ public abstract class FeatureRendererModel } @Override - public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence, - int pos) + public MappedFeatures findComplementFeaturesAtResidue( + final SequenceI sequence, final int pos) { SequenceI ds = sequence.getDatasetSequence(); if (ds == null) @@ -1196,25 +1196,25 @@ 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; + SequenceToSequenceMapping mapping = null; SequenceI mapFrom = null; for (AlignedCodonFrame acf : mappings) { - mapping = acf.getMappingForSequence(sequence); - if (mapping == null || !mapping.getMap().isTripletMap()) + mapping = acf.getCoveringCodonMapping(ds); + if (mapping == null) { - continue; // we are only looking for 3:1 or 1:3 mappings + continue; } SearchResultsI sr = new SearchResults(); - acf.markMappedRegion(ds, pos, sr); + mapping.markMappedRegion(ds, pos, sr); for (SearchResultMatchI match : sr.getResults()) { int fromRes = match.getStart(); int toRes = match.getEnd(); mapFrom = match.getSequence(); List fs = findFeaturesAtResidue( - match.getSequence(), fromRes, toRes); + mapFrom, fromRes, toRes); for (SequenceFeature sf : fs) { if (!found.contains(sf)) @@ -1238,9 +1238,12 @@ public abstract class FeatureRendererModel } /* - * sort by renderorder, inefficiently + * sort by renderorder (inefficiently but ok for small scale); + * NB this sorts 'on top' feature to end, for rendering */ List result = new ArrayList<>(); + final int toAdd = found.size(); + int added = 0; for (String type : renderOrder) { for (SequenceFeature sf : found) @@ -1248,16 +1251,16 @@ public abstract class FeatureRendererModel if (type.equals(sf.getType())) { result.add(sf); - if (result.size() == found.size()) - { - return new MappedFeatures(mapping, mapFrom, pos, residue, - result); - } + added++; + } + if (added == toAdd) + { + break; } } } - return new MappedFeatures(mapping, mapFrom, pos, residue, result); + return new MappedFeatures(mapping.getMapping(), mapFrom, pos, residue, result); } @Override