From: <mig...@us...> - 2008-02-13 23:18:15
|
Revision: 10093 http://cdk.svn.sourceforge.net/cdk/?rev=10093&view=rev Author: miguelrojasch Date: 2008-02-13 15:18:13 -0800 (Wed, 13 Feb 2008) Log Message: ----------- changed name of the class BrekingBond* to HeterolyticCleavage* Modified Paths: -------------- branches/miguelrojasch/reaction/src/org/openscience/cdk/charges/GasteigerPEPEPartialCharges.java branches/miguelrojasch/reaction/src/org/openscience/cdk/qsar/descriptors/bond/ResonancePositiveChargeDescriptor.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/CarbonylEliminationReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/DisplacementChargeFromAcceptorReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/PiBondingMovementReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/TautomerizationReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/atomtype/ReactionStructuresTest.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/modulesuites/MreactionTests.java Added Paths: ----------- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/HeterolyticCleavageMechanism.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/HeterolyticCleavageReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/HeterolyticCleavageReactionTest.java Removed Paths: ------------- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/BreakingBondMechanism.java branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/BreakingBondReaction.java branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/BreakingBondReactionTest.java Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/charges/GasteigerPEPEPartialCharges.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/charges/GasteigerPEPEPartialCharges.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/charges/GasteigerPEPEPartialCharges.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -38,7 +38,7 @@ import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.interfaces.IReactionSet; import org.openscience.cdk.reaction.IReactionProcess; -import org.openscience.cdk.reaction.type.BreakingBondReaction; +import org.openscience.cdk.reaction.type.HeterolyticCleavageReaction; import org.openscience.cdk.reaction.type.HyperconjugationReaction; import org.openscience.cdk.tools.LoggingTool; import org.openscience.cdk.tools.StructureResonanceGenerator; @@ -297,7 +297,7 @@ */ private IAtomContainerSet getHyperconjugationInteractions(IAtomContainer ac, IAtomContainerSet iSet) throws IOException, ClassNotFoundException, CDKException { IAtomContainerSet set = ac.getBuilder().newAtomContainerSet(); - IReactionProcess type = new BreakingBondReaction(); + IReactionProcess type = new HeterolyticCleavageReaction(); cleanFlagReactiveCenter(ac); boolean found = false; /* control obtained containers */ IMoleculeSet setOfReactants = ac.getBuilder().newMoleculeSet(); Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/qsar/descriptors/bond/ResonancePositiveChargeDescriptor.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/qsar/descriptors/bond/ResonancePositiveChargeDescriptor.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/qsar/descriptors/bond/ResonancePositiveChargeDescriptor.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -50,7 +50,7 @@ import org.openscience.cdk.qsar.result.DoubleArrayResult; import org.openscience.cdk.qsar.result.DoubleResult; import org.openscience.cdk.qsar.result.IntegerResult; -import org.openscience.cdk.reaction.type.BreakingBondReaction; +import org.openscience.cdk.reaction.type.HeterolyticCleavageReaction; import org.openscience.cdk.ringsearch.SSSRFinder; import org.openscience.cdk.tools.StructureResonanceGenerator; import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; @@ -181,7 +181,7 @@ return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(),dar); } - BreakingBondReaction type = new BreakingBondReaction(); + HeterolyticCleavageReaction type = new HeterolyticCleavageReaction(); Object[] paramsR = {Boolean.TRUE}; type.setParameters(paramsR); Deleted: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/BreakingBondMechanism.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/BreakingBondMechanism.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/BreakingBondMechanism.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -1,147 +0,0 @@ -/* $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 org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.LonePair; -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.nonotify.NoNotificationChemObjectBuilder; -import org.openscience.cdk.reaction.IReactionMechanism; -import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; -import org.openscience.cdk.tools.manipulator.BondManipulator; - -/** - * This mechanism displaces the chemical bond to an Atom. Generating one with - * excess charge and the other with deficiency. - * It returns the reaction mechanism which has been cloned the IMolecule. - * - * @author miguelrojasch - * @cdk.created 2008-02-10 - * @cdk.module reaction - * - */ -public class BreakingBondMechanism implements IReactionMechanism{ - - private CDKAtomTypeMatcher atMatcher; - - /** - * Constructor of the BreakingBondMechanism object. - * - */ - public BreakingBondMechanism(){ - 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 moleculeSet The IMolecule to apply the mechanism - * @param atomList The list of atoms taking part in the mechanism. Only allowed two atoms. - * The first atom receives the positive charge charge and the second - * negative charge - * @param bondList The list of bonds taking part in the mechanism. Only allowed one bond - * @return The Reaction mechanism - * - */ - public IReaction initiate(IMoleculeSet moleculeSet, ArrayList<IAtom> atomList,ArrayList<IBond> bondList) throws CDKException { - if (moleculeSet.getMoleculeCount() != 1) { - throw new CDKException("TautomerizationMechanism only expects one IMolecule"); - } - if (atomList.size() != 2) { - throw new CDKException("BreakingBondMechanism expects two atoms in the ArrayList"); - } - if (bondList.size() != 1) { - throw new CDKException("BreakingBondMechanism only expect one bond in the ArrayList"); - } - IMolecule molecule = moleculeSet.getMolecule(0); - IMolecule reactantCloned; - try { - reactantCloned = (IMolecule) molecule.clone(); - } catch (CloneNotSupportedException e) { - throw new CDKException("Could not clone IMolecule!", e); - } - IAtom atom1 = atomList.get(0); - int posAtom1 = molecule.getAtomNumber(atom1); - IAtom atom2 = atomList.get(1); - int posAtom2 = molecule.getAtomNumber(atom2); - IBond bond1 = bondList.get(0); - int posBond1 = molecule.getBondNumber(bond1); - - if(bond1.getOrder() == IBond.Order.SINGLE) - reactantCloned.removeBond(reactantCloned.getBond(posBond1)); - else - BondManipulator.decreaseBondOrder(reactantCloned.getBond(posBond1)); - - int charge = reactantCloned.getAtom(posAtom1).getFormalCharge(); - reactantCloned.getAtom(posAtom1).setFormalCharge(charge+1); - // check if resulting atom type is reasonable - reactantCloned.getAtom(posAtom1).setHybridization(null); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); - IAtomType type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom1)); - if (type == null) return null; - - charge = reactantCloned.getAtom(posAtom2).getFormalCharge(); - reactantCloned.getAtom(posAtom2).setFormalCharge(charge-1); - reactantCloned.addLonePair(new LonePair(reactantCloned.getAtom(posAtom2))); - // check if resulting atom type is reasonable: an acceptor atom cannot be charged positive*/ - reactantCloned.getAtom(posAtom2).setHybridization(null); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); - type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom2)); - 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); - if(bond1.getOrder() != IBond.Order.SINGLE) { - mapping = DefaultChemObjectBuilder.getInstance().newMapping(bond1, reactantCloned.getBond(posBond1)); - reaction.addMapping(mapping); - reaction.addProduct(reactantCloned); - } else{ - IMoleculeSet moleculeSetP = ConnectivityChecker.partitionIntoMolecules(reactantCloned); - for(int z = 0; z < moleculeSetP.getAtomContainerCount() ; z++){ - reaction.addProduct(moleculeSetP.getMolecule(z)); - } - } - - return reaction; - } - -} Copied: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/HeterolyticCleavageMechanism.java (from rev 10088, branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/BreakingBondMechanism.java) =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/HeterolyticCleavageMechanism.java (rev 0) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/mechanism/HeterolyticCleavageMechanism.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -0,0 +1,147 @@ +/* $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 org.openscience.cdk.DefaultChemObjectBuilder; +import org.openscience.cdk.LonePair; +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.nonotify.NoNotificationChemObjectBuilder; +import org.openscience.cdk.reaction.IReactionMechanism; +import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; +import org.openscience.cdk.tools.manipulator.BondManipulator; + +/** + * This mechanism displaces the chemical bond to an Atom. Generating one with + * excess charge and the other with deficiency. + * It returns the reaction mechanism which has been cloned the IMolecule. + * + * @author miguelrojasch + * @cdk.created 2008-02-10 + * @cdk.module reaction + * + */ +public class HeterolyticCleavageMechanism implements IReactionMechanism{ + + private CDKAtomTypeMatcher atMatcher; + + /** + * Constructor of the HeterolyticCleavageMechanism object. + * + */ + public HeterolyticCleavageMechanism(){ + 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 moleculeSet The IMolecule to apply the mechanism + * @param atomList The list of atoms taking part in the mechanism. Only allowed two atoms. + * The first atom receives the positive charge charge and the second + * negative charge + * @param bondList The list of bonds taking part in the mechanism. Only allowed one bond + * @return The Reaction mechanism + * + */ + public IReaction initiate(IMoleculeSet moleculeSet, ArrayList<IAtom> atomList,ArrayList<IBond> bondList) throws CDKException { + if (moleculeSet.getMoleculeCount() != 1) { + throw new CDKException("TautomerizationMechanism only expects one IMolecule"); + } + if (atomList.size() != 2) { + throw new CDKException("HeterolyticCleavageMechanism expects two atoms in the ArrayList"); + } + if (bondList.size() != 1) { + throw new CDKException("HeterolyticCleavageMechanism only expect one bond in the ArrayList"); + } + IMolecule molecule = moleculeSet.getMolecule(0); + IMolecule reactantCloned; + try { + reactantCloned = (IMolecule) molecule.clone(); + } catch (CloneNotSupportedException e) { + throw new CDKException("Could not clone IMolecule!", e); + } + IAtom atom1 = atomList.get(0); + int posAtom1 = molecule.getAtomNumber(atom1); + IAtom atom2 = atomList.get(1); + int posAtom2 = molecule.getAtomNumber(atom2); + IBond bond1 = bondList.get(0); + int posBond1 = molecule.getBondNumber(bond1); + + if(bond1.getOrder() == IBond.Order.SINGLE) + reactantCloned.removeBond(reactantCloned.getBond(posBond1)); + else + BondManipulator.decreaseBondOrder(reactantCloned.getBond(posBond1)); + + int charge = reactantCloned.getAtom(posAtom1).getFormalCharge(); + reactantCloned.getAtom(posAtom1).setFormalCharge(charge+1); + // check if resulting atom type is reasonable + reactantCloned.getAtom(posAtom1).setHybridization(null); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); + IAtomType type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom1)); + if (type == null) return null; + + charge = reactantCloned.getAtom(posAtom2).getFormalCharge(); + reactantCloned.getAtom(posAtom2).setFormalCharge(charge-1); + reactantCloned.addLonePair(new LonePair(reactantCloned.getAtom(posAtom2))); + // check if resulting atom type is reasonable: an acceptor atom cannot be charged positive*/ + reactantCloned.getAtom(posAtom2).setHybridization(null); + AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(reactantCloned); + type = atMatcher.findMatchingAtomType(reactantCloned, reactantCloned.getAtom(posAtom2)); + 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); + if(bond1.getOrder() != IBond.Order.SINGLE) { + mapping = DefaultChemObjectBuilder.getInstance().newMapping(bond1, reactantCloned.getBond(posBond1)); + reaction.addMapping(mapping); + reaction.addProduct(reactantCloned); + } else{ + IMoleculeSet moleculeSetP = ConnectivityChecker.partitionIntoMolecules(reactantCloned); + for(int z = 0; z < moleculeSetP.getAtomContainerCount() ; z++){ + reaction.addProduct(moleculeSetP.getMolecule(z)); + } + } + + return reaction; + } + +} Deleted: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/BreakingBondReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/BreakingBondReaction.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/BreakingBondReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -1,259 +0,0 @@ -/* - * $RCSfile$ - * $Author: egonw $ - * $Date: 2006-03-29 10:27:08 +0200 (Wed, 29 Mar 2006) $ - * $Revision: 5855 $ - * - * Copyright (C) 2006-2007 Miguel Rojas <mig...@un...> - * - * 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.type; - - -import java.util.ArrayList; -import java.util.Iterator; - -import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IBond; -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.reaction.IReactionMechanism; -import org.openscience.cdk.reaction.IReactionProcess; -import org.openscience.cdk.reaction.ReactionSpecification; -import org.openscience.cdk.reaction.mechanism.BreakingBondMechanism; -import org.openscience.cdk.tools.LoggingTool; - -/** - * <p>IReactionProcess which a bond is broken displacing the electron to one of the - * atoms. The mechanism will produce one atom with excess of charge and the other one deficiency. - * Depending of the bond order, the bond will be removed or simply the order decreased. - * As there are two directions for displacing a bond in a polar manner, - * each case is investigated twice:</p> - * - * <pre>A-B => [A+] + |[B-]</pre> - * <pre>A-B => |[A-] + [B+]</pre> - * - * <p>It will not be created structures no possible, e.g; C=O => [C-][O+].</p> - * <p>Below you have an example how to initiate the mechanism.</p> - * <p>It is processed by the BreakingBondMechanism class</p> - * <pre> - * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); - * setOfReactants.addMolecule(new Molecule()); - * IReactionProcess type = new BreakingBondReaction(); - * Object[] params = {Boolean.FALSE}; - type.setParameters(params); - * IReactionSet setOfReactions = type.initiate(setOfReactants, null); - * </pre> - * - * <p>We have the possibility to localize the reactive center. Good method if you - * want to specify the reaction in a fixed point.</p> - * <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 specified then the reaction process will - * try to find automatically the possible reaction centers.</p> - * - * - * @author Miguel Rojas - * - * @cdk.created 2006-06-09 - * @cdk.module reaction - * @cdk.svnrev $Revision: 9162 $ - * @cdk.set reaction-types - * - * @see BreakingBondMechanism - **/ -public class BreakingBondReaction implements IReactionProcess{ - private LoggingTool logger; - private boolean hasActiveCenter; - private IReactionMechanism mechanism; - - /** - * Constructor of the BreakingBondReaction object. - * - */ - public BreakingBondReaction(){ - logger = new LoggingTool(this); - mechanism = new BreakingBondMechanism(); - } - - /** - * Gets the specification attribute of the BreakingBondReaction object. - * - *@return The specification value - */ - public ReactionSpecification getSpecification() { - return new ReactionSpecification( - "http://almost.cubic.uni-koeln.de/jrg/Members/mrc/reactionDict/reactionDict#BreakingBondReaction", - this.getClass().getName(), - "$Id: BreakingBondReaction.java,v 1.6 2006/04/01 08:26:47 mrc Exp $", - "The Chemistry Development Kit"); - } - - /** - * Sets the parameters attribute of the BreakingBondReaction object. - * - * @param params The parameter is if the molecule has already fixed the center active or not. It - * should be set before to initiate the reaction with a setFlag: CDKConstants.REACTIVE_CENTER - *@exception CDKException Description of the Exception - */ - public void setParameters(Object[] params) throws CDKException { - if (params.length > 1) { - throw new CDKException("BreakingBondReaction only expects one parameter"); - } - if (!(params[0] instanceof Boolean)) { - throw new CDKException("The parameter 1 must be of type boolean"); - } - hasActiveCenter = ((Boolean) params[0]).booleanValue(); - } - - - /** - * Gets the parameters attribute of the BreakingBondReaction object. - * - *@return The parameters value - */ - public Object[] getParameters() { - Object[] params = new Object[1]; - params[0] = new Boolean (hasActiveCenter); - return params; - } - - /** - * Initiate process. - * It is needed to call the addExplicitHydrogensToSatisfyValency - * from the class tools.HydrogenAdder. - * - *@param reactants reactants of the reaction - *@param agents agents of the reaction (Must be in this case null) - * - *@exception CDKException Description of the Exception - */ - public IReactionSet initiate(IMoleculeSet reactants, IMoleculeSet agents) throws CDKException{ - - logger.debug("initiate reaction: BreakingBondReaction"); - - if (reactants.getMoleculeCount() != 1) { - throw new CDKException("BreakingBondReaction only expects one reactant"); - } - if (agents != null) { - throw new CDKException("BreakingBondReaction don't expects agents"); - } - - IReactionSet setOfReactions = DefaultChemObjectBuilder.getInstance().newReactionSet(); - IMolecule reactant = reactants.getMolecule(0); - - /* if the parameter hasActiveCenter is not fixed yet, set the active centers*/ - if(!hasActiveCenter){ - setActiveCenters(reactant); - } - - Iterator<IBond> bondis = reactant.bonds(); - while (bondis.hasNext()) { - IBond bondi = bondis.next(); - - if(bondi.getFlag(CDKConstants.REACTIVE_CENTER)) { - int chargeAtom0 = bondi.getAtom(0).getFormalCharge() == null ? 0 : bondi.getAtom(0).getFormalCharge(); - int chargeAtom1 = bondi.getAtom(1).getFormalCharge() == null ? 0 : bondi.getAtom(1).getFormalCharge(); - if(chargeAtom0 >= 0 && chargeAtom1 >= 0){ - - /**/ - for (int j = 0; j < 2; j++){ - - ArrayList<IAtom> atomList = new ArrayList<IAtom>(); - if (j == 0){ - atomList.add(bondi.getAtom(0)); - atomList.add(bondi.getAtom(1)); - }else{ - atomList.add(bondi.getAtom(1)); - atomList.add(bondi.getAtom(0)); - } - ArrayList<IBond> bondList = new ArrayList<IBond>(); - bondList.add(bondi); - - IMoleculeSet moleculeSet = reactant.getBuilder().newMoleculeSet(); - moleculeSet.addMolecule(reactant); - IReaction reaction = mechanism.initiate(moleculeSet, atomList, bondList); - if(reaction == null) - continue; - else - setOfReactions.addReaction(reaction); - - } - - } - - } - } - - return setOfReactions; - } - /** - * set the active center for this molecule. - * The active center will be those which correspond with A-B. If - * the bond is simple, it will be broken forming two fragments - * <pre> - * A: Atom - * #/=/-: bond - * B: Atom - * </pre> - * - * @param reactant The molecule to set the activity - * @throws CDKException - */ - private void setActiveCenters(IMolecule reactant) throws CDKException { - Iterator<IBond> bonds = reactant.bonds(); - while (bonds.hasNext()) { - IBond bond = (IBond) bonds.next(); - int chargeAtom0 = bond.getAtom(0).getFormalCharge() == null ? 0 : bond.getAtom(0).getFormalCharge(); - int chargeAtom1 = bond.getAtom(1).getFormalCharge() == null ? 0 : bond.getAtom(1).getFormalCharge(); - if(chargeAtom0 >= 0 && chargeAtom1 >= 0) { - IAtom atom1 = bond.getAtom(0); - IAtom atom2 = bond.getAtom(1); - atom1.setFlag(CDKConstants.REACTIVE_CENTER, true); - atom2.setFlag(CDKConstants.REACTIVE_CENTER, true); - bond.setFlag(CDKConstants.REACTIVE_CENTER, true); - } - } - } - /** - * Gets the parameterNames attribute of the BreakingBondReaction object. - * - *@return The parameterNames value - */ - public String[] getParameterNames() { - String[] params = new String[1]; - params[0] = "hasActiveCenter"; - return params; - } - - - /** - * Gets the parameterType attribute of the BreakingBondReaction object. - * - *@param name Description of the Parameter - *@return The parameterType value - */ - public Object getParameterType(String name) { - return new Boolean(false); - } -} Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/CarbonylEliminationReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/CarbonylEliminationReaction.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/CarbonylEliminationReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -38,7 +38,7 @@ import org.openscience.cdk.reaction.IReactionMechanism; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.ReactionSpecification; -import org.openscience.cdk.reaction.mechanism.BreakingBondMechanism; +import org.openscience.cdk.reaction.mechanism.HeterolyticCleavageMechanism; import org.openscience.cdk.tools.LoggingTool; /** @@ -46,7 +46,7 @@ * This reaction could be represented as RC-C#[O+] => R[C] + |C#[O+]</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 BreakingBondMechanism class</p> + * <p>It is processed by the HeterolyticCleavageMechanism class</p> * * <pre> * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); @@ -72,7 +72,7 @@ * @cdk.svnrev $Revision: 9162 $ * @cdk.set reaction-types * - * @see BreakingBondMechanism + * @see HeterolyticCleavageMechanism **/ public class CarbonylEliminationReaction implements IReactionProcess{ private LoggingTool logger; @@ -85,7 +85,7 @@ */ public CarbonylEliminationReaction(){ logger = new LoggingTool(this); - mechanism = new BreakingBondMechanism(); + mechanism = new HeterolyticCleavageMechanism(); } /** * Gets the specification attribute of the CarbonylEliminationReaction object. Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/DisplacementChargeFromAcceptorReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/DisplacementChargeFromAcceptorReaction.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/DisplacementChargeFromAcceptorReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -40,7 +40,7 @@ import org.openscience.cdk.reaction.IReactionMechanism; import org.openscience.cdk.reaction.IReactionProcess; import org.openscience.cdk.reaction.ReactionSpecification; -import org.openscience.cdk.reaction.mechanism.BreakingBondMechanism; +import org.openscience.cdk.reaction.mechanism.HeterolyticCleavageMechanism; import org.openscience.cdk.tools.LoggingTool; import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; @@ -48,7 +48,7 @@ * <p>IReactionProcess which participate in movement resonance. * This reaction could be represented as two forms</p> * <pre>X=A => |[X-]-[A+]. X represents an acceptor atomType. - * <p>It is processed by the BreakingBondMechanism class</p> + * <p>It is processed by the HeterolyticCleavageMechanism class</p> * <pre> * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); * setOfReactants.addMolecule(new Molecule()); @@ -73,7 +73,7 @@ * @cdk.svnrev $Revision: 9162 $ * @cdk.set reaction-types * - * @see BreakingBondMechanism + * @see HeterolyticCleavageMechanism **/ public class DisplacementChargeFromAcceptorReaction implements IReactionProcess{ private LoggingTool logger; @@ -86,7 +86,7 @@ */ public DisplacementChargeFromAcceptorReaction(){ logger = new LoggingTool(this); - mechanism = new BreakingBondMechanism(); + mechanism = new HeterolyticCleavageMechanism(); } /** * Gets the specification attribute of the DisplacementChargeFromAcceptorReaction object Copied: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/HeterolyticCleavageReaction.java (from rev 10088, branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/BreakingBondReaction.java) =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/HeterolyticCleavageReaction.java (rev 0) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/HeterolyticCleavageReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -0,0 +1,259 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2006-03-29 10:27:08 +0200 (Wed, 29 Mar 2006) $ + * $Revision: 5855 $ + * + * Copyright (C) 2006-2007 Miguel Rojas <mig...@un...> + * + * 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.type; + + +import java.util.ArrayList; +import java.util.Iterator; + +import org.openscience.cdk.CDKConstants; +import org.openscience.cdk.DefaultChemObjectBuilder; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IBond; +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.reaction.IReactionMechanism; +import org.openscience.cdk.reaction.IReactionProcess; +import org.openscience.cdk.reaction.ReactionSpecification; +import org.openscience.cdk.reaction.mechanism.HeterolyticCleavageMechanism; +import org.openscience.cdk.tools.LoggingTool; + +/** + * <p>IReactionProcess which a bond is broken displacing the electron to one of the + * atoms. The mechanism will produce one atom with excess of charge and the other one deficiency. + * Depending of the bond order, the bond will be removed or simply the order decreased. + * As there are two directions for displacing a bond in a polar manner, + * each case is investigated twice:</p> + * + * <pre>A-B => [A+] + |[B-]</pre> + * <pre>A-B => |[A-] + [B+]</pre> + * + * <p>It will not be created structures no possible, e.g; C=O => [C-][O+].</p> + * <p>Below you have an example how to initiate the mechanism.</p> + * <p>It is processed by the HeterolyticCleavageMechanism class</p> + * <pre> + * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); + * setOfReactants.addMolecule(new Molecule()); + * IReactionProcess type = new HeterolyticCleavageReaction(); + * Object[] params = {Boolean.FALSE}; + type.setParameters(params); + * IReactionSet setOfReactions = type.initiate(setOfReactants, null); + * </pre> + * + * <p>We have the possibility to localize the reactive center. Good method if you + * want to specify the reaction in a fixed point.</p> + * <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 specified then the reaction process will + * try to find automatically the possible reaction centers.</p> + * + * + * @author Miguel Rojas + * + * @cdk.created 2006-06-09 + * @cdk.module reaction + * @cdk.svnrev $Revision: 9162 $ + * @cdk.set reaction-types + * + * @see HeterolyticCleavageMechanism + **/ +public class HeterolyticCleavageReaction implements IReactionProcess{ + private LoggingTool logger; + private boolean hasActiveCenter; + private IReactionMechanism mechanism; + + /** + * Constructor of the HeterolyticCleavageReaction object. + * + */ + public HeterolyticCleavageReaction(){ + logger = new LoggingTool(this); + mechanism = new HeterolyticCleavageMechanism(); + } + + /** + * Gets the specification attribute of the HeterolyticCleavageReaction object. + * + *@return The specification value + */ + public ReactionSpecification getSpecification() { + return new ReactionSpecification( + "http://almost.cubic.uni-koeln.de/jrg/Members/mrc/reactionDict/reactionDict#BreakingBondReaction", + this.getClass().getName(), + "$Id: HeterolyticCleavageReaction.java,v 1.6 2006/04/01 08:26:47 mrc Exp $", + "The Chemistry Development Kit"); + } + + /** + * Sets the parameters attribute of the HeterolyticCleavageReaction object. + * + * @param params The parameter is if the molecule has already fixed the center active or not. It + * should be set before to initiate the reaction with a setFlag: CDKConstants.REACTIVE_CENTER + *@exception CDKException Description of the Exception + */ + public void setParameters(Object[] params) throws CDKException { + if (params.length > 1) { + throw new CDKException("HeterolyticCleavageReaction only expects one parameter"); + } + if (!(params[0] instanceof Boolean)) { + throw new CDKException("The parameter 1 must be of type boolean"); + } + hasActiveCenter = ((Boolean) params[0]).booleanValue(); + } + + + /** + * Gets the parameters attribute of the HeterolyticCleavageReaction object. + * + *@return The parameters value + */ + public Object[] getParameters() { + Object[] params = new Object[1]; + params[0] = new Boolean (hasActiveCenter); + return params; + } + + /** + * Initiate process. + * It is needed to call the addExplicitHydrogensToSatisfyValency + * from the class tools.HydrogenAdder. + * + *@param reactants reactants of the reaction + *@param agents agents of the reaction (Must be in this case null) + * + *@exception CDKException Description of the Exception + */ + public IReactionSet initiate(IMoleculeSet reactants, IMoleculeSet agents) throws CDKException{ + + logger.debug("initiate reaction: HeterolyticCleavageReaction"); + + if (reactants.getMoleculeCount() != 1) { + throw new CDKException("HeterolyticCleavageReaction only expects one reactant"); + } + if (agents != null) { + throw new CDKException("HeterolyticCleavageReaction don't expects agents"); + } + + IReactionSet setOfReactions = DefaultChemObjectBuilder.getInstance().newReactionSet(); + IMolecule reactant = reactants.getMolecule(0); + + /* if the parameter hasActiveCenter is not fixed yet, set the active centers*/ + if(!hasActiveCenter){ + setActiveCenters(reactant); + } + + Iterator<IBond> bondis = reactant.bonds(); + while (bondis.hasNext()) { + IBond bondi = bondis.next(); + + if(bondi.getFlag(CDKConstants.REACTIVE_CENTER)) { + int chargeAtom0 = bondi.getAtom(0).getFormalCharge() == null ? 0 : bondi.getAtom(0).getFormalCharge(); + int chargeAtom1 = bondi.getAtom(1).getFormalCharge() == null ? 0 : bondi.getAtom(1).getFormalCharge(); + if(chargeAtom0 >= 0 && chargeAtom1 >= 0){ + + /**/ + for (int j = 0; j < 2; j++){ + + ArrayList<IAtom> atomList = new ArrayList<IAtom>(); + if (j == 0){ + atomList.add(bondi.getAtom(0)); + atomList.add(bondi.getAtom(1)); + }else{ + atomList.add(bondi.getAtom(1)); + atomList.add(bondi.getAtom(0)); + } + ArrayList<IBond> bondList = new ArrayList<IBond>(); + bondList.add(bondi); + + IMoleculeSet moleculeSet = reactant.getBuilder().newMoleculeSet(); + moleculeSet.addMolecule(reactant); + IReaction reaction = mechanism.initiate(moleculeSet, atomList, bondList); + if(reaction == null) + continue; + else + setOfReactions.addReaction(reaction); + + } + + } + + } + } + + return setOfReactions; + } + /** + * set the active center for this molecule. + * The active center will be those which correspond with A-B. If + * the bond is simple, it will be broken forming two fragments + * <pre> + * A: Atom + * #/=/-: bond + * B: Atom + * </pre> + * + * @param reactant The molecule to set the activity + * @throws CDKException + */ + private void setActiveCenters(IMolecule reactant) throws CDKException { + Iterator<IBond> bonds = reactant.bonds(); + while (bonds.hasNext()) { + IBond bond = (IBond) bonds.next(); + int chargeAtom0 = bond.getAtom(0).getFormalCharge() == null ? 0 : bond.getAtom(0).getFormalCharge(); + int chargeAtom1 = bond.getAtom(1).getFormalCharge() == null ? 0 : bond.getAtom(1).getFormalCharge(); + if(chargeAtom0 >= 0 && chargeAtom1 >= 0) { + IAtom atom1 = bond.getAtom(0); + IAtom atom2 = bond.getAtom(1); + atom1.setFlag(CDKConstants.REACTIVE_CENTER, true); + atom2.setFlag(CDKConstants.REACTIVE_CENTER, true); + bond.setFlag(CDKConstants.REACTIVE_CENTER, true); + } + } + } + /** + * Gets the parameterNames attribute of the HeterolyticCleavageReaction object. + * + *@return The parameterNames value + */ + public String[] getParameterNames() { + String[] params = new String[1]; + params[0] = "hasActiveCenter"; + return params; + } + + + /** + * Gets the parameterType attribute of the HeterolyticCleavageReaction object. + * + *@param name Description of the Parameter + *@return The parameterType value + */ + public Object getParameterType(String name) { + return new Boolean(false); + } +} Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/PiBondingMovementReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/PiBondingMovementReaction.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/PiBondingMovementReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -150,7 +150,7 @@ */ public IReactionSet initiate(IMoleculeSet reactants, IMoleculeSet agents) throws CDKException{ - logger.debug("initiate reaction: BreakingBondReaction"); + logger.debug("initiate reaction: HeterolyticCleavageReaction"); if (reactants.getMoleculeCount() != 1) { throw new CDKException("PiBondingMovementReaction only expects one reactant"); Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/TautomerizationReaction.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/TautomerizationReaction.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/reaction/type/TautomerizationReaction.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -51,7 +51,7 @@ * <pre>X=Y-Z-H => X(H)-Y=Z</pre> * * <p>Below you have an example how to initiate the mechanism.</p> - * <p>It is processed by the BreakingBondMechanism class</p> + * <p>It is processed by the HeterolyticCleavageMechanism class</p> * <pre> * IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); * setOfReactants.addMolecule(new Molecule()); Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/test/atomtype/ReactionStructuresTest.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/test/atomtype/ReactionStructuresTest.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/test/atomtype/ReactionStructuresTest.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -31,7 +31,7 @@ import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.test.NewCDKTestCase; -import org.openscience.cdk.test.reaction.type.BreakingBondReactionTest; +import org.openscience.cdk.test.reaction.type.HeterolyticCleavageReactionTest; import org.openscience.cdk.test.reaction.type.CleavageBondReactionTest; import org.openscience.cdk.test.reaction.type.RearrangementRadical3ReactionTest; @@ -107,7 +107,7 @@ * A unit test suite for JUnit. Compound and his fragments to be tested * @throws Exception * - * @see BreakingBondReactionTest#testCspSingleB() + * @see HeterolyticCleavageReactionTest#testCspSingleB() */ @Test public void testM4() throws Exception { //Smiles("C#[C+]") Modified: branches/miguelrojasch/reaction/src/org/openscience/cdk/test/modulesuites/MreactionTests.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/test/modulesuites/MreactionTests.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/test/modulesuites/MreactionTests.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -33,7 +33,7 @@ import org.openscience.cdk.test.reaction.type.AdductionProtonLPReactionTest; import org.openscience.cdk.test.reaction.type.AdductionProtonPBReactionTest; import org.openscience.cdk.test.reaction.type.AdductionSodiumLPReactionTest; -import org.openscience.cdk.test.reaction.type.BreakingBondReactionTest; +import org.openscience.cdk.test.reaction.type.HeterolyticCleavageReactionTest; import org.openscience.cdk.test.reaction.type.CarbonylEliminationReactionTest; import org.openscience.cdk.test.reaction.type.CleavageBondMultiReactionTest; import org.openscience.cdk.test.reaction.type.CleavageBondReactionTest; @@ -84,7 +84,7 @@ suite.addTest(new JUnit4TestAdapter(AdductionProtonLPReactionTest.class)); suite.addTest(new JUnit4TestAdapter(AdductionProtonPBReactionTest.class)); suite.addTest(new JUnit4TestAdapter(AdductionSodiumLPReactionTest.class)); - suite.addTest(new JUnit4TestAdapter(BreakingBondReactionTest.class)); + suite.addTest(new JUnit4TestAdapter(HeterolyticCleavageReactionTest.class)); suite.addTest(new JUnit4TestAdapter(CarbonylEliminationReactionTest.class)); suite.addTest(new JUnit4TestAdapter(CleavageBondReactionTest.class)); suite.addTest(new JUnit4TestAdapter(CleavageBondMultiReactionTest.class)); Deleted: branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/BreakingBondReactionTest.java =================================================================== --- branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/BreakingBondReactionTest.java 2008-02-13 22:38:46 UTC (rev 10092) +++ branches/miguelrojasch/reaction/src/org/openscience/cdk/test/reaction/type/BreakingBondReactionTest.java 2008-02-13 23:18:13 UTC (rev 10093) @@ -1,1861 +0,0 @@ -/* $RCSfile$ - * $Author: miguelrojasch $ - * $Date: 2006-05-11 14:25:07 +0200 (Do, 11 Mai 2006) $ - * $Revision: 6221 $ - * - * Copyright (C) 2004-2007 Miguel Rojas <mig...@un...> - * - * 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.test.reaction.type; - - -import java.util.Iterator; - -import org.junit.Assert; -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.atomtype.CDKAtomTypeMatcher; -import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.interfaces.IChemObjectBuilder; -import org.openscience.cdk.interfaces.IMolecule; -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.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.BreakingBondReaction; -import org.openscience.cdk.smiles.SmilesGenerator; -import org.openscience.cdk.test.reaction.ReactionProcessTest; -import org.openscience.cdk.tools.LonePairElectronChecker; -import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; -import org.openscience.cdk.tools.manipulator.ReactionManipulator; - -/** - * TestSuite that runs a test for the BreakingBondReactionTest. - * Generalized Reaction: A=B => |[A-]-[B+] + [A+]-|[B-]. Depending of the bond order - * the bond will be removed or simply the order decreased. - * - * @cdk.module test-reaction - */ -public class BreakingBondReactionTest extends ReactionProcessTest { - - private final static IChemObjectBuilder builder = NoNotificationChemObjectBuilder.getInstance(); - private final static LonePairElectronChecker lpcheck = new LonePairElectronChecker(); - /** - * The JUnit setup method - */ - @BeforeClass public static void setUp() throws Exception { - setReaction(BreakingBondReaction.class); - } - /** - * A unit test suite for JUnit. Reaction: propane. - * CC!-!C => C[C+] + [C-] - * C[C-] + [C+] - * - * @cdk.inchi InChI=1/C3H8/c1-3-2/h3H2,1-2H3 - * - * @return The test suite - */ - @Test public void testCsp3SingleB() throws Exception { - //Smiles("CCC") - IMolecule molecule = builder.newMolecule(); - molecule.addAtom(builder.newAtom("C")); - molecule.addAtom(builder.newAtom("C")); - molecule.addAtom(builder.newAtom("C")); - molecule.addBond(0, 1, IBond.Order.SINGLE); - molecule.addBond(1, 2, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(0, 3, IBond.Order.SINGLE); - molecule.addBond(0, 4, IBond.Order.SINGLE); - molecule.addBond(0, 5, IBond.Order.SINGLE); - molecule.addBond(1, 6, IBond.Order.SINGLE); - molecule.addBond(1, 7, IBond.Order.SINGLE); - molecule.addBond(2, 8, IBond.Order.SINGLE); - molecule.addBond(2, 9, IBond.Order.SINGLE); - molecule.addBond(2, 10, IBond.Order.SINGLE); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); - - molecule.getAtom(1).setFlag(CDKConstants.REACTIVE_CENTER,true); - molecule.getAtom(2).setFlag(CDKConstants.REACTIVE_CENTER,true); - molecule.getBond(1).setFlag(CDKConstants.REACTIVE_CENTER,true); - - IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); - setOfReactants.addMolecule(molecule); - - IReactionProcess type = new BreakingBondReaction(); - Object[] params = {Boolean.TRUE}; - type.setParameters(params); - - /* initiate */ - IReactionSet setOfReactions = type.initiate(setOfReactants, null); - - Assert.assertEquals(2, setOfReactions.getReactionCount()); - - // expected products - - //Smiles("C[C+]") - IMolecule expected1 = builder.newMolecule(); - expected1.addAtom(builder.newAtom("C")); - expected1.addAtom(builder.newAtom("C")); - expected1.getAtom(1).setFormalCharge(+1); - expected1.addBond(0, 1, IBond.Order.SINGLE); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addBond(0, 2, IBond.Order.SINGLE); - expected1.addBond(0, 3, IBond.Order.SINGLE); - expected1.addBond(0, 4, IBond.Order.SINGLE); - expected1.addBond(1, 5, IBond.Order.SINGLE); - expected1.addBond(1, 6, IBond.Order.SINGLE);; - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected1); - IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); - IQueryAtomContainer queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected1); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product1,queryAtom)); - - //Smiles("[C-]") - IMolecule expected2 = builder.newMolecule(); - expected2.addAtom(builder.newAtom("C")); - expected2.getAtom(0).setFormalCharge(-1); - expected2.addAtom(builder.newAtom("H")); - expected2.addAtom(builder.newAtom("H")); - expected2.addAtom(builder.newAtom("H")); - expected2.addBond(0, 1, IBond.Order.SINGLE); - expected2.addBond(0, 2, IBond.Order.SINGLE); - expected2.addBond(0, 3, IBond.Order.SINGLE); - - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected2); - lpcheck.saturate(expected2); - IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected2); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product2,queryAtom)); - - //Smiles("C[C-]") - expected1.getAtom(1).setFormalCharge(-1); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected1); - product1 = setOfReactions.getReaction(1).getProducts().getMolecule(0); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected1); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product1,queryAtom)); - - //Smiles("[C+]") - expected2.getAtom(0).setFormalCharge(+1); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected2); - product2 = setOfReactions.getReaction(1).getProducts().getMolecule(1); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected2); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product2,queryAtom)); - } - /** - * A unit test suite for JUnit. Reaction: . - * C[C+]!-!C => CC + [C+] - * - * @return The test suite - */ - @Test public void testCsp2ChargeSingleB() throws Exception { - - } - /** - * A unit test suite for JUnit. Reaction: Propene. - * C=C!-!C => C=[C+] + [C-] - * C=[C-] + [C+] - * - * @cdk.inchi InChI=1/C3H6/c1-3-2/h3H,1H2,2H3 - * - * @return The test suite - */ - @Test public void testCsp2SingleB() throws Exception { - //Smiles("C=CC") - IMolecule molecule = builder.newMolecule(); - molecule.addAtom(builder.newAtom("C")); - molecule.addAtom(builder.newAtom("C")); - molecule.addAtom(builder.newAtom("C")); - molecule.addBond(0, 1, IBond.Order.DOUBLE); - molecule.addBond(1, 2, IBond.Order.SINGLE); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addAtom(builder.newAtom("H")); - molecule.addBond(0, 3, IBond.Order.SINGLE); - molecule.addBond(0, 4, IBond.Order.SINGLE); - molecule.addBond(1, 5, IBond.Order.SINGLE); - molecule.addBond(2, 6, IBond.Order.SINGLE); - molecule.addBond(2, 7, IBond.Order.SINGLE); - molecule.addBond(2, 8, IBond.Order.SINGLE); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); - - molecule.getAtom(1).setFlag(CDKConstants.REACTIVE_CENTER,true); - molecule.getAtom(2).setFlag(CDKConstants.REACTIVE_CENTER,true); - molecule.getBond(1).setFlag(CDKConstants.REACTIVE_CENTER,true); - - IMoleculeSet setOfReactants = DefaultChemObjectBuilder.getInstance().newMoleculeSet(); - setOfReactants.addMolecule(molecule); - - IReactionProcess type = new BreakingBondReaction(); - Object[] params = {Boolean.TRUE}; - type.setParameters(params); - - /* initiate */ - IReactionSet setOfReactions = type.initiate(setOfReactants, null); - - Assert.assertEquals(2, setOfReactions.getReactionCount()); - - // expected products - - //Smiles("C=[C+]") - IMolecule expected1 = builder.newMolecule(); - expected1.addAtom(builder.newAtom("C")); - expected1.addAtom(builder.newAtom("C")); - expected1.getAtom(1).setFormalCharge(+1); - expected1.addBond(0, 1, IBond.Order.DOUBLE); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addAtom(builder.newAtom("H")); - expected1.addBond(0, 2, IBond.Order.SINGLE); - expected1.addBond(0, 3, IBond.Order.SINGLE); - expected1.addBond(1, 4, IBond.Order.SINGLE); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected1); - IMolecule product1 = setOfReactions.getReaction(0).getProducts().getMolecule(0); - IQueryAtomContainer queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected1); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product1,queryAtom)); - - //Smiles("[C-]") - IMolecule expected2 = builder.newMolecule(); - expected2.addAtom(builder.newAtom("C")); - expected2.getAtom(0).setFormalCharge(-1); - expected2.addAtom(builder.newAtom("H")); - expected2.addAtom(builder.newAtom("H")); - expected2.addAtom(builder.newAtom("H")); - expected2.addBond(0, 1, IBond.Order.SINGLE); - expected2.addBond(0, 2, IBond.Order.SINGLE); - expected2.addBond(0, 3, IBond.Order.SINGLE); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected2); - lpcheck.saturate(expected2); - - IMolecule product2 = setOfReactions.getReaction(0).getProducts().getMolecule(1); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected2); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product2,queryAtom)); - - //Smiles("C=[C-]") - expected1.getAtom(1).setFormalCharge(-1); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected1); - lpcheck.saturate(expected1); - product1 = setOfReactions.getReaction(1).getProducts().getMolecule(0); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected1); - Assert.assertTrue(UniversalIsomorphismTester.isIsomorph(product1,queryAtom)); - - //Smiles("[C+]") - expected2.getAtom(0).setFormalCharge(+1); - AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(expected2); - - product2 = setOfReactions.getReaction(1).getProducts().getMolecule(1); - queryAtom = QueryAtomContainerCreator.createSymbolAndChargeQueryContainer(expected2); - Assert.assertTrue(UniversalIsomorphismTester.isIsomo... [truncated message content] |