From: <eg...@us...> - 2008-07-23 21:08:07
|
Revision: 11729 http://cdk.svn.sourceforge.net/cdk/?rev=11729&view=rev Author: egonw Date: 2008-07-23 21:08:04 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Added missing force3DCoords setting for the iterating MDL reader (closes #2025785) Modified Paths: -------------- cdk/trunk/src/main/org/openscience/cdk/io/iterator/IteratingMDLReader.java cdk/trunk/src/test/org/openscience/cdk/io/iterator/IteratingMDLReaderTest.java Added Paths: ----------- cdk/trunk/src/data/mdl/no3dStructures.sdf Copied: cdk/trunk/src/data/mdl/no3dStructures.sdf (from rev 11727, cdk/trunk/src/data/mdl/emptyStructures.sdf) =================================================================== --- cdk/trunk/src/data/mdl/no3dStructures.sdf (rev 0) +++ cdk/trunk/src/data/mdl/no3dStructures.sdf 2008-07-23 21:08:04 UTC (rev 11729) @@ -0,0 +1,158 @@ + + + + 4 3 0 0 0 0 0 0 0 0 1 V2000 + 0.0000 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6652 -1.1508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9956 -1.1508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3260 -1.1508 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 0 0 0 + 2 3 1 0 0 0 0 + 3 4 3 0 0 0 0 +M END +> <Formula> +C3H3N + +> <DSSTox_ID> +29 + +> <DSSTox_FileName> +CPDBAS_v2a_1451_1Mar05 + +> <MolWeight> +53.0634 + +> <StructureShown> +tested form + +> <ChemName> +Acrylonitrile + +> <CAS> +107-13-1 + +> <SubstanceType> +defined organic + +> <TestedForm> +parent + +> <ChemCount> +1 + +> <ChemName_IUPAC> +acrylonitrile + +> <SMILES> +C=CC#N + +> <SMILES_Parent> +C=CC#N + +> <INChI> +INChI=1.12Beta/C3H3N/c1-2-3-4/h1H2,2H + +> <StudyType> +carcinogenicity + +> <Species> +rat + +> <Endpoint> +TD50, Tumor Target Sites + +> <SAL CPDB> +pos + +> <TD50 Rat notext> +16.9 + +> <TD50 Rat> +16.9 m v + +> <Target Sites Rat Male> +ezy nrv orc smi sto + +> <Target Sites Rat Female> +ezy mgl nas nrv orc smi sto + +$$$$ + + + + 4 3 0 0 0 0 0 0 0 0 1 V2000 + 0.0000 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6652 -1.1508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9956 -1.1508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3260 -1.1508 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 0 0 0 + 2 3 1 0 0 0 0 + 3 4 3 0 0 0 0 +M END +> <Formula> +C3H3N + +> <DSSTox_ID> +29 + +> <DSSTox_FileName> +CPDBAS_v2a_1451_1Mar05 + +> <MolWeight> +53.0634 + +> <StructureShown> +tested form + +> <ChemName> +Acrylonitrile + +> <CAS> +107-13-1 + +> <SubstanceType> +defined organic + +> <TestedForm> +parent + +> <ChemCount> +1 + +> <ChemName_IUPAC> +acrylonitrile + +> <SMILES> +C=CC#N + +> <SMILES_Parent> +C=CC#N + +> <INChI> +INChI=1.12Beta/C3H3N/c1-2-3-4/h1H2,2H + +> <StudyType> +carcinogenicity + +> <Species> +rat + +> <Endpoint> +TD50, Tumor Target Sites + +> <SAL CPDB> +pos + +> <TD50 Rat notext> +16.9 + +> <TD50 Rat> +16.9 m v + +> <Target Sites Rat Male> +ezy nrv orc smi sto + +> <Target Sites Rat Female> +ezy mgl nas nrv orc smi sto + +$$$$ \ No newline at end of file Modified: cdk/trunk/src/main/org/openscience/cdk/io/iterator/IteratingMDLReader.java =================================================================== --- cdk/trunk/src/main/org/openscience/cdk/io/iterator/IteratingMDLReader.java 2008-07-23 20:31:32 UTC (rev 11728) +++ cdk/trunk/src/main/org/openscience/cdk/io/iterator/IteratingMDLReader.java 2008-07-23 21:08:04 UTC (rev 11729) @@ -32,16 +32,21 @@ import java.io.StringReader; import java.util.NoSuchElementException; +import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IChemObject; import org.openscience.cdk.interfaces.IChemObjectBuilder; import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.io.ISimpleChemObjectReader; +import org.openscience.cdk.io.MDLV2000Reader; import org.openscience.cdk.io.ReaderFactory; import org.openscience.cdk.io.formats.IChemFormat; import org.openscience.cdk.io.formats.IResourceFormat; import org.openscience.cdk.io.formats.MDLFormat; import org.openscience.cdk.io.formats.MDLV2000Format; import org.openscience.cdk.io.formats.MDLV3000Format; +import org.openscience.cdk.io.listener.IChemObjectIOListener; +import org.openscience.cdk.io.setting.BooleanIOSetting; +import org.openscience.cdk.io.setting.IOSetting; import org.openscience.cdk.tools.LoggingTool; /** @@ -75,7 +80,7 @@ * @cdk.keyword file format, MDL molfile * @cdk.keyword file format, SDF */ -public class IteratingMDLReader extends DefaultIteratingChemObjectReader { +public class IteratingMDLReader extends DefaultIteratingChemObjectReader implements IChemObjectIOListener { private BufferedReader input; private LoggingTool logger; @@ -88,6 +93,8 @@ private IChemObjectBuilder builder; private IMolecule nextMolecule; + private BooleanIOSetting forceReadAs3DCoords; + /** * Contructs a new IteratingMDLReader that can read Molecule from a given Reader. * @@ -98,6 +105,7 @@ logger = new LoggingTool(this); this.builder = builder; setReader(in); + initIOSettings(); } /** @@ -148,6 +156,10 @@ logger.debug("MDL file part read: ", buffer); ISimpleChemObjectReader reader = factory.createReader(currentFormat); reader.setReader(new StringReader(buffer.toString())); + if (currentFormat instanceof MDLV2000Format) { + reader.addChemObjectIOListener(this); + ((MDLV2000Reader)reader).customizeJob(); + } nextMolecule = (IMolecule)reader.read(builder.newMolecule()); // note that a molecule may have 0 atoms, but still @@ -248,5 +260,32 @@ public void setReader(InputStream reader) { setReader(new InputStreamReader(reader)); } + + private void initIOSettings() { + forceReadAs3DCoords = new BooleanIOSetting("ForceReadAs3DCoordinates", IOSetting.LOW, + "Should coordinates always be read as 3D?", + "false"); + } + + public void customizeJob() { + fireIOSettingQuestion(forceReadAs3DCoords); + } + + public IOSetting[] getIOSettings() { + IOSetting[] settings = new IOSetting[1]; + settings[0] = forceReadAs3DCoords; + return settings; + } + + public void processIOSettingQuestion(IOSetting setting) { + if (setting.getName().equals(forceReadAs3DCoords.getName())) { + try { + setting.setSetting(forceReadAs3DCoords.getSetting()); + } catch (CDKException e) { + logger.debug("Could not propagate forceReadAs3DCoords setting"); + } + } + } + } Modified: cdk/trunk/src/test/org/openscience/cdk/io/iterator/IteratingMDLReaderTest.java =================================================================== --- cdk/trunk/src/test/org/openscience/cdk/io/iterator/IteratingMDLReaderTest.java 2008-07-23 20:31:32 UTC (rev 11728) +++ cdk/trunk/src/test/org/openscience/cdk/io/iterator/IteratingMDLReaderTest.java 2008-07-23 21:08:04 UTC (rev 11729) @@ -32,9 +32,12 @@ import org.openscience.cdk.CDKConstants; import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.Molecule; +import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.io.formats.MDLV2000Format; import org.openscience.cdk.io.iterator.IteratingMDLReader; +import org.openscience.cdk.io.listener.IChemObjectIOListener; +import org.openscience.cdk.io.setting.IOSetting; import org.openscience.cdk.CDKTestCase; import org.openscience.cdk.tools.LoggingTool; @@ -166,4 +169,60 @@ } + public void testNo3DCoordsButForcedAs() { + // First test unforced 3D coordinates + String filename = "data/mdl/no3dStructures.sdf"; + logger.info("Testing: " + filename); + InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); + IteratingMDLReader reader = new IteratingMDLReader(ins, DefaultChemObjectBuilder.getInstance()); + int molCount = 0; + IMolecule mol = null; + while (reader.hasNext()) { + Object object = reader.next(); + assertNotNull(object); + assertTrue(object instanceof IMolecule); + molCount++; + mol = (IMolecule)object; + } + + assertEquals(2, molCount); + assertNotNull(mol.getAtom(0).getPoint2d()); + assertNull(mol.getAtom(0).getPoint3d()); + + // Now test forced 3D coordinates + logger.info("Testing: " + filename); + ins = this.getClass().getClassLoader().getResourceAsStream(filename); + reader = new IteratingMDLReader(ins, DefaultChemObjectBuilder.getInstance()); + reader.addChemObjectIOListener(new MyListener()); + reader.customizeJob(); + molCount = 0; + mol = null; + while (reader.hasNext()) { + Object object = reader.next(); + assertNotNull(object); + assertTrue(object instanceof IMolecule); + molCount++; + mol = (IMolecule)object; + } + + assertEquals(2, molCount); + assertNull(mol.getAtom(0).getPoint2d()); + assertNotNull(mol.getAtom(0).getPoint3d()); + } + + class MyListener implements IChemObjectIOListener { + + public void processIOSettingQuestion(IOSetting setting) { + if ("ForceReadAs3DCoordinates".equals(setting.getName())) { + try { + setting.setSetting("true"); + } catch (CDKException e) { + logger.error("Could not set forceReadAs3DCoords setting: ", e.getMessage()); + logger.debug(e); + } + } + } + + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |