JAL-2668 add tests for HMMER commands, annotation and io
[jalview.git] / test / jalview / io / HMMFileTest.java
index f16d6f5..be4178b 100644 (file)
@@ -22,17 +22,14 @@ public class HMMFileTest {
 
 
 
-  HMMFile fn3 = new HMMFile(
-          new FileParse("test/jalview/io/test_fn3_hmm.txt",
-                  DataSourceType.FILE));
+  HMMFile fn3 = new HMMFile(new BufferedReader(
+          new FileReader(("test/jalview/io/test_fn3_hmm.txt"))));
 
-  HMMFile pKinase = new HMMFile(
-          new FileParse("test/jalview/io/test_PKinase_hmm.txt",
-                  DataSourceType.FILE));
+  HMMFile pKinase = new HMMFile(new BufferedReader(
+          new FileReader(("test/jalview/io/test_PKinase_hmm.txt"))));
 
-  HMMFile made1 = new HMMFile(
-          new FileParse("test/jalview/io/test_MADE1_hmm.txt",
-                  DataSourceType.FILE));
+  HMMFile made1 = new HMMFile(new BufferedReader(
+          new FileReader(("test/jalview/io/test_MADE1_hmm.txt"))));
 
   HMMFileTest() throws IOException
   {
@@ -93,28 +90,34 @@ public class HMMFileTest {
   
     assertEquals(hmm.getSymbols(), symbols);
   
-    assertEquals(getMatchEmission(0, 19, hmm), 0.032298, 0.001d);
-    assertEquals(getMatchEmission(12, 12, hmm), 0.0130, 0.001d);
-    assertEquals(getMatchEmission(23, 7, hmm), 0.02583, 0.001d);
-    assertEquals(getMatchEmission(54, 1, hmm), 0.008549, 0.001d);
-    assertEquals(getMatchEmission(178, 3, hmm), 0.07998, 0.001d);
-    assertEquals(getMatchEmission(210, 2, hmm), 0.014465, 0.001d);
-    assertEquals(getMatchEmission(260, 19, hmm), 0.02213, 0.001d);
-  
-    assertEquals(getInsertEmission(2, 1, hmm), 0.012, 0.001d);
-    assertEquals(getInsertEmission(15, 6, hmm), 0.02411, 0.001d);
-    assertEquals(getInsertEmission(22, 9, hmm), 0.06764, 0.001d);
-    assertEquals(getInsertEmission(57, 2, hmm), 0.0623, 0.001d);
-    assertEquals(getInsertEmission(203, 16, hmm), 0.0623, 0.001d);
-    assertEquals(getInsertEmission(255, 12, hmm), 0.0647, 0.001d);
-  
-    assertEquals(getStateTransition(0, 6, hmm),
-            Double.NEGATIVE_INFINITY);
-    assertEquals(getStateTransition(3, 6, hmm), 0.3848, 0.001d);
-    assertEquals(getStateTransition(29, 3, hmm), 0.5382, 0.001d);
-    assertEquals(getStateTransition(169, 3, hmm), 0.2916, 0.001d);
-    assertEquals(getStateTransition(209, 0, hmm), 0.99, 0.001d);
-    assertEquals(getStateTransition(243, 1, hmm), 0.0066, 0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(0, 'Y'), 0.16102, 0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(11, 'P'), 0.0130, 0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(24, 'I'), 0.02583, 0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(83, 'C'), 0.008549,
+            0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(332, 'E'), 0.07998,
+            0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(381, 'D'), 0.014465,
+            0.001d);
+    assertEquals(hmm.getMatchEmissionProbability(475, 'Y'), 0.02213,
+            0.001d);
+  
+    assertEquals(hmm.getInsertEmissionProbability(1, 'C'), 0.012, 0.001d);
+    assertEquals(hmm.getInsertEmissionProbability(14, 'H'), 0.02411,
+            0.001d);
+    assertEquals(hmm.getInsertEmissionProbability(23, 'L'), 0.06764,
+            0.001d);
+    assertEquals(hmm.getInsertEmissionProbability(90, 'D'), 0.0623, 0.001d);
+    assertEquals(hmm.getInsertEmissionProbability(374, 'T'), 0.0623,
+            0.001d);
+    assertEquals(hmm.getInsertEmissionProbability(470, 'P'), 0.0647,
+            0.001d);
+  
+    assertEquals(hmm.getStateTransitionProbability(2, 6), 0.3848, 0.001d);
+    assertEquals(hmm.getStateTransitionProbability(38, 3), 0.5382, 0.001d);
+    assertEquals(hmm.getStateTransitionProbability(305, 3), 0.2916, 0.001d);
+    assertEquals(hmm.getStateTransitionProbability(380, 0), 0.99, 0.001d);
+    assertEquals(hmm.getStateTransitionProbability(453, 1), 0.0066, 0.001d);
   
     assertEquals(hmm.getNodeAlignmentColumn(3).intValue(), 2);
     assertEquals(hmm.getReferenceAnnotation(7), '-');
@@ -130,12 +133,13 @@ public class HMMFileTest {
   
   }
   
-  @Test
+  @Test(priority = 0)
   public void testParseFileProperties() throws IOException
   {
     FileReader fr = new FileReader(
             new File("test/jalview/io/test_fn3_hmm.txt"));
     BufferedReader br = new BufferedReader(fr);
+    fn3.setHMM(new HiddenMarkovModel());
     fn3.parseFileProperties(br);
     fn3.parseModel(br); // this is for a later test
     HiddenMarkovModel testHMM = new HiddenMarkovModel();
@@ -171,6 +175,7 @@ public class HMMFileTest {
     FileReader fr3 = new FileReader(
             new File("test/jalview/io/test_MADE1_hmm.txt"));
     BufferedReader br3 = new BufferedReader(fr3);
+    made1.setHMM(new HiddenMarkovModel());
     made1.parseFileProperties(br3);
     testHMM = made1.getHMM();
     br3.close();
@@ -258,29 +263,42 @@ public class HMMFileTest {
     {
       br.readLine();
     }
+
     made1.parseModel(br);
     testHMM = made1.getHMM();
+
     br.close();
     fr.close();
   
-    assertEquals(getMatchEmission(0, 2, testHMM), 0.1961, 0.001d);
-    assertEquals(getMatchEmission(2, 1, testHMM), 0.09267, 0.001d);
-    assertEquals(getMatchEmission(12, 2, testHMM), 0.07327, 0.001d);
-    assertEquals(getMatchEmission(69, 1, testHMM), 0.04184, 0.001d);
-    assertEquals(getMatchEmission(76, 2, testHMM), 0.07, 0.001d);
-  
-    assertEquals(getInsertEmission(0, 1, testHMM), 0.25, 0.001d);
-    assertEquals(getInsertEmission(1, 2, testHMM), 0.25, 0.001d);
-    assertEquals(getInsertEmission(31, 3, testHMM), 0.2776, 0.001d);
-    assertEquals(getInsertEmission(70, 3, testHMM), 0.25, 0.001d);
-    assertEquals(getInsertEmission(80, 3, testHMM), 0.25, 0.001d);
+    assertEquals(testHMM.getMatchEmissionProbability(1, 'C'), 0.09267,
+            0.001d);
+    assertEquals(testHMM.getMatchEmissionProbability(25, 'G'), 0.07327,
+            0.001d);
+    assertEquals(testHMM.getMatchEmissionProbability(1092, 'C'), 0.04184,
+            0.001d);
+    assertEquals(testHMM.getMatchEmissionProbability(1107, 'G'), 0.07,
+            0.001d);
+  
+    assertEquals(testHMM.getInsertEmissionProbability(0, 'G'), 0.25,
+            0.001d);
+    assertEquals(testHMM.getInsertEmissionProbability(247, 'T'), 0.2776,
+            0.001d);
+    assertEquals(testHMM.getInsertEmissionProbability(1096, 'T'), 0.25,
+            0.001d);
+    assertEquals(testHMM.getInsertEmissionProbability(1111, 'T'), 0.25,
+            0.001d);
 
-    assertEquals(getStateTransition(2, 0, testHMM), 0.9634, 0.001d);
-    assertEquals(getStateTransition(6, 1, testHMM), 0.0203, 0.001d);
-    assertEquals(getStateTransition(9, 3, testHMM), 0.2515, 0.001d);
-    assertEquals(getStateTransition(20, 4, testHMM), 0.78808, 0.001d);
-    assertEquals(getStateTransition(68, 2, testHMM), 0.01845, 0.001d);
-    assertEquals(getStateTransition(80, 6, testHMM),
+    assertEquals(testHMM.getStateTransitionProbability(1, 0), 0.9634,
+            0.001d);
+    assertEquals(testHMM.getStateTransitionProbability(5, 1), 0.0203,
+            0.001d);
+    assertEquals(testHMM.getStateTransitionProbability(14, 3), 0.2515,
+            0.001d);
+    assertEquals(testHMM.getStateTransitionProbability(65, 4), 0.78808,
+            0.001d);
+    assertEquals(testHMM.getStateTransitionProbability(1080, 2), 0.01845,
+            0.001d);
+    assertEquals(testHMM.getStateTransitionProbability(1111, 6),
             Double.NEGATIVE_INFINITY);
   
   }
@@ -289,6 +307,7 @@ public class HMMFileTest {
   public void testParseAnnotations()
   {
     HMMFile testFile = new HMMFile();
+    testFile.setHMM(new HiddenMarkovModel());
     testFile.getHMM().getNodes().add(new HMMNode());
     testFile.getHMM().getNodes().add(new HMMNode());
     testFile.getHMM().getNodes().add(new HMMNode());
@@ -332,13 +351,16 @@ public class HMMFileTest {
 
 
   @Test(priority = 3)
-  public void testExportFile() throws IOException
+  public void testPrint() throws IOException
   {
-    pKinase.exportFile("test/jalview/io/test_export_hmm.txt");
+    PrintWriter writer = new PrintWriter(
+            "test/jalview/io/test_export_hmm.txt");
+    String output = pKinase.print();
+    writer.print(output);
+    writer.close();
     HMMFile pKinaseClone = new HMMFile(
             new FileParse("test/jalview/io/test_export_hmm.txt",
                     DataSourceType.FILE));
-    pKinaseClone.parse();
     HiddenMarkovModel pKinaseHMM = new HiddenMarkovModel();
     HiddenMarkovModel pKinaseCloneHMM = new HiddenMarkovModel();
     pKinaseHMM = pKinase.getHMM();
@@ -397,17 +419,11 @@ public class HMMFileTest {
   }
   
   @Test(priority = 1)
-  public void testAppendFileProperties() throws FileNotFoundException
+  public void testGetFilePropertiesAsString() throws FileNotFoundException
   {
-    PrintWriter writer = new PrintWriter(
-            "test/jalview/io/test_export_hmm.txt");
-    fn3.appendFileProperties(writer);
-    writer.close();
-    String content;
-    File file = new File("test/jalview/io/test_export_hmm.txt");
+    String string = fn3.getFilePropertiesAsString();
 
-    Scanner testScanner = new Scanner(file);
-    testScanner.useDelimiter("\\Z");
+    Scanner testScanner = new Scanner(string);
   
     String[] expected = new String[] { "HMMER3/f [3.1b1 | May 2013]",
         "NAME  fn3", "ACC   PF00041.13",
@@ -428,17 +444,9 @@ public class HMMFileTest {
   }
   
   @Test(priority = 2)
-  public void testAppendModel() throws FileNotFoundException
+  public void testGetModelAsString() throws FileNotFoundException
   {
-    PrintWriter writer = new PrintWriter(
-            "test/jalview/io/test_export_hmm.txt");
-    fn3.appendModel(writer);
-    writer.close();
-    String string;
-    File file = new File("test/jalview/io/test_export_hmm.txt");
-    Scanner scanner = new Scanner(file);
-    scanner.useDelimiter("\\Z");
-    string = scanner.next();
+    String string = fn3.getModelAsString();
 
     assertEquals(findValue(2, 2, 2, string), "4.42225");
     assertEquals(findValue(12, 14, 1, string), "2.79307");
@@ -472,19 +480,20 @@ public class HMMFileTest {
   {
   
     String value = "";
+    String current;
     Scanner scanner = new Scanner(model);
-    scanner.nextLine();
-    scanner.nextLine();
+    current = scanner.nextLine();
+    current = scanner.nextLine();
   
     for (int lineIndex = 0; lineIndex < line - 1; lineIndex++)
     {
-      scanner.nextLine();
+      current = scanner.nextLine();
     }
     for (int node = 0; node < nodeIndex; node++)
     {
-      scanner.nextLine();
-      scanner.nextLine();
-      scanner.nextLine();
+      current = scanner.nextLine();
+      current = scanner.nextLine();
+      current = scanner.nextLine();
     }
   
     for (int symbol = 0; symbol < symbolIndex; symbol++)
@@ -492,14 +501,15 @@ public class HMMFileTest {
       value = scanner.next();
       if ("COMPO".equals(value))
       {
-        scanner.next();
+        current = scanner.next();
       }
       else if (value.length() < 7)
       {
-        scanner.next();
+        current = scanner.next();
       }
   
     }
+    scanner.close();
     return value;
   
   }
@@ -522,56 +532,5 @@ public class HMMFileTest {
     return isDifferent;
   }
 
-  /**
-   * gets the match emission at a node for a symbol
-   * 
-   * @param nodeIndex
-   *          position of node in model
-   * @param symbolIndex
-   *          index of symbol being searched
-   * @return negative log probability of a match emission of the given symbol
-   */
-  public double getMatchEmission(int nodeIndex, int symbolIndex,
-          HiddenMarkovModel hmm)
-  {
-    double value = hmm.getNodes().get(nodeIndex).getMatchEmissions()
-            .get(symbolIndex);
-    return value;
-  }
-
-  /**
-   * gets the insert emission at a node for a symbol
-   * 
-   * @param nodeIndex
-   *          position of node in model
-   * @param symbolIndex
-   *          index of symbol being searched
-   * @return negative log probability of an insert emission of the given symbol
-   */
-  public double getInsertEmission(int nodeIndex, int symbolIndex,
-          HiddenMarkovModel hmm)
-  {
-    double value = hmm.getNodes().get(nodeIndex).getInsertEmissions()
-            .get(symbolIndex);
-    return value;
-  }
-
-  /**
-   * gets the state transition at a node for a specific transition
-   * 
-   * @param nodeIndex
-   *          position of node in model
-   * @param transitionIndex
-   *          index of stransition being searched
-   * @return negative log probability of a state transition of the given type
-   */
-  public double getStateTransition(int nodeIndex, int transitionIndex,
-          HiddenMarkovModel hmm)
-  {
-    double value = hmm.getNodes().get(nodeIndex).getStateTransitions()
-            .get(transitionIndex);
-    return value;
-  }
-
 }