/*
* 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.xtal;
import org.biojava.nbio.structure.*;
import org.biojava.nbio.structure.align.util.AtomCache;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.*;
/**
* Testing of crystallographic info parsing in both pdb and mmCIF files
*
* @author duarte_j
*
*/
public class TestCrystalInfo {
private static final float DELTA = 0.000001f;
@Test
public void test1NMR() throws IOException, StructureException {
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
cache.setUseMmCif(false);
Structure s1 = StructureIO.getStructure("1NMR");
assertFalse(s1.isCrystallographic());
assertTrue(s1.isNmr());
assertEquals(s1.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.SOLUTION_NMR);
cache.setUseMmCif(true);
Structure s2 = StructureIO.getStructure("1NMR");
assertFalse(s2.isCrystallographic());
assertTrue(s2.isNmr());
assertEquals(s2.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.SOLUTION_NMR);
testCrystallographicInfo(s1, s2);
}
@Test
public void test1B8G() throws IOException, StructureException {
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
cache.setUseMmCif(false);
Structure s1 = StructureIO.getStructure("1B8G");
assertTrue(s1.isCrystallographic());
assertFalse(s1.isNmr());
assertEquals(s1.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.XRAY_DIFFRACTION);
cache.setUseMmCif(true);
Structure s2 = StructureIO.getStructure("1B8G");
assertTrue(s2.isCrystallographic());
assertFalse(s2.isNmr());
assertEquals(s2.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.XRAY_DIFFRACTION);
testCrystallographicInfo(s1, s2);
}
@Test
public void test4M7P() throws IOException, StructureException {
// multimodel x-ray structure
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
cache.setUseMmCif(false);
Structure s1 = StructureIO.getStructure("4M7P");
assertTrue(s1.isCrystallographic());
assertFalse(s1.isNmr());
assertTrue(s1.nrModels()>1);
assertEquals(s1.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.XRAY_DIFFRACTION);
cache.setUseMmCif(true);
Structure s2 = StructureIO.getStructure("4M7P");
assertTrue(s2.isCrystallographic());
assertFalse(s2.isNmr());
assertTrue(s2.nrModels()>1);
assertEquals(s2.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.XRAY_DIFFRACTION);
testCrystallographicInfo(s1, s2);
}
@Test
public void test2MBQ() throws IOException, StructureException {
// single model NMR structure
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
cache.setUseMmCif(false);
Structure s1 = StructureIO.getStructure("2MBQ");
assertFalse(s1.isCrystallographic());
assertTrue(s1.isNmr());
assertFalse(s1.nrModels()>1);
assertEquals(s1.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.SOLUTION_NMR);
cache.setUseMmCif(true);
Structure s2 = StructureIO.getStructure("2MBQ");
assertFalse(s2.isCrystallographic());
assertTrue(s2.isNmr());
assertFalse(s2.nrModels()>1);
assertEquals(s2.getPDBHeader().getExperimentalTechniques().iterator().next(),ExperimentalTechnique.SOLUTION_NMR);
testCrystallographicInfo(s1, s2);
}
private void testCrystallographicInfo(Structure s1, Structure s2) {
PDBCrystallographicInfo xtalInfo = s1.getPDBHeader().getCrystallographicInfo();
PDBCrystallographicInfo xtalInfo2 = s2.getPDBHeader().getCrystallographicInfo();
if (xtalInfo==null && xtalInfo2==null) return; // both null: NMR or something similar, nothing to test
CrystalCell cell1 = xtalInfo.getCrystalCell();
CrystalCell cell2 = xtalInfo2.getCrystalCell();
if (s1.isNmr()) assertTrue(cell1==null);
if (s2.isNmr()) assertTrue(cell2==null);
if (cell1==null && cell2==null) return;
assertEquals(xtalInfo.getA(), xtalInfo2.getA(),DELTA);
assertEquals(xtalInfo.getB(), xtalInfo2.getB(),DELTA);
assertEquals(xtalInfo.getC(), xtalInfo2.getC(),DELTA);
assertEquals(xtalInfo.getAlpha(), xtalInfo2.getAlpha(),DELTA);
assertEquals(xtalInfo.getBeta(), xtalInfo2.getBeta(),DELTA);
assertEquals(xtalInfo.getGamma(), xtalInfo2.getGamma(),DELTA);
assertEquals(xtalInfo.getSpaceGroup(),xtalInfo2.getSpaceGroup());
}
}