JAL-4134 support recovery of mapped positions for raw matrix column index in Mappable...
[jalview.git] / src / jalview / datamodel / MappedFeatures.java
index 87609c6..4637974 100644 (file)
@@ -1,5 +1,27 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -90,7 +112,8 @@ public class MappedFeatures
      * determine codon positions and canonical codon
      * for a peptide-to-CDS mapping
      */
-    int[] codonIntervals = mapping.getMap().locateInFrom(toPosition, toPosition);
+    int[] codonIntervals = mapping.getMap().locateInFrom(toPosition,
+            toPosition);
     int[] codonPositions = codonIntervals == null ? null
             : MappingUtils.flattenRanges(codonIntervals);
     if (codonPositions != null && codonPositions.length == 3)
@@ -98,12 +121,12 @@ public class MappedFeatures
       codonPos = codonPositions;
       baseCodon = new char[3];
       int cdsStart = featureSequence.getStart();
-      baseCodon[0] = Character
-              .toUpperCase(featureSequence.getCharAt(codonPos[0] - cdsStart));
-      baseCodon[1] = Character
-              .toUpperCase(featureSequence.getCharAt(codonPos[1] - cdsStart));
-      baseCodon[2] = Character
-              .toUpperCase(featureSequence.getCharAt(codonPos[2] - cdsStart));
+      baseCodon[0] = Character.toUpperCase(
+              featureSequence.getCharAt(codonPos[0] - cdsStart));
+      baseCodon[1] = Character.toUpperCase(
+              featureSequence.getCharAt(codonPos[1] - cdsStart));
+      baseCodon[2] = Character.toUpperCase(
+              featureSequence.getCharAt(codonPos[2] - cdsStart));
     }
     else
     {
@@ -179,12 +202,12 @@ public class MappedFeatures
      * e.g. C,G,T gives variants G and T for base C
      */
     Set<String> variantPeptides = new HashSet<>();
-    String[] alleles = alls.toUpperCase().split(",");
+    String[] alleles = alls.toUpperCase(Locale.ROOT).split(",");
     StringBuilder vars = new StringBuilder();
 
     for (String allele : alleles)
     {
-      allele = allele.trim().toUpperCase();
+      allele = allele.trim().toUpperCase(Locale.ROOT);
       if (allele.length() > 1 || "-".equals(allele))
       {
         continue; // multi-locus variant
@@ -200,7 +223,7 @@ public class MappedFeatures
        */
       final int i = cdsPos == codonPos[0] ? 0
               : (cdsPos == codonPos[1] ? 1 : 2);
-      variantCodon[i] = allele.toUpperCase().charAt(0);
+      variantCodon[i] = allele.toUpperCase(Locale.ROOT).charAt(0);
       if (variantCodon[i] == baseCodon[i])
       {
         continue;
@@ -216,8 +239,7 @@ public class MappedFeatures
          */
         var.append("c.").append(String.valueOf(cdsPos))
                 .append(String.valueOf(baseCodon[i])).append(">")
-                .append(String.valueOf(variantCodon[i]))
-                .append("(p.=)");
+                .append(String.valueOf(variantCodon[i])).append("(p.=)");
       }
       else
       {
@@ -274,8 +296,8 @@ public class MappedFeatures
   public int[] getMappedPositions(int begin, int end)
   {
     MapList map = mapping.getMap();
-    return mapping.to == featureSequence ? map.locateInFrom(begin, end)
-            : map.locateInTo(begin, end);
+    return mapping.to == featureSequence ? map.getOverlapsInFrom(begin, end)
+            : map.getOverlapsInTo(begin, end);
   }
 
   /**