X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fext%2Fjmol%2FPDBFileWithJmolTest.java;h=4dc709554e5070b74d7c0e3e9b3d1e8b5891af67;hb=a064561d8665ee9db217b17cda826fceac90cbbc;hp=301c70d35a3c6ca0fbc547c9d6330004fc71139f;hpb=fddf3084802b37e5cee17829e32692a4aac3e60d;p=jalview.git diff --git a/test/jalview/ext/jmol/PDBFileWithJmolTest.java b/test/jalview/ext/jmol/PDBFileWithJmolTest.java index 301c70d..4dc7095 100644 --- a/test/jalview/ext/jmol/PDBFileWithJmolTest.java +++ b/test/jalview/ext/jmol/PDBFileWithJmolTest.java @@ -33,6 +33,7 @@ import jalview.io.FileLoader; import java.util.Vector; +import org.jmol.c.STR; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -44,13 +45,42 @@ import MCview.PDBfile; */ public class PDBFileWithJmolTest { - String[] testFile = new String[] - { "./examples/1GAQ.txt", "./test/jalview/ext/jmol/1QCF.pdb" }; // , + /* + * 1GAQ has been reduced to alpha carbons only + * 1QCF is the full PDB file including headers, HETATM etc + */ + String[] testFile = new String[] { "./examples/1GAQ.txt", + "./test/jalview/ext/jmol/1QCF.pdb" }; // , - // "./examples/DNMT1_MOUSE.pdb" - // }; + //@formatter:off + // a modified and very cut-down extract of 4UJ4 + String pdbWithChainBreak = + "HEADER TRANSPORT PROTEIN 08-APR-15 4UJ4\n" + + // chain B has missing residues; these should all go in the same sequence: + "ATOM 1909 CA VAL B 358 21.329 -19.739 -67.740 1.00201.05 C\n" + + "ATOM 1916 CA GLY B 359 21.694 -23.563 -67.661 1.00198.09 C\n" + + "ATOM 1920 CA LYS B 367 32.471 -12.135 -77.100 1.00257.97 C\n" + + "ATOM 1925 CA ALA B 368 31.032 -9.324 -74.946 1.00276.01 C\n" + + // switch to chain C; should be a separate sequence + "ATOM 1930 CA SER C 369 32.589 -7.517 -71.978 1.00265.44 C\n" + + "ATOM 1936 CA ALA C 370 31.650 -6.849 -68.346 1.00249.48 C\n"; + //@formatter:on - @BeforeMethod + //@formatter:off + // a very cut-down extract of 1ejg + String pdbWithAltLoc = + "HEADER TRANSPORT PROTEIN 08-APR-15 1EJG\n" + + "ATOM 448 CA ALA A 24 6.619 16.195 1.970 1.00 1.65 C\n" + + "ATOM 458 CA ALEU A 25 3.048 14.822 1.781 0.57 1.48 C\n" + + // alternative residue 25 entries (with ILE instead of LEU) should be ignored: + "ATOM 478 CA BILE A 25 3.048 14.822 1.781 0.21 1.48 C\n" + + // including the next altloc causes the unit test to fail but it works with the full file + // not sure why! + // "ATOM 479 CA CILE A 25 3.048 14.822 1.781 0.22 1.48 C\n" + + "ATOM 512 CA CYS A 26 4.137 11.461 3.154 1.00 1.52 C\n"; + //@formatter:on + + @BeforeMethod(alwaysRun = true) public void setUp() { Cache.applicationProperties.setProperty("STRUCT_FROM_PDB", @@ -59,7 +89,7 @@ public class PDBFileWithJmolTest Boolean.TRUE.toString()); } - @Test(groups ={ "Functional" }) + @Test(groups = { "Functional" }) public void testAlignmentLoader() throws Exception { for (String f : testFile) @@ -71,7 +101,7 @@ public class PDBFileWithJmolTest } } - @Test(groups ={ "Functional" }) + @Test(groups = { "Functional" }) public void testFileParser() throws Exception { for (String pdbStr : testFile) @@ -93,14 +123,12 @@ public class PDBFileWithJmolTest + " to the same sequence as MCView", sq.getSequenceAsString(), mcseqs.remove(0) .getSequenceAsString()); - AlignmentI al = new Alignment(new SequenceI[] - { sq }); + AlignmentI al = new Alignment(new SequenceI[] { sq }); validateSecStrRows(al); } } } - private void validateSecStrRows(AlignmentI al) { if (!al.isNucleotide()) @@ -135,4 +163,79 @@ public class PDBFileWithJmolTest "Secondary structure not associated for sequence " + sq.getName(), sq.getAnnotation()[0].sequenceRef == sq); } + + /** + * Test parsing a chain with missing residues + * + * @throws Exception + */ + @Test(groups = { "Functional" }) + public void testParse_missingResidues() throws Exception + { + PDBfile mctest = new PDBfile(false, false, false, pdbWithChainBreak, + AppletFormatAdapter.PASTE); + PDBFileWithJmol jtest = new PDBFileWithJmol(pdbWithChainBreak, + jalview.io.AppletFormatAdapter.PASTE); + Vector seqs = jtest.getSeqs(); + Vector mcseqs = mctest.getSeqs(); + + assertEquals("Failed to find 2 sequences\n", 2, seqs.size()); + assertEquals("Failed to find 2 sequences\n", 2, mcseqs.size()); + assertEquals("VGKA", seqs.get(0).getSequenceAsString()); + assertEquals("VGKA", mcseqs.get(0).getSequenceAsString()); + assertEquals("SA", seqs.get(1).getSequenceAsString()); + assertEquals("SA", mcseqs.get(1).getSequenceAsString()); + } + + /** + * Test parsing a chain with 'altloc' residues + * + * @throws Exception + */ + @Test(groups = { "Functional" }) + public void testParse_alternativeResidues() throws Exception + { + PDBfile mctest = new PDBfile(false, false, false, pdbWithAltLoc, + AppletFormatAdapter.PASTE); + PDBFileWithJmol jtest = new PDBFileWithJmol(pdbWithAltLoc, + jalview.io.AppletFormatAdapter.PASTE); + Vector seqs = jtest.getSeqs(); + Vector mcseqs = mctest.getSeqs(); + + assertEquals("Failed to find 1 sequence\n", 1, seqs.size()); + assertEquals("Failed to find 1 sequence\n", 1, mcseqs.size()); + assertEquals("ALC", seqs.get(0).getSequenceAsString()); + assertEquals("ALC", mcseqs.get(0).getSequenceAsString()); + } + + @Test(groups = "Functional") + public void testSetSecondaryStructure() + { + PDBFileWithJmol testee = new PDBFileWithJmol(); + char[] struct = new char[10]; + char[] structCode = new char[10]; + struct[0] = '1'; + structCode[0] = '1'; + + testee.setSecondaryStructure(STR.NONE, 0, struct, structCode); + testee.setSecondaryStructure(STR.HELIX, 1, struct, structCode); + testee.setSecondaryStructure(STR.HELIX310, 2, struct, structCode); + testee.setSecondaryStructure(STR.HELIXALPHA, 3, struct, structCode); + testee.setSecondaryStructure(STR.HELIXPI, 4, struct, structCode); + testee.setSecondaryStructure(STR.SHEET, 5, struct, structCode); + + assertEquals(0, struct[0]); + assertEquals('H', struct[1]); + assertEquals('3', struct[2]); + assertEquals('H', struct[3]); + assertEquals('P', struct[4]); + assertEquals('E', struct[5]); + + assertEquals(0, structCode[0]); + assertEquals('H', structCode[1]); + assertEquals('H', structCode[2]); + assertEquals('H', structCode[3]); + assertEquals('H', structCode[4]); + assertEquals('E', structCode[5]); + } }