JAL-3187 unit test for findComplementFeaturesAtResidue
[jalview.git] / src / jalview / viewmodel / seqfeatures / FeatureRendererModel.java
index 2a17bf2..9a8a086 100644 (file)
@@ -1161,17 +1161,7 @@ public abstract class FeatureRendererModel
     return filter == null ? true : filter.matches(sf);
   }
 
-  /**
-   * Answers a bean containing a mapping, and a list of features in this
-   * alignment at a position (or range) which is mappable from the given
-   * sequence residue position in a mapped alignment. Features are returned in
-   * render order of feature type (on top last), with order within feature type
-   * undefined. If no features or mapping are found, answers null.
-   * 
-   * @param sequence
-   * @param pos
-   * @return
-   */
+  @Override
   public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence,
           int pos)
   {
@@ -1187,6 +1177,16 @@ public abstract class FeatureRendererModel
             .getCodonFrame(sequence);
 
     /*
+     * fudge: if no mapping found, check the complementary alignment
+     * todo: only store in one place? StructureSelectionManager?
+     */
+    if (mappings.isEmpty())
+    {
+      mappings = this.av.getCodingComplement().getAlignment()
+              .getCodonFrame(sequence);
+    }
+
+    /*
      * todo: direct lookup of CDS for peptide and vice-versa; for now,
      * have to search through an unordered list of mappings for a candidate
      */
@@ -1195,9 +1195,8 @@ public abstract class FeatureRendererModel
 
     for (AlignedCodonFrame acf : mappings)
     {
-      mapping = acf.getMappingForSequence(sequence, true);
-      if (mapping == null || mapping.getMap().getFromRatio() == mapping
-              .getMap().getToRatio())
+      mapping = acf.getMappingForSequence(sequence);
+      if (mapping == null || !mapping.getMap().isTripletMap())
       {
         continue; // we are only looking for 3:1 or 1:3 mappings
       }
@@ -1209,7 +1208,7 @@ public abstract class FeatureRendererModel
         int toRes = match.getEnd();
         mapFrom = match.getSequence();
         List<SequenceFeature> fs = findFeaturesAtResidue(
-                match.getSequence(), fromRes, toRes);
+                mapFrom, fromRes, toRes);
         for (SequenceFeature sf : fs)
         {
           if (!found.contains(sf))