From: <mig...@us...> - 2006-05-17 07:19:10
|
Revision: 6270 Author: miguelrojasch Date: 2006-05-17 00:18:46 -0700 (Wed, 17 May 2006) ViewCVS: http://svn.sourceforge.net/cdk/?rev=6270&view=rev Log Message: ----------- new descriptor: return the covalent radius of a given atom Modified Paths: -------------- trunk/cdk/src/org/openscience/cdk/test/MqsarTests.java Added Paths: ----------- trunk/cdk/src/org/openscience/cdk/qsar/descriptors/atomic/CovalentRadiusDescriptor.java trunk/cdk/src/org/openscience/cdk/test/qsar/descriptors/atomic/CovalentRadiusDescriptorTest.java Added: trunk/cdk/src/org/openscience/cdk/qsar/descriptors/atomic/CovalentRadiusDescriptor.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/qsar/descriptors/atomic/CovalentRadiusDescriptor.java (rev 0) +++ trunk/cdk/src/org/openscience/cdk/qsar/descriptors/atomic/CovalentRadiusDescriptor.java 2006-05-17 07:18:46 UTC (rev 6270) @@ -0,0 +1,192 @@ +/* + * $RCSfile$ + * $Author: egonw $ + * $Date: 2006-05-04 21:29:58 +0200 (Do, 04 Mai 2006) $ + * $Revision: 6171 $ + * + * Copyright (C) 2004-2006 The Chemistry Development Kit (CDK) project + * + * 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.qsar.descriptors.atomic; + +import java.io.IOException; + +import org.openscience.cdk.config.AtomTypeFactory; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IAtomType; +import org.openscience.cdk.qsar.DescriptorSpecification; +import org.openscience.cdk.qsar.DescriptorValue; +import org.openscience.cdk.qsar.IMolecularDescriptor; +import org.openscience.cdk.qsar.result.DoubleResult; +import org.openscience.cdk.tools.LoggingTool; + +/** + * This class return the covalent radius of a given atom. + * + * <p>This descriptor uses these parameters: + * <table border="1"> + * <tr> + * <td>Name</td> + * <td>Default</td> + * <td>Description</td> + * </tr> + * <tr> + * <td>atomPosition</td> + * <td>0</td> + * <td>The position of the atom</td> + * </tr> + * </table> + * + * @author Miguel Rojas + * @cdk.created 2006-05-17 + * @cdk.module qsar + * @cdk.set qsar-descriptors + * @cdk.dictref qsar-descriptors:covalentradius + */ +public class CovalentRadiusDescriptor implements IMolecularDescriptor { + + private int atomPosition = 0; + private AtomTypeFactory factory = null; + private LoggingTool logger; + + + /** + * Constructor for the CovalentRadiusDescriptor object. + * + * @throws IOException if an error ocurrs when reading atom type information + * @throws ClassNotFoundException if an error occurs during tom typing + */ + public CovalentRadiusDescriptor() throws IOException, ClassNotFoundException { + logger = new LoggingTool(this); + } + + + /** + * Returns a <code>Map</code> which specifies which descriptor + * is implemented by this class. + * + * These fields are used in the map: + * <ul> + * <li>Specification-Reference: refers to an entry in a unique dictionary + * <li>Implementation-Title: anything + * <li>Implementation-Identifier: a unique identifier for this version of + * this class + * <li>Implementation-Vendor: CDK, JOELib, or anything else + * </ul> + * + * @return An object containing the descriptor specification + */ + public DescriptorSpecification getSpecification() { + return new DescriptorSpecification( + "http://www.blueobelisk.org/ontologies/chemoinformatics-algorithms/#covalentradius", + this.getClass().getName(), + "$Id: CovalentRadiusDescriptor.java 6171 2006-05-04 19:29:58Z egonw $", + "The Chemistry Development Kit"); + } + + + /** + * Sets the parameters attribute of the CovalentRadiusDescriptor object. + * + * This class takes a single parameter of type Integer indicating + * which atom the radius is to be calculated for + * + *@param params The parameter is the atom position + *@throws CDKException if more than on parameter or a non-Integer parameters is specified + *@see #getParameters + */ + public void setParameters(Object[] params) throws CDKException { + if (params.length > 1) { + throw new CDKException("CovalentRadiusDescriptor only expects one parameter"); + } + if (!(params[0] instanceof Integer)) { + throw new CDKException("The parameter must be of type Integer"); + } + atomPosition = ((Integer) params[0]).intValue(); + } + + + /** + * Gets the parameters attribute of the CovalentRadiusDescriptor object. + * + *@return The parameters value + * @see #setParameters + */ + public Object[] getParameters() { + Object[] params = new Object[1]; + params[0] = new Integer(atomPosition); + return params; + } + + + /** + * This method calculate the Covalent radius of an atom. + * + *@param container The {@link IAtomContainer} for which the descriptor is to be calculated + *@return The Covalent radius of the atom + *@exception CDKException if an error occurs during atom typing + */ + + public DescriptorValue calculate(IAtomContainer container) throws CDKException { + if (factory == null) + try { + factory = AtomTypeFactory.getInstance( + "org/openscience/cdk/config/data/jmol_atomtypes.txt", + container.getBuilder() + ); + } catch (Exception exception) { + throw new CDKException("Could not instantiate AtomTypeFactory!", exception); + } + + double covalentradius = 0; + try { + String symbol = container.getAtomAt(atomPosition).getSymbol(); + IAtomType type = factory.getAtomType(symbol); + covalentradius = type.getCovalentRadius(); + return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), new DoubleResult(covalentradius)); + } catch (Exception ex1) { + logger.debug(ex1); + throw new CDKException("Problems with AtomTypeFactory due to " + ex1.toString(), ex1); + } + } + + + /** + * Gets the parameterNames attribute of the CovalentRadiusDescriptor object. + * + *@return The parameterNames value + */ + public String[] getParameterNames() { + String[] params = new String[1]; + params[0] = "atomPosition"; + return params; + } + + + /** + * Gets the parameterType attribute of the CovalentRadiusDescriptor object. + * + *@param name Description of the Parameter + *@return An Object of class equal to that of the parameter being requested + */ + public Object getParameterType(String name) { + return new Integer(0); + } +} + Modified: trunk/cdk/src/org/openscience/cdk/test/MqsarTests.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/test/MqsarTests.java 2006-05-16 21:31:50 UTC (rev 6269) +++ trunk/cdk/src/org/openscience/cdk/test/MqsarTests.java 2006-05-17 07:18:46 UTC (rev 6270) @@ -33,6 +33,7 @@ import org.openscience.cdk.test.qsar.descriptors.atomic.AtomHybridizationDescriptorTest; import org.openscience.cdk.test.qsar.descriptors.atomic.AtomValenceDescriptorTest; import org.openscience.cdk.test.qsar.descriptors.atomic.BondsToAtomDescriptorTest; +import org.openscience.cdk.test.qsar.descriptors.atomic.CovalentRadiusDescriptorTest; import org.openscience.cdk.test.qsar.descriptors.atomic.DistanceToAtomDescriptorTest; import org.openscience.cdk.test.qsar.descriptors.atomic.EffectiveAtomPolarizabilityDescriptorTest; import org.openscience.cdk.test.qsar.descriptors.atomic.InductiveAtomicHardnessDescriptorTest; @@ -137,6 +138,7 @@ suite.addTest(RuleOfFiveDescriptorTest.suite()); suite.addTest(RDFProtonDescriptorTest.suite()); suite.addTest(MomentOfInertiaDescriptorTest.suite()); + suite.addTest(CovalentRadiusDescriptorTest.suite()); suite.addTest(VdWRadiusDescriptorTest.suite()); suite.addTest(BondsToAtomDescriptorTest.suite()); suite.addTest(DistanceToAtomDescriptorTest.suite()); Added: trunk/cdk/src/org/openscience/cdk/test/qsar/descriptors/atomic/CovalentRadiusDescriptorTest.java =================================================================== --- trunk/cdk/src/org/openscience/cdk/test/qsar/descriptors/atomic/CovalentRadiusDescriptorTest.java (rev 0) +++ trunk/cdk/src/org/openscience/cdk/test/qsar/descriptors/atomic/CovalentRadiusDescriptorTest.java 2006-05-17 07:18:46 UTC (rev 6270) @@ -0,0 +1,68 @@ +/* $RCSfile$ + * $Author: miguelrojasch $ + * $Date: 2006-05-11 14:25:07 +0200 (Do, 11 Mai 2006) $ + * $Revision: 6221 $ + * + * Copyright (C) 2004-2006 The Chemistry Development Kit (CDK) project + * + * 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.qsar.descriptors.atomic; + +import junit.framework.Test; +import junit.framework.TestSuite; +import org.openscience.cdk.Molecule; +import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.qsar.IMolecularDescriptor; +import org.openscience.cdk.qsar.descriptors.atomic.CovalentRadiusDescriptor; +import org.openscience.cdk.qsar.result.DoubleResult; +import org.openscience.cdk.smiles.SmilesParser; +import org.openscience.cdk.test.CDKTestCase; + +/** + * @cdk.module test-qsar + */ +public class CovalentRadiusDescriptorTest extends CDKTestCase { + /** + * Constructor for the CovalentRadiusDescriptorTest object + * + */ + public CovalentRadiusDescriptorTest() {} + /** + * A unit test suite for JUnit + * + *@return The test suite + */ + public static Test suite() { + return new TestSuite(CovalentRadiusDescriptorTest.class); + } + /** + * A unit test for JUnit + */ + public void testVdWRadiusDescriptor() throws ClassNotFoundException, CDKException, java.lang.Exception { + double [] testResult={0.77}; + IMolecularDescriptor descriptor = new CovalentRadiusDescriptor(); + Object[] params = {new Integer(1)}; + descriptor.setParameters(params); + SmilesParser sp = new SmilesParser(); + Molecule mol = sp.parseSmiles("NCCN(C)(C)"); + double retval = ((DoubleResult)descriptor.calculate(mol).getValue()).doubleValue(); + + assertEquals(testResult[0], retval, 0.01); + } +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |