/*
* 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/
*
* Created on Oct 5, 2009
* Author: Andreas Prlic
*
*/
package org.biojava.nbio.structure;
import org.biojava.nbio.structure.io.FileParsingParameters;
import org.biojava.nbio.structure.io.PDBFileParser;
import org.biojava.nbio.structure.io.mmcif.MMcifParser;
import org.biojava.nbio.structure.io.mmcif.SimpleMMcifConsumer;
import org.biojava.nbio.structure.io.mmcif.SimpleMMcifParser;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.zip.GZIPInputStream;
import static org.junit.Assert.*;
/** A collection of tests to make sure 4hhb is represented correctly.
*
* @author Andreas Prlic
*
*/
public class Test4hhb {
@Test
public void test4hhbPDBFile() throws IOException
{
Structure structure = null;
InputStream inStream = new GZIPInputStream(this.getClass().getResourceAsStream("/4hhb.pdb.gz"));
assertNotNull(inStream);
PDBFileParser pdbpars = new PDBFileParser();
FileParsingParameters params = new FileParsingParameters();
params.setAlignSeqRes(true);
pdbpars.setFileParsingParameters(params);
//pdbpars.setLoadChemCompInfo(true);
structure = pdbpars.parsePDBFile(inStream) ;
assertNotNull(structure);
assertEquals("structure does not contain four chains ", 4 ,structure.size());
testStructure(structure);
Structure structure2 = null;
inStream = new GZIPInputStream(this.getClass().getResourceAsStream("/4hhb.cif.gz"));
assertNotNull(inStream);
MMcifParser mmcifpars = new SimpleMMcifParser();
SimpleMMcifConsumer consumer = new SimpleMMcifConsumer();
params = new FileParsingParameters();
params.setAlignSeqRes(true);
consumer.setFileParsingParameters(params);
mmcifpars.addMMcifConsumer(consumer);
mmcifpars.parse(inStream) ;
structure2 = consumer.getStructure();
assertNotNull(structure2);
assertEquals("structure does not contain four chains ", 4 ,structure2.size());
testStructure(structure2);
assertEquals(structure.getPDBHeader().toPDB().toLowerCase(),structure2.getPDBHeader().toPDB().toLowerCase());
for ( int i = 0 ; i < 4 ; i++){
Chain c1 = structure.getChainByIndex(i);
Chain c2 = structure.getChainByIndex(i);
testEqualChains(c1, c2);
}
// test crystallographic info parses correctly
testCrystallographicInfo(structure, structure2);
}
private void testStructure(Structure structure){
List<Chain> chains = structure.getPolyChains();
assertEquals("4HHB should have 4 chains. " , 4 , chains.size());
Chain a = chains.get(0);
assertEquals("4HHB first chain should be A. " , a.getName(), "A");
Chain b = chains.get(1);
assertEquals("4HHB second chain should be B. " , b.getName(), "B");
Chain c = chains.get(2);
assertEquals("4HHB third chain should be C. " , c.getName(), "C");
Chain d = chains.get(3);
assertEquals("4HHB fourth chain should be D. " , d.getName(), "D");
assertTrue("chain " + a.getName() + " length should be 141. was: " + a.getAtomGroups(GroupType.AMINOACID).size(), ( a.getAtomGroups(GroupType.AMINOACID).size() == 141 ));
assertTrue("chain " + b.getName() + " length should be 146. was: " + b.getAtomGroups(GroupType.AMINOACID).size(), ( b.getAtomGroups(GroupType.AMINOACID).size() == 146 ));
assertTrue("chain " + c.getName() + " length should be 141. was: " + c.getAtomGroups(GroupType.AMINOACID).size(), ( c.getAtomGroups(GroupType.AMINOACID).size() == 141 ));
assertTrue("chain " + d.getName() + " length should be 146. was: " + d.getAtomGroups(GroupType.AMINOACID).size(), ( d.getAtomGroups(GroupType.AMINOACID).size() == 146 ));
assertTrue("chain " + a.getName() + " SEQRES length should be 141, but is " + a.getSeqResLength(), ( a.getSeqResLength() == 141 ));
assertTrue("chain " + b.getName() + " SEQRES length should be 146.", ( b.getSeqResLength() == 146 ));
assertTrue("chain " + c.getName() + " length should be 141.", ( a.getSeqResLength() == 141 ));
assertTrue("chain " + d.getName() + " length should be 146.", ( b.getSeqResLength() == 146 ));
testEqualChains(a,c);
testEqualChains(b,d);
}
private void testEqualChains(Chain a,Chain b){
assertEquals("length of seqres " + a.getName() + " and "+b.getName()+" should be same. " , a.getSeqResLength(), b.getSeqResLength() );
assertEquals("length of atom " + a.getName() + " and "+b.getName()+" should be same. " , a.getAtomGroups(GroupType.AMINOACID).size(), b.getAtomGroups(GroupType.AMINOACID).size());
assertEquals("sequences should be identical. " , a.getAtomSequence(), b.getAtomSequence());
assertEquals("sequences should be identical. " , a.getSeqResSequence(), b.getSeqResSequence());
}
private void testCrystallographicInfo(Structure s1, Structure s2) {
PDBCrystallographicInfo xtalInfo = s1.getPDBHeader().getCrystallographicInfo();
PDBCrystallographicInfo xtalInfo2 = s2.getPDBHeader().getCrystallographicInfo();
assertEquals(xtalInfo.getA(), xtalInfo2.getA(), 0.0001);
assertEquals(xtalInfo.getB(), xtalInfo2.getB(), 0.0001);
assertEquals(xtalInfo.getC(), xtalInfo2.getC(), 0.0001);
assertEquals(xtalInfo.getAlpha(), xtalInfo2.getAlpha(), 0.0001);
assertEquals(xtalInfo.getBeta(), xtalInfo2.getBeta(), 0.0001);
assertEquals(xtalInfo.getGamma(), xtalInfo2.getGamma(), 0.0001);
assertEquals(xtalInfo.getSpaceGroup(),xtalInfo2.getSpaceGroup());
}
}