Merge branch 'feature/JAL-3187linkedFeatures' into feature/JAL-3251biotypedMappings
[jalview.git] / src / jalview / io / gff / ExonerateHelper.java
index f7805fd..303a5ac 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * 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.io.gff;
 
 import jalview.datamodel.AlignedCodonFrame;
@@ -64,8 +84,8 @@ public class ExonerateHelper extends Gff2Helper
 
     try
     {
-      processGffSimilarity(set, seq, gffColumns,
-              align, newseqs, relaxedIdMatching);
+      processGffSimilarity(set, seq, gffColumns, align, newseqs,
+              relaxedIdMatching);
     } catch (IOException ivfe)
     {
       System.err.println(ivfe);
@@ -98,8 +118,7 @@ public class ExonerateHelper extends Gff2Helper
    *          if true allow fuzzy search for a matching target sequence
    * @throws IOException
    */
-  protected void processGffSimilarity(
-          Map<String, List<String>> set,
+  protected void processGffSimilarity(Map<String, List<String>> set,
           SequenceI seq, String[] gff, AlignmentI align,
           List<SequenceI> newseqs, boolean relaxedIdMatching)
           throws IOException
@@ -145,8 +164,8 @@ public class ExonerateHelper extends Gff2Helper
      */
     SequenceI mapFromSequence = seq;
     SequenceI mapToSequence = mappedSequence;
-    if ((type == MappingType.NucleotideToPeptide && featureIsOnTarget)
-            || (type == MappingType.PeptideToNucleotide && !featureIsOnTarget))
+    if ((MappingType.isDnaToPeptide(type) && featureIsOnTarget)
+            || (MappingType.isPeptideToDna(type) && !featureIsOnTarget))
     {
       mapFromSequence = mappedSequence;
       mapToSequence = seq;
@@ -228,15 +247,17 @@ public class ExonerateHelper extends Gff2Helper
     int alignFromStart;
     int alignToStart;
     int alignCount;
-    try {
+    try
+    {
       alignFromStart = Integer.parseInt(tokens[0]);
       alignToStart = Integer.parseInt(tokens[1]);
       alignCount = Integer.parseInt(tokens[2]);
-    } catch (NumberFormatException nfe) {
+    } catch (NumberFormatException nfe)
+    {
       System.err.println(nfe.toString());
       return null;
     }
-    
+
     int fromStart;
     int fromEnd;
     int toStart;
@@ -246,8 +267,8 @@ public class ExonerateHelper extends Gff2Helper
     {
       fromStart = alignToStart;
       toStart = alignFromStart;
-      toEnd = forwardStrand ? toStart + alignCount - 1 : toStart
-              - (alignCount - 1);
+      toEnd = forwardStrand ? toStart + alignCount - 1
+              : toStart - (alignCount - 1);
       int toLength = Math.abs(toEnd - toStart) + 1;
       int fromLength = toLength * type.getFromRatio() / type.getToRatio();
       fromEnd = fromStart + fromLength - 1;
@@ -277,7 +298,7 @@ public class ExonerateHelper extends Gff2Helper
   }
 
   /**
-   * Returns a MappingType depending on the exonerate 'model' value.
+   * Returns a MappingType depending on the exonerate 'model' value
    * 
    * @param model
    * @return
@@ -286,16 +307,25 @@ public class ExonerateHelper extends Gff2Helper
   {
     MappingType result = null;
 
-    if (model.contains(PROTEIN2DNA) || model.contains(PROTEIN2GENOME))
+    if (model.contains(PROTEIN2GENOME))
+    {
+      result = MappingType.PeptideToGenome;
+    }
+    else if (model.contains(PROTEIN2DNA))
     {
-      result = MappingType.PeptideToNucleotide;
+      result = MappingType.PeptideToCds;
     }
-    else if (model.contains(CODING2CODING)
-            || model.contains(CODING2GENOME)
-            || model.contains(CDNA2GENOME)
-            || model.contains(GENOME2GENOME))
+    else if (model.contains(CODING2GENOME))
     {
-      result = MappingType.NucleotideToNucleotide;
+      result = MappingType.CdsToGenome;
+    }
+    else if (model.contains(CDNA2GENOME))
+    {
+      result = MappingType.CdnaToGenome;
+    }
+    else if (model.contains(CODING2CODING) || model.contains(GENOME2GENOME))
+    {
+      result = MappingType.GenomeToCdna;
     }
     return result;
   }
@@ -323,10 +353,8 @@ public class ExonerateHelper extends Gff2Helper
     {
       String mdl = model.toLowerCase();
       if (mdl.contains(PROTEIN2DNA) || mdl.contains(PROTEIN2GENOME)
-              || mdl.contains(CODING2CODING)
-              || mdl.contains(CODING2GENOME)
-              || mdl.contains(CDNA2GENOME)
-              || mdl.contains(GENOME2GENOME))
+              || mdl.contains(CODING2CODING) || mdl.contains(CODING2GENOME)
+              || mdl.contains(CDNA2GENOME) || mdl.contains(GENOME2GENOME))
       {
         return true;
       }
@@ -335,12 +363,16 @@ public class ExonerateHelper extends Gff2Helper
     return false;
   }
 
+  /**
+   * An override to set feature group to "exonerate" instead of the default GFF
+   * source value (column 2)
+   */
   @Override
   protected SequenceFeature buildSequenceFeature(String[] gff,
           Map<String, List<String>> set)
   {
-    SequenceFeature sf = super.buildSequenceFeature(gff, set);
-    sf.setFeatureGroup("exonerate");
+    SequenceFeature sf = super.buildSequenceFeature(gff, TYPE_COL,
+            "exonerate", set);
 
     return sf;
   }