JAL-34 - quick hack to see how we can do alignment comparison for splitframes linking...
[jalview.git] / src / jalview / analysis / AlignSeq.java
index 36d2482..edf19ec 100755 (executable)
@@ -26,6 +26,7 @@ import jalview.analysis.scoremodels.PIDModel;
 import jalview.analysis.scoremodels.ScoreMatrix;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.analysis.scoremodels.SimilarityParams;
+import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Mapping;
@@ -93,6 +94,11 @@ public class AlignSeq
   int[] aseq1;
 
   int[] aseq2;
+  
+  /*
+   * matches in alignment
+   */
+  int match=-1;
 
   public String astr1 = "";
 
@@ -281,6 +287,30 @@ public class AlignSeq
             s2.getDatasetSequence() == null ? s2 : s2.getDatasetSequence());
     return alSeq2;
   }
+  /**
+   * fraction of seq2 matched in the alignment
+   * @return NaN or [0..1]
+   */
+  public double getS2Coverage()
+  {
+    if (match>=0)
+    {
+      return ((double)match)/((double)s2.getEnd()-s2.getStart()+1);
+    }
+    return Double.NaN;
+  }
+  /**
+   * fraction of seq1 matched in the alignment
+   * @return NaN or [0..1]
+   */
+  public double getS1Coverage()
+  {
+    if (match>=0)
+    {
+      return ((double)match)/((double)s1.getEnd()-s1.getStart()+1);
+    }
+    return Double.NaN;
+  }
 
   /**
    * Construct score matrix for sequences with standard DNA or PEPTIDE matrix
@@ -390,7 +420,7 @@ public class AlignSeq
 
     aseq1 = new int[seq1.length + seq2.length];
     aseq2 = new int[seq1.length + seq2.length];
-
+    match=0;
     StringBuilder sb1 = new StringBuilder(aseq1.length);
     StringBuilder sb2 = new StringBuilder(aseq2.length);
 
@@ -402,11 +432,11 @@ public class AlignSeq
       sb1.append(s1str.charAt(i));
       aseq2[count] = seq2[j];
       sb2.append(s2str.charAt(j));
-
       trace = findTrace(i, j);
 
       if (trace == 0)
       {
+        match++;
         i--;
         j--;
       }
@@ -439,8 +469,10 @@ public class AlignSeq
     {
       aseq2[count] = seq2[j];
       sb2.append(s2str.charAt(j));
+      if (aseq1[count]!=GAP_INDEX) {
+        match++;
+      }
     }
-
     /*
      * we built the character strings backwards, so now
      * reverse them to convert to sequence strings
@@ -1132,4 +1164,12 @@ public class AlignSeq
     }
     return redundancy;
   }
+
+  public void setScoreMatrix(ScoreMatrix params)
+  {
+    if (params!=null)
+    {
+      scoreMatrix = params;
+    }
+  }
 }