protected IReaction parseSDF(String input) throws FileNotFoundException, CDKException { File f = new File(input); if (!f.isFile()) { LOGGER.error(WARNING, format("SDF file not found! " + f.getName())); exit(1); } String[] split = f.getName().split(".sdf"); Mol2Reader mol2Reader = new Mol2Reader(new FileReader(input)); AtomContainer ac = mol2Reader.read(new AtomContainer()); IReaction r = new Reaction(); r.addReactant(ac, 1.0); r.addProduct(ac, 1.0); r.setID(split[0]); return r; } }
@Test public void testAccepts() { Mol2Reader reader = new Mol2Reader(); Assert.assertTrue(reader.accepts(ChemFile.class)); Assert.assertTrue(reader.accepts(ChemModel.class)); Assert.assertTrue(reader.accepts(AtomContainer.class)); }
@Override public <T extends IChemObject> T read(T object) throws CDKException { if (object instanceof IChemFile) { return (T) readChemFile((IChemFile) object); } else if (object instanceof IChemModel) { return (T) readChemModel((IChemModel) object); } else if (object instanceof IAtomContainer) { return (T) readMolecule((IAtomContainer) object); } else { throw new CDKException("Only supported are ChemFile and Molecule."); } }
@Test public void unrecognisedAtomTypes() throws Exception { Mol2Reader mol2Reader = null; try { mol2Reader = new Mol2Reader(getClass().getResourceAsStream("CLMW1.mol2")); IAtomContainer container = mol2Reader.read(new AtomContainer()); for (IAtom atom : container.atoms()) Assert.assertNotNull(atom.getAtomicNumber()); } finally { if (mol2Reader != null) mol2Reader.close(); } } }
private ISimpleChemObjectReader getReader(String type, String filename) throws IOException { File input = new File(filename); if (input.isDirectory()) { throw new IOException( "Input path " + filename + " is a directory, not a file"); } switch (type) { case "MOL": return new MDLV2000Reader( new FileReader(input), IChemObjectReader.Mode.RELAXED); case "CML": return new CMLReader(new FileInputStream(input)); case "ML2": return new Mol2Reader(new FileReader(input)); case "PDB": return new PDBReader(new FileReader(input)); } return null; }
@Override public boolean accepts(Class<? extends IChemObject> classObject) { if (IChemFile.class.equals(classObject)) return true; if (IChemModel.class.equals(classObject)) return true; if (IAtomContainer.class.equals(classObject)) return true; Class<?>[] interfaces = classObject.getInterfaces(); for (Class<?> anInterface : interfaces) { if (IChemModel.class.equals(anInterface)) return true; if (IChemFile.class.equals(anInterface)) return true; if (IAtomContainer.class.equals(anInterface)) return true; } Class superClass = classObject.getSuperclass(); return superClass != null && this.accepts(superClass); }
if (atomType == null && isElementSymbol(atomTypeStr)) { atom.setSymbol(atomTypeStr); } else {
@Test public void testReadingIDs() throws Exception { String filename = "data/mol2/fromWebsite.mol2"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IAtomContainer molecule = (IAtomContainer) reader.read(new AtomContainer()); reader.close(); Assert.assertNotNull(molecule); IAtomContainer reference = (IAtomContainer) molecule.clone(); Assert.assertEquals("C1", reference.getAtom(0).getID()); }
private ISimpleChemObjectReader getReader(File file, String extension) throws IOException, CDKException { if (file.isDirectory()) { throw new IOException( "Input path " + file + " is a directory, not a file"); } switch (extension) { case "mol": return new MDLV2000Reader( new FileReader(file), IChemObjectReader.Mode.RELAXED); case "sdf": return new MDLV2000Reader( new FileReader(file)); case "cml": return new CMLReader(new FileInputStream(file)); case "ml2": return new Mol2Reader(new FileReader(file)); case "pdb": PDBReader reader = new PDBReader(new FileReader(file)); reader.getSetting("UseRebondTool").setSetting("false"); // UseRebondTool reader.getSetting("ReadConnectSection").setSetting("true"); // ReadConnectSection return reader; } return null; }
@Override public boolean accepts(Class<? extends IChemObject> classObject) { if (IChemFile.class.equals(classObject)) return true; if (IChemModel.class.equals(classObject)) return true; if (IAtomContainer.class.equals(classObject)) return true; Class<?>[] interfaces = classObject.getInterfaces(); for (Class<?> anInterface : interfaces) { if (IChemModel.class.equals(anInterface)) return true; if (IChemFile.class.equals(anInterface)) return true; if (IAtomContainer.class.equals(anInterface)) return true; } Class superClass = classObject.getSuperclass(); return superClass != null && this.accepts(superClass); }
if (atomType == null && isElementSymbol(atomTypeStr)) { atom.setSymbol(atomTypeStr); } else {
@Test public void testIAtomContainer() throws Exception { String filename = "data/mol2/fromWebsite.mol2"; InputStream in = Mol2ReaderTest.class.getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(in); IAtomContainer mol = (IAtomContainer) reader.read(new AtomContainer()); reader.close(); Assert.assertNotNull(mol); Assert.assertEquals(12, mol.getAtomCount()); Assert.assertEquals(12, mol.getBondCount()); }
@Test public void testAtomTyping() throws Exception { String filename = "data/mol2/atomtyping.mol2"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IAtomContainer molecule = (IAtomContainer) reader.read(new AtomContainer()); Assert.assertNotNull(molecule); IAtomContainer reference = (IAtomContainer) molecule.clone(); // test if the perceived atom types match that percieveAtomTypesAndConfigureAtoms(molecule); Iterator<IAtom> refAtoms = reference.atoms().iterator(); Iterator<IAtom> atoms = molecule.atoms().iterator(); while (atoms.hasNext() && refAtoms.hasNext()) { // work around aromaticity, which we skipped for now Assert.assertEquals("Perceived atom type does not match atom type in file", refAtoms.next() .getAtomTypeName(), atoms.next().getAtomTypeName()); } }
@BeforeClass public static void setup() { setSimpleChemObjectReader(new Mol2Reader(), "data/mol2/fromWebsite.mol2"); }
@Override public <T extends IChemObject> T read(T object) throws CDKException { if (object instanceof IChemFile) { return (T) readChemFile((IChemFile) object); } else if (object instanceof IChemModel) { return (T) readChemModel((IChemModel) object); } else if (object instanceof IAtomContainer) { return (T) readMolecule((IAtomContainer) object); } else { throw new CDKException("Only supported are ChemFile and Molecule."); } }
@Test public void testMultiMolButSingle() throws Exception { Assume.assumeTrue(runSlowTests()); String filename = "data/mol2/fromWebsite.mol2"; logger.info("Testing: ", filename); InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IChemFile chemFile = reader.read(new ChemFile()); reader.close(); List<IAtomContainer> mols = ChemFileManipulator.getAllAtomContainers(chemFile); Assert.assertEquals(1, mols.size()); Assert.assertEquals(12, mols.get(0).getAtomCount()); }
@Test public void testAtomTyping4() throws Exception { String filename = "data/mol2/atomtyping4.mol2"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IAtomContainer molecule = (IAtomContainer) reader.read(new AtomContainer()); Assert.assertNotNull(molecule); IAtomContainer reference = (IAtomContainer) molecule.clone(); // test if the perceived atom types match that percieveAtomTypesAndConfigureAtoms(molecule); Iterator<IAtom> refAtoms = reference.atoms().iterator(); Iterator<IAtom> atoms = molecule.atoms().iterator(); while (atoms.hasNext() && refAtoms.hasNext()) { // work around aromaticity, which we skipped for now IAtom refAtom = refAtoms.next(); Assert.assertEquals("Perceived atom type does not match atom type in file", refAtom.getAtomTypeName(), atoms.next().getAtomTypeName()); } }
@Test public void testMultiMol() throws Exception { Assume.assumeTrue(runSlowTests()); String filename = "data/mol2/actives.mol2"; logger.info("Testing: ", filename); InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IChemFile chemFile = reader.read(new ChemFile()); reader.close(); List<IAtomContainer> mols = ChemFileManipulator.getAllAtomContainers(chemFile); Assert.assertEquals(30, mols.size()); Assert.assertEquals(25, mols.get(0).getAtomCount()); Assert.assertEquals(24, mols.get(29).getAtomCount()); }
@Test public void testAtomTyping3() throws Exception { String filename = "data/mol2/atomtyping3.mol2"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); Mol2Reader reader = new Mol2Reader(ins); IAtomContainer molecule = (IAtomContainer) reader.read(new AtomContainer()); Assert.assertNotNull(molecule); IAtomContainer reference = (IAtomContainer) molecule.clone(); // test if the perceived atom types match that percieveAtomTypesAndConfigureAtoms(molecule); Iterator<IAtom> refAtoms = reference.atoms().iterator(); Iterator<IAtom> atoms = molecule.atoms().iterator(); while (atoms.hasNext() && refAtoms.hasNext()) { // work around aromaticity, which we skipped for now IAtom refAtom = refAtoms.next(); Assert.assertEquals("Perceived atom type does not match atom type in file", refAtom.getAtomTypeName(), atoms.next().getAtomTypeName()); } }
private void checkMol(StringBuilder buf) throws Exception { StringReader sr = new StringReader(buf.toString()); Mol2Reader reader = new Mol2Reader(sr); IChemFile mol = (IChemFile) reader.read(SilentChemObjectBuilder.getInstance().newInstance(IChemFile.class)); reader.close(); Assert.assertTrue(mol.getChemSequenceCount() > 0); Assert.assertTrue(mol.getChemSequence(0).getChemModelCount() > 0); Assert.assertTrue(mol.getChemSequence(0).getChemModel(0).getMoleculeSet().getAtomContainerCount() > 0); Assert.assertTrue(mol.getChemSequence(0).getChemModel(0).getMoleculeSet().getAtomContainer(0).getAtomCount() > 0); }