1 package org.openscience.cdk.qsar.descriptors.molecular;
2 
3 import javax.vecmath.Point2d;
4 
5 import org.junit.Assert;
6 import org.junit.Before;
7 import org.junit.Test;
8 import org.openscience.cdk.AtomContainer;
9 import org.openscience.cdk.DefaultChemObjectBuilder;
10 import org.openscience.cdk.interfaces.IAtom;
11 import org.openscience.cdk.interfaces.IAtomContainer;
12 import org.openscience.cdk.interfaces.IBond;
13 import org.openscience.cdk.qsar.result.DoubleArrayResult;
14 import org.openscience.cdk.smiles.SmilesParser;
15 
16 /**
17  * TestSuite that runs all QSAR tests.
18  *
19  * @cdk.module test-qsarmolecular
20  */
21 
22 public class ChiClusterDescriptorTest extends MolecularDescriptorTest {
23 
ChiClusterDescriptorTest()24     public ChiClusterDescriptorTest() {}
25 
26     @Before
setUp()27     public void setUp() throws Exception {
28         setDescriptor(ChiClusterDescriptor.class);
29     }
30 
31     @Test
testDan64()32     public void testDan64() throws Exception {
33         IAtomContainer mol = new AtomContainer();
34         IAtom a1 = mol.getBuilder().newInstance(IAtom.class, "C");
35         a1.setPoint2d(new Point2d(0.7500000000000004, 2.799038105676658));
36         mol.addAtom(a1);
37         IAtom a2 = mol.getBuilder().newInstance(IAtom.class, "C");
38         a2.setPoint2d(new Point2d(0.0, 1.5));
39         mol.addAtom(a2);
40         IAtom a3 = mol.getBuilder().newInstance(IAtom.class, "C");
41         a3.setPoint2d(new Point2d(0.0, 0.0));
42         mol.addAtom(a3);
43         IAtom a4 = mol.getBuilder().newInstance(IAtom.class, "O");
44         a4.setPoint2d(new Point2d(-1.2990381056766582, 0.7500000000000001));
45         mol.addAtom(a4);
46         IBond b1 = mol.getBuilder().newInstance(IBond.class, a2, a1, IBond.Order.SINGLE);
47         mol.addBond(b1);
48         IBond b2 = mol.getBuilder().newInstance(IBond.class, a3, a2, IBond.Order.SINGLE);
49         mol.addBond(b2);
50         IBond b3 = mol.getBuilder().newInstance(IBond.class, a4, a3, IBond.Order.SINGLE);
51         mol.addBond(b3);
52         IBond b4 = mol.getBuilder().newInstance(IBond.class, a4, a2, IBond.Order.SINGLE);
53         mol.addBond(b4);
54 
55         DoubleArrayResult ret = (DoubleArrayResult) descriptor.calculate(mol).getValue();
56 
57         Assert.assertEquals(0.2887, ret.get(0), 0.0001);
58         Assert.assertEquals(0.0000, ret.get(1), 0.0001);
59         Assert.assertEquals(0.0000, ret.get(2), 0.0001);
60         Assert.assertEquals(0.0000, ret.get(3), 0.0001);
61         Assert.assertEquals(0.1667, ret.get(4), 0.0001);
62         Assert.assertEquals(0.0000, ret.get(5), 0.0001);
63         Assert.assertEquals(0.0000, ret.get(6), 0.0001);
64         Assert.assertEquals(0.0000, ret.get(7), 0.0001);
65     }
66 
67     @Test
testDan154()68     public void testDan154() throws Exception {
69 
70         IAtomContainer mol = new AtomContainer();
71         IAtom a1 = mol.getBuilder().newInstance(IAtom.class, "C");
72         a1.setPoint2d(new Point2d(0.0, 1.5));
73         mol.addAtom(a1);
74         IAtom a2 = mol.getBuilder().newInstance(IAtom.class, "C");
75         a2.setPoint2d(new Point2d(0.0, 0.0));
76         mol.addAtom(a2);
77         IAtom a3 = mol.getBuilder().newInstance(IAtom.class, "C");
78         a3.setPoint2d(new Point2d(-1.2990381056766584, -0.7500000000000001));
79         mol.addAtom(a3);
80         IAtom a4 = mol.getBuilder().newInstance(IAtom.class, "C");
81         a4.setPoint2d(new Point2d(-2.598076211353316, -2.220446049250313E-16));
82         mol.addAtom(a4);
83         IAtom a5 = mol.getBuilder().newInstance(IAtom.class, "C");
84         a5.setPoint2d(new Point2d(-2.5980762113533165, 1.5));
85         mol.addAtom(a5);
86         IAtom a6 = mol.getBuilder().newInstance(IAtom.class, "C");
87         a6.setPoint2d(new Point2d(-1.2990381056766582, 2.2500000000000004));
88         mol.addAtom(a6);
89         IAtom a7 = mol.getBuilder().newInstance(IAtom.class, "Cl");
90         a7.setPoint2d(new Point2d(-1.2990381056766582, 3.7500000000000004));
91         mol.addAtom(a7);
92         IAtom a8 = mol.getBuilder().newInstance(IAtom.class, "Cl");
93         a8.setPoint2d(new Point2d(1.2990381056766576, -0.7500000000000007));
94         mol.addAtom(a8);
95         IBond b1 = mol.getBuilder().newInstance(IBond.class, a2, a1, IBond.Order.DOUBLE);
96         mol.addBond(b1);
97         IBond b2 = mol.getBuilder().newInstance(IBond.class, a3, a2, IBond.Order.SINGLE);
98         mol.addBond(b2);
99         IBond b3 = mol.getBuilder().newInstance(IBond.class, a4, a3, IBond.Order.DOUBLE);
100         mol.addBond(b3);
101         IBond b4 = mol.getBuilder().newInstance(IBond.class, a5, a4, IBond.Order.SINGLE);
102         mol.addBond(b4);
103         IBond b5 = mol.getBuilder().newInstance(IBond.class, a6, a5, IBond.Order.DOUBLE);
104         mol.addBond(b5);
105         IBond b6 = mol.getBuilder().newInstance(IBond.class, a6, a1, IBond.Order.SINGLE);
106         mol.addBond(b6);
107         IBond b7 = mol.getBuilder().newInstance(IBond.class, a7, a6, IBond.Order.SINGLE);
108         mol.addBond(b7);
109         IBond b8 = mol.getBuilder().newInstance(IBond.class, a8, a2, IBond.Order.SINGLE);
110         mol.addBond(b8);
111 
112         DoubleArrayResult ret = (DoubleArrayResult) descriptor.calculate(mol).getValue();
113 
114         Assert.assertEquals(0.5774, ret.get(0), 0.0001);
115         Assert.assertEquals(0.0000, ret.get(1), 0.0001);
116         Assert.assertEquals(0.0000, ret.get(2), 0.0001);
117         Assert.assertEquals(0.0000, ret.get(3), 0.0001);
118         Assert.assertEquals(0.3780, ret.get(4), 0.0001);
119         Assert.assertEquals(0.0000, ret.get(5), 0.0001);
120         Assert.assertEquals(0.0000, ret.get(6), 0.0001);
121         Assert.assertEquals(0.0000, ret.get(7), 0.0001);
122     }
123 
124     @Test
testDan248()125     public void testDan248() throws Exception {
126 
127         IAtomContainer mol = new AtomContainer();
128         IAtom a1 = mol.getBuilder().newInstance(IAtom.class, "C");
129         a1.setPoint2d(new Point2d(0.0, 1.5));
130         mol.addAtom(a1);
131         IAtom a2 = mol.getBuilder().newInstance(IAtom.class, "C");
132         a2.setPoint2d(new Point2d(0.0, 0.0));
133         mol.addAtom(a2);
134         IAtom a3 = mol.getBuilder().newInstance(IAtom.class, "C");
135         a3.setPoint2d(new Point2d(-1.2990381056766584, -0.7500000000000001));
136         mol.addAtom(a3);
137         IAtom a4 = mol.getBuilder().newInstance(IAtom.class, "C");
138         a4.setPoint2d(new Point2d(-2.598076211353316, -2.220446049250313E-16));
139         mol.addAtom(a4);
140         IAtom a5 = mol.getBuilder().newInstance(IAtom.class, "C");
141         a5.setPoint2d(new Point2d(-2.5980762113533165, 1.5));
142         mol.addAtom(a5);
143         IAtom a6 = mol.getBuilder().newInstance(IAtom.class, "C");
144         a6.setPoint2d(new Point2d(-1.2990381056766582, 2.2500000000000004));
145         mol.addAtom(a6);
146         IAtom a7 = mol.getBuilder().newInstance(IAtom.class, "C");
147         a7.setPoint2d(new Point2d(-3.897114317029975, 2.249999999999999));
148         mol.addAtom(a7);
149         IAtom a8 = mol.getBuilder().newInstance(IAtom.class, "O");
150         a8.setPoint2d(new Point2d(-1.2990381056766587, -2.25));
151         mol.addAtom(a8);
152         IAtom a9 = mol.getBuilder().newInstance(IAtom.class, "C");
153         a9.setPoint2d(new Point2d(1.477211629518312, 1.2395277334996044));
154         mol.addAtom(a9);
155         IAtom a10 = mol.getBuilder().newInstance(IAtom.class, "C");
156         a10.setPoint2d(new Point2d(0.5130302149885025, 2.909538931178863));
157         mol.addAtom(a10);
158         IBond b1 = mol.getBuilder().newInstance(IBond.class, a2, a1, IBond.Order.SINGLE);
159         mol.addBond(b1);
160         IBond b2 = mol.getBuilder().newInstance(IBond.class, a3, a2, IBond.Order.SINGLE);
161         mol.addBond(b2);
162         IBond b3 = mol.getBuilder().newInstance(IBond.class, a4, a3, IBond.Order.SINGLE);
163         mol.addBond(b3);
164         IBond b4 = mol.getBuilder().newInstance(IBond.class, a5, a4, IBond.Order.DOUBLE);
165         mol.addBond(b4);
166         IBond b5 = mol.getBuilder().newInstance(IBond.class, a6, a5, IBond.Order.SINGLE);
167         mol.addBond(b5);
168         IBond b6 = mol.getBuilder().newInstance(IBond.class, a6, a1, IBond.Order.SINGLE);
169         mol.addBond(b6);
170         IBond b7 = mol.getBuilder().newInstance(IBond.class, a7, a5, IBond.Order.SINGLE);
171         mol.addBond(b7);
172         IBond b8 = mol.getBuilder().newInstance(IBond.class, a8, a3, IBond.Order.DOUBLE);
173         mol.addBond(b8);
174         IBond b9 = mol.getBuilder().newInstance(IBond.class, a9, a1, IBond.Order.SINGLE);
175         mol.addBond(b9);
176         IBond b10 = mol.getBuilder().newInstance(IBond.class, a10, a1, IBond.Order.SINGLE);
177         mol.addBond(b10);
178 
179         DoubleArrayResult ret = (DoubleArrayResult) descriptor.calculate(mol).getValue();
180 
181         Assert.assertEquals(1.7845, ret.get(0), 0.0001);
182         Assert.assertEquals(0.2500, ret.get(1), 0.0001);
183         Assert.assertEquals(0.0000, ret.get(2), 0.0001);
184         Assert.assertEquals(0.0000, ret.get(3), 0.0001);
185         Assert.assertEquals(1.4946, ret.get(4), 0.0001);
186         Assert.assertEquals(0.2500, ret.get(5), 0.0001);
187         Assert.assertEquals(0.0000, ret.get(6), 0.0001);
188         Assert.assertEquals(0.0000, ret.get(7), 0.0001);
189     }
190 
191     /**
192      * @cdk.bug 3023326
193      */
194     @Test
testCovalentMetal()195     public void testCovalentMetal() throws Exception {
196         SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
197         IAtomContainer mol = sp.parseSmiles("CCCC[Sn](CCCC)(CCCC)c1cc(Cl)c(Nc2nc(C)nc(N(CCC)CC3CC3)c2Cl)c(Cl)c1");
198         DoubleArrayResult ret = (DoubleArrayResult) descriptor.calculate(mol).getValue();
199         Assert.assertNotNull(ret);
200     }
201 
202     /**
203      * @cdk.bug 3023326
204      */
205     @Test(expected = NullPointerException.class)
testCovalentPlatinum()206     public void testCovalentPlatinum() throws Exception {
207         SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
208         IAtomContainer mol = sp.parseSmiles("CC1CN[Pt]2(N1)OC(=O)C(C)P(=O)(O)O2");
209         descriptor.calculate(mol).getValue();
210     }
211 
212     //    @Test public void testDan277() throws CDKException {
213     //
214     //        IAtomContainer mol = null;
215     //
216     //        ChiClusterDescriptor desc = new ChiClusterDescriptor();
217     //        DoubleArrayResult ret = (DoubleArrayResult) desc.calculate(mol).getValue();
218     //
219     //        Assert.assertEquals(0.0000, ret.get(0), 0.0001);
220     //        Assert.assertEquals(0.0000, ret.get(1), 0.0001);
221     //        Assert.assertEquals(0.0000, ret.get(2), 0.0001);
222     //        Assert.assertEquals(0.08333, ret.get(3), 0.00001);
223     //        Assert.assertEquals(0.0000, ret.get(4), 0.0001);
224     //        Assert.assertEquals(0.0000, ret.get(5), 0.0001);
225     //        Assert.assertEquals(0.0000, ret.get(6), 0.0001);
226     //        Assert.assertEquals(0.02778, ret.get(7), 0.00001);
227     //    }
228 
229 }
230