/* * 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.io; import static org.junit.Assert.*; import java.io.IOException; import org.biojava.nbio.structure.Atom; import org.biojava.nbio.structure.Chain; import org.biojava.nbio.structure.Group; import org.biojava.nbio.structure.Structure; import org.biojava.nbio.structure.StructureException; import org.biojava.nbio.structure.StructureIO; import org.biojava.nbio.structure.align.util.AtomCache; import org.biojava.nbio.structure.io.mmcif.ChemCompGroupFactory; import org.biojava.nbio.structure.io.mmcif.DownloadChemCompProvider; import org.biojava.nbio.structure.io.mmcif.chem.PolymerType; import org.junit.Test; /** * Created by edlunde-dnastar * @since 10/30/2015. */ public class TestParseMmCIFLigands { private static final int HEM_COUNT_4HHB = 172; //Number of atoms in HEM groups of 4HHB (manually determined from CIF file) private static final int ATOM_COUNT_3UCB = 114; //number of atoms in 3UCB, including alternate ligand conformations @Test public void testLigandConnections()throws IOException, StructureException { AtomCache cache = new AtomCache(); // This needs MMCIF cache.setUseMmCif(true); StructureIO.setAtomCache(cache); cache.setUseMmCif(true); ChemCompGroupFactory.setChemCompProvider(new DownloadChemCompProvider()); FileParsingParameters params = cache.getFileParsingParams(); params.setCreateAtomBonds(true); StructureIO.setAtomCache(cache); Structure sCif = StructureIO.getStructure("4HHB"); //Verify that we have all HEM atoms from the CIF file. assertEquals( HEM_COUNT_4HHB, countBondedAtomsInLigandGroups(sCif) ); } private int countBondedAtomsInLigandGroups(Structure s){ int count = 0; for (Chain c:s.getChains()) { for (Group g:c.getAtomGroups()) { if (!g.isWater() && !PolymerType.ALL_POLYMER_TYPES.contains(g.getChemComp().getPolymerType())) { for (Atom a:g.getAtoms()) { if (a.getBonds()!=null) count++; } for (Group altg : g.getAltLocs()) { for (Atom a:altg.getAtoms()) { if (a.getBonds()!=null) count++; } } } } } return count; } @Test public void testMultipleConformations()throws IOException, StructureException { AtomCache cache = new AtomCache(); // This needs MMCIF cache.setUseMmCif(true); StructureIO.setAtomCache(cache); cache.setUseMmCif(true); ChemCompGroupFactory.setChemCompProvider(new DownloadChemCompProvider()); FileParsingParameters params = cache.getFileParsingParams(); params.setCreateAtomBonds(true); StructureIO.setAtomCache(cache); Structure sCif = StructureIO.getStructure("3UCB"); //Verify that we have all atoms from all conformations of the ligands assertEquals(ATOM_COUNT_3UCB, countBondedAtomsInLigandGroups(sCif)); } }