1 /* Copyright (C) 2010 Egon Willighagen <egonw@users.sf.net> 2 * 3 * Contact: cdk-devel@lists.sourceforge.net 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public License 7 * as published by the Free Software Foundation; either version 2.1 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 package org.openscience.cdk.qsar.descriptors.molecular; 20 21 import javax.vecmath.Point2d; 22 23 import org.junit.Assert; 24 import org.junit.Before; 25 import org.junit.Test; 26 import org.openscience.cdk.AtomContainer; 27 import org.openscience.cdk.interfaces.IAtom; 28 import org.openscience.cdk.interfaces.IAtomContainer; 29 import org.openscience.cdk.interfaces.IBond; 30 import org.openscience.cdk.qsar.result.IntegerResult; 31 import org.openscience.cdk.silent.SilentChemObjectBuilder; 32 import org.openscience.cdk.smiles.SmilesParser; 33 import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; 34 35 /** 36 * @cdk.module test-qsarmolecular 37 */ 38 public class AcidicGroupCountDescriptorTest extends MolecularDescriptorTest { 39 40 @Before setUp()41 public void setUp() throws Exception { 42 setDescriptor(AcidicGroupCountDescriptor.class); 43 } 44 45 @Test testConstructor()46 public void testConstructor() throws Exception { 47 Assert.assertNotNull(new AcidicGroupCountDescriptor()); 48 } 49 50 @Test(expected = IllegalStateException.class) uninitalisedError()51 public void uninitalisedError() { 52 new BasicGroupCountDescriptor().calculate(new AtomContainer()); 53 } 54 55 @Test testOneAcidGroup()56 public void testOneAcidGroup() throws Exception { 57 SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); 58 IAtomContainer mol = sp.parseSmiles("CC(=O)O"); 59 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 60 Assert.assertEquals(1, result.intValue()); 61 } 62 63 @Test testSulphurAcidGroup()64 public void testSulphurAcidGroup() throws Exception { 65 SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); 66 IAtomContainer mol = sp.parseSmiles("OS(=O)(=O)O"); 67 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 68 Assert.assertEquals(2, result.intValue()); 69 } 70 71 @Test testPhosphorusAcidGroup()72 public void testPhosphorusAcidGroup() throws Exception { 73 SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); 74 IAtomContainer mol = sp.parseSmiles("O=P(=O)O"); 75 AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); 76 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 77 Assert.assertEquals(1, result.intValue()); 78 } 79 80 @Test testFancyGroup()81 public void testFancyGroup() throws Exception { 82 SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); 83 IAtomContainer mol = sp.parseSmiles("[NH](S(=O)=O)C(F)(F)F"); 84 AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); 85 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 86 Assert.assertEquals(1, result.intValue()); 87 } 88 89 @Test testNitroRing()90 public void testNitroRing() throws Exception { 91 SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance()); 92 IAtomContainer mol = sp.parseSmiles("[nH]1nnnc1"); 93 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 94 Assert.assertEquals(2, result.intValue()); 95 } 96 97 /** 98 * @cdk.inchi InChI=1S/C2H2N4O2/c7-2(8)1-3-5-6-4-1/h(H,7,8)(H,3,4,5,6) 99 */ 100 @Test testTwoGroup()101 public void testTwoGroup() throws Exception { 102 IAtomContainer mol = SilentChemObjectBuilder.getInstance().newAtomContainer(); 103 IAtom a1 = mol.getBuilder().newInstance(IAtom.class, "O"); 104 a1.setFormalCharge(0); 105 a1.setPoint2d(new Point2d(5.9019, 0.5282)); 106 mol.addAtom(a1); 107 IAtom a2 = mol.getBuilder().newInstance(IAtom.class, "O"); 108 a2.setFormalCharge(0); 109 a2.setPoint2d(new Point2d(5.3667, -1.1191)); 110 mol.addAtom(a2); 111 IAtom a3 = mol.getBuilder().newInstance(IAtom.class, "N"); 112 a3.setFormalCharge(0); 113 a3.setPoint2d(new Point2d(3.3987, -0.4197)); 114 mol.addAtom(a3); 115 IAtom a4 = mol.getBuilder().newInstance(IAtom.class, "N"); 116 a4.setFormalCharge(0); 117 a4.setPoint2d(new Point2d(2.5896, 0.1681)); 118 mol.addAtom(a4); 119 IAtom a5 = mol.getBuilder().newInstance(IAtom.class, "N"); 120 a5.setFormalCharge(0); 121 a5.setPoint2d(new Point2d(3.8987, 1.1191)); 122 mol.addAtom(a5); 123 IAtom a6 = mol.getBuilder().newInstance(IAtom.class, "N"); 124 a6.setFormalCharge(0); 125 a6.setPoint2d(new Point2d(2.8987, 1.1191)); 126 mol.addAtom(a6); 127 IAtom a7 = mol.getBuilder().newInstance(IAtom.class, "C"); 128 a7.setFormalCharge(0); 129 a7.setPoint2d(new Point2d(4.2077, 0.1681)); 130 mol.addAtom(a7); 131 IAtom a8 = mol.getBuilder().newInstance(IAtom.class, "C"); 132 a8.setFormalCharge(0); 133 a8.setPoint2d(new Point2d(5.1588, -0.141)); 134 mol.addAtom(a8); 135 IAtom a9 = mol.getBuilder().newInstance(IAtom.class, "H"); 136 a9.setFormalCharge(0); 137 a9.setPoint2d(new Point2d(2.0, -0.0235)); 138 mol.addAtom(a9); 139 IAtom a10 = mol.getBuilder().newInstance(IAtom.class, "H"); 140 a10.setFormalCharge(0); 141 a10.setPoint2d(new Point2d(6.4916, 0.3366)); 142 mol.addAtom(a10); 143 IBond b1 = mol.getBuilder().newInstance(IBond.class, a1, a8, IBond.Order.SINGLE); 144 mol.addBond(b1); 145 IBond b2 = mol.getBuilder().newInstance(IBond.class, a1, a10, IBond.Order.SINGLE); 146 mol.addBond(b2); 147 IBond b3 = mol.getBuilder().newInstance(IBond.class, a2, a8, IBond.Order.DOUBLE); 148 mol.addBond(b3); 149 IBond b4 = mol.getBuilder().newInstance(IBond.class, a3, a4, IBond.Order.SINGLE); 150 mol.addBond(b4); 151 IBond b5 = mol.getBuilder().newInstance(IBond.class, a3, a7, IBond.Order.DOUBLE); 152 mol.addBond(b5); 153 IBond b6 = mol.getBuilder().newInstance(IBond.class, a4, a6, IBond.Order.SINGLE); 154 mol.addBond(b6); 155 IBond b7 = mol.getBuilder().newInstance(IBond.class, a4, a9, IBond.Order.SINGLE); 156 mol.addBond(b7); 157 IBond b8 = mol.getBuilder().newInstance(IBond.class, a5, a6, IBond.Order.DOUBLE); 158 mol.addBond(b8); 159 IBond b9 = mol.getBuilder().newInstance(IBond.class, a5, a7, IBond.Order.SINGLE); 160 mol.addBond(b9); 161 IBond b10 = mol.getBuilder().newInstance(IBond.class, a7, a8, IBond.Order.SINGLE); 162 mol.addBond(b10); 163 164 AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); 165 addImplicitHydrogens(mol); 166 167 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 168 Assert.assertEquals(3, result.intValue()); 169 } 170 171 /** 172 * @cdk.inchi InChI=1S/C6H12O10S/c7-2(1-16-17(13,14)15)3(8)4(9)5(10)6(11)12/h2-5,7-10H,1H2,(H,11,12)(H,13,14,15)/t2-,3-,4+,5-/m1/s1 173 */ 174 @Test testCID()175 public void testCID() throws Exception { 176 IAtomContainer mol = SilentChemObjectBuilder.getInstance().newAtomContainer(); 177 IAtom a1 = mol.getBuilder().newInstance(IAtom.class, "S"); 178 a1.setFormalCharge(0); 179 a1.setPoint2d(new Point2d(9.4651, 0.25)); 180 mol.addAtom(a1); 181 IAtom a2 = mol.getBuilder().newInstance(IAtom.class, "O"); 182 a2.setFormalCharge(0); 183 a2.setPoint2d(new Point2d(6.001, 1.25)); 184 mol.addAtom(a2); 185 IAtom a3 = mol.getBuilder().newInstance(IAtom.class, "O"); 186 a3.setFormalCharge(0); 187 a3.setPoint2d(new Point2d(5.135, -1.25)); 188 mol.addAtom(a3); 189 IAtom a4 = mol.getBuilder().newInstance(IAtom.class, "O"); 190 a4.setFormalCharge(0); 191 a4.setPoint2d(new Point2d(6.8671, -1.25)); 192 mol.addAtom(a4); 193 IAtom a5 = mol.getBuilder().newInstance(IAtom.class, "O"); 194 a5.setFormalCharge(0); 195 a5.setPoint2d(new Point2d(8.5991, -0.25)); 196 mol.addAtom(a5); 197 IAtom a6 = mol.getBuilder().newInstance(IAtom.class, "O"); 198 a6.setFormalCharge(0); 199 a6.setPoint2d(new Point2d(4.269, 1.25)); 200 mol.addAtom(a6); 201 IAtom a7 = mol.getBuilder().newInstance(IAtom.class, "O"); 202 a7.setFormalCharge(0); 203 a7.setPoint2d(new Point2d(2.5369, 0.25)); 204 mol.addAtom(a7); 205 IAtom a8 = mol.getBuilder().newInstance(IAtom.class, "O"); 206 a8.setFormalCharge(0); 207 a8.setPoint2d(new Point2d(3.403, -1.25)); 208 mol.addAtom(a8); 209 IAtom a9 = mol.getBuilder().newInstance(IAtom.class, "O"); 210 a9.setFormalCharge(0); 211 a9.setPoint2d(new Point2d(10.3312, 0.75)); 212 mol.addAtom(a9); 213 IAtom a10 = mol.getBuilder().newInstance(IAtom.class, "O"); 214 a10.setFormalCharge(0); 215 a10.setPoint2d(new Point2d(9.9651, -0.616)); 216 mol.addAtom(a10); 217 IAtom a11 = mol.getBuilder().newInstance(IAtom.class, "O"); 218 a11.setFormalCharge(0); 219 a11.setPoint2d(new Point2d(8.9651, 1.116)); 220 mol.addAtom(a11); 221 IAtom a12 = mol.getBuilder().newInstance(IAtom.class, "C"); 222 a12.setFormalCharge(0); 223 a12.setPoint2d(new Point2d(6.001, 0.25)); 224 mol.addAtom(a12); 225 IAtom a13 = mol.getBuilder().newInstance(IAtom.class, "C"); 226 a13.setFormalCharge(0); 227 a13.setPoint2d(new Point2d(5.135, -0.25)); 228 mol.addAtom(a13); 229 IAtom a14 = mol.getBuilder().newInstance(IAtom.class, "C"); 230 a14.setFormalCharge(0); 231 a14.setPoint2d(new Point2d(6.8671, -0.25)); 232 mol.addAtom(a14); 233 IAtom a15 = mol.getBuilder().newInstance(IAtom.class, "C"); 234 a15.setFormalCharge(0); 235 a15.setPoint2d(new Point2d(4.269, 0.25)); 236 mol.addAtom(a15); 237 IAtom a16 = mol.getBuilder().newInstance(IAtom.class, "C"); 238 a16.setFormalCharge(0); 239 a16.setPoint2d(new Point2d(7.7331, 0.25)); 240 mol.addAtom(a16); 241 IAtom a17 = mol.getBuilder().newInstance(IAtom.class, "C"); 242 a17.setFormalCharge(0); 243 a17.setPoint2d(new Point2d(3.403, -0.25)); 244 mol.addAtom(a17); 245 IAtom a18 = mol.getBuilder().newInstance(IAtom.class, "H"); 246 a18.setFormalCharge(0); 247 a18.setPoint2d(new Point2d(6.538, 0.56)); 248 mol.addAtom(a18); 249 IAtom a19 = mol.getBuilder().newInstance(IAtom.class, "H"); 250 a19.setFormalCharge(0); 251 a19.setPoint2d(new Point2d(5.672, -0.56)); 252 mol.addAtom(a19); 253 IAtom a20 = mol.getBuilder().newInstance(IAtom.class, "H"); 254 a20.setFormalCharge(0); 255 a20.setPoint2d(new Point2d(6.3301, -0.56)); 256 mol.addAtom(a20); 257 IAtom a21 = mol.getBuilder().newInstance(IAtom.class, "H"); 258 a21.setFormalCharge(0); 259 a21.setPoint2d(new Point2d(4.8059, 0.56)); 260 mol.addAtom(a21); 261 IAtom a22 = mol.getBuilder().newInstance(IAtom.class, "H"); 262 a22.setFormalCharge(0); 263 a22.setPoint2d(new Point2d(8.1316, 0.7249)); 264 mol.addAtom(a22); 265 IAtom a23 = mol.getBuilder().newInstance(IAtom.class, "H"); 266 a23.setFormalCharge(0); 267 a23.setPoint2d(new Point2d(7.3346, 0.7249)); 268 mol.addAtom(a23); 269 IAtom a24 = mol.getBuilder().newInstance(IAtom.class, "H"); 270 a24.setFormalCharge(0); 271 a24.setPoint2d(new Point2d(6.538, 1.56)); 272 mol.addAtom(a24); 273 IAtom a25 = mol.getBuilder().newInstance(IAtom.class, "H"); 274 a25.setFormalCharge(0); 275 a25.setPoint2d(new Point2d(4.5981, -1.56)); 276 mol.addAtom(a25); 277 IAtom a26 = mol.getBuilder().newInstance(IAtom.class, "H"); 278 a26.setFormalCharge(0); 279 a26.setPoint2d(new Point2d(7.404, -1.56)); 280 mol.addAtom(a26); 281 IAtom a27 = mol.getBuilder().newInstance(IAtom.class, "H"); 282 a27.setFormalCharge(0); 283 a27.setPoint2d(new Point2d(3.732, 1.56)); 284 mol.addAtom(a27); 285 IAtom a28 = mol.getBuilder().newInstance(IAtom.class, "H"); 286 a28.setFormalCharge(0); 287 a28.setPoint2d(new Point2d(2.0, -0.06)); 288 mol.addAtom(a28); 289 IAtom a29 = mol.getBuilder().newInstance(IAtom.class, "H"); 290 a29.setFormalCharge(0); 291 a29.setPoint2d(new Point2d(10.8681, 0.44)); 292 mol.addAtom(a29); 293 IBond b1 = mol.getBuilder().newInstance(IBond.class, a1, a5, IBond.Order.SINGLE); 294 mol.addBond(b1); 295 IBond b2 = mol.getBuilder().newInstance(IBond.class, a1, a9, IBond.Order.SINGLE); 296 mol.addBond(b2); 297 IBond b3 = mol.getBuilder().newInstance(IBond.class, a1, a10, IBond.Order.DOUBLE); 298 mol.addBond(b3); 299 IBond b4 = mol.getBuilder().newInstance(IBond.class, a1, a11, IBond.Order.DOUBLE); 300 mol.addBond(b4); 301 IBond b5 = mol.getBuilder().newInstance(IBond.class, a2, a12, IBond.Order.SINGLE); 302 mol.addBond(b5); 303 IBond b6 = mol.getBuilder().newInstance(IBond.class, a2, a24, IBond.Order.SINGLE); 304 mol.addBond(b6); 305 IBond b7 = mol.getBuilder().newInstance(IBond.class, a3, a13, IBond.Order.SINGLE); 306 mol.addBond(b7); 307 IBond b8 = mol.getBuilder().newInstance(IBond.class, a3, a25, IBond.Order.SINGLE); 308 mol.addBond(b8); 309 IBond b9 = mol.getBuilder().newInstance(IBond.class, a4, a14, IBond.Order.SINGLE); 310 mol.addBond(b9); 311 IBond b10 = mol.getBuilder().newInstance(IBond.class, a4, a26, IBond.Order.SINGLE); 312 mol.addBond(b10); 313 IBond b11 = mol.getBuilder().newInstance(IBond.class, a5, a16, IBond.Order.SINGLE); 314 mol.addBond(b11); 315 IBond b12 = mol.getBuilder().newInstance(IBond.class, a6, a15, IBond.Order.SINGLE); 316 mol.addBond(b12); 317 IBond b13 = mol.getBuilder().newInstance(IBond.class, a6, a27, IBond.Order.SINGLE); 318 mol.addBond(b13); 319 IBond b14 = mol.getBuilder().newInstance(IBond.class, a7, a17, IBond.Order.SINGLE); 320 mol.addBond(b14); 321 IBond b15 = mol.getBuilder().newInstance(IBond.class, a7, a28, IBond.Order.SINGLE); 322 mol.addBond(b15); 323 IBond b16 = mol.getBuilder().newInstance(IBond.class, a8, a17, IBond.Order.DOUBLE); 324 mol.addBond(b16); 325 IBond b17 = mol.getBuilder().newInstance(IBond.class, a9, a29, IBond.Order.SINGLE); 326 mol.addBond(b17); 327 IBond b18 = mol.getBuilder().newInstance(IBond.class, a12, a13, IBond.Order.SINGLE); 328 mol.addBond(b18); 329 IBond b19 = mol.getBuilder().newInstance(IBond.class, a12, a14, IBond.Order.SINGLE); 330 mol.addBond(b19); 331 IBond b20 = mol.getBuilder().newInstance(IBond.class, a12, a18, IBond.Order.SINGLE); 332 mol.addBond(b20); 333 IBond b21 = mol.getBuilder().newInstance(IBond.class, a13, a15, IBond.Order.SINGLE); 334 mol.addBond(b21); 335 IBond b22 = mol.getBuilder().newInstance(IBond.class, a13, a19, IBond.Order.SINGLE); 336 mol.addBond(b22); 337 IBond b23 = mol.getBuilder().newInstance(IBond.class, a14, a16, IBond.Order.SINGLE); 338 mol.addBond(b23); 339 IBond b24 = mol.getBuilder().newInstance(IBond.class, a14, a20, IBond.Order.SINGLE); 340 mol.addBond(b24); 341 IBond b25 = mol.getBuilder().newInstance(IBond.class, a15, a17, IBond.Order.SINGLE); 342 mol.addBond(b25); 343 IBond b26 = mol.getBuilder().newInstance(IBond.class, a15, a21, IBond.Order.SINGLE); 344 mol.addBond(b26); 345 IBond b27 = mol.getBuilder().newInstance(IBond.class, a16, a22, IBond.Order.SINGLE); 346 mol.addBond(b27); 347 IBond b28 = mol.getBuilder().newInstance(IBond.class, a16, a23, IBond.Order.SINGLE); 348 mol.addBond(b28); 349 AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); 350 addImplicitHydrogens(mol); 351 IntegerResult result = (IntegerResult) descriptor.calculate(mol).getValue(); 352 Assert.assertEquals(2, result.intValue()); 353 } 354 } 355