From: <mig...@us...> - 2008-02-12 23:45:15
|
Revision: 10080 http://cdk.svn.sourceforge.net/cdk/?rev=10080&view=rev Author: miguelrojasch Date: 2008-02-12 15:44:06 -0800 (Tue, 12 Feb 2008) Log Message: ----------- new Mechanism: RadicalIonizationMechanism. Emerged the reaction RadicalSite*Reaction into Modified Paths: -------------- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationHReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationHReactionTest.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationReactionTest.java Added Paths: ----------- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/RadicalSiteIonizationMechanism.java Added: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/RadicalSiteIonizationMechanism.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/RadicalSiteIonizationMechanism.java (rev 0) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/RadicalSiteIonizationMechanism.java 2008-02-12 23:44:06 UTC (rev 10080) @@ -0,0 +1,148 @@ +/* $Revision: 8418 $ $Author: egonw $ $Date: 2007-06-25 22:05:44 +0200 (Mon, 25 Jun 2007) $ + * + * Copyright (C) 2008 Miguel Rojas <mig...@ya...> + * + * Contact: cdk...@li... + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.openscience.cdk.reaction.mechanism; + +import java.util.ArrayList; +import java.util.List; + +import org.openscience.cdk.DefaultChemObjectBuilder; +import org.openscience.cdk.SingleElectron; +import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.graph.ConnectivityChecker; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomType; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IMapping; +import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.interfaces.IMoleculeSet; +import org.openscience.cdk.interfaces.IReaction; +import org.openscience.cdk.interfaces.ISingleElectron; +import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; +import org.openscience.cdk.reaction.IReactionMechanism; +import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; +import org.openscience.cdk.tools.manipulator.BondManipulator; + +/** + * <p>This mechanism extracts an atom because of the stabilization of a radical. + * It returns the reaction mechanism which has been cloned the IMolecule.</p> + * <p>This reaction could be represented as Y-B-[C*] => [Y*] + B=C</p> + * + * @author miguelrojasch + * @cdk.created 2008-02-10 + * @cdk.module reaction + * + */ +public class RadicalSiteIonizationMechanism implements IReactionMechanism{ + + private CDKAtomTypeMatcher atMatcher; + + /** + * Constructor of the RadicalSiteIonizationMechanism object. + * + */ + public RadicalSiteIonizationMechanism(){ + atMatcher = CDKAtomTypeMatcher.getInstance( + NoNotificationChemObjectBuilder.getInstance(), + CDKAtomTypeMatcher.REQUIRE_EXPLICIT_HYDROGENS + ); + } + + /** + * Initiates the process for the given mechanism. The atoms to apply are mapped between + * reactants and products. + * + * @param molecule The IMolecule to apply the mechanism + * @param atomList The list of atoms taking part in the mechanism. Only allowed two atoms. + * The first atom is the atom which contains the ISingleElectron and the second + * third is the atom which will be removed + * the first atom + * @param bondList The list of bonds taking part in the mechanism. Only allowed one bond. + * It is the bond which is moved + * @return The Reaction mechanism + * + */ + public IReaction initiate(IMolecule molecule, ArrayList<IAtom> atomList,ArrayList<IBond> bondList) throws CDKException { + if (atomList.size() != 3) { + throw new CDKException("RadicalSiteIonizationMechanism expects three atoms in the ArrayList"); + } + if (bondList.size() != 2) { + throw new CDKException("RadicalSiteIonizationMechanism only expect one bond in the ArrayList"); + } + IMolecule reactantCloned; + try { + reactantCloned = (IMolecule) molecule.clone(); + } catch (CloneNotSupportedException e) { + throw new CDKException("Could not clone IMolecule!", e); + } + IAtom atom1 = atomList.get(0);// Atom containing the ISingleElectron + int posAtom1 = molecule.getAtomNumber(atom1); + IAtom atom2 = atomList.get(1);// Atom + int posAtom2 = molecule.getAtomNumber(atom2); + IAtom atom3 = atomList.get(2);// Atom to be saved + int posAtom3 = molecule.getAtomNumber(atom3); + IBond bond1 = bondList.get(0);// Bond to increase the order + int posBond1 = molecule.getBondNumber(bond1); + IBond bond2 = bondList.get(1);// Bond to remove + int posBond2 = molecule.getBondNumber(bond2); + + BondManipulator.increaseBondOrder(reactantCloned.getBond(posBond1)); + reactantCloned.removeBond(reactantCloned.getBond(posBond2)); + + List<ISingleElectron> selectron = reactantCloned.getConnectedSingleElectronsList(reactantCloned.getAtom(posAtom1)); + reactantCloned.removeSingleElectron(selectron.get(selectron.size() -1)); + reactantCloned.getAtom(posAtom1).setHybridization(null); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); + IAtomType type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom1)); + if (type == null) return null; + + reactantCloned.getAtom(posAtom2).setHybridization(null); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); + type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom2)); + if (type == null) return null; + + reactantCloned.addSingleElectron(new SingleElectron(reactantCloned.getAtom(posAtom3))); + reactantCloned.getAtom(posAtom3).setHybridization(null); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); + type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom3)); + if (type == null) return null; + + IReaction reaction = DefaultChemObjectBuilder.getInstance().newReaction(); + reaction.addReactant(molecule); + + /* mapping */ + IMapping mapping = DefaultChemObjectBuilder.getInstance().newMapping(atom1, reactantCloned.getAtom(posAtom1)); + reaction.addMapping(mapping); + mapping = DefaultChemObjectBuilder.getInstance().newMapping(atom2, reactantCloned.getAtom(posAtom2)); + reaction.addMapping(mapping); + mapping = DefaultChemObjectBuilder.getInstance().newMapping(atom3, reactantCloned.getAtom(posAtom3)); + reaction.addMapping(mapping); + mapping = DefaultChemObjectBuilder.getInstance().newMapping(bond1, reactantCloned.getBond(posBond1)); + reaction.addMapping(mapping); + + IMoleculeSet moleculeSet = ConnectivityChecker.partitionIntoMolecules(reactantCloned); + for(int z = 0; z < moleculeSet.getAtomContainerCount() ; z++) + reaction.addProduct(moleculeSet.getMolecule(z)); + + return reaction; + } + +} Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationHReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationHReaction.java 2008-02-12 23:14:15 UTC (rev 10079) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationHReaction.java 2008-02-12 23:44:06 UTC (rev 10080) @@ -24,35 +24,29 @@ */ package org.openscience.cdk.reaction.type; +import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.SingleElectron; -import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.graph.ConnectivityChecker; import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.interfaces.IMapping; import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReaction; import org.openscience.cdk.interfaces.IReactionSet; -import org.openscience.cdk.interfaces.ISingleElectron; -import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; +import org.openscience.cdk.reaction.IReactionMechanism; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.ReactionSpecification; +import org.openscience.cdk.reaction.mechanism.RadicalSiteIonizationMechanism; import org.openscience.cdk.tools.LoggingTool; -import org.openscience.cdk.tools.manipulator.BondManipulator; /** * <p>IReactionProcess which participate mass spectrum process. Homolitic dissocitation. - * This reaction could be represented as H-B-[c*] => [H*] + B=C. H is hydrogen atom</p> - * <p>Make sure that the molecule has the corresponend lone pair electrons + * This reaction could be represented as H-B-[C*] => [H*] + B=C. H is hydrogen atom</p> + * <p>Make sure that the molecule has the correspond lone pair electrons * for each atom. You can use the method: <pre> LonePairElectronChecker </pre> + * <p>It is processed by the RadicalSiteIonizationMechanism class</p> * * <pre> * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); @@ -68,7 +62,7 @@ * <pre>atoms[0].setFlag(CDKConstants.REACTIVE_CENTER,true);</pre> * <p>Moreover you must put the parameter Boolean.TRUE</p> * <p>If the reactive center is not localized then the reaction process will - * try to find automatically the posible reactive center.</p> + * try to find automatically the possible reactive center.</p> * * * @author Miguel Rojas @@ -78,11 +72,12 @@ * @cdk.svnrev $Revision: 9162 $ * @cdk.set reaction-types * + * @see RadicalSiteIonizationMechanism **/ public class RadicalSiteInitiationHReaction implements IReactionProcess{ private LoggingTool logger; private boolean hasActiveCenter; - private CDKAtomTypeMatcher atMatcher; + private IReactionMechanism mechanism; /** * Constructor of the RadicalSiteInitiationHReaction object @@ -90,10 +85,7 @@ */ public RadicalSiteInitiationHReaction(){ logger = new LoggingTool(this); - atMatcher = CDKAtomTypeMatcher.getInstance( - NoNotificationChemObjectBuilder.getInstance(), - CDKAtomTypeMatcher.REQUIRE_EXPLICIT_HYDROGENS - ); + mechanism = new RadicalSiteIonizationMechanism(); } /** * Gets the specification attribute of the RadicalSiteInitiationHReaction object @@ -192,55 +184,19 @@ if(atomk.getFlag(CDKConstants.REACTIVE_CENTER) && atomk.getSymbol().equals("H") && atomk.getFormalCharge() == 0 ){ - IReaction reaction = DefaultChemObjectBuilder.getInstance().newReaction(); - reaction.addReactant(reactant); - - /* positions atoms and bonds */ - int atomiP = reactant.getAtomNumber(atomi); - int atomjP = reactant.getAtomNumber(atomj); - int atomkP = reactant.getAtomNumber(atomk); - int bondiP = reactant.getBondNumber(bondi); - int bondjP = reactant.getBondNumber(bondj); - - /* action */ - IAtomContainer reactantCloned; - try { - reactantCloned = (IMolecule)reactant.clone(); - } catch (CloneNotSupportedException e) { - throw new CDKException("Could not clone IMolecule!", e); - } - - List<ISingleElectron> selectron = reactantCloned.getConnectedSingleElectronsList(reactantCloned.getAtom(atomiP)); - reactantCloned.removeSingleElectron(selectron.get(selectron.size() -1)); - - reactantCloned.addSingleElectron(new SingleElectron(reactantCloned.getAtom(atomkP))); - - BondManipulator.increaseBondOrder(reactantCloned.getBond(bondiP)); - reactantCloned.removeBond(reactantCloned.getBond(bondjP)); - -// // check if resulting atom type is reasonable -// IAtomType type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(atomiP)); -// if (type == null)continue; -// type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(atomkP)); -// if (type == null)continue; - - /* mapping */ - IMapping mapping = atomi.getBuilder().newMapping(atomi, reactantCloned.getAtom(atomiP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(atomj, reactantCloned.getAtom(atomjP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(atomk, reactantCloned.getAtom(atomkP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(bondi, reactantCloned.getBond(bondiP)); - reaction.addMapping(mapping); - - IMoleculeSet moleculeSet = ConnectivityChecker.partitionIntoMolecules(reactantCloned); - for(int z = 0; z < moleculeSet.getAtomContainerCount() ; z++){ - reaction.addProduct(moleculeSet.getMolecule(z)); - } - - setOfReactions.addReaction(reaction); - + ArrayList<IAtom> atomList = new ArrayList<IAtom>(); + atomList.add(atomi); + atomList.add(atomj); + atomList.add(atomk); + ArrayList<IBond> bondList = new ArrayList<IBond>(); + bondList.add(bondi); + bondList.add(bondj); + + IReaction reaction = mechanism.initiate(reactant, atomList, bondList); + if(reaction == null) + continue; + else + setOfReactions.addReaction(reaction); } } } Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationReaction.java 2008-02-12 23:14:15 UTC (rev 10079) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/RadicalSiteInitiationReaction.java 2008-02-12 23:44:06 UTC (rev 10080) @@ -24,35 +24,30 @@ */ package org.openscience.cdk.reaction.type; +import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import org.openscience.cdk.CDKConstants; import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.SingleElectron; -import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.graph.ConnectivityChecker; import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.interfaces.IMapping; import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReaction; import org.openscience.cdk.interfaces.IReactionSet; -import org.openscience.cdk.interfaces.ISingleElectron; -import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; +import org.openscience.cdk.reaction.IReactionMechanism; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.ReactionSpecification; +import org.openscience.cdk.reaction.mechanism.RadicalSiteIonizationMechanism; import org.openscience.cdk.tools.LoggingTool; -import org.openscience.cdk.tools.manipulator.BondManipulator; /** * <p>IReactionProcess which participate mass spectrum process. Homolitic dissocitation. * This reaction could be represented as A-B-[c*] => [A*] + B=C.</p> * <p>Make sure that the molecule has the corresponend lone pair electrons * for each atom. You can use the method: <pre> LonePairElectronChecker </pre> + * <p>It is processed by the RadicalSiteIonizationMechanism class</p> * * <pre> * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); @@ -78,11 +73,12 @@ * @cdk.svnrev $Revision: 9162 $ * @cdk.set reaction-types * + * @see RadicalSiteIonizationMechanism **/ public class RadicalSiteInitiationReaction implements IReactionProcess{ private LoggingTool logger; private boolean hasActiveCenter; - private Object atMatcher; + private IReactionMechanism mechanism; /** * Constructor of the RadicalSiteInitiationReaction object @@ -90,10 +86,7 @@ */ public RadicalSiteInitiationReaction(){ logger = new LoggingTool(this); - atMatcher = CDKAtomTypeMatcher.getInstance( - NoNotificationChemObjectBuilder.getInstance(), - CDKAtomTypeMatcher.REQUIRE_EXPLICIT_HYDROGENS - ); + mechanism = new RadicalSiteIonizationMechanism(); } /** * Gets the specification attribute of the RadicalSiteInitiationReaction object @@ -192,55 +185,20 @@ if(atomk.getFlag(CDKConstants.REACTIVE_CENTER) && atomk.getSymbol().equals("C") && atomk.getFormalCharge() == 0 ){ - IReaction reaction = DefaultChemObjectBuilder.getInstance().newReaction(); - reaction.addReactant(reactant); + ArrayList<IAtom> atomList = new ArrayList<IAtom>(); + atomList.add(atomi); + atomList.add(atomj); + atomList.add(atomk); + ArrayList<IBond> bondList = new ArrayList<IBond>(); + bondList.add(bondi); + bondList.add(bondj); + + IReaction reaction = mechanism.initiate(reactant, atomList, bondList); + if(reaction == null) + continue; + else + setOfReactions.addReaction(reaction); - /* positions atoms and bonds */ - int atomiP = reactant.getAtomNumber(atomi); - int atomjP = reactant.getAtomNumber(atomj); - int atomkP = reactant.getAtomNumber(atomk); - int bondiP = reactant.getBondNumber(bondi); - int bondjP = reactant.getBondNumber(bondj); - - /* action */ - IAtomContainer reactantCloned; - try { - reactantCloned = (IMolecule)reactant.clone(); - } catch (CloneNotSupportedException e) { - throw new CDKException("Could not clone IMolecule!", e); - } - - List<ISingleElectron> selectron = reactantCloned.getConnectedSingleElectronsList(reactantCloned.getAtom(atomiP)); - reactantCloned.removeSingleElectron(selectron.get(selectron.size() -1)); - - reactantCloned.addSingleElectron(new SingleElectron(reactantCloned.getAtom(atomkP))); - - BondManipulator.increaseBondOrder(reactantCloned.getBond(bondiP)); - reactantCloned.removeBond(reactantCloned.getBond(bondjP)); - -// // check if resulting atom type is reasonable -// IAtomType type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(atomiP)); -// if (type == null)continue; -// type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(atomkP)); -// if (type == null)continue; - - /* mapping */ - IMapping mapping = atomi.getBuilder().newMapping(atomi, reactantCloned.getAtom(atomiP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(atomj, reactantCloned.getAtom(atomjP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(atomk, reactantCloned.getAtom(atomkP)); - reaction.addMapping(mapping); - mapping = atomi.getBuilder().newMapping(bondi, reactantCloned.getBond(bondiP)); - reaction.addMapping(mapping); - - IMoleculeSet moleculeSet = ConnectivityChecker.partitionIntoMolecules(reactantCloned); - for(int z = 0; z < moleculeSet.getAtomContainerCount() ; z++){ - reaction.addProduct(moleculeSet.getMolecule(z)); - } - - setOfReactions.addReaction(reaction); - } } } Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationHReactionTest.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationHReactionTest.java 2008-02-12 23:14:15 UTC (rev 10079) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationHReactionTest.java 2008-02-12 23:44:06 UTC (rev 10080) @@ -30,6 +30,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.openscience.cdk.Atom; +import org.openscience.cdk.CDKConstants; import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.SingleElectron; import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; @@ -41,6 +42,8 @@ import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReactionSet; import org.openscience.cdk.isomorphism.UniversalIsomorphismTester; +import org.openscience.cdk.isomorphism.matchers.IQueryAtomContainer; +import org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator; import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.type.RadicalSiteInitiationHReaction; @@ -68,28 +71,12 @@ * * @return The test suite */ - @Test public void testAutomaticSearchCentreActiveExample1() throws Exception { + @Test public void testAutomaticCentreActive() throws Exception { IReactionProcess type = new RadicalSiteInitiationHReaction(); /*[C*]-C-C*/ -// IMolecule molecule = (new SmilesParser(org.openscience.cdk.DefaultChemObjectBuilder.getInstance())).parseSmiles("[C+]([H])([H])C([H])([H])[H]"); - IMolecule molecule = builder.newMolecule(); - molecule.addAtom(builder.newAtom("C")); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(0, 1, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(0, 2, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("C")); - molecule.addBond(0, 3, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(3, 4, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(3, 5, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(3, 6, IBond.Order.SINGLE); + IMolecule molecule = getMolecule(); - IAtom atom = molecule.getAtom(0); - molecule.addSingleElectron(new SingleElectron(atom)); IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); setOfReactants.addMolecule(molecule); @@ -107,43 +94,208 @@ IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); /*C=C*/ -// IMolecule molecule1 = (new SmilesParser(org.openscience.cdk.DefaultChemObjectBuilder.getInstance())).parseSmiles("C([H])([H])=C([H])[H]"); - IMolecule molecule1 = builder.newMolecule(); - molecule1.addAtom(builder.newAtom("C")); - molecule1.addAtom(builder.newAtom("H")); - molecule1.addBond(0, 1, IBond.Order.SINGLE); - molecule1.addAtom(builder.newAtom("H")); - molecule1.addBond(0, 2, IBond.Order.SINGLE); - molecule1.addAtom(builder.newAtom("C")); - molecule1.addBond(0, 3, IBond.Order.DOUBLE); - molecule1.addAtom(builder.newAtom("H")); - molecule1.addBond(3, 4, IBond.Order.SINGLE); - molecule1.addAtom(builder.newAtom("H")); - molecule1.addBond(3, 5, IBond.Order.SINGLE); + IMolecule molecule1 = getMolecule1(); + + IQueryAtomContainer queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product1); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule1,queryAtom)); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule1,product1)); + IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); + /*[H*]*/ + IMolecule molecule2 = builder.newMolecule(); + molecule2.addAtom(new Atom("H")); + molecule2.addSingleElectron(new SingleElectron(molecule2.getAtom(0))); + + queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product2); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule2,queryAtom)); + + } + + /** + * A unit test suite for JUnit. Reaction: [C*]([H])([H])C([H])([H])[H] => C=C +[H*] + * Automatic search of the center active. + * + * @return The test suite + */ + @Test public void testManuallyCentreActive() throws Exception { + IReactionProcess type = new RadicalSiteInitiationHReaction(); + + /*[C*]-C-C*/ + IMolecule molecule = getMolecule(); + IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); + setOfReactants.addMolecule(molecule); + + /* initiate */ + makeSureAtomTypesAreRecognized(molecule); + + /*manually put the reactive center*/ + molecule.getAtom(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(3).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(4).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(2).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(3).setFlag(CDKConstants.REACTIVE_CENTER,true); + + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + IReactionSet setOfReactions = type.initiate(setOfReactants, null); + + Assert.assertEquals(1, setOfReactions.getReactionCount()); + Assert.assertEquals(2, setOfReactions.getReaction(0).getProductCount()); + + IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); + + /*C=C*/ + IMolecule molecule1 = getMolecule1(); + + IQueryAtomContainer queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product1); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule1,queryAtom)); + IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); /*[H*]*/ IMolecule molecule2 = builder.newMolecule(); molecule2.addAtom(new Atom("H")); molecule2.addSingleElectron(new SingleElectron(molecule2.getAtom(0))); - - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule2,product2)); + queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product2); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule2,queryAtom)); + + } + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testCentreActive() throws Exception { + IReactionProcess type = new RadicalSiteInitiationHReaction(); + + Object[] object = type.getParameters(); + Assert.assertFalse(((Boolean) object[0]).booleanValue()); + + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + Assert.assertTrue(((Boolean) params[0]).booleanValue()); + + } + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testCDKConstants_REACTIVE_CENTER() throws Exception { + IReactionProcess type = new RadicalSiteInitiationHReaction(); + IMoleculeSet setOfReactants = builder.newMoleculeSet(); + + IMolecule molecule = getMolecule1(); + + /*manually put the reactive center*/ + molecule.getAtom(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(3).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(4).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(2).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(3).setFlag(CDKConstants.REACTIVE_CENTER,true); + + setOfReactants.addMolecule(molecule); + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + + /* initiate */ + IReactionSet setOfReactions = type.initiate(setOfReactants, null); + + IMolecule reactant = setOfReactions.getReaction(0).getReactants().getMolecule(0); + Assert.assertTrue(molecule.getAtom(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getAtom(3).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(3).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getAtom(4).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(4).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getBond(2).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getBond(2).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getBond(3).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getBond(3).getFlag(CDKConstants.REACTIVE_CENTER)); + } + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testMapping() throws Exception { + IReactionProcess type = new RadicalSiteInitiationHReaction(); + + IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); + /*[C*]=C-C*/ + IMolecule molecule = getMolecule1(); + setOfReactants.addMolecule(molecule); + + /*automatic looking for active center*/ + Object[] params = {Boolean.FALSE}; + type.setParameters(params); + + /* initiate */ + + IReactionSet setOfReactions = type.initiate(setOfReactants, null); + + IMolecule product = setOfReactions.getReaction(0).getProducts().getMolecule(0); + + Assert.assertEquals(3,setOfReactions.getReaction(0).getMappingCount()); + Assert.assertEquals(4,setOfReactions.getReaction(0).getMappingCount()); IAtom mappedProductA1 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(4)); - Assert.assertEquals(mappedProductA1, product2.getAtom(0)); + Assert.assertEquals(mappedProductA1, product.getAtom(0)); IBond mappedProductB1 = (IBond)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getBond(2)); - Assert.assertEquals(mappedProductB1, product1.getBond(2)); + Assert.assertEquals(mappedProductB1, product.getBond(2)); IAtom mappedProductA2 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(0)); - Assert.assertEquals(mappedProductA2, product1.getAtom(0)); + Assert.assertEquals(mappedProductA2, product.getAtom(0)); IAtom mappedProductA3 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(3)); - Assert.assertEquals(mappedProductA3, product1.getAtom(3)); - + Assert.assertEquals(mappedProductA3, product.getAtom(3)); + } /** + * Get the Molecule + * + * @return The IMolecule + */ + private IMolecule getMolecule() { + IMolecule molecule = builder.newMolecule(); + molecule.addAtom(builder.newAtom("C")); + molecule.addAtom(builder.newAtom("H")); + molecule.addBond(0, 1, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("H")); + molecule.addBond(0, 2, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("C")); + molecule.addBond(0, 3, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("H")); + molecule.addBond(3, 4, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("H")); + molecule.addBond(3, 5, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("H")); + molecule.addBond(3, 6, IBond.Order.SINGLE); + + IAtom atom = molecule.getAtom(0); + molecule.addSingleElectron(new SingleElectron(atom)); + return molecule; + } + /** + * Get the Molecule 1 + * @return The IMolecule + */ + private IMolecule getMolecule1() { + IMolecule molecule1 = builder.newMolecule(); + molecule1.addAtom(builder.newAtom("C")); + molecule1.addAtom(builder.newAtom("H")); + molecule1.addBond(0, 1, IBond.Order.SINGLE); + molecule1.addAtom(builder.newAtom("H")); + molecule1.addBond(0, 2, IBond.Order.SINGLE); + molecule1.addAtom(builder.newAtom("C")); + molecule1.addBond(0, 3, IBond.Order.DOUBLE); + molecule1.addAtom(builder.newAtom("H")); + molecule1.addBond(3, 4, IBond.Order.SINGLE); + molecule1.addAtom(builder.newAtom("H")); + molecule1.addBond(3, 5, IBond.Order.SINGLE); + return molecule1; + } + + /** * Test to recognize if a IMolecule matcher correctly the CDKAtomTypes. * * @param molecule The IMolecule to analyze Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationReactionTest.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationReactionTest.java 2008-02-12 23:14:15 UTC (rev 10079) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/RadicalSiteInitiationReactionTest.java 2008-02-12 23:44:06 UTC (rev 10080) @@ -29,6 +29,7 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import org.openscience.cdk.CDKConstants; import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.SingleElectron; import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; @@ -40,6 +41,8 @@ import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReactionSet; import org.openscience.cdk.isomorphism.UniversalIsomorphismTester; +import org.openscience.cdk.isomorphism.matchers.QueryAtomContainer; +import org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator; import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.type.RadicalSiteInitiationReaction; @@ -68,24 +71,10 @@ * * @return The test suite */ - @Test public void testAutomaticSearchCentreActiveExample1() throws Exception { + @Test public void testAutomaticCentreActive() throws Exception { IReactionProcess type = new RadicalSiteInitiationReaction(); /*[C*]-C-C*/ -// IMolecule molecule = (new SmilesParser(org.openscience.cdk.DefaultChemObjectBuilder.getInstance())).parseSmiles("[C+]-C-C"); - IMolecule molecule = builder.newMolecule(); - molecule.addAtom(builder.newAtom("C")); - molecule.getAtom(0).setFormalCharge(1); - molecule.addAtom(builder.newAtom("C")); - molecule.addBond(0, 1, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("C")); - molecule.addBond(1, 2, IBond.Order.SINGLE); - - addExplicitHydrogens(molecule); - IAtom atom = molecule.getAtom(0); - molecule.addSingleElectron(new SingleElectron(atom)); - atom.setFormalCharge(0); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); - makeSureAtomTypesAreRecognized(molecule); + IMolecule molecule = getMolecule(); IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); setOfReactants.addMolecule(molecule); @@ -103,19 +92,19 @@ IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); /*C=C*/ -// IMolecule molecule2 = (new SmilesParser(org.openscience.cdk.DefaultChemObjectBuilder.getInstance())).parseSmiles("C=C"); IMolecule molecule1 = builder.newMolecule(); molecule1.addAtom(builder.newAtom("C")); molecule1.addAtom(builder.newAtom("C")); molecule1.addBond(0, 1, IBond.Order.DOUBLE); addExplicitHydrogens(molecule1); - - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule1,product1)); + + + QueryAtomContainer queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product1); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule1,queryAtom)); IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); /*[C*]*/ -// molecule2 = (new SmilesParser(org.openscience.cdk.DefaultChemObjectBuilder.getInstance())).parseSmiles("[C+]"); IMolecule molecule2 = builder.newMolecule(); molecule2.addAtom(builder.newAtom("C")); molecule2.addAtom(builder.newAtom("H")); @@ -124,23 +113,132 @@ molecule2.addBond(0, 2, IBond.Order.SINGLE); molecule2.addAtom(builder.newAtom("H")); molecule2.addBond(0, 3, IBond.Order.SINGLE); - atom = molecule2.getAtom(0); + IAtom atom = molecule2.getAtom(0); molecule2.addSingleElectron(new SingleElectron(atom)); - - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule2,product2)); - Assert.assertEquals(4,setOfReactions.getReaction(0).getMappingCount()); - IAtom mappedProductA1 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(2)); - Assert.assertEquals(mappedProductA1, product2.getAtom(0)); + + queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(product2); + Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(molecule2,queryAtom)); + + } + + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testCentreActive() throws Exception { + IReactionProcess type = new RadicalSiteInitiationReaction(); + + Object[] object = type.getParameters(); + Assert.assertFalse(((Boolean) object[0]).booleanValue()); + + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + Assert.assertTrue(((Boolean) params[0]).booleanValue()); + + } + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testCDKConstants_REACTIVE_CENTER() throws Exception { + IReactionProcess type = new RadicalSiteInitiationReaction(); + IMoleculeSet setOfReactants = builder.newMoleculeSet(); + + IMolecule molecule = getMolecule(); + + /*manually put the reactive center*/ + molecule.getAtom(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(1).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(2).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(1).setFlag(CDKConstants.REACTIVE_CENTER,true); + + setOfReactants.addMolecule(molecule); + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + + /* initiate */ + IReactionSet setOfReactions = type.initiate(setOfReactants, null); + + IMolecule reactant = setOfReactions.getReaction(0).getReactants().getMolecule(0); + Assert.assertTrue(molecule.getAtom(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getAtom(1).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(1).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getAtom(2).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getAtom(2).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getBond(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getBond(0).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(molecule.getBond(1).getFlag(CDKConstants.REACTIVE_CENTER)); + Assert.assertTrue(reactant.getBond(1).getFlag(CDKConstants.REACTIVE_CENTER)); + } + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + @Test public void testMapping() throws Exception { + IReactionProcess type = new RadicalSiteInitiationReaction(); + + IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); + /*[C*]=C-C*/ + IMolecule molecule = getMolecule(); + + molecule.getAtom(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(1).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getAtom(2).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(0).setFlag(CDKConstants.REACTIVE_CENTER,true); + molecule.getBond(1).setFlag(CDKConstants.REACTIVE_CENTER,true); + + setOfReactants.addMolecule(molecule); + Object[] params = {Boolean.TRUE}; + type.setParameters(params); + + /* initiate */ + + IReactionSet setOfReactions = type.initiate(setOfReactants, null); + + IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); + IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); + + Assert.assertEquals(4,setOfReactions.getReaction(0).getMappingCount()); + IAtom mappedProductA1 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(1)); + Assert.assertEquals(mappedProductA1, product1.getAtom(1)); IBond mappedProductB1 = (IBond)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getBond(0)); Assert.assertEquals(mappedProductB1, product1.getBond(0)); - IAtom mappedProductA2 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(0)); - Assert.assertEquals(mappedProductA2, product1.getAtom(0)); - IAtom mappedProductA3 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(1)); - Assert.assertEquals(mappedProductA3, product1.getAtom(1)); - + IAtom mappedProductA2 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(2)); + Assert.assertEquals(mappedProductA2, product2.getAtom(0)); + IAtom mappedProductA3 = (IAtom)ReactionManipulator.getMappedChemObject(setOfReactions.getReaction(0), molecule.getAtom(0)); + Assert.assertEquals(mappedProductA3, product1.getAtom(0)); + } /** + * Get the IMolecule + * + * @return The IMolecule + * @throws Exception + */ + private IMolecule getMolecule() throws Exception { + IMolecule molecule = builder.newMolecule(); + molecule.addAtom(builder.newAtom("C")); + molecule.getAtom(0).setFormalCharge(1); + molecule.addAtom(builder.newAtom("C")); + molecule.addBond(0, 1, IBond.Order.SINGLE); + molecule.addAtom(builder.newAtom("C")); + molecule.addBond(1, 2, IBond.Order.SINGLE); + + addExplicitHydrogens(molecule); + IAtom atom = molecule.getAtom(0); + molecule.addSingleElectron(new SingleElectron(atom)); + atom.setFormalCharge(0); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); + makeSureAtomTypesAreRecognized(molecule); + return molecule; + } + /** * Test to recognize if a IMolecule matcher correctly the CDKAtomTypes. * * @param molecule The IMolecule to analyze This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |