|
22 | 22 | */ |
23 | 23 | package org.openscience.cdk.io; |
24 | 24 |
|
25 | | -import java.io.StringReader; |
26 | | -import java.io.StringWriter; |
27 | | - |
| 25 | +import org.hamcrest.MatcherAssert; |
28 | 26 | import org.junit.Assert; |
29 | 27 | import org.junit.BeforeClass; |
30 | 28 | import org.junit.Test; |
31 | 29 | import org.openscience.cdk.DefaultChemObjectBuilder; |
32 | 30 | import org.openscience.cdk.Mapping; |
33 | 31 | import org.openscience.cdk.Reaction; |
| 32 | +import org.openscience.cdk.exception.CDKException; |
34 | 33 | import org.openscience.cdk.interfaces.IAtom; |
| 34 | +import org.openscience.cdk.interfaces.IAtomContainer; |
35 | 35 | import org.openscience.cdk.interfaces.IBond; |
36 | 36 | import org.openscience.cdk.interfaces.IChemObjectBuilder; |
37 | | -import org.openscience.cdk.interfaces.IAtomContainer; |
38 | 37 | import org.openscience.cdk.interfaces.IReaction; |
39 | 38 | import org.openscience.cdk.interfaces.IReactionSet; |
40 | 39 | import org.openscience.cdk.silent.ReactionSet; |
| 40 | +import org.openscience.cdk.silent.SilentChemObjectBuilder; |
| 41 | + |
| 42 | +import java.io.IOException; |
| 43 | +import java.io.StringReader; |
| 44 | +import java.io.StringWriter; |
| 45 | + |
| 46 | +import static org.hamcrest.Matchers.containsString; |
41 | 47 |
|
42 | 48 | /** |
43 | 49 | * TestCase for the writer MDL rxn files using one test file. |
@@ -191,4 +197,284 @@ public void testReactionSet_2() throws Exception { |
191 | 197 | Assert.assertEquals(1, reactionSetF.getReaction(0).getProducts().getAtomContainer(0).getAtomCount()); |
192 | 198 | } |
193 | 199 |
|
| 200 | + @Test public void writeAgentsFromV3000() throws IOException, CDKException { |
| 201 | + String rxnfile = "$RXN V3000\n" + |
| 202 | + "\n" + |
| 203 | + " Mrv1810 020601212219\n" + |
| 204 | + "\n" + |
| 205 | + "M V30 COUNTS 2 1 2\n" + |
| 206 | + "M V30 BEGIN REACTANT\n" + |
| 207 | + "M V30 BEGIN CTAB\n" + |
| 208 | + "M V30 COUNTS 9 9 0 0 0\n" + |
| 209 | + "M V30 BEGIN ATOM\n" + |
| 210 | + "M V30 1 C -24.3094 2.695 0 0\n" + |
| 211 | + "M V30 2 C -22.9758 1.925 0 0\n" + |
| 212 | + "M V30 3 C -21.6421 2.695 0 0\n" + |
| 213 | + "M V30 4 C -22.9758 0.385 0 0\n" + |
| 214 | + "M V30 5 C -21.6421 -0.385 0 0\n" + |
| 215 | + "M V30 6 C -21.6421 -1.925 0 0\n" + |
| 216 | + "M V30 7 C -22.9758 -2.695 0 0\n" + |
| 217 | + "M V30 8 C -24.3094 -1.925 0 0\n" + |
| 218 | + "M V30 9 C -24.3094 -0.385 0 0\n" + |
| 219 | + "M V30 END ATOM\n" + |
| 220 | + "M V30 BEGIN BOND\n" + |
| 221 | + "M V30 1 1 1 2\n" + |
| 222 | + "M V30 2 1 2 3\n" + |
| 223 | + "M V30 3 1 2 4\n" + |
| 224 | + "M V30 4 1 4 5\n" + |
| 225 | + "M V30 5 2 5 6\n" + |
| 226 | + "M V30 6 1 6 7\n" + |
| 227 | + "M V30 7 2 7 8\n" + |
| 228 | + "M V30 8 1 8 9\n" + |
| 229 | + "M V30 9 2 4 9\n" + |
| 230 | + "M V30 END BOND\n" + |
| 231 | + "M V30 END CTAB\n" + |
| 232 | + "M V30 BEGIN CTAB\n" + |
| 233 | + "M V30 COUNTS 7 6 0 0 0\n" + |
| 234 | + "M V30 BEGIN ATOM\n" + |
| 235 | + "M V30 1 C -14.341 0.1528 0 0\n" + |
| 236 | + "M V30 2 C -15.6747 -0.6172 0 0\n" + |
| 237 | + "M V30 3 C -17.0084 0.1528 0 0\n" + |
| 238 | + "M V30 4 O -18.3421 -0.6172 0 0\n" + |
| 239 | + "M V30 5 Cl -17.0084 1.6928 0 0\n" + |
| 240 | + "M V30 6 C -13.0074 -0.6172 0 0\n" + |
| 241 | + "M V30 7 Cl -11.6737 0.1528 0 0\n" + |
| 242 | + "M V30 END ATOM\n" + |
| 243 | + "M V30 BEGIN BOND\n" + |
| 244 | + "M V30 1 1 1 2\n" + |
| 245 | + "M V30 2 1 2 3\n" + |
| 246 | + "M V30 3 2 3 4\n" + |
| 247 | + "M V30 4 1 3 5\n" + |
| 248 | + "M V30 5 1 1 6\n" + |
| 249 | + "M V30 6 1 6 7\n" + |
| 250 | + "M V30 END BOND\n" + |
| 251 | + "M V30 END CTAB\n" + |
| 252 | + "M V30 END REACTANT\n" + |
| 253 | + "M V30 BEGIN PRODUCT\n" + |
| 254 | + "M V30 BEGIN CTAB\n" + |
| 255 | + "M V30 COUNTS 15 15 0 0 0\n" + |
| 256 | + "M V30 BEGIN ATOM\n" + |
| 257 | + "M V30 1 C 18.9747 -3.08 0 0\n" + |
| 258 | + "M V30 2 C 18.9747 -1.54 0 0\n" + |
| 259 | + "M V30 3 C 17.641 -0.77 0 0\n" + |
| 260 | + "M V30 4 C 20.3084 -0.77 0 0\n" + |
| 261 | + "M V30 5 C 20.3084 0.77 0 0\n" + |
| 262 | + "M V30 6 C 21.6421 1.54 0 0\n" + |
| 263 | + "M V30 7 C 22.9758 0.77 0 0\n" + |
| 264 | + "M V30 8 C 22.9758 -0.77 0 0\n" + |
| 265 | + "M V30 9 C 21.6421 -1.54 0 0\n" + |
| 266 | + "M V30 10 C 24.3094 1.54 0 0\n" + |
| 267 | + "M V30 11 O 24.3094 3.08 0 0\n" + |
| 268 | + "M V30 12 C 25.6431 0.77 0 0\n" + |
| 269 | + "M V30 13 C 26.9768 1.54 0 0\n" + |
| 270 | + "M V30 14 C 28.3105 0.77 0 0\n" + |
| 271 | + "M V30 15 Cl 29.6441 1.54 0 0\n" + |
| 272 | + "M V30 END ATOM\n" + |
| 273 | + "M V30 BEGIN BOND\n" + |
| 274 | + "M V30 1 1 1 2\n" + |
| 275 | + "M V30 2 1 2 3\n" + |
| 276 | + "M V30 3 1 2 4\n" + |
| 277 | + "M V30 4 1 4 5\n" + |
| 278 | + "M V30 5 2 5 6\n" + |
| 279 | + "M V30 6 1 6 7\n" + |
| 280 | + "M V30 7 2 7 8\n" + |
| 281 | + "M V30 8 1 8 9\n" + |
| 282 | + "M V30 9 2 4 9\n" + |
| 283 | + "M V30 10 1 7 10\n" + |
| 284 | + "M V30 11 2 10 11\n" + |
| 285 | + "M V30 12 1 10 12\n" + |
| 286 | + "M V30 13 1 12 13\n" + |
| 287 | + "M V30 14 1 13 14\n" + |
| 288 | + "M V30 15 1 14 15\n" + |
| 289 | + "M V30 END BOND\n" + |
| 290 | + "M V30 END CTAB\n" + |
| 291 | + "M V30 END PRODUCT\n" + |
| 292 | + "M V30 BEGIN AGENT\n" + |
| 293 | + "M V30 BEGIN CTAB\n" + |
| 294 | + "M V30 COUNTS 4 0 0 0 0\n" + |
| 295 | + "M V30 BEGIN ATOM\n" + |
| 296 | + "M V30 1 Al -3.135 3.3128 0 0 CHG=3\n" + |
| 297 | + "M V30 2 Cl -1.045 3.3128 0 0 CHG=-1\n" + |
| 298 | + "M V30 3 Cl 1.045 3.3128 0 0 CHG=-1\n" + |
| 299 | + "M V30 4 Cl 3.135 3.3128 0 0 CHG=-1\n" + |
| 300 | + "M V30 END ATOM\n" + |
| 301 | + "M V30 END CTAB\n" + |
| 302 | + "M V30 BEGIN CTAB\n" + |
| 303 | + "M V30 COUNTS 3 2 0 0 0\n" + |
| 304 | + "M V30 BEGIN ATOM\n" + |
| 305 | + "M V30 1 C 7.9887 2.7995 0 0\n" + |
| 306 | + "M V30 2 Cl 6.655 3.5695 0 0\n" + |
| 307 | + "M V30 3 Cl 9.3224 3.5695 0 0\n" + |
| 308 | + "M V30 END ATOM\n" + |
| 309 | + "M V30 BEGIN BOND\n" + |
| 310 | + "M V30 1 1 1 2\n" + |
| 311 | + "M V30 2 1 1 3\n" + |
| 312 | + "M V30 END BOND\n" + |
| 313 | + "M V30 END CTAB\n" + |
| 314 | + "M V30 END AGENT\n" + |
| 315 | + "M END\n"; |
| 316 | + StringWriter sw = new StringWriter(); |
| 317 | + try (MDLRXNV3000Reader mdlr = new MDLRXNV3000Reader(new StringReader(rxnfile)); |
| 318 | + MDLRXNWriter mdlw = new MDLRXNWriter(sw)) { |
| 319 | + IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance(); |
| 320 | + mdlw.write(mdlr.read(bldr.newInstance(IReaction.class))); |
| 321 | + } |
| 322 | + String output = sw.toString(); |
| 323 | + MatcherAssert.assertThat(output, containsString( |
| 324 | + "$RXN\n" + |
| 325 | + "\n" + |
| 326 | + "\n" + |
| 327 | + "\n" + |
| 328 | + " 2 1 2")); |
| 329 | + MatcherAssert.assertThat(output, containsString( |
| 330 | + "\n" + |
| 331 | + " 4 0 0 0 0 0 0 0 0 0999 V2000\n" + |
| 332 | + " -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" + |
| 333 | + " -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 334 | + " 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 335 | + " 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 336 | + "M CHG 1 1 3\n" + |
| 337 | + "M CHG 1 2 -1\n" + |
| 338 | + "M CHG 1 3 -1\n" + |
| 339 | + "M CHG 1 4 -1\n" + |
| 340 | + "M END")); |
| 341 | + } |
| 342 | + |
| 343 | + @Test public void writeAgentsFromV2000() throws IOException, CDKException { |
| 344 | + String rxnfile = "$RXN\n" + |
| 345 | + "\n" + |
| 346 | + "\n" + |
| 347 | + "\n" + |
| 348 | + " 2 1 2\n" + |
| 349 | + "$MOL\n" + |
| 350 | + "\n" + |
| 351 | + " CDK 02062122413D\n" + |
| 352 | + "\n" + |
| 353 | + " 9 9 0 0 0 0 0 0 0 0999 V2000\n" + |
| 354 | + " -24.3094 2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 355 | + " -22.9758 1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 356 | + " -21.6421 2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 357 | + " -22.9758 0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 358 | + " -21.6421 -0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 359 | + " -21.6421 -1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 360 | + " -22.9758 -2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 361 | + " -24.3094 -1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 362 | + " -24.3094 -0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 363 | + " 1 2 1 0 0 0 0\n" + |
| 364 | + " 2 3 1 0 0 0 0\n" + |
| 365 | + " 2 4 1 0 0 0 0\n" + |
| 366 | + " 4 5 1 0 0 0 0\n" + |
| 367 | + " 5 6 2 0 0 0 0\n" + |
| 368 | + " 6 7 1 0 0 0 0\n" + |
| 369 | + " 7 8 2 0 0 0 0\n" + |
| 370 | + " 8 9 1 0 0 0 0\n" + |
| 371 | + " 4 9 2 0 0 0 0\n" + |
| 372 | + "M END\n" + |
| 373 | + "$MOL\n" + |
| 374 | + "\n" + |
| 375 | + " CDK 02062122413D\n" + |
| 376 | + "\n" + |
| 377 | + " 7 6 0 0 0 0 0 0 0 0999 V2000\n" + |
| 378 | + " -14.3410 0.1528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 379 | + " -15.6747 -0.6172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 380 | + " -17.0084 0.1528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 381 | + " -18.3421 -0.6172 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 382 | + " -17.0084 1.6928 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 383 | + " -13.0074 -0.6172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 384 | + " -11.6737 0.1528 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 385 | + " 1 2 1 0 0 0 0\n" + |
| 386 | + " 2 3 1 0 0 0 0\n" + |
| 387 | + " 3 4 2 0 0 0 0\n" + |
| 388 | + " 3 5 1 0 0 0 0\n" + |
| 389 | + " 1 6 1 0 0 0 0\n" + |
| 390 | + " 6 7 1 0 0 0 0\n" + |
| 391 | + "M END\n" + |
| 392 | + "$MOL\n" + |
| 393 | + "\n" + |
| 394 | + " CDK 02062122413D\n" + |
| 395 | + "\n" + |
| 396 | + " 15 15 0 0 0 0 0 0 0 0999 V2000\n" + |
| 397 | + " 18.9747 -3.0800 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 398 | + " 18.9747 -1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 399 | + " 17.6410 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 400 | + " 20.3084 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 401 | + " 20.3084 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 402 | + " 21.6421 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 403 | + " 22.9758 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 404 | + " 22.9758 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 405 | + " 21.6421 -1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 406 | + " 24.3094 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 407 | + " 24.3094 3.0800 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 408 | + " 25.6431 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 409 | + " 26.9768 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 410 | + " 28.3105 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 411 | + " 29.6441 1.5400 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 412 | + " 1 2 1 0 0 0 0\n" + |
| 413 | + " 2 3 1 0 0 0 0\n" + |
| 414 | + " 2 4 1 0 0 0 0\n" + |
| 415 | + " 4 5 1 0 0 0 0\n" + |
| 416 | + " 5 6 2 0 0 0 0\n" + |
| 417 | + " 6 7 1 0 0 0 0\n" + |
| 418 | + " 7 8 2 0 0 0 0\n" + |
| 419 | + " 8 9 1 0 0 0 0\n" + |
| 420 | + " 4 9 2 0 0 0 0\n" + |
| 421 | + " 7 10 1 0 0 0 0\n" + |
| 422 | + " 10 11 2 0 0 0 0\n" + |
| 423 | + " 10 12 1 0 0 0 0\n" + |
| 424 | + " 12 13 1 0 0 0 0\n" + |
| 425 | + " 13 14 1 0 0 0 0\n" + |
| 426 | + " 14 15 1 0 0 0 0\n" + |
| 427 | + "M END\n" + |
| 428 | + "$MOL\n" + |
| 429 | + "\n" + |
| 430 | + " CDK 02062122413D\n" + |
| 431 | + "\n" + |
| 432 | + " 4 0 0 0 0 0 0 0 0 0999 V2000\n" + |
| 433 | + " -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" + |
| 434 | + " -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 435 | + " 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 436 | + " 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 437 | + "M CHG 1 1 3\n" + |
| 438 | + "M CHG 1 2 -1\n" + |
| 439 | + "M CHG 1 3 -1\n" + |
| 440 | + "M CHG 1 4 -1\n" + |
| 441 | + "M END\n" + |
| 442 | + "$MOL\n" + |
| 443 | + "\n" + |
| 444 | + " CDK 02062122413D\n" + |
| 445 | + "\n" + |
| 446 | + " 3 2 0 0 0 0 0 0 0 0999 V2000\n" + |
| 447 | + " 7.9887 2.7995 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 448 | + " 6.6550 3.5695 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 449 | + " 9.3224 3.5695 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 450 | + " 1 2 1 0 0 0 0\n" + |
| 451 | + " 1 3 1 0 0 0 0\n" + |
| 452 | + "M END"; |
| 453 | + StringWriter sw = new StringWriter(); |
| 454 | + try (MDLRXNV2000Reader mdlr = new MDLRXNV2000Reader(new StringReader(rxnfile)); |
| 455 | + MDLRXNWriter mdlw = new MDLRXNWriter(sw)) { |
| 456 | + IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance(); |
| 457 | + mdlw.write(mdlr.read(bldr.newInstance(IReaction.class))); |
| 458 | + } |
| 459 | + String output = sw.toString(); |
| 460 | + MatcherAssert.assertThat(output, containsString( |
| 461 | + "$RXN\n" + |
| 462 | + "\n" + |
| 463 | + "\n" + |
| 464 | + "\n" + |
| 465 | + " 2 1 2")); |
| 466 | + MatcherAssert.assertThat(output, containsString( |
| 467 | + "\n" + |
| 468 | + " 4 0 0 0 0 0 0 0 0 0999 V2000\n" + |
| 469 | + " -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" + |
| 470 | + " -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 471 | + " 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 472 | + " 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" + |
| 473 | + "M CHG 1 1 3\n" + |
| 474 | + "M CHG 1 2 -1\n" + |
| 475 | + "M CHG 1 3 -1\n" + |
| 476 | + "M CHG 1 4 -1\n" + |
| 477 | + "M END")); |
| 478 | + } |
| 479 | + |
194 | 480 | } |
0 commit comments