/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.nbio.structure; import org.biojava.nbio.structure.io.FileParsingParameters; import org.biojava.nbio.structure.io.PDBFileParser; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.zip.GZIPInputStream; import static org.junit.Assert.*; public class TestEntityHeuristics { private static final String PATH_TO_TEST_FILES = "/org/biojava/nbio/structure/io/"; //private static final String[] FILES_TO_TEST = // {"1b8g_raw.pdb.gz", "2m7y_raw.pdb.gz", "3c5f_raw.pdb.gz", "4b19_raw.pdb.gz"}; //public void testCompoundHeuristics() throws IOException { // for (String fileName:FILES_TO_TEST) { // testFile(fileName); // } //} @Test public void test1b8gRaw() throws IOException, StructureException { Structure s = getStructure("1b8g_raw.pdb.gz", true); // 1 prot, 1 PLP, 1 water: 3 entities assertEquals(3, s.getEntityInfos().size()); Chain chainA = s.getPolyChainByPDB("A"); assertEquals(2, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); s = getStructure("1b8g_raw.pdb.gz", false); // 1 prot, 1 PLP, 1 water: 3 entities assertEquals(3, s.getEntityInfos().size()); chainA = s.getPolyChainByPDB("A"); assertEquals(2, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); } @Test public void test2m7yRaw() throws IOException, StructureException { Structure s = getStructure("2m7y_raw.pdb.gz", true); // 2 entities: 1 polymer (protein) 1 non-polymer (ZN) assertEquals(2, s.getEntityInfos().size()); Chain chainA = s.getPolyChainByPDB("A"); assertEquals(1, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); s = getStructure("2m7y_raw.pdb.gz", false); // 2 entities: 1 polymer (protein) 1 non-polymer (ZN) assertEquals(2,s.getEntityInfos().size()); chainA = s.getPolyChainByPDB("A"); assertEquals(1, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); } @Test public void test3c5fRaw() throws IOException, StructureException { Structure s = getStructure("3c5f_raw.pdb.gz", true); int polyEntities = 0; for (EntityInfo e:s.getEntityInfos()) { if (e.getType()==EntityType.POLYMER) polyEntities++; } assertEquals(4, polyEntities); Chain chainA = s.getPolyChainByPDB("A"); // there's 2 models in file, thus for the protien polymeric entity there's 4 chains (2 from each model) assertEquals(4, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); s = getStructure("3c5f_raw.pdb.gz", false); polyEntities = 0; for (EntityInfo e:s.getEntityInfos()) { if (e.getType()==EntityType.POLYMER) polyEntities++; } assertEquals(4,polyEntities); chainA = s.getPolyChainByPDB("A"); // there's 2 models in file, thus for the protien polymeric entity there's 4 chains (2 from each model) assertEquals(4, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); } @Test public void test4b19Raw() throws IOException, StructureException { Structure s = getStructure("4b19_raw.pdb.gz", true); assertEquals(1,s.getEntityInfos().size()); Chain chainA = s.getPolyChainByPDB("A"); // only 1 protein entity with 1 chain, but 5 models assertEquals(5, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); s = getStructure("4b19_raw.pdb.gz", false); assertEquals(1,s.getEntityInfos().size()); chainA = s.getPolyChainByPDB("A"); assertEquals(5, chainA.getEntityInfo().getChains().size()); assertEquals(chainA,chainA.getEntityInfo().getRepresentative()); checkEntitiesNumbered(s.getEntityInfos()); } @Test public void test3ddoNoseqres() throws IOException, StructureException { // 3ddo contains 6 chains in 1 entity, with residue numbering completely different in each of the chains Structure s = getStructure("3ddo_raw_noseqres.pdb.gz", true); assertNotNull(s); assertEquals(6, s.getPolyChains().size()); // checking that heuristics in CompoundFinder work. We should have a 2 entities: 1 polymeric (prot) and 1 nonpolymeric assertEquals(2, s.getEntityInfos().size()); // trying without seqAlignSeqRes s = getStructure("3ddo_raw_noseqres.pdb.gz", false); assertNotNull(s); assertEquals(6, s.getPolyChains().size()); assertEquals(2, s.getEntityInfos().size()); } @Test public void test3ddoSeqres() throws IOException, StructureException { // 3ddo contains 6 chains in 1 entity, with residue numbering completely different in each of the chains Structure s = getStructure("3ddo_raw_trunc_seqres.pdb.gz", true); assertNotNull(s); assertEquals(6, s.getChains().size()); // checking that heuristics in CompoundFinder work. We should have a single entity (compound) assertEquals(1, s.getEntityInfos().size()); // trying without seqAlignSeqRes s = getStructure("3ddo_raw_trunc_seqres.pdb.gz", true); assertNotNull(s); assertEquals(6, s.getChains().size()); assertEquals(1, s.getEntityInfos().size()); } private Structure getStructure(String fileName, boolean setAlignSeqRes) throws IOException { InputStream inStream = new GZIPInputStream(this.getClass().getResourceAsStream(PATH_TO_TEST_FILES+fileName)); PDBFileParser pdbpars = new PDBFileParser(); FileParsingParameters params = new FileParsingParameters(); params.setAlignSeqRes(setAlignSeqRes); pdbpars.setFileParsingParameters(params); Structure s = pdbpars.parsePDBFile(inStream) ; return s; } private void checkEntitiesNumbered(List<EntityInfo> entities) { Collections.sort(entities, new Comparator<EntityInfo>() { @Override public int compare(EntityInfo o1, EntityInfo o2) { return new Integer(o1.getMolId()).compareTo(o2.getMolId()); } }); int id = 1; for (EntityInfo compound:entities) { assertEquals(id,compound.getMolId()); id++; } } }