From: <mig...@us...> - 2008-05-15 13:28:35
|
Revision: 11004 http://cdk.svn.sourceforge.net/cdk/?rev=11004&view=rev Author: miguelrojasch Date: 2008-05-15 06:27:25 -0700 (Thu, 15 May 2008) Log Message: ----------- added method to extract the container which the atom belongs and furthermore it is in resonance. Tests Modified Paths: -------------- cdk/branches/miguelrojasch-IP/src/main/org/openscience/cdk/tools/StructureResonanceGenerator.java cdk/branches/miguelrojasch-IP/src/test/org/openscience/cdk/tools/StructureResonanceGeneratorTest.java Modified: cdk/branches/miguelrojasch-IP/src/main/org/openscience/cdk/tools/StructureResonanceGenerator.java =================================================================== --- cdk/branches/miguelrojasch-IP/src/main/org/openscience/cdk/tools/StructureResonanceGenerator.java 2008-05-15 00:11:47 UTC (rev 11003) +++ cdk/branches/miguelrojasch-IP/src/main/org/openscience/cdk/tools/StructureResonanceGenerator.java 2008-05-15 13:27:25 UTC (rev 11004) @@ -278,7 +278,7 @@ IMoleculeSet setOfMol = getStructures(molecule); if(setOfMol.getMoleculeCount() == 0) return setOfCont; - + /*extraction of all bonds which has been produced a changes of order*/ List<IBond> bondList = new ArrayList<IBond>(); for(int i = 1 ; i < setOfMol.getMoleculeCount() ; i++){ @@ -321,7 +321,7 @@ for(int i = 0 ; i < maxGroup ; i ++){ IAtomContainer container = molecule.getBuilder().newAtomContainer(); for(int j = 0 ; j < bondList.size(); j++){ - if(flagBelonging[j] != maxGroup) + if(flagBelonging[j] != i+1) continue; IBond bond = bondList.get(j); IAtom atomA1 = bond.getAtom(0); @@ -336,6 +336,27 @@ } return setOfCont; } + /** + * <p>Get the container which the atom is found on resonance from a IMolecule. + * It is based on looking if the order of the bond changes. Return null + * is any is found.</p> + * + * @param molecule The IMolecule to analyze + * @param molecule The IAtom + * @return The different containers + */ + @TestMethod("testGetContainer_IMolecule_IAtom") + public IAtomContainer getContainer(IMolecule molecule, IAtom atom) { + IAtomContainerSet setOfCont = getContainers(molecule); + + for(Iterator<IAtomContainer> it = setOfCont.atomContainers(); it.hasNext();){ + IAtomContainer container = it.next(); + if(container.contains(atom)) + return container; + } + + return null; + } /** * Search if the setOfAtomContainer contains the atomContainer * @@ -345,9 +366,10 @@ * @return True, if the atomContainer is contained */ private boolean existAC(IAtomContainerSet set, IAtomContainer atomContainer) { - for(int i = 0 ; i < atomContainer.getAtomCount(); i++) - atomContainer.getAtom(i).setID(""+atomContainer.getAtomNumber(atomContainer.getAtom(i))); +// if(atomContainer.getAtom(i).getID() == null) + atomContainer.getAtom(i).setID(""+atomContainer.getAtomNumber(atomContainer.getAtom(i))); + if(lookingSymmetry){ try { CDKHueckelAromaticityDetector.detectAromaticity(atomContainer); @@ -359,7 +381,9 @@ for(int i = 0 ; i < set.getAtomContainerCount(); i++){ IAtomContainer ss = set.getAtomContainer(i); for(int j = 0 ; j < ss.getAtomCount(); j++) - ss.getAtom(j).setID(""+ss.getAtomNumber(ss.getAtom(j))); +// if(ss.getAtom(j).getID() == null) + ss.getAtom(j).setID(""+ss.getAtomNumber(ss.getAtom(j))); + try { if(!lookingSymmetry ){ Modified: cdk/branches/miguelrojasch-IP/src/test/org/openscience/cdk/tools/StructureResonanceGeneratorTest.java =================================================================== --- cdk/branches/miguelrojasch-IP/src/test/org/openscience/cdk/tools/StructureResonanceGeneratorTest.java 2008-05-15 00:11:47 UTC (rev 11003) +++ cdk/branches/miguelrojasch-IP/src/test/org/openscience/cdk/tools/StructureResonanceGeneratorTest.java 2008-05-15 13:27:25 UTC (rev 11004) @@ -34,6 +34,7 @@ import org.openscience.cdk.SingleElectron; import org.openscience.cdk.aromaticity.CDKHueckelAromaticityDetector; import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IAtomContainerSet; import org.openscience.cdk.interfaces.IBond; @@ -1103,7 +1104,8 @@ molecule.addBond(6, 7, IBond.Order.SINGLE); molecule.getAtom(7).setFormalCharge(+1); addExplicitHydrogens(molecule); - + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); + lpcheck.saturate(molecule); StructureResonanceGenerator sRG = new StructureResonanceGenerator(); IAtomContainerSet setOfContainers = sRG.getContainers(molecule); @@ -1116,6 +1118,107 @@ } } /** + * A unit test suite for JUnit: Resonance C-C=C-[C+]-C-C=C-[C+] <=> C-[C+]-C=C-C-C=C-[C+] + * + * @return The test suite + */ + @Test public void testGetContainer_IMolecule_IAtom() throws Exception { + IMolecule molecule = builder.newMolecule(); + IAtom atom1 = builder.newAtom("C"); + atom1.setID("atom1"); + molecule.addAtom(atom1); + IAtom atom2 = builder.newAtom("C"); + atom2.setID("atom2"); + molecule.addAtom(atom2); + molecule.addBond(0, 1, IBond.Order.SINGLE); + IAtom atom3 = builder.newAtom("C"); + atom3.setID("atom3"); + molecule.addAtom(atom3); + molecule.addBond(1, 2, IBond.Order.DOUBLE); + IAtom atom4 = builder.newAtom("C"); + atom4.setID("atom4"); + molecule.addAtom(atom4); + atom4.setFormalCharge(+1); + molecule.addBond(2, 3, IBond.Order.SINGLE); + molecule.addAtom(new Atom("C")); + molecule.addBond(3, 4, IBond.Order.SINGLE); + molecule.addAtom(new Atom("C")); + molecule.addBond(4, 5, IBond.Order.SINGLE); + molecule.addAtom(new Atom("C")); + molecule.addBond(5, 6, IBond.Order.DOUBLE); + molecule.addAtom(new Atom("C")); + molecule.getAtom(7).setFormalCharge(+1); + molecule.addBond(6, 7, IBond.Order.SINGLE); + addExplicitHydrogens(molecule); + + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); + lpcheck.saturate(molecule); + + StructureResonanceGenerator sRG = new StructureResonanceGenerator(); + IAtomContainer container = sRG.getContainer(molecule,atom4); + + Assert.assertEquals(3, container.getAtomCount()); + Assert.assertEquals(2, container.getBondCount()); + Assert.assertTrue(container.contains(atom4)); + + } + + /** + * A unit test suite for JUnit: Resonance C-C=C-[C+]-C-C=C-[C+] <=> C-[C+]-C=C-C-C=C-[C+] + * + * @return The test suite + */ + @Test public void testGetID() throws Exception { + IMolecule molecule = builder.newMolecule(); + IAtom atom1 = builder.newAtom("C"); + atom1.setID("atom1"); + molecule.addAtom(atom1); + IAtom atom2 = builder.newAtom("C"); + atom2.setID("atom2"); + molecule.addAtom(atom2); + molecule.addBond(0, 1, IBond.Order.SINGLE); + IAtom atom3 = builder.newAtom("C"); + atom3.setID("atom3"); + molecule.addAtom(atom3); + molecule.addBond(1, 2, IBond.Order.DOUBLE); + IAtom atom4 = builder.newAtom("C"); + atom4.setID("atom4"); + molecule.addAtom(atom4); + atom4.setFormalCharge(+1); + molecule.addBond(2, 3, IBond.Order.SINGLE); + IAtom atom5 = builder.newAtom("C"); + atom5.setID("atom5"); + molecule.addAtom(atom5); + molecule.addBond(3, 4, IBond.Order.SINGLE); + IAtom atom6 = builder.newAtom("C"); + atom6.setID("atom6"); + molecule.addAtom(atom6); + molecule.addBond(4, 5, IBond.Order.SINGLE); + IAtom atom7 = builder.newAtom("C"); + atom7.setID("atom7"); + molecule.addAtom(atom7); + molecule.addBond(5, 6, IBond.Order.DOUBLE); + IAtom atom8 = builder.newAtom("C"); + atom8.setID("atom8"); + molecule.addAtom(atom8); + atom8.setFormalCharge(+1); + molecule.addBond(6, 7, IBond.Order.SINGLE); + addExplicitHydrogens(molecule); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); + lpcheck.saturate(molecule); + + StructureResonanceGenerator sRG = new StructureResonanceGenerator(); + IAtomContainer container = sRG.getContainer(molecule,atom4); + + Assert.assertNotNull(atom2.getID()); + Assert.assertNotNull(atom3.getID()); + Assert.assertNotNull(atom4.getID()); + Assert.assertEquals(atom2.getID(), container.getAtom(0).getID()); + Assert.assertEquals(atom3.getID(), container.getAtom(1).getID()); + Assert.assertEquals(atom4.getID(), container.getAtom(2).getID()); + + } + /** * A unit test suite for JUnit: Resonance 1-fluoro-2-methylbenzene Fc1ccccc1C <=> Fc1ccccc1 * * @cdk.inchi InChI=1/C7H7F/c1-6-4-2-3-5-7(6)8/h2-5H,1H3 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |