package org.biojava.nbio.structure.io.mmtf;
import org.junit.Test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.List;
import org.biojava.nbio.structure.Atom;
import org.biojava.nbio.structure.Bond;
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.FileParsingParameters;
import org.biojava.nbio.structure.io.LocalPDBDirectory.FetchBehavior;
import org.biojava.nbio.structure.io.mmcif.ChemCompGroupFactory;
import org.biojava.nbio.structure.io.mmcif.DownloadChemCompProvider;
/**
* Test bond finding in BioJava
* @author Anthony Bradley
*
*/
public class TestBondFinding {
/**
* Test that the bonds we are finding is consistenty.
* @throws IOException
* @throws StructureException
*/
@Test
public void testInterGroupBonds() throws IOException, StructureException {
// Normal
assertEquals(2236, getInterBonds("1QMZ"));
// Disulphide
assertEquals(956, getInterBonds("2QWO"));
// Covalent ligand
assertEquals(2294, getInterBonds("4QDV"));
// DNA
assertEquals(22, getInterBonds("4XSN"));
}
/**
* Find all of the inter group bonds in a structure
* @param pdbId the pdb id of the structure to determine
* @return the number of inter group bonds (double counted) in a structure
* @throws IOException
* @throws StructureException
*/
public int getInterBonds(String pdbId) throws IOException, StructureException{
AtomCache cache = new AtomCache();
cache.setUseMmCif(true);
cache.setFetchBehavior(FetchBehavior.FETCH_FILES);
FileParsingParameters params = cache.getFileParsingParams();
params.setCreateAtomBonds(true);
params.setAlignSeqRes(true);
params.setParseBioAssembly(true);
DownloadChemCompProvider dcc = new DownloadChemCompProvider();
ChemCompGroupFactory.setChemCompProvider(dcc);
dcc.checkDoFirstInstall();
cache.setFileParsingParams(params);
StructureIO.setAtomCache(cache);
int counter =0;
// Now get the structure
Structure newStruc = StructureIO.getStructure(pdbId);
// Now loop through the atoms
for(Chain c: newStruc.getChains()){
for(Group g: c.getAtomGroups()){
List<Atom> theseAtoms = g.getAtoms();
for(Atom a: theseAtoms){
List<Bond> theseBonds = a.getBonds();
if(theseBonds != null){
for(Bond b: a.getBonds()){
Atom other = b.getOther(a);
int indexOther = theseAtoms.indexOf(other);
// Check if the index is within the group
if(indexOther<0 || indexOther >= theseAtoms.size()){
counter++;
}
}
}
}
}
}
return counter;
}
}