From: <eg...@us...> - 2007-09-15 14:36:38
|
Revision: 8930 http://cdk.svn.sourceforge.net/cdk/?rev=8930&view=rev Author: egonw Date: 2007-09-15 07:36:36 -0700 (Sat, 15 Sep 2007) Log Message: ----------- Added some common salt kations Modified Paths: -------------- trunk/cdk/src/org/openscience/cdk/atomtype/CDKAtomTypeMatcher.java trunk/cdk/src/org/openscience/cdk/config/data/cdk_atomtypes.xml trunk/cdk/src/org/openscience/cdk/test/atomtype/CDKAtomTypeMatcherTest.java Modified: trunk/cdk/src/org/openscience/cdk/atomtype/CDKAtomTypeMatcher.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/atomtype/CDKAtomTypeMatcher.java 2007-09-15 14:35:44 UTC (rev 8929) +++ trunk/cdk/src/org/openscience/cdk/atomtype/CDKAtomTypeMatcher.java 2007-09-15 14:36:36 UTC (rev 8930) @@ -32,6 +32,7 @@ import org.openscience.cdk.interfaces.IAtomType; import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.interfaces.IChemObjectBuilder; +import org.openscience.cdk.interfaces.IPseudoAtom; /** * Atom Type matcher... TO BE WRITTEN. @@ -67,6 +68,9 @@ public IAtomType findMatchingAtomType(IAtomContainer atomContainer, IAtom atom) throws CDKException { IAtomType type = null; + if (atom instanceof IPseudoAtom) { + return factory.getAtomType("X"); + } type = perceiveCarbons(atomContainer, atom); if (type == null) type = perceiveOxygens(atomContainer, atom); if (type == null) type = perceiveNitrogens(atomContainer, atom); @@ -74,6 +78,7 @@ if (type == null) type = perceiveSulphurs(atomContainer, atom); if (type == null) type = perceiveHalogens(atomContainer, atom); if (type == null) type = perceivePhosphors(atomContainer, atom); + if (type == null) type = perceiveCommonSalts(atomContainer, atom); return type; } @@ -273,8 +278,11 @@ if ("P".equals(atom.getSymbol())) { List<IBond> neighbors = atomContainer.getConnectedBondsList(atom); int neighborcount = neighbors.size(); + double maxBondOrder = atomContainer.getMaximumBondOrder(atom); if (neighborcount == 3) { return factory.getAtomType("P.ine"); + } else if (neighborcount == 2 && maxBondOrder == CDKConstants.BONDORDER_DOUBLE) { + return factory.getAtomType("P.ine"); } else if (neighborcount == 4) { // count the number of double bonded oxygens int doubleBonds = 0; @@ -348,6 +356,31 @@ return null; } + private IAtomType perceiveCommonSalts(IAtomContainer atomContainer, IAtom atom) throws CDKException { + if ("Na".equals(atom.getSymbol())) { + if ((atom.getFormalCharge() != CDKConstants.UNSET && + atom.getFormalCharge() == +1)) { + return factory.getAtomType("Na.plus"); + } + } else if ("Ca".equals(atom.getSymbol())) { + if ((atom.getFormalCharge() != CDKConstants.UNSET && + atom.getFormalCharge() == +2)) { + return factory.getAtomType("Ca.2plus"); + } + } else if ("Mg".equals(atom.getSymbol())) { + if ((atom.getFormalCharge() != CDKConstants.UNSET && + atom.getFormalCharge() == +2)) { + return factory.getAtomType("Mg.2plus"); + } + } else if ("K".equals(atom.getSymbol())) { + if ((atom.getFormalCharge() != CDKConstants.UNSET && + atom.getFormalCharge() == +1)) { + return factory.getAtomType("K.plus"); + } + } + return null; + } + private int countAttachedDoubleBonds(IAtomContainer container, IAtom atom) { return countAttachedDoubleBonds(container, atom, null); } Modified: trunk/cdk/src/org/openscience/cdk/config/data/cdk_atomtypes.xml =================================================================== --- trunk/cdk/src/org/openscience/cdk/config/data/cdk_atomtypes.xml 2007-09-15 14:35:44 UTC (rev 8929) +++ trunk/cdk/src/org/openscience/cdk/config/data/cdk_atomtypes.xml 2007-09-15 14:36:36 UTC (rev 8930) @@ -17,6 +17,12 @@ <metadata name="cvs:revision" content="$Revision: 8549 $"/> </metadataList> + <atomType id="X"> + <!-- Only supposed to be used for things like R etc found in Markusk like things. + I must not be used for elements for which the atom type cannot be + determined. --> + </atomType> + <atomType id="C.sp"> <atom elementType="C" formalCharge="0"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">2</scalar> @@ -48,7 +54,7 @@ </atomType> <atomType id="C.plus.sp2"> - <atom elementType="C" formalCharge="+1"> + <atom elementType="C" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">3</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">0</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">0</scalar> @@ -75,7 +81,7 @@ </atomType> <atomType id="O.plus.sp2"> - <atom elementType="O" formalCharge="+1"> + <atom elementType="O" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">2</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">1</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">1</scalar> @@ -84,7 +90,7 @@ </atomType> <atomType id="O.plus"> - <atom elementType="O" formalCharge="+1"> + <atom elementType="O" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">3</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">1</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">0</scalar> @@ -129,7 +135,7 @@ </atomType> <atomType id="N.plus"> - <atom elementType="N" formalCharge="+1"> + <atom elementType="N" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">4</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">0</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">0</scalar> @@ -138,7 +144,7 @@ </atomType> <atomType id="N.plus.sp2"> - <atom elementType="N" formalCharge="+1"> + <atom elementType="N" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">3</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">0</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">1</scalar> @@ -147,7 +153,7 @@ </atomType> <atomType id="N.plus.sp1"> <!-- e.g. in R-N(-)-N(+)#N (azide) --> - <atom elementType="N" formalCharge="+1"> + <atom elementType="N" formalCharge="1"> <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">2</scalar> <scalar dataType="xsd:integer" dictRef="cdk:lonePairCount">0</scalar> <scalar dataType="xsd:integer" dictRef="cdk:piBondCount">2</scalar> @@ -335,4 +341,30 @@ <scalar dataType="xsd:string" dictRef="cdk:hybridization">sp3</scalar> </atomType> + <atomType id="Na.plus"> + <atom elementType="Na" formalCharge="1"> + <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">0</scalar> + </atom> + </atomType> + + <atomType id="K.plus"> + <atom elementType="K" formalCharge="1"> + <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">0</scalar> + </atom> + </atomType> + + <atomType id="Ca.2plus"> + <atom elementType="Ca" formalCharge="2"> + <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">0</scalar> + </atom> + </atomType> + + <atomType id="Mg.2plus"> + <atom elementType="Mg" formalCharge="2"> + <scalar dataType="xsd:integer" dictRef="cdk:formalNeighbourCount">0</scalar> + </atom> + </atomType> + + + </atomTypeList> Modified: trunk/cdk/src/org/openscience/cdk/test/atomtype/CDKAtomTypeMatcherTest.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/test/atomtype/CDKAtomTypeMatcherTest.java 2007-09-15 14:35:44 UTC (rev 8929) +++ trunk/cdk/src/org/openscience/cdk/test/atomtype/CDKAtomTypeMatcherTest.java 2007-09-15 14:36:36 UTC (rev 8930) @@ -31,6 +31,7 @@ import org.openscience.cdk.CDKConstants; import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.Molecule; +import org.openscience.cdk.PseudoAtom; import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; import org.openscience.cdk.config.AtomTypeFactory; import org.openscience.cdk.exception.CDKException; @@ -74,6 +75,16 @@ Assert.assertEquals(thisHybridization, matched.getHybridization()); } + @Test public void testDummy() throws Exception { + IMolecule mol = new Molecule(); + IAtom atom = new PseudoAtom("R"); + mol.addAtom(atom); + + CDKAtomTypeMatcher atm = CDKAtomTypeMatcher.getInstance(mol.getBuilder()); + IAtomType matched = atm.findMatchingAtomType(mol, atom); + assertAtomType(testedAtomTypes, "X", matched); + } + @Test public void testEthene() throws Exception { IMolecule mol = new Molecule(); IAtom atom = new Atom("C"); @@ -379,6 +390,21 @@ assertAtomType(testedAtomTypes, "P.ine", atm.findMatchingAtomType(mol, atom2)); } + @Test public void testPhosphorCompound() throws Exception { + IMolecule mol = new Molecule(); + IAtom atom = new Atom("C"); + IAtom atom2 = new Atom("P"); + IAtom atom3 = new Atom("C"); + mol.addAtom(atom); + mol.addAtom(atom2); + mol.addAtom(atom3); + mol.addBond(0,1,CDKConstants.BONDORDER_DOUBLE); + mol.addBond(1,2,CDKConstants.BONDORDER_SINGLE); + + CDKAtomTypeMatcher atm = CDKAtomTypeMatcher.getInstance(mol.getBuilder()); + assertAtomType(testedAtomTypes, "P.ine", atm.findMatchingAtomType(mol, atom2)); + } + @Test public void testCarbokation() throws Exception { IMolecule mol = new Molecule(); IAtom atom = new Atom("H"); @@ -584,6 +610,34 @@ assertAtomType(testedAtomTypes, "N.minus.sp2", atm.findMatchingAtomType(mol, atom4)); } + @Test public void testSalts() throws Exception { + IMolecule mol = new Molecule(); + CDKAtomTypeMatcher atm = CDKAtomTypeMatcher.getInstance(mol.getBuilder()); + + IAtom atom = new Atom("Na"); + atom.setFormalCharge(+1); + mol.addAtom(atom); + assertAtomType(testedAtomTypes, "Na.plus", atm.findMatchingAtomType(mol, atom)); + + mol = new Molecule(); + atom = new Atom("K"); + atom.setFormalCharge(+1); + mol.addAtom(atom); + assertAtomType(testedAtomTypes, "K.plus", atm.findMatchingAtomType(mol, atom)); + + mol = new Molecule(); + atom = new Atom("Ca"); + atom.setFormalCharge(+2); + mol.addAtom(atom); + assertAtomType(testedAtomTypes, "Ca.2plus", atm.findMatchingAtomType(mol, atom)); + + mol = new Molecule(); + atom = new Atom("Mg"); + atom.setFormalCharge(+2); + mol.addAtom(atom); + assertAtomType(testedAtomTypes, "Mg.2plus", atm.findMatchingAtomType(mol, atom)); + } + @Test public void testStructGenMatcher() throws Exception { CDKAtomTypeMatcher matcher = CDKAtomTypeMatcher.getInstance(DefaultChemObjectBuilder.getInstance()); Assert.assertNotNull(matcher); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |