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
@@ -187,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;
@@ -203,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
{
@@ -230,4 +265,53 @@ public class MappedFeatures
return vars.toString();
}
+
+ /**
+ * Answers the name of the linked sequence holding any mapped features
+ *
+ * @return
+ */
+ public String getLinkedSequenceName()
+ {
+ return featureSequence == null ? null : featureSequence.getName();
+ }
+
+ /**
+ * Answers the mapped ranges (as one or more [start, end] positions) which
+ * correspond to the given [begin, end] range of the linked sequence.
+ *
+ *
+ * Example: MappedFeatures with CDS features mapped to peptide
+ * CDS/200-220 gtc aac TGa acGt att AAC tta
+ * mapped to PEP/6-7 WN by mapping [206, 207, 210, 210, 215, 217] to [6, 7]
+ * getMappedPositions(206, 206) should return [6, 6]
+ * getMappedPositions(200, 214) should return [6, 6]
+ * getMappedPositions(210, 215) should return [6, 7]
+ *
+ *
+ * @param begin
+ * @param end
+ * @return
+ */
+ public int[] getMappedPositions(int begin, int end)
+ {
+ MapList map = mapping.getMap();
+ return mapping.to == featureSequence ? map.getOverlapsInFrom(begin, end)
+ : map.getOverlapsInTo(begin, end);
+ }
+
+ /**
+ * Answers true if the linked features are on coding sequence, false if on
+ * peptide
+ *
+ * @return
+ */
+ public boolean isFromCds()
+ {
+ if (mapping.getMap().getFromRatio() == 3)
+ {
+ return mapping.to != featureSequence;
+ }
+ return mapping.to == featureSequence;
+ }
}