clean up
authortcofoegbu <tcnofoegbu@dundee.ac.uk>
Thu, 4 Jun 2015 10:20:42 +0000 (11:20 +0100)
committertcofoegbu <tcnofoegbu@dundee.ac.uk>
Thu, 4 Jun 2015 10:20:42 +0000 (11:20 +0100)
1  2 
test/MCview/PDBfileTest.java

index 0000000,9ebed25..5d69a00
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,272 +1,271 @@@
+ package MCview;
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertFalse;
+ import static org.junit.Assert.assertNull;
+ import static org.junit.Assert.assertSame;
+ import static org.junit.Assert.assertTrue;
 -
 -import java.io.IOException;
 -
 -import org.junit.Ignore;
 -import org.junit.Test;
 -
+ import jalview.datamodel.Alignment;
+ import jalview.datamodel.AlignmentAnnotation;
+ import jalview.datamodel.AlignmentI;
+ import jalview.datamodel.PDBEntry;
+ import jalview.datamodel.Sequence;
+ import jalview.datamodel.SequenceI;
+ import jalview.io.AppletFormatAdapter;
++import java.io.IOException;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
+ public class PDBfileTest
+ {
+   @Test
+   public void testIsRna()
+   {
+     SequenceI seq = new Sequence("Seq1", "CGAU");
+     assertTrue(PDBfile.isRNA(seq));
+     seq.setSequence("CGAu");
+     assertFalse(PDBfile.isRNA(seq));
+     seq.setSequence("CGAT");
+     assertFalse(PDBfile.isRNA(seq));
+     seq.setSequence("GRSWYFLAVM");
+     assertFalse(PDBfile.isRNA(seq));
+   }
+   /**
+    * Test the 'high level' outputs of parsing. More detailed tests in
+    * PDBChainTest.
+    * 
+    * @throws IOException
+    */
+   @Test
+   public void testParse() throws IOException
+   {
+     /*
+      * Constructor with file path performs parse()
+      */
+     PDBfile pf = new PDBfile(false, false, false, "examples/3W5V.pdb",
+             AppletFormatAdapter.FILE);
+     assertEquals("3W5V", pf.id);
+     // verify no alignment annotations created
+     assertNull(getAlignmentAnnotations(pf));
+     assertEquals(4, pf.chains.size());
+     assertEquals("A", pf.chains.get(0).id);
+     assertEquals("B", pf.chains.get(1).id);
+     assertEquals("C", pf.chains.get(2).id);
+     assertEquals("D", pf.chains.get(3).id);
+     PDBChain chainA = pf.chains.get(0);
+     assertEquals(0, chainA.seqstart); // not set
+     assertEquals(0, chainA.seqend); // not set
+     assertEquals(18, chainA.sequence.getStart());
+     assertEquals(314, chainA.sequence.getEnd());
+     assertTrue(chainA.sequence.getSequenceAsString().startsWith("KCSKKQEE"));
+     assertTrue(chainA.sequence.getSequenceAsString().endsWith("WNVEVY"));
+     assertEquals("3W5V|A", chainA.sequence.getName());
+     assertNull(chainA.sequence.getAnnotation());
+     assertEquals(1, chainA.sequence.getPDBId().size());
+     PDBEntry pdb = chainA.sequence.getPDBId().get(0);
+     assertEquals("A", pdb.getChainCode());
+     assertEquals("PDB", pdb.getType());
+     assertEquals("3W5V", pdb.getId());
+     PDBChain chainB = pf.chains.get(1);
+     assertEquals(1, chainB.sequence.getStart());
+     assertEquals(96, chainB.sequence.getEnd());
+     assertTrue(chainB.sequence.getSequenceAsString().startsWith("ATYNVK"));
+     assertTrue(chainB.sequence.getSequenceAsString().endsWith("KEEELT"));
+     assertEquals("3W5V|B", chainB.sequence.getName());
+     PDBChain chainC = pf.chains.get(2);
+     assertEquals(18, chainC.sequence.getStart());
+     assertEquals(314, chainC.sequence.getEnd());
+     assertTrue(chainC.sequence.getSequenceAsString().startsWith("KCSKKQEE"));
+     assertTrue(chainC.sequence.getSequenceAsString().endsWith("WNVEVY"));
+     assertEquals("3W5V|C", chainC.sequence.getName());
+     PDBChain chainD = pf.chains.get(3);
+     assertEquals(1, chainD.sequence.getStart());
+     assertEquals(96, chainD.sequence.getEnd());
+     assertTrue(chainD.sequence.getSequenceAsString().startsWith("ATYNVK"));
+     assertTrue(chainD.sequence.getSequenceAsString().endsWith("KEEELT"));
+     assertEquals("3W5V|D", chainD.sequence.getName());
+   }
+   /**
+    * Test parsing, with annotations added to the alignment but no secondary
+    * structure prediction
+    * 
+    * @throws IOException
+    */
+   @Test
+   public void testParse_withAnnotations_noSS() throws IOException
+   {
+     PDBfile pf = new PDBfile(true, false, false, "examples/3W5V.pdb",
+             AppletFormatAdapter.FILE);
+     AlignmentAnnotation[] anns = getAlignmentAnnotations(pf);
+     assertEquals(4, anns.length);
+     /*
+      * Inspect temp factor annotation for chain A
+      */
+     AlignmentAnnotation chainAnnotation = anns[0];
+     assertEquals("Temperature Factor", chainAnnotation.label);
+     // PDBChain constructor changes PDB id to lower case (why?)
+     assertEquals("Temperature Factor for 3w5vA",
+             chainAnnotation.description);
+     assertSame(pf.getSeqs().get(0), chainAnnotation.sequenceRef);
+     assertEquals(AlignmentAnnotation.LINE_GRAPH, chainAnnotation.graph);
+     assertEquals(0f, chainAnnotation.graphMin, 0.001f);
+     assertEquals(40f, chainAnnotation.graphMax, 0.001f);
+     assertEquals(297, chainAnnotation.annotations.length);
+     assertEquals(40f, chainAnnotation.annotations[0].value, 0.001f);
+     /*
+      * Chain B temp factor
+      */
+     chainAnnotation = anns[1];
+     assertEquals("Temperature Factor for 3w5vB",
+             chainAnnotation.description);
+     assertSame(pf.getSeqs().get(1), chainAnnotation.sequenceRef);
+     assertEquals(96, chainAnnotation.annotations.length);
+     /*
+      * Chain C temp factor
+      */
+     chainAnnotation = anns[2];
+     assertEquals("Temperature Factor for 3w5vC",
+             chainAnnotation.description);
+     assertSame(pf.getSeqs().get(2), chainAnnotation.sequenceRef);
+     assertEquals(297, chainAnnotation.annotations.length);
+     /*
+      * Chain D temp factor
+      */
+     chainAnnotation = anns[3];
+     assertEquals("Temperature Factor for 3w5vD",
+             chainAnnotation.description);
+     assertSame(pf.getSeqs().get(3), chainAnnotation.sequenceRef);
+     assertEquals(96, chainAnnotation.annotations.length);
+   }
+   /**
+    * Test parsing including secondary structure annotation using JMol; this test
+    * for the case where flag to add annotations to alignment is set false
+    * 
+    * @throws IOException
+    */
+   @Test
+   public void testParse_withJmol_noAnnotations() throws IOException
+   {
+     PDBfile pf = new PDBfile(false, true, false, "examples/3W5V.pdb",
+             AppletFormatAdapter.FILE);
+     /*
+      * alignment annotations _are_ created anyway (in
+      * AlignSeq.replaceMatchingSeqsWith())
+      */
+     final AlignmentAnnotation[] anns = getAlignmentAnnotations(pf);
+     assertEquals(4, anns.length);
+     /*
+      * no sequence annotations created - tempFactor annotation is not added
+      * unless the flag to 'addAlignmentAnnotations' is set true
+      */
+     for (PDBChain c : pf.chains)
+     {
+       assertNull(c.sequence.getAnnotation());
+     }
+   }
+   /**
+    * Test parsing including secondary structure prediction and annotation using
+    * JMol
+    * 
+    * @throws IOException
+    */
+   @Test
+   public void testParse_withJmolAddAlignmentAnnotations()
+           throws IOException
+   {
+     PDBfile pf = new PDBfile(true, true, false, "examples/3W5V.pdb",
+             AppletFormatAdapter.FILE);
+     /*
+      * Alignment annotations for TempFactor, SecStruct, per sequence (chain)
+      */
+     AlignmentAnnotation[] anns = getAlignmentAnnotations(pf);
+     assertEquals(8, anns.length);
+     /*
+      * other tests have detailed assertions for Temp Factor annotations
+      */
+     assertEquals("Temperature Factor for 3w5vA", anns[1].description);
+     assertEquals("Temperature Factor for 3w5vB", anns[3].description);
+     assertEquals("Temperature Factor for 3w5vC", anns[5].description);
+     assertEquals("Temperature Factor for 3w5vD", anns[7].description);
+     /*
+      * PDBFileWithJmol (unlike PDBChain!) leaves PDB id upper case
+      */
+     assertEquals("Secondary Structure for 3W5VA", anns[0].description);
+     assertEquals("Secondary Structure for 3W5VB", anns[2].description);
+     assertEquals("Secondary Structure for 3W5VC", anns[4].description);
+     assertEquals("Secondary Structure for 3W5VD", anns[6].description);
+     /*
+      * Verify SS annotations are linked to respective sequences (chains)
+      */
+     assertSame(pf.getSeqs().get(0), anns[0].sequenceRef);
+     assertSame(pf.getSeqs().get(1), anns[2].sequenceRef);
+     assertSame(pf.getSeqs().get(2), anns[4].sequenceRef);
+     assertSame(pf.getSeqs().get(3), anns[6].sequenceRef);
+     /*
+      * Verify a sample of SS predictions
+      */
+     for (int i = 0; i < 20; i++)
+     {
+       assertNull(anns[0].annotations[i]);
+       assertEquals("E", anns[0].annotations[20].displayCharacter);
+       assertEquals('E', anns[0].annotations[20].secondaryStructure);
+       assertEquals("E", anns[2].annotations[18].displayCharacter);
+       assertEquals("H", anns[2].annotations[23].displayCharacter);
+     }
+   }
+   /**
+    * Placeholder for a test of parsing RNA structure with secondary structure
+    * prediction using the Annotate3D service
+    * 
+    * @throws IOException
+    */
+   @Test
+   @Ignore
+   public void testParse_withAnnotate3D() throws IOException
+   {
+     // TODO requires a mock for Annotate3D processing
+     // and/or run as an integration test
+     PDBfile pf = new PDBfile(true, true, true, "examples/2GIS.pdb",
+             AppletFormatAdapter.FILE);
+   }
+   /**
+    * Helper method to extract parsed annotations from the PDBfile
+    * 
+    * @param pf
+    * @return
+    */
+   private AlignmentAnnotation[] getAlignmentAnnotations(PDBfile pf)
+   {
+     AlignmentI al = new Alignment(pf.getSeqsAsArray());
 -    pf.addAnnotations(al);
++    pf.addAnnotations((Alignment) al);
+     return al.getAlignmentAnnotation();
+   }
+   }