1 /* 2 * Copyright (C) 2016 Sereina Riniker, Paolo Tosco 3 * 4 * @@ All Rights Reserved @@ 5 * This file is part of the RDKit. 6 * The contents are covered by the terms of the BSD license 7 * which is included in the file license.txt, found at the root 8 * of the RDKit source tree. 9 */ 10 11 package org.RDKit; 12 13 import static org.junit.Assert.*; 14 15 import java.io.File; 16 import java.io.FileReader; 17 import java.io.BufferedReader; 18 19 import org.junit.Test; 20 21 public class TrajectoryTests extends GraphMolTest { 22 @Test testBasicInstantiation_Snapshot()23 public void testBasicInstantiation_Snapshot() { 24 Shared_Double_Array pos = new Shared_Double_Array(); 25 Snapshot s = new Snapshot(pos); 26 assertNotNull(s); 27 } 28 29 @Test testSnapshot()30 public void testSnapshot() { 31 Shared_Double_Array pos = new Shared_Double_Array(); 32 Snapshot s = new Snapshot(pos); 33 boolean e = false; 34 try { 35 s.getPoint2D(12); 36 } 37 catch (GenericRDKitException ex) { 38 e = true; 39 } 40 assertEquals(true, e); 41 } 42 43 @Test testTrajectory2D()44 public void testTrajectory2D() { 45 final int dim = 2; 46 final int np = 10; 47 final int ns = 5; 48 Trajectory traj = new Trajectory(dim, np); 49 assertEquals(traj.dimension(), dim); 50 assertEquals(traj.numPoints(), np); 51 final int posLen = np * dim; 52 Double_Vect dv = new Double_Vect(posLen); 53 for (int i = 0; i < posLen; ++i) 54 dv.set(i, (double)i); 55 for (int i = 0; i < ns; ++i) 56 traj.addSnapshot(new Snapshot(dv, (double)i)); 57 assertEquals(traj.size(), ns); 58 boolean e = false; 59 try { 60 traj.getSnapshot(ns); 61 } 62 catch (GenericRDKitException ex) { 63 e = true; 64 } 65 assertEquals(true, e); 66 e = false; 67 try { 68 traj.getSnapshot(0).getPoint2D(np); 69 } 70 catch (GenericRDKitException ex) { 71 e = true; 72 } 73 assertEquals(true, e); 74 for (int i = 0; i < np; ++i) { 75 assertEquals(traj.getSnapshot(0).getPoint2D(i).getX(), (double)(i * dim), 0.001); 76 assertEquals(traj.getSnapshot(0).getPoint2D(i).getY(), (double)(i * dim + 1), 0.001); 77 e = false; 78 try { 79 assertEquals(traj.getSnapshot(0).getPoint3D(i).getZ(), 0.0, 0.001); 80 } 81 catch (GenericRDKitException ex) { 82 e = true; 83 } 84 assertEquals(false, e); 85 } 86 for (int i = 0; i < ns; ++i) 87 assertEquals((double)(i), traj.getSnapshot(i).getEnergy(), 0.001); 88 traj.removeSnapshot(0); 89 assertEquals(ns - 1, traj.size()); 90 for (int i = 0; i < (ns - 1); ++i) 91 assertEquals((double)(i + 1), traj.getSnapshot(i).getEnergy(), 0.001); 92 traj.insertSnapshot(0, new Snapshot(dv, 999.0)); 93 assertEquals(ns, traj.size()); 94 Snapshot copySnapshot = new Snapshot(traj.getSnapshot(0)); 95 traj.addSnapshot(copySnapshot); 96 assertEquals(ns + 1, traj.size()); 97 assertEquals(999.0, traj.getSnapshot(0).getEnergy(), 0.001); 98 assertEquals(1.0, traj.getSnapshot(1).getEnergy(), 0.001); 99 assertEquals(999.0, traj.getSnapshot(traj.size() - 1).getEnergy(), 0.001); 100 Trajectory traj2 = new Trajectory(traj); 101 assertEquals(traj2.size(), traj.size()); 102 } 103 104 @Test testTrajectory3D()105 public void testTrajectory3D() { 106 final int dim = 3; 107 final int np = 10; 108 final int ns = 5; 109 Trajectory traj = new Trajectory(dim, np); 110 assertEquals(dim, traj.dimension()); 111 assertEquals(np, traj.numPoints()); 112 final int posLen = np * dim; 113 Double_Vect dv = new Double_Vect(posLen); 114 for (int i = 0; i < posLen; ++i) 115 dv.set(i, (double)i); 116 for (int i = 0; i < ns; ++i) 117 traj.addSnapshot(new Snapshot(dv, (double)i)); 118 assertEquals(ns, traj.size()); 119 boolean e = false; 120 try { 121 traj.getSnapshot(ns); 122 } 123 catch (GenericRDKitException ex) { 124 e = true; 125 } 126 assertEquals(true, e); 127 e = false; 128 try { 129 traj.getSnapshot(0).getPoint2D(np); 130 } 131 catch (GenericRDKitException ex) { 132 e = true; 133 } 134 assertEquals(true, e); 135 for (int i = 0; i < np; ++i) { 136 assertEquals((double)(i * dim), traj.getSnapshot(0).getPoint3D(i).getX(), 0.001); 137 assertEquals((double)(i * dim + 1), traj.getSnapshot(0).getPoint3D(i).getY(), 0.001); 138 assertEquals((double)(i * dim + 2), traj.getSnapshot(0).getPoint3D(i).getZ(), 0.001); 139 if (i == 0) { 140 e = false; 141 try { 142 traj.getSnapshot(0).getPoint2D(i); 143 } 144 catch (GenericRDKitException ex) { 145 e = true; 146 } 147 assertEquals(true, e); 148 } 149 } 150 for (int i = 0; i < ns; ++i) 151 assertEquals((double)(i), traj.getSnapshot(i).getEnergy(), 0.001); 152 traj.removeSnapshot(0); 153 assertEquals(ns - 1, traj.size()); 154 for (int i = 0; i < (ns - 1); ++i) 155 assertEquals((double)(i + 1), traj.getSnapshot(i).getEnergy(), 0.001); 156 traj.insertSnapshot(0, new Snapshot(dv, 999.0)); 157 assertEquals(ns, traj.size()); 158 Snapshot copySnapshot = new Snapshot(traj.getSnapshot(0)); 159 traj.addSnapshot(copySnapshot); 160 assertEquals(ns + 1, traj.size()); 161 assertEquals(999.0, traj.getSnapshot(0).getEnergy(), 0.001); 162 assertEquals(1.0, traj.getSnapshot(1).getEnergy(), 0.001); 163 assertEquals(999.0, traj.getSnapshot(traj.size() - 1).getEnergy(), 0.001); 164 Trajectory traj2 = new Trajectory(traj); 165 assertEquals(traj2.size(), traj.size()); 166 } 167 168 @Test testReadAmber()169 public void testReadAmber() { 170 String rdpath = System.getenv("RDBASE"); 171 if (rdpath == null) 172 org.junit.Assert.fail("No definition for RDBASE"); 173 File base = new File(rdpath); 174 File testFile = new File(base, "Code" + File.separator + "GraphMol" 175 + File.separator + "test_data" + File.separator + "water_coords_bad.trx"); 176 String fName = testFile.getAbsolutePath(); 177 Trajectory traj = new Trajectory(2, 0); 178 boolean e = false; 179 try { 180 RDKFuncs.readAmberTrajectory(fName, traj); 181 } 182 catch (GenericRDKitException ex) { 183 e = true; 184 } 185 assertEquals(true, e); 186 traj = new Trajectory(3, 3); 187 e = false; 188 try { 189 RDKFuncs.readAmberTrajectory(fName, traj); 190 } 191 catch (GenericRDKitException ex) { 192 e = true; 193 } 194 assertEquals(true, e); 195 testFile = new File(base, "Code" + File.separator + "GraphMol" 196 + File.separator + "test_data" + File.separator + "water_coords_bad2.trx"); 197 fName = testFile.getAbsolutePath(); 198 e = false; 199 traj = new Trajectory(3, 3); 200 try { 201 RDKFuncs.readAmberTrajectory(fName, traj); 202 } 203 catch (GenericRDKitException ex) { 204 e = true; 205 } 206 assertEquals(true, e); 207 testFile = new File(base, "Code" + File.separator + "GraphMol" 208 + File.separator + "test_data" + File.separator + "water_coords.trx"); 209 fName = testFile.getAbsolutePath(); 210 traj = new Trajectory(3, 3); 211 RDKFuncs.readAmberTrajectory(fName, traj); 212 assertEquals(traj.size(), 1); 213 testFile = new File(base, "Code" + File.separator + "GraphMol" 214 + File.separator + "test_data" + File.separator + "water_coords2.trx"); 215 fName = testFile.getAbsolutePath(); 216 traj = new Trajectory(3, 3); 217 RDKFuncs.readAmberTrajectory(fName, traj); 218 assertEquals(traj.size(), 2); 219 } 220 221 @Test testReadAmberJava()222 public void testReadAmberJava() { 223 /* 224 reimplemented the Amber trajectory reader in Java 225 let's check we get the same data as the C++ reader 226 (test for building a trajectory out of Snapshots from Java) 227 */ 228 String rdpath = System.getenv("RDBASE"); 229 if (rdpath == null) 230 org.junit.Assert.fail("No definition for RDBASE"); 231 File base = new File(rdpath); 232 File testFile = new File(base, "Code" + File.separator + "GraphMol" 233 + File.separator + "test_data" + File.separator + "water_coords2.trx"); 234 String fName = testFile.getAbsolutePath(); 235 Trajectory traj = new Trajectory(3, 3); 236 long nCoords = traj.numPoints() * 3; 237 int nSnapshots = 0; 238 BufferedReader r = null; 239 try { 240 r = new BufferedReader(new FileReader(testFile)); 241 } 242 catch (Exception e) { 243 org.junit.Assert.fail("Could not open " + fName); 244 } 245 int lineNum = 0; 246 Double_Vect dv = new Double_Vect(); 247 int i = 0; 248 String line = null; 249 try { 250 line = r.readLine(); 251 } 252 catch (Exception e) { 253 org.junit.Assert.fail("Could not read from " + fName); 254 } 255 while (line != null) { 256 ++lineNum; 257 if (lineNum > 1) { 258 String[] tok = line.split(" +"); 259 int j = 0; 260 for (; (i < nCoords) && (j < tok.length); ++j) { 261 if (tok[j].length() == 0) continue; 262 dv.add(Double.parseDouble(tok[j])); 263 ++i; 264 } 265 line = ""; 266 if (i == nCoords) { 267 ++nSnapshots; 268 traj.addSnapshot(new Snapshot(dv)); 269 dv.clear(); 270 i = 0; 271 for (; j < tok.length; ++j) { 272 if (tok[j].length() > 0) 273 line += tok[j] + " "; 274 } 275 } 276 } 277 else { 278 line = ""; 279 } 280 try { 281 String lineNew = r.readLine(); 282 if (lineNew != null) 283 line += lineNew; 284 else if (line.length() == 0) 285 line = null; 286 } 287 catch (Exception e) { 288 org.junit.Assert.fail("Could not read from " + fName); 289 } 290 } 291 try { 292 r.close(); 293 } 294 catch (Exception e) { 295 org.junit.Assert.fail("Could not close " + fName); 296 } 297 assertEquals(0, i); 298 assertEquals(2, nSnapshots); 299 Trajectory traj2 = new Trajectory(3, 3); 300 RDKFuncs.readAmberTrajectory(fName, traj2); 301 assertEquals(traj2.size(), traj.size()); 302 assertEquals(traj2.numPoints(), traj.numPoints()); 303 for (int snapshotNum = 0; snapshotNum < traj.size(); ++snapshotNum) { 304 for (int pointNum = 0; pointNum < traj.numPoints(); ++pointNum) { 305 assertEquals(traj2.getSnapshot(snapshotNum).getPoint3D(pointNum).getX(), 306 traj.getSnapshot(snapshotNum).getPoint3D(pointNum).getX(), 0.001); 307 assertEquals(traj2.getSnapshot(snapshotNum).getPoint3D(pointNum).getY(), 308 traj.getSnapshot(snapshotNum).getPoint3D(pointNum).getY(), 0.001); 309 assertEquals(traj2.getSnapshot(snapshotNum).getPoint3D(pointNum).getZ(), 310 traj.getSnapshot(snapshotNum).getPoint3D(pointNum).getZ(), 0.001); 311 } 312 } 313 } 314 315 @Test testReadGromos()316 public void testReadGromos() { 317 String rdpath = System.getenv("RDBASE"); 318 if (rdpath == null) 319 org.junit.Assert.fail("No definition for RDBASE"); 320 File base = new File(rdpath); 321 File testFile = new File(base, "Code" + File.separator + "GraphMol" 322 + File.separator + "test_data" + File.separator + "water_coords_bad.trc"); 323 String fName = testFile.getAbsolutePath(); 324 Trajectory traj = new Trajectory(2, 0); 325 boolean e = false; 326 try { 327 RDKFuncs.readGromosTrajectory(fName, traj); 328 } 329 catch (GenericRDKitException ex) { 330 e = true; 331 } 332 assertEquals(true, e); 333 traj = new Trajectory(3, 3); 334 e = false; 335 try { 336 RDKFuncs.readGromosTrajectory(fName, traj); 337 } 338 catch (GenericRDKitException ex) { 339 e = true; 340 } 341 assertEquals(true, e); 342 testFile = new File(base, "Code" + File.separator + "GraphMol" 343 + File.separator + "test_data" + File.separator + "water_coords_bad2.trc"); 344 fName = testFile.getAbsolutePath(); 345 e = false; 346 traj = new Trajectory(3, 3); 347 try { 348 RDKFuncs.readGromosTrajectory(fName, traj); 349 } 350 catch (GenericRDKitException ex) { 351 e = true; 352 } 353 assertEquals(true, e); 354 testFile = new File(base, "Code" + File.separator + "GraphMol" 355 + File.separator + "test_data" + File.separator + "water_coords.trc"); 356 fName = testFile.getAbsolutePath(); 357 traj = new Trajectory(3, 3); 358 RDKFuncs.readGromosTrajectory(fName, traj); 359 assertEquals(traj.size(), 1); 360 testFile = new File(base, "Code" + File.separator + "GraphMol" 361 + File.separator + "test_data" + File.separator + "water_coords2.trc"); 362 fName = testFile.getAbsolutePath(); 363 traj = new Trajectory(3, 3); 364 RDKFuncs.readGromosTrajectory(fName, traj); 365 assertEquals(traj.size(), 2); 366 } 367 368 @Test testAddConformersFromTrajectory()369 public void testAddConformersFromTrajectory() { 370 String molBlock = 371 "\n" + 372 " RDKit 3D\n" + 373 "\n" + 374 " 71 74 0 0 0 0 0 0 0 0999 V2000\n" + 375 " 8.2543 3.1901 -0.3005 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 376 " 7.4558 1.9712 0.0938 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 377 " 7.3934 1.0441 -0.9483 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + 378 " 6.6660 -0.0533 -0.4641 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 379 " 5.1928 0.2346 -0.4609 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 380 " 4.3713 -0.9410 -0.5770 N 0 0 0 0 0 0 0 0 0 0 0 0\n" + 381 " 3.1852 -1.0034 -1.2291 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 382 " 2.2914 0.1276 -1.6316 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 383 " 0.9308 -0.4468 -1.9908 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 384 " 0.1417 -0.7821 -0.7545 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 385 " -0.1848 0.3695 0.0456 N 0 0 0 0 0 0 0 0 0 0 0 0\n" + 386 " -1.5661 0.7686 -0.0745 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 387 " -2.4768 -0.0640 0.8206 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 388 " -3.8874 0.1143 0.3941 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 389 " -4.6333 -0.9984 0.0264 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 390 " -6.0127 -0.9516 -0.0400 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 391 " -6.7062 0.1599 0.3963 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 392 " -8.0408 0.4828 -0.1977 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 393 " -7.7914 1.1180 -1.5591 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 394 " -8.7622 1.4403 0.7265 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 395 " -8.8409 -0.7397 -0.4395 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 396 " -8.9121 -1.6637 0.4258 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + 397 " -9.7414 -0.7636 -1.5059 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + 398 " -5.9736 1.2357 0.8565 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 399 " -4.5843 1.2252 0.8530 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 400 " 0.6263 1.4884 -0.3942 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 401 " 2.0541 1.0258 -0.4230 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 402 " 2.9225 -2.3317 -1.2963 N 0 0 0 0 0 0 0 0 0 0 0 0\n" + 403 " 3.6061 -2.9745 -0.3180 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 404 " 3.3554 -4.1536 0.3735 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 405 " 3.7653 -4.2712 1.6948 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 406 " 4.8254 -3.4613 2.0796 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 407 " 5.1978 -2.3436 1.3419 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 408 " 4.5694 -2.0799 0.1305 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + 409 " 9.3138 3.1372 0.0031 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 410 " 7.8117 4.0754 0.1798 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 411 " 8.2358 3.3535 -1.4074 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 412 " 6.4027 2.2146 0.3634 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 413 " 7.9270 1.5444 1.0040 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 414 " 7.0677 -0.2415 0.5615 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 415 " 6.9530 -0.9105 -1.1025 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 416 " 4.9578 0.7259 0.5137 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 417 " 4.9985 0.9430 -1.3033 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 418 " 2.7171 0.7264 -2.4494 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 419 " 0.3994 0.2339 -2.6810 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 420 " 1.1342 -1.4171 -2.5076 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 421 " -0.7632 -1.3370 -1.0391 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 422 " 0.7845 -1.4394 -0.1311 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 423 " 0.0125 0.1989 1.0673 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 424 " -1.6672 1.8215 0.2925 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 425 " -1.8705 0.7271 -1.1337 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 426 " -2.3045 0.3159 1.8590 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 427 " -2.1980 -1.1367 0.7635 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 428 " -4.1513 -1.9468 -0.2114 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 429 " -6.6138 -1.7460 -0.4718 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 430 " -7.0727 0.4399 -2.0858 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 431 " -7.3144 2.1076 -1.4482 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 432 " -8.7609 1.1720 -2.1135 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 433 " -8.3137 2.4504 0.5729 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 434 " -8.6170 1.0817 1.7580 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 435 " -9.8244 1.4444 0.4200 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 436 " -6.4629 2.0541 1.3719 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 437 " -4.0445 2.0563 1.3058 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 438 " 0.3329 1.8224 -1.3991 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 439 " 0.4920 2.3164 0.3160 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 440 " 2.2025 0.3766 0.4766 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 441 " 2.7945 1.8369 -0.3969 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 442 " 2.4404 -4.6964 0.1303 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 443 " 3.3157 -5.0055 2.3587 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 444 " 5.4272 -3.7654 2.9380 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 445 " 5.5668 -1.5069 1.9380 H 0 0 0 0 0 0 0 0 0 0 0 0\n" + 446 " 1 2 1 0\n" + 447 " 2 3 1 0\n" + 448 " 3 4 1 0\n" + 449 " 4 5 1 0\n" + 450 " 5 6 1 0\n" + 451 " 6 7 1 0\n" + 452 " 7 8 1 0\n" + 453 " 8 9 1 0\n" + 454 " 9 10 1 0\n" + 455 " 10 11 1 0\n" + 456 " 11 12 1 0\n" + 457 " 12 13 1 0\n" + 458 " 13 14 1 0\n" + 459 " 14 15 2 0\n" + 460 " 15 16 1 0\n" + 461 " 16 17 2 0\n" + 462 " 17 18 1 0\n" + 463 " 18 19 1 0\n" + 464 " 18 20 1 0\n" + 465 " 18 21 1 0\n" + 466 " 21 22 2 0\n" + 467 " 21 23 1 0\n" + 468 " 17 24 1 0\n" + 469 " 24 25 2 0\n" + 470 " 11 26 1 0\n" + 471 " 26 27 1 0\n" + 472 " 7 28 2 0\n" + 473 " 28 29 1 0\n" + 474 " 29 30 2 0\n" + 475 " 30 31 1 0\n" + 476 " 31 32 2 0\n" + 477 " 32 33 1 0\n" + 478 " 33 34 2 0\n" + 479 " 34 6 1 0\n" + 480 " 27 8 1 0\n" + 481 " 34 29 1 0\n" + 482 " 25 14 1 0\n" + 483 " 1 35 1 0\n" + 484 " 1 36 1 0\n" + 485 " 1 37 1 0\n" + 486 " 2 38 1 0\n" + 487 " 2 39 1 0\n" + 488 " 4 40 1 0\n" + 489 " 4 41 1 0\n" + 490 " 5 42 1 0\n" + 491 " 5 43 1 0\n" + 492 " 8 44 1 0\n" + 493 " 9 45 1 0\n" + 494 " 9 46 1 0\n" + 495 " 10 47 1 0\n" + 496 " 10 48 1 0\n" + 497 " 11 49 1 0\n" + 498 " 12 50 1 0\n" + 499 " 12 51 1 0\n" + 500 " 13 52 1 0\n" + 501 " 13 53 1 0\n" + 502 " 15 54 1 0\n" + 503 " 16 55 1 0\n" + 504 " 19 56 1 0\n" + 505 " 19 57 1 0\n" + 506 " 19 58 1 0\n" + 507 " 20 59 1 0\n" + 508 " 20 60 1 0\n" + 509 " 20 61 1 0\n" + 510 " 24 62 1 0\n" + 511 " 25 63 1 0\n" + 512 " 26 64 1 0\n" + 513 " 26 65 1 0\n" + 514 " 27 66 1 0\n" + 515 " 27 67 1 0\n" + 516 " 30 68 1 0\n" + 517 " 31 69 1 0\n" + 518 " 32 70 1 0\n" + 519 " 33 71 1 0\n" + 520 "M CHG 2 11 1 23 -1\n" + 521 "M END\n"; 522 ROMol mol = RWMol.MolFromMolBlock(molBlock, true, false); 523 final int everySteps = 10; 524 final int maxIts = 1000; 525 final double gradTol = 0.01; 526 String rdpath = System.getenv("RDBASE"); 527 if (rdpath == null) 528 org.junit.Assert.fail("No definition for RDBASE"); 529 File base = new File(rdpath); 530 File testFile = new File(base, "Code" + File.separator + "GraphMol" 531 + File.separator + "test_data" + File.separator + "bilastine_trajectory_java.sdf"); 532 String fName = testFile.getAbsolutePath(); 533 SDWriter w = new SDWriter(fName); 534 ForceField field = ForceField.MMFFGetMoleculeForceField(mol); 535 field.initialize(); 536 SWIGTYPE_p_std__vectorT_RDKit__Snapshot_t sv = Snapshot.SnapshotVect(); 537 int res = field.minimize(everySteps, sv, maxIts, gradTol); 538 assertEquals(0, res); 539 Trajectory traj = new Trajectory(3, mol.getNumAtoms(), sv); 540 mol.removeConformer(0); 541 traj.addConformersToMol(mol); 542 for (int nConf = 0; nConf < mol.getNumConformers(); ++nConf) { 543 String ss = String.format("%.4f", traj.getSnapshot(nConf).getEnergy()); 544 mol.setProp("ENERGY", ss, false); 545 w.write(mol, nConf); 546 } 547 w.close(); 548 traj.clear(); 549 long n1 = mol.getNumConformers(); 550 traj.addConformersToMol(mol); 551 long n2 = mol.getNumConformers(); 552 assertEquals(n2, n1); 553 // getSnapshot should raise exception after Clear() 554 boolean e = false; 555 try { 556 traj.getSnapshot(0); 557 } 558 catch (GenericRDKitException ex) { 559 e = true; 560 } 561 assertEquals(true, e); 562 } 563 564 @Test testAddConformersFromAmberTrajectory()565 public void testAddConformersFromAmberTrajectory() { 566 ROMol mol = RWMol.MolFromSmiles("CCC"); 567 String rdpath = System.getenv("RDBASE"); 568 if (rdpath == null) 569 org.junit.Assert.fail("No definition for RDBASE"); 570 File base = new File(rdpath); 571 File testFile = new File(base, "Code" + File.separator + "GraphMol" 572 + File.separator + "test_data" + File.separator + "water_coords.trx"); 573 String fName = testFile.getAbsolutePath(); 574 { 575 Trajectory traj = new Trajectory(3, mol.getNumAtoms()); 576 RDKFuncs.readAmberTrajectory(fName, traj); 577 assertEquals(1, traj.size()); 578 for (int i = 0; i < 2; ++i) { 579 traj.addConformersToMol(mol); 580 assertEquals(i + 1, mol.getNumConformers()); 581 assertEquals(3, mol.getConformer(i).getNumAtoms()); 582 assertEquals(0.1941767, mol.getConformer(i).getAtomPos(0).getX(), 0.001); 583 assertEquals(-0.4088006, mol.getConformer(i).getAtomPos(2).getZ(), 0.001); 584 } 585 mol.clearConformers(); 586 boolean e = false; 587 try { 588 traj.addConformersToMol(mol, 1); 589 } 590 catch (GenericRDKitException ex) { 591 e = true; 592 } 593 assertEquals(true, e); 594 assertEquals(0, mol.getNumConformers()); 595 } 596 testFile = new File(base, "Code" + File.separator + "GraphMol" 597 + File.separator + "test_data" + File.separator + "water_coords2.trx"); 598 fName = testFile.getAbsolutePath(); 599 { 600 Trajectory traj = new Trajectory(3, mol.getNumAtoms()); 601 RDKFuncs.readAmberTrajectory(fName, traj); 602 assertEquals(2, traj.size()); 603 traj.addConformersToMol(mol); 604 assertEquals(2, mol.getNumConformers()); 605 mol.clearConformers(); 606 traj.addConformersToMol(mol, 0, 0); 607 assertEquals(1, mol.getNumConformers()); 608 traj.addConformersToMol(mol, 1); 609 assertEquals(2, mol.getNumConformers()); 610 } 611 } 612 613 @Test testAddConformersFromGromosTrajectory()614 public void testAddConformersFromGromosTrajectory() { 615 ROMol mol = RWMol.MolFromSmiles("CCC"); 616 String rdpath = System.getenv("RDBASE"); 617 if (rdpath == null) 618 org.junit.Assert.fail("No definition for RDBASE"); 619 File base = new File(rdpath); 620 File testFile = new File(base, "Code" + File.separator + "GraphMol" 621 + File.separator + "test_data" + File.separator + "water_coords.trc"); 622 String fName = testFile.getAbsolutePath(); 623 { 624 Trajectory traj = new Trajectory(3, mol.getNumAtoms()); 625 RDKFuncs.readGromosTrajectory(fName, traj); 626 assertEquals(1, traj.size()); 627 for (int i = 0; i < 2; ++i) { 628 traj.addConformersToMol(mol); 629 assertEquals(i + 1, mol.getNumConformers()); 630 assertEquals(3, mol.getConformer(i).getNumAtoms()); 631 assertEquals(1.941767, mol.getConformer(i).getAtomPos(0).getX(), 0.001); 632 assertEquals(-4.088006, mol.getConformer(i).getAtomPos(2).getZ(), 0.001); 633 } 634 mol.clearConformers(); 635 boolean e = false; 636 try { 637 traj.addConformersToMol(mol, 1); 638 } 639 catch (GenericRDKitException ex) { 640 e = true; 641 } 642 assertEquals(true, e); 643 assertEquals(0, mol.getNumConformers()); 644 } 645 testFile = new File(base, "Code" + File.separator + "GraphMol" 646 + File.separator + "test_data" + File.separator + "water_coords2.trc"); 647 fName = testFile.getAbsolutePath(); 648 { 649 Trajectory traj = new Trajectory(3, mol.getNumAtoms()); 650 RDKFuncs.readGromosTrajectory(fName, traj); 651 assertEquals(2, traj.size()); 652 traj.addConformersToMol(mol); 653 assertEquals(2, mol.getNumConformers()); 654 mol.clearConformers(); 655 traj.addConformersToMol(mol, 0, 0); 656 assertEquals(1, mol.getNumConformers()); 657 traj.addConformersToMol(mol, 1); 658 assertEquals(2, mol.getNumConformers()); 659 } 660 } 661 main(String args[])662 public static void main(String args[]) { 663 org.junit.runner.JUnitCore.main("org.RDKit.TrajectoryTests"); 664 } 665 } 666