Current Dev State

This commit is contained in:
Tim Lorsbach
2025-06-23 20:13:54 +02:00
parent b4f9bb277d
commit ded50edaa2
22617 changed files with 4345095 additions and 174 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -0,0 +1,39 @@
Git #501, #532 Warnings in 2 and 8 group | 57f6de4
Ketcher 6221712482D 1 1.00000 0.00000 0
18 15 0 0 0 999 V2000
4.7750 -3.9493 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.5840 -4.5371 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2750 -5.4882 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.2750 -5.4882 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.9660 -4.5371 0.0000 Ca 0 0 0 0 0 0 0 0 0 0 0 0
9.5615 -4.1706 0.0000 Ar 0 0 0 0 0 0 0 0 0 0 0 0
10.3450 -3.5534 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.3174 -3.7757 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.7512 -4.6710 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.5615 -5.1771 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.3181 -5.5775 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.3450 -5.7999 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0150 -4.2281 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.2589 -5.2442 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8096 -3.5494 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.3250 -3.7250 0.0000 Kr 0 0 0 0 0 0 0 0 0 0 0 0
7.3000 -5.1000 0.0000 Xe 0 0 0 0 0 0 0 0 0 0 0 0
7.3750 -6.4750 0.0000 Ba 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 2 0 0 0
3 4 1 0 0 0
4 5 2 0 0 0
5 1 1 0 0 0
11 12 1 0 0 0
10 12 1 0 0 0
6 10 1 0 0 0
9 11 1 0 0 0
8 9 1 0 0 0
7 8 1 0 0 0
6 7 1 0 0 0
5 13 1 0 0 0
5 14 1 0 0 0
5 15 1 0 0 0
M CHG 3 16 1 17 -1 18 1
M END

View File

@ -0,0 +1,27 @@
Git #436, #500 Pseudoatoms and aliases | c44660f + 4
Ketcher 6221715112D 1 1.00000 0.00000 0
9 9 0 0 0 999 V2000
-1.8857 2.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.6002 2.0625 0.0000 A 0 0 0 0 0 0 0 0 0 0 0 0
-2.6002 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8857 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1712 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1712 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.3147 2.4750 0.0000 Psd 0 0 0 0 0 0 0 0 0 0 0 0
-0.4568 2.4750 0.0000 Pol 0 0 0 0 0 0 0 0 0 0 0 0
-1.8857 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 6 2 0 0 0 0
2 3 2 0 0 0 0
3 4 1 0 0 0 0
4 5 2 0 0 0 0
5 6 1 0 0 0 0
2 7 1 0 0 0 0
6 8 1 0 0 0 0
4 9 1 0 0 0 0
A 2
'Pseudo'
A 3
Alias
M END

View File

@ -0,0 +1,61 @@
Git #512 - Error parse Data-S-Group | da23a7d, d669c6c
Ketcher 6221712572D 1 1.00000 0.00000 0
16 16 0 0 0 999 V2000
0.9789 1.9661 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.9491 3.0117 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8411 1.4993 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.1417 1.4576 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.9491 3.9989 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 3.5404 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.9363 3.5773 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.8577 0.5204 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.1572 0.4704 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.7199 0.0453 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0241 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.5690 0.5573 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.4193 0.1072 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
3.5535 1.5326 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2445 0.6121 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2148 1.5779 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 3 2 0 0 0 0
1 4 1 0 0 0 0
2 5 1 0 0 0 0
2 6 1 0 0 0 0
2 7 1 0 0 0 0
3 8 1 0 0 0 0
4 9 2 0 0 0 0
8 10 1 0 0 0 0
8 11 2 0 0 0 0
9 11 1 0 0 0 0
10 12 1 0 0 0 0
12 13 1 6 0 0 0
12 14 1 0 0 0 0
13 15 1 0 0 0 0
15 16 1 0 0 0 0
M STY 1 1 DAT
M SLB 1 1 1
M SAL 1 1 12
M SDT 1 MDLBG_STEREO_KEY F
M SDD 1 3.4690 0.0973 DA ALL 1 5
M SED 1 S
M STY 1 2 DAT
M SLB 1 2 2
M SAL 2 2 10 12
M SDT 2 MDLBG_LIGAND_SITE F
M SDD 2 2.8945 0.2013 DA ALL 1 5
M SED 2 L1+
M STY 1 3 DAT
M SLB 1 3 3
M SAL 3 2 12 13
M SDT 3 MDLBG_LIGAND_SITE F
M SDD 3 3.7441 0.2322 DA ALL 1 5
M SED 3 L2-
M STY 1 4 DAT
M SLB 1 4 4
M SAL 4 2 12 14
M SDT 4 MDLBG_LIGAND_SITE F
M SDD 4 3.3113 0.9450 DA ALL 1 5
M SED 4 L3-
M END

View File

@ -0,0 +1,16 @@
Ketcher 05231617112D 1 1.00000 0.00000 0
6 5 0 0 0 999 V2000
5.4500 -5.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.1571 -6.3321 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.1230 -6.0733 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
7.8301 -6.7804 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
8.7961 -6.5216 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.5032 -7.2287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 1 0 0 0
3 4 1 0 0 0
4 5 1 0 0 0
5 6 1 0 0 0
M END

View File

@ -0,0 +1,161 @@
Ketcher 04131617572D 1 1.00000 0.00000 0
76 71 0 1 0 999 V2000
14.2771 -3.2353 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
15.1345 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.9917 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.8487 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.7060 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 1
18.5632 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.4203 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.2776 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.1348 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.9920 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.8493 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.7064 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.2633 -0.6490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9634 0.0510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.9195 -0.2051 0.0000 C 0 0 0 1 0 0 0 0 0 0 0 0
16.6193 0.4947 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
17.5754 0.2386 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.2754 0.9384 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.3631 1.4508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.0631 2.1507 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.8069 3.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.5067 3.8069 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.2506 4.7629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.9504 5.4628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.8507 3.3631 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.1508 2.6633 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.1948 2.9195 0.0000 C 0 0 0 0 0 0 0 0 0 0 1 0
13.3709 1.5265 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
12.5387 2.4758 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.8387 1.7758 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.8826 2.0319 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.1826 1.3321 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.9387 3.8756 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.9824 4.1316 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.7262 5.0878 0.0000 I 0 0 0 0 0 0 0 0 0 0 0 0
12.2824 3.4317 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.1348 -2.2454 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.2776 -1.7505 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.0214 -0.7942 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
23.7064 -4.7198 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
15.9917 -2.2454 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
18.0191 1.8946 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.7191 2.5945 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
19.6751 2.3382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.3749 3.0382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.3311 2.7820 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.0309 3.4818 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.9869 3.2257 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.6868 3.9256 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
24.6430 3.6694 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
25.3428 4.3693 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
26.2988 4.1131 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
26.9989 4.8130 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
27.9549 4.5569 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
28.6548 5.2567 0.0000 Q 0 0 0 0 0 0 0 0 0 0 0 0
21.7747 4.4381 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
25.0866 5.3255 0.0000 X 0 0 0 0 0 0 0 0 0 0 0 0
26.7426 5.7692 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.3914 0.2563 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.3474 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.6036 -0.9561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.9038 -1.6560 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.9478 -1.3997 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.6916 -0.4436 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.5598 -1.2122 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.8160 -2.1683 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
12.7720 -2.4245 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
28.6082 1.9478 0.0000 Hg 0 0 0 0 0 0 0 0 0 0 0 0
25.1927 0.7845 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
25.1184 -0.9480 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
25.9758 -1.3688 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
26.7094 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
27.5667 -2.2846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
28.4242 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
29.2816 -2.2846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
30.1389 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0 0 0
2 3 1 0 0 0
3 4 1 0 0 0
4 5 1 4 0 0
5 6 1 0 0 0
7 8 1 0 0 0
8 9 1 0 0 0
9 10 1 0 0 0
10 11 2 0 0 0
11 12 1 0 0 0
13 14 1 0 0 0
14 15 8 0 0 0
15 16 1 0 0 0
16 17 1 0 0 0
17 18 1 0 0 0
16 19 1 0 0 0
19 20 1 0 0 0
20 21 1 0 0 0
21 22 1 0 0 0
22 23 1 0 0 0
23 24 1 0 0 0
21 25 1 0 0 0
25 26 1 0 0 0
26 27 1 0 0 0
27 28 1 0 0 0
28 29 1 0 0 0
29 30 1 0 0 0
30 31 4 0 0 0
31 32 1 0 0 0
27 33 1 6 0 0
33 34 1 0 0 0
34 35 3 0 0 0
29 36 1 0 0 0
9 37 1 1 0 0
37 38 1 0 0 0
38 39 3 0 0 0
12 40 1 6 0 0
3 41 1 0 0 0
7 6 1 0 0 0
20 42 1 0 0 0
42 43 2 3 0 0
43 44 1 0 2 0
44 45 8 0 0 0
45 46 1 0 1 0
46 47 4 0 0 0
47 48 1 0 0 -1
48 49 5 0 0 0
49 50 1 0 0 4
50 51 6 0 0 0
51 52 1 0 0 8
52 53 7 0 0 0
53 54 1 0 0 0
54 55 1 0 0 0
47 56 1 0 0 0
51 57 1 0 0 0
53 58 1 0 0 0
59 60 4 0 0 0
60 61 4 0 0 0
61 62 4 0 0 0
62 63 4 0 0 0
63 64 4 0 0 0
64 59 4 0 0 0
61 65 1 6 0 0
65 66 1 1 0 0
66 67 1 1 0 0
70 71 5 0 0 0
71 72 1 0 0 0
72 73 6 0 0 0
73 74 1 0 0 12
74 75 7 0 0 0
75 76 1 0 0 0
A 58
ACH
M CHG 2 7 -3 25 2
M ISO 1 19 13
M RAD 1 22 1
M RBC 1 31 -2
M SUB 1 17 -2
M UNS 1 4 1
M ALS 28 3 F Sg Bh Pr
M END

View File

@ -0,0 +1,124 @@
complex_stereo-0011-00
-INDIGO-06261713242D
0 0 0 0 0 0 0 0 0 0 0 V3000
M V30 BEGIN CTAB
M V30 COUNTS 41 67 0 0 0
M V30 BEGIN ATOM
M V30 1 C 4.7708 -1.9042 0.0 0 CFG=1
M V30 2 C 7.0937 -1.5596 0.0 0 CFG=2
M V30 3 C 8.9645 -3.1877 0.0 0 CFG=2
M V30 4 C 9.925 0.4806 0.0 0 CFG=1
M V30 5 C 6.9445 1.1628 0.0 0 CFG=1
M V30 6 C 10.5533 -4.0532 0.0 0 CFG=2
M V30 7 C 10.9835 -1.9889 0.0 0
M V30 8 C 9.4083 -1.3931 0.0 0 CFG=2
M V30 9 C 11.518 -0.303 0.0 0 CFG=1
M V30 10 C 10.3542 2.0594 0.0 0 CFG=2
M V30 11 C 11.8181 1.6915 0.0 0
M V30 12 C 8.4219 0.6275 0.0 0 CFG=1
M V30 13 C 7.2623 2.8675 0.0 0 CFG=2
M V30 14 C 8.8052 2.3245 0.0 0
M V30 15 C 2.4833 -2.8738 0.0 0 CFG=2
M V30 16 C 1.6356 -0.5431 0.0 0 CFG=2
M V30 17 C -0.9821 -3.2867 0.0 0 CFG=1
M V30 18 C 1.2947 -5.3277 0.0 0 CFG=1
M V30 19 C 0.6651 0.9837 0.0 0 CFG=2
M V30 20 C -0.7114 -0.6136 0.0 0
M V30 21 C 0.3778 -1.898 0.0 0 CFG=2
M V30 22 C -1.9959 -1.8294 0.0 0 CFG=1
M V30 23 C -2.1225 -4.4599 0.0 0 CFG=2
M V30 24 C -3.2248 -3.4287 0.0 0
M V30 25 C 0.2616 -4.1435 0.0 0 CFG=1
M V30 26 C 0.1907 -6.6649 0.0 0 CFG=2
M V30 27 C -0.8959 -5.4423 0.0 0
M V30 28 C 5.75 -5.1583 0.0 0 CFG=2
M V30 29 C 3.775 -6.6583 0.0 0 CFG=2
M V30 30 C 7.1708 -8.3458 0.0 0 CFG=1
M V30 31 C 8.4458 -5.5667 0.0 0 CFG=1
M V30 32 C 2.6041 -8.0375 0.0 0 CFG=2
M V30 33 C 4.5375 -8.8791 0.0 0
M V30 34 C 5.4417 -7.4584 0.0 0 CFG=2
M V30 35 C 6.0792 -9.7458 0.0 0 CFG=1
M V30 36 C 8.6292 -9.0875 0.0 0 CFG=2
M V30 37 C 7.9708 -10.4458 0.0 0
M V30 38 C 7.6208 -6.9042 0.0 0 CFG=1
M V30 39 C 10.05 -6.225 0.0 0 CFG=2
M V30 40 C 9.2042 -7.625 0.0 0
M V30 41 C 4.4646 -0.8867 0.0 0
M V30 END ATOM
M V30 BEGIN BOND
M V30 1 1 8 7 CFG=1
M V30 2 1 6 8
M V30 3 1 9 4
M V30 4 1 5 2
M V30 5 1 10 4
M V30 6 1 3 2
M V30 7 1 4 11 CFG=1
M V30 8 1 9 11 CFG=1
M V30 9 1 10 11 CFG=1
M V30 10 1 15 17 CFG=1
M V30 11 1 21 16
M V30 12 1 19 20 CFG=1
M V30 13 1 21 20 CFG=1
M V30 14 1 19 21
M V30 15 1 22 17
M V30 16 1 18 15
M V30 17 1 23 17
M V30 18 1 16 15
M V30 19 1 17 24 CFG=1
M V30 20 1 22 24 CFG=1
M V30 21 1 23 24 CFG=1
M V30 22 1 22 23
M V30 23 1 19 16
M V30 24 1 25 18
M V30 25 1 1 15
M V30 26 1 26 18
M V30 27 1 16 20 CFG=1
M V30 28 1 18 27 CFG=1
M V30 29 1 25 27 CFG=1
M V30 30 1 26 27 CFG=1
M V30 31 1 25 26
M V30 32 1 9 10
M V30 33 1 6 3
M V30 34 1 12 5
M V30 35 1 1 2
M V30 36 1 13 5
M V30 37 1 3 7 CFG=1
M V30 38 1 5 14 CFG=1
M V30 39 1 12 14 CFG=1
M V30 40 1 13 14 CFG=1
M V30 41 1 12 13
M V30 42 1 2 4 CFG=1
M V30 43 1 8 3
M V30 44 1 28 30 CFG=1
M V30 45 1 34 29
M V30 46 1 32 33 CFG=1
M V30 47 1 34 33 CFG=1
M V30 48 1 32 34
M V30 49 1 35 30
M V30 50 1 31 28
M V30 51 1 36 30
M V30 52 1 29 28
M V30 53 1 30 37 CFG=1
M V30 54 1 35 37 CFG=1
M V30 55 1 36 37 CFG=1
M V30 56 1 35 36
M V30 57 1 32 29
M V30 58 1 38 31
M V30 59 1 1 28
M V30 60 1 39 31
M V30 61 1 29 33 CFG=1
M V30 62 1 31 40 CFG=1
M V30 63 1 38 40 CFG=1
M V30 64 1 39 40 CFG=1
M V30 65 1 38 39
M V30 66 1 6 7 CFG=1
M V30 67 1 1 41 CFG=1
M V30 END BOND
M V30 BEGIN COLLECTION
M V30 MDLV30/STERAC1 ATOMS=(31 1 2 3 4 5 6 8 9 10 12 13 15 16 17 18 19 21 22-
M V30 23 25 26 28 29 30 31 32 34 35 36 38 39)
M V30 END COLLECTION
M V30 END CTAB
M END

View File

@ -0,0 +1,95 @@
Ketcher 07151621232D 1 1.00000 0.00000 0
43 47 0 1 0 999 V2000
9.2254 -6.1112 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.2254 -7.1287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7965 -7.8866 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.6790 -8.2708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.0249 -8.9560 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
11.0839 -9.2363 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.7172 -8.1565 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.1732 -7.5586 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.7762 -6.5265 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.3817 -5.5298 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.5926 -4.9276 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.7101 -5.3948 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7238 -5.2702 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.2670 -4.3462 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
11.0008 -6.3708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.4303 -5.7582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.3440 -6.1839 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.1675 -5.1041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.5893 -4.5954 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
13.3576 -7.2117 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
9.1527 -8.6549 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
9.5473 -9.5582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.9243 -10.3680 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
10.5336 -9.7139 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.4467 -7.5025 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.4467 -8.3746 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
7.5954 -8.8418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5954 -9.8281 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
6.7233 -8.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.8823 -8.8418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.8823 -9.8281 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.0413 -10.3265 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.1692 -9.8593 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.1692 -8.8729 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.0413 -8.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.6265 -7.0975 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.6265 -6.1112 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.7959 -7.4609 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.0074 -8.0320 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
8.8101 -5.1768 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
7.8342 -5.0522 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.4085 -4.1178 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
7.2320 -5.8309 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 0 0 0
3 2 1 0 0 0
4 3 1 0 0 0
4 5 1 6 0 0
5 6 1 0 0 0
6 4 1 0 0 0
7 4 1 0 0 0
8 7 1 0 0 0
8 9 1 0 0 0
9 10 1 0 0 0
10 11 1 0 0 0
11 12 2 0 0 0
12 13 1 0 0 0
13 1 1 0 0 0
14 13 2 0 0 0
15 12 1 0 0 0
16 10 1 0 0 0
17 16 1 0 0 0
18 16 1 0 0 0
9 16 1 0 0 0
10 19 1 6 0 0
9 20 1 6 0 0
3 21 1 1 0 0
22 21 1 0 0 0
23 22 2 0 0 0
24 22 1 0 0 0
25 2 1 0 0 0
25 26 1 1 0 0
27 26 1 0 0 0
28 27 2 0 0 0
29 27 1 0 0 0
30 29 1 0 0 0
31 30 2 0 0 0
32 31 1 0 0 0
33 32 2 0 0 0
33 34 1 0 0 0
34 35 2 0 0 0
35 30 1 0 0 0
25 36 1 0 0 0
36 37 1 0 0 0
37 1 1 0 0 0
36 38 1 1 0 0
2 39 1 6 0 0
1 40 1 1 0 0
41 40 1 0 0 0
42 41 2 0 0 0
43 41 1 0 0 0
M END

View File

@ -0,0 +1,23 @@
Marvin 02121015302D
9 9 0 0 0 0 999 V2000
-1.8857 2.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.6002 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.6002 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8857 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1712 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1712 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.3147 2.4750 0.0000 Psd 0 0 0 0 0 0 0 0 0 0 0 0
-0.4568 2.4750 0.0000 Pol 0 0 0 0 0 0 0 0 0 0 0 0
-1.8857 -0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 6 2 0 0 0 0
2 3 2 0 0 0 0
3 4 1 0 0 0 0
4 5 2 0 0 0 0
5 6 1 0 0 0 0
2 7 1 0 0 0 0
6 8 1 0 0 0 0
4 9 1 0 0 0 0
M END

View File

@ -0,0 +1,174 @@
$RXN
2 1 0
$MOL
Ketcher 04131617372D 1 1.00000 0.00000 0
6 6 0 1 0 999 V2000
0.8660 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.7320 0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.7320 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8660 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 2 0 0 0
3 4 1 0 0 0
4 5 2 0 0 0
5 6 1 0 0 0
6 1 2 0 0 0
M END
$MOL
Ketcher 04131617372D 1 1.00000 0.00000 0
43 42 0 1 0 999 V2000
3.7320 -2.0002 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
4.5981 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.4641 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.3301 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0
7.1962 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 2 0 1
8.0622 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0
8.9282 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 4 0 0
9.7943 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0
10.6603 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 6 0 0
11.5264 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0
12.3925 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.2584 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.1245 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9905 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.8566 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.7226 -2.5001 0.0000 C 0 0 0 1 0 0 0 0 0 0 0 0
17.5886 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.4547 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.3207 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.1867 -2.5001 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
17.5886 -1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.4547 -0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.4547 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.3207 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.3207 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.1867 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.5886 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.7226 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.8566 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 1 0
14.9905 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.1245 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.2584 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.3925 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.5264 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.8566 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9905 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9905 3.5001 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
14.1245 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.6603 -1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7943 -0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7943 0.5001 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
13.2584 -3.5001 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
5.4641 -1.0001 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0 0 0
2 3 1 0 0 0
3 4 1 0 0 0
4 5 1 0 0 0
5 6 1 0 0 0
7 8 1 0 0 0
8 9 1 0 0 0
9 10 1 0 0 0
10 11 2 0 0 0
11 12 1 0 0 0
12 13 1 0 0 0
13 14 1 0 0 0
14 15 1 0 0 0
15 16 1 0 0 0
16 17 1 0 0 0
17 18 1 0 0 0
18 19 1 0 0 0
19 20 1 0 0 0
17 21 1 0 0 0
21 22 1 0 0 0
22 23 1 0 0 0
23 24 1 0 0 0
24 25 1 0 0 0
25 26 1 0 0 0
23 27 1 0 0 0
27 28 1 0 0 0
28 29 1 0 0 0
29 30 1 0 0 0
30 31 1 0 0 0
31 32 1 0 0 0
32 33 1 0 0 0
33 34 1 0 0 0
29 35 1 6 0 0
35 36 1 0 0 0
36 37 1 0 0 0
31 38 1 0 0 0
9 39 1 1 0 0
39 40 1 0 0 0
40 41 1 0 0 0
12 42 1 6 0 0
3 43 1 0 0 0
7 6 1 0 0 0
M CHG 1 27 2
M ISO 1 21 13
M RAD 1 24 1
M RGP 2 20 2 37 1
M RBC 1 33 -2
M SUB 1 18 -2
M UNS 1 4 1
M STY 1 1 DAT
M SLB 1 1 1
M SAL 1 1 9
M SDT 1 Purity
M SDD 1 -1.9546 -2.1107 DR ALL 1 0
M SED 1 Purity = 50%
M END
$MOL
Ketcher 04131617372D 1 1.00000 0.00000 0
19 18 0 1 0 999 V2000
26.1867 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
27.0527 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0
27.9187 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 2 0 0
28.7847 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0
29.6509 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 4 0 0
30.5169 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0
31.3829 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 6 0 0
32.2489 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0
33.1150 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
33.9811 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
34.8471 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
35.7131 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
36.5792 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
37.4452 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
38.3112 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
39.1772 -0.7500 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
31.3829 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
34.8471 0.7500 0.0000 X 0 0 0 0 0 0 0 0 0 0 0 0
36.5792 0.7500 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 2 3 0 0
3 4 1 0 2 0
4 5 8 0 0 0
5 6 1 0 1 0
6 7 4 0 0 0
7 8 1 0 0 -1
8 9 5 0 0 0
9 10 1 0 0 4
10 11 6 0 0 0
11 12 1 0 0 8
12 13 7 0 0 0
13 14 1 0 0 0
14 15 1 0 0 0
15 16 1 0 0 0
7 17 1 0 0 0
11 18 1 0 0 0
13 19 1 0 0 0
A 17
CYC
M ALS 16 4 T C Si Ge As
M ALS 19 4 F B C N P
M END

View File

@ -0,0 +1,140 @@
$MDL REV 1
$MOL
$HDR
$END HDR
$CTAB
14 14 0 0 0 999 V2000
-3.4608 -4.5124 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
-2.5948 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.7288 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.8628 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0032 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8692 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.7352 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.6012 -4.0124 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
-0.8628 -3.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6718 -2.4246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.3628 -1.4735 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
-0.3628 -1.4735 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0538 -2.4246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.8536 -3.0465 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 1 0 0 0
3 4 1 0 0 0
4 5 1 0 0 0
5 6 1 0 0 0
6 7 1 0 0 0
7 8 1 0 0 0
4 9 1 0 0 0
9 10 1 0 0 0
10 11 1 0 0 0
11 12 1 0 0 0
12 13 1 0 0 0
13 9 1 0 0 0
2 14 1 0 0 0
M RGP 4 1 2 8 1 11 3 14 1
M LOG 1 1 0 0 1
M LOG 1 2 3 0 >0
M LOG 1 3 0 1 >0
M END
$END CTAB
$RGP
1
$CTAB
3 2 0 0 0 999 V2000
-3.6375 -10.6466 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.7715 -11.1466 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
-3.6375 -9.6466 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
1 3 2 0 0 0
M APO 1 1 1
M END
$END CTAB
$CTAB
6 5 0 0 0 999 V2000
-0.5966 -10.1949 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2694 -10.6949 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.9939 -9.9800 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0194 -11.6983 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.0862 -11.1766 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
-0.5966 -9.1948 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 1 0 0 0
2 4 1 0 0 0
2 5 1 0 0 0
1 6 2 0 0 0
M APO 1 1 1
M END
$END CTAB
$END RGP
$RGP
2
$CTAB
4 3 0 0 0 999 V2000
7.4705 -10.3679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.3365 -9.8679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.6045 -9.8679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.4705 -11.3679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
1 3 1 0 0 0
1 4 1 0 0 0
M APO 1 4 3
M END
$END CTAB
$CTAB
1 0 0 0 0 999 V2000
10.4785 -10.5179 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
M APO 1 1 3
M END
$END CTAB
$END RGP
$RGP
3
$CTAB
6 6 0 0 0 999 V2000
8.0535 -13.7929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.9195 -14.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.9195 -15.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.0535 -15.7929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.1875 -15.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.1875 -14.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 2 0 0 0
3 4 1 0 0 0
4 5 2 0 0 0
5 6 1 0 0 0
6 1 2 0 0 0
M APO 1 1 1
M END
$END CTAB
$CTAB
5 5 0 0 0 999 V2000
11.5535 -14.1172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.3625 -14.7050 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.0535 -15.6561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.0535 -15.6561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.7445 -14.7050 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 2 0 0 0
3 4 1 0 0 0
4 5 2 0 0 0
5 1 1 0 0 0
M APO 1 1 1
M END
$END CTAB
$CTAB
3 3 0 0 0 999 V2000
14.1285 -15.2815 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.1285 -15.2815 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.6285 -14.4155 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
2 3 1 0 0 0
1 3 1 0 0 0
M APO 1 3 1
M END
$END CTAB
$END RGP
$END MOL

View File

@ -0,0 +1,223 @@
Ketcher 04131611202D 1 1.00000 0.00000 0
73 65 0 0 0 999 V2000
-0.7649 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.1310 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.7146 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.6104 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.9335 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0376 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.1417 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.2459 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3500 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4541 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.4418 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.0117 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.1158 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.2199 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.3241 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.4282 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5323 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.3636 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8596 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.9637 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.9637 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.0678 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.1719 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.1719 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2761 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9479 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.0520 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.1561 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.2602 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.3642 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.4683 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.5724 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.8646 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.9986 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.1325 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.2665 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.4004 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.5343 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.6683 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9896 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.1236 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.2575 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.3915 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.5254 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.6593 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7933 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.8164 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.6825 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.5485 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.4145 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.2805 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.1466 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.0126 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.8786 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.7446 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.6107 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.4767 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.3427 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.2087 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.0748 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.9408 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.8068 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.5485 -12.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.1466 -15.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0
3 4 1 0 0 0
4 5 1 0 0 0
73 6 1 0 0 0
6 7 1 0 0 0
9 8 1 0 0 0
10 9 1 0 0 0
11 10 1 0 0 0
12 11 1 0 0 0
13 12 1 0 0 0
14 13 1 0 0 0
16 15 1 0 0 0
17 16 1 0 0 0
18 17 1 0 0 0
19 18 1 0 0 0
20 19 1 0 0 0
21 20 1 0 0 0
23 22 1 0 0 0
24 23 1 0 0 0
25 24 1 0 0 0
26 25 1 0 0 0
27 26 1 0 0 0
28 27 1 0 0 0
30 29 1 0 0 0
31 30 1 0 0 0
32 31 1 0 0 0
33 32 1 0 0 0
34 33 1 0 0 0
35 34 1 0 0 0
3 2 1 0 0 0
37 36 1 0 0 0
38 37 1 0 0 0
39 38 1 0 0 0
40 39 1 0 0 0
41 40 1 0 0 0
42 41 1 0 0 0
44 43 1 0 0 0
45 44 1 0 0 0
46 45 1 0 0 0
47 46 1 0 0 0
48 47 1 0 0 0
49 48 1 0 0 0
50 51 1 0 0 0
51 52 1 0 0 0
52 53 1 0 0 0
53 54 1 0 0 0
54 55 1 0 0 0
55 56 1 0 0 0
56 57 1 0 0 0
57 58 2 0 0 0
58 59 1 0 0 0
59 60 1 0 0 0
60 61 1 0 0 0
61 62 1 0 0 0
62 63 1 0 0 0
63 64 1 0 0 0
64 65 1 0 0 0
52 66 1 1 0 0
55 67 1 1 0 0
68 69 1 0 0 0
69 70 1 0 0 0
5 68 1 0 0 0
71 72 1 0 0 0
72 73 1 0 0 0
70 71 1 0 0 0
M STY 1 1 MUL
M SLB 1 1 1
M SAL 1 9 3 4 5 68 69 70 71 72 73
M SPA 1 3 3 4 5
M SBL 1 2 4 30
M SMT 1 3
M SDI 1 4 3.2666 -1.2559 3.2666 -2.7559
M SDI 1 4 0.5790 -2.7559 0.5790 -1.2559
M STY 1 2 GEN
M SLB 1 2 2
M SAL 2 3 11 12 10
M SDI 2 4 3.5897 -4.6315 3.5897 -6.1315
M SDI 2 4 0.9020 -6.1315 0.9020 -4.6315
M STY 1 3 SRU
M SLB 1 3 3
M SCN 1 3 HT
M SMT 3 n
M SAL 3 3 18 19 17
M SBL 3 2 13 16
M SDI 3 4 3.6679 -8.3070 3.6679 -9.8070
M SDI 3 4 0.9802 -9.8070 0.9802 -8.3070
M STY 1 4 SUP
M SLB 1 4 4
M SAL 4 3 26 25 24
M SBL 4 2 19 22
M SMT 4 fgf
M STY 1 5 DAT
M SLB 1 5 5
M SAL 5 3 33 32 31
M SDT 5 fgfh
M SDD 5 0.0000 0.0000 DR ALL 1 6
M SED 5 absolute
M STY 1 6 DAT
M SLB 1 6 6
M SAL 6 3 40 39 38
M SDT 6 fgfh
M SDD 6 0.0000 0.0000 DR ALL 1 6
M SED 6 relative
M STY 1 7 DAT
M SLB 1 7 7
M SAL 7 3 47 46 45
M SDT 7 fgfh
M SDD 7 0.0000 -0.0000 DR ALL 1 6
M SED 7 attached
M STY 1 8 DAT
M SLB 1 8 8
M SAL 8 15 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
M SAL 8 3 65 66 67
M SDT 8 MDLBG_FRAGMENT_STEREO F
M SDD 8 6.5461 -2.8188 DR ALL 1 1
M SED 8 abs
M STY 1 9 DAT
M SLB 1 9 9
M SPL 1 9 8
M SAL 9 15 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
M SAL 9 3 65 66 67
M SDT 9 MDLBG_FRAGMENT_COEFFICIENT F
M SDD 9 10.1211 -2.9188 DR ALL 1 1
M SED 9 3
M STY 1 10 DAT
M SLB 1 10 10
M SPL 1 10 9
M SAL 10 1 52
M SDT 10 MDLBG_STEREO_KEY F
M SDD 10 2.3500 -0.6750 DR ALL 1 1
M SED 10 RS
M STY 1 11 DAT
M SLB 1 11 11
M SPL 1 11 9
M SAL 11 2 55 67
M SDT 11 MDLBG_STEREO_KEY F
M SDD 11 2.7411 -1.2437 DR ALL 1 1
M SED 11 endo
M STY 1 12 DAT
M SLB 1 12 12
M SPL 1 12 9
M SAL 12 2 57 58
M SDT 12 MDLBG_STEREO_KEY F
M SDD 12 2.7830 -0.9250 DR ALL 1 1
M SED 12 trans
M END

View File

@ -0,0 +1,40 @@
#!/usr/bin/env nodejs
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
var path = require('path');
var cp = require('child_process');
var minimist = require('minimist');
var opts = process.argv.slice(3);
var script = require.resolve(path.join(__dirname, process.argv[2]));
var binPath = cp.execSync('npm bin').toString().trim();
var tapScript = path.join(binPath, 'tap');
var filterSpec = {
string: ['reporter'],
default: { reporter: 'classic' },
alias: { reporter: 'R' },
unknown: o => filterSpec.string.includes(o)
};
var filterOpts = minimist(process.argv.slice(3), filterSpec);
cp.spawn(`node ${script} ${opts.join(' ')} |` +
`${tapScript} --reporter=${filterOpts.reporter} -`,
{ shell: true, stdio: 'inherit' });

View File

@ -0,0 +1,57 @@
#!/usr/bin/nodejs
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
const path = require('path');
const tap = require('tap');
require('babel-polyfill'); // Needed for padStart, etc (used in "new wave" ketchers)
const molfile = require(path.join('../..', 'script/chem/molfile'));
const cols = require('../utils/collections')();
const molcompare = require('../utils/molcompare');
function isEquals(expected, actual) {
return molcompare.raw(expected, actual, { stripSpaces: true });
}
function runTests(isEqual) {
for (let colname of cols.names()) {
tap.test(colname, tap => {
for (let sample of cols(colname)) {
let expected = sample.data;
let struct = molfile.parse(sample.data, { badHeaderRecover: true });
let actual = molfile.stringify(struct);
if (!expected || !actual)
tap.fail(`${colname}/${sample.name} not parsed`);
try {
tap.ok(isEqual(expected, actual), `${colname}/${sample.name} equals`);
} catch (e) {
tap.fail(`${colname}/${sample.name} mismatch`, e);
}
}
tap.end();
});
}
}
runTests(isEquals);

View File

@ -0,0 +1,70 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
var ora = require('ora');
var tap = require('tap');
var istanbul = require('istanbul');
var libSymbol = require('../utils/library');
var cols = require('../utils/collections')();
var browserSession = require('../utils/browser-session');
browserSession((browser, testDir) => {
browser = browser.url(`${testDir}/render/render-test.html`);
for (let colname of cols.names()) {
tap.test(colname, t => {
for (let name of cols(colname).names()) {
let sampleName = `${colname}/${name}`;
let structStr = cols(colname).fixture(name);
let symbol = libSymbol(sampleName); // string Symbol element from `fixtures.svg`
let opts = {
sample: sampleName,
width: 600,
height: 400
};
let spinner = ora(sampleName);
browser.then(() => spinner.start());
browser = browser
.execute(function (structStr, symbol, opts) {
window.compareTest(structStr, symbol, opts);
}, structStr, symbol, opts)
.waitForExist('#cmp')
.getHTML('#cmp', false).then(mismatch => {
mismatch = mismatch.replace(/Mismatch:\s/, '') - 0;
spinner.succeed(`${sampleName} - ${mismatch}`);
t.ok(mismatch < 0.5, `${sampleName}`);
});
}
browser.then(() => t.end());
});
}
return browser.then(() => {
return browser.execute('return window.__coverage__').then(cover => {
var reporter = new istanbul.Reporter();
var collector = new istanbul.Collector();
collector.add(cover.value);
reporter.add('html'); // istanbul.Report.getReportList()
reporter.write(collector, true, () => null);
});
});
});

View File

@ -0,0 +1,92 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
var resemble = require('resemblejs');
function diff(el1, el2, opts) {
console.info("diff", el1, el2);
let s = new XMLSerializer();
let renderEl = document.body;
let can1 = document.createElement('canvas');
let can2 = document.createElement('canvas');
renderEl.appendChild(can1);
renderEl.appendChild(can2);
let svg1 = el1;
setCanvasSizeFromSVG(can1, svg1);
let strSvg1 = s.serializeToString(svg1);
let svg2 = el2;
setCanvasSizeFromSVG(can2, svg2);
let strSvg2 = s.serializeToString(svg2);
return Promise.all([
drawSVGonCanvas(strSvg1, can1),
drawSVGonCanvas(strSvg2, can2)
]).then(() => compareCanvas(can1, can2, opts));
}
function setCanvasSizeFromSVG(canvas, svgEl) {
svgEl.removeAttribute('style');
canvas.width = svgEl.attributes.width.value;
canvas.height = svgEl.attributes.height.value;
}
function drawSVGonCanvas(strSVG, canvas) {
return new Promise((res, rej) => {
let img = new Image();
img.onload = () => {
canvas.getContext('2d').drawImage(img, 0, 0);
res();
};
img.onerror = () => rej();
img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(strSVG);
});
}
/** opts: {
errorColor: {red: int, green: int, blue: int},
errorType: 'flat' || 'movement' || 'flatDifferenceIntensity' || 'movementDifferenceIntensity',
transparency: 0<= x <=1,
largeImageThreshold: !== undefined,
useCrossOrigin: !== undefined
}
opts.methods: [
'ignoreColors' || 'ignoreNothing' || 'ignoreAntialiasing' || 'scaleToSameSize'
'scaleToSameSize' || 'useOriginalSize'
]
*/
function compareCanvas(c1, c2, opts) {
let cmp = resemble(c1.toDataURL('image/png'))
.compareTo(c2.toDataURL('image/png'));
resemble.outputSettings(opts || {});
if (opts.methods)
for (let method of opts.methods) cmp = cmp[method]();
c1.remove(); c2.remove();
return Promise.resolve(cmp.onComplete(opts.onComplete));
}
function changeOutputOpts(opts) {
resemble.outputSettings(opts);
}
module.exports = {
diff,
changeOutputOpts
};

View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<title>Render Test</title>
<script src="../../node_modules/raphael/raphael.js"></script>
<script src="../../node_modules/resemblejs/resemble.js"></script>
<script src="../dist/render-test.js"></script>

View File

@ -0,0 +1,121 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
var renderDiff = require('./render-diff').diff;
var Render = require('../../script/render');
var ketcher = {
molfile: require('../../script/chem/molfile'),
render: function render(el, struct, opts) {
var render = new Render(el, opts);
render.setMolecule(struct);
render.update();
}
};
var defaultOpts = {
width: 600,
height: 400,
render: {
bondLength: 75,
showSelectionRegions: false,
showBondIds: false,
showHalfBondIds: false,
showLoopIds: false,
showAtomIds: false,
autoScale: true,
autoScaleMargin: 4,
hideImplicitHydrogen: false,
hideChiralFlag: true
}
};
function createStyle(style) {
return Object.keys(style).reduce((str, prop) => {
var value = style[prop];
if (typeof value == 'object')
return str;
if (typeof value == 'number' || typeof value == 'string')
value += 'px';
return str += `${prop}: ${value};`;
}, '');
}
function createEl(name, opts, parent) {
var [tag, id] = name.split('#');
var el = document.createElement(tag || 'div');
if (id)
el.id = id;
el.style = createStyle(opts);
(parent || document.body).appendChild(el);
return el;
}
function ketcherRender(structStr, options) {
let opts = Object.assign({}, defaultOpts, options);
var target = createEl('#canvas-ketcher', opts);
var struct = ketcher.molfile.parse(structStr);
ketcher.render(target, struct, opts.render);
return target.firstElementChild;
}
function symbolRender(symbolStr) {
const symbol = new DOMParser().parseFromString(symbolStr, "application/xml").firstElementChild;
let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
for (let attr of symbol.attributes)
svg.setAttribute(attr.name, attr.value);
svg.innerHTML = symbol.innerHTML;
return svg;
}
function renderTest(structStr, opts) {
document.body.innerHTML = '';
return ketcherRender(structStr, opts);
}
function compareTest(structStr, symbolStr, opts) {
console.info('sample', opts.sample);
document.body.innerHTML = '';
var renderOpts = {
onComplete: function (diff) {
document.body.innerHTML = '';
var diffImage = new Image();
diffImage.src = diff.getImageDataUrl();
document.body.appendChild(diffImage);
createEl('output#cmp', {
color: 'green'
}).innerHTML = `Mismatch: ${diff.misMatchPercentage}`;
},
methods: ['ignoreAntialiasing', 'useOriginalSize']
};
var cmp = renderDiff(
ketcherRender(structStr, opts),
symbolRender(symbolStr),
renderOpts);
cmp.then(function () {
console.info('Cmp complete');
});
}
window.renderTest = renderTest;
window.compareTest = compareTest;

View File

@ -0,0 +1,60 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
var webdriverio = require('webdriverio');
var chromedriver = require('chromedriver');
var path = require('path');
var minimist = require('minimist');
var options = minimist(process.argv.slice(2), {
string: ['dist'],
boolean: ['headless'],
default: {
headless: implicitHeadless(),
dist: 'dist'
}
});
function implicitHeadless() {
return process.platform != 'win32' && process.platform != 'darwin' &&
!process.env.DISPLAY;
}
function startSession(session) {
// an variant of https://git.io/vQ8o7
chromedriver.start(['--url-base=wd/hub']);
var browser = webdriverio.remote({
port: 9515, // TODO: autochoose choose unused port
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: options.headless ? {
// see: https://goo.gl/ypWDst
args: ['--headless', '--disable-gpu']
} : {}
}
}).init().url('about:blank');
browser.on('error', (e) => console.error(e));
let br = session(browser, path.join(__dirname, '..')) || browser; // test dir
br.end().then(() => chromedriver.stop());
}
module.exports = startSession;

View File

@ -0,0 +1,111 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
var fs = require('fs');
var path = require('path');
var minimist = require('minimist');
var options = minimist(process.argv.slice(2), {
string: ['fixtures'],
default: {
fixtures: 'fixtures'
}
});
function collect(items, base) {
var res = [];
var structfiles = [];
for (var fn of items) {
var fpath = path.join(base || '', fn);
if (fs.statSync(fpath).isDirectory())
res = res.concat(collect(fs.readdirSync(fpath), fpath));
else if (path.extname(fn) == '.sdf')
res.push(sdfCollect(fpath));
else if (!!base && ['.mol', '.rxn'].indexOf(path.extname(fn)) != -1)
structfiles.push(fn);
}
if (structfiles.length > 0) {
res.push({
name: path.basename(base),
path: base,
type: 'folder',
files: structfiles
});
}
return res;
}
function sdfCollect(fpath) {
var data = fs.readFileSync(fpath, 'utf8');
return {
name: path.basename(fpath),
path: fpath,
type: 'sdf',
count: data.split(/\$\$\$\$/).length
};
}
function* iterate(col) {
if (col.type == 'folder') {
for (var fn of col.files) {
yield {
name: fn,
data: fs.readFileSync(path.join(col.path, fn), 'utf8')
};
}
} else {
var sdf = fs.readFileSync(col.path, 'utf8');
var re = /^\$\$\$\$\n/gm;
for (var m, i, num = 0; i = re.lastIndex, m = re.exec(sdf); num++) {
yield {
name: num,
data: sdf.slice(i, m.index)
};
}
}
}
function range(n, start) {
start = start || 0;
return Array.apply(null, {
length: n - start
}).map((_, i) => i + start);
}
function collection(collections, name) {
var col = collections.find(c => c.name == name);
return Object.assign(iterate(col), col.type == 'folder' ? {
names: () => col.files,
fixture: id => fs.readFileSync(path.join(col.path, id), 'utf8')
} : {
names: () => range(col.count - 1),
fixture: id => {
var data = fs.readFileSync(col.path, 'utf8');
return data.split(/\$\$\$\$/m, id + 1)[id - 0].trim();
}
});
}
module.exports = function (colPath) {
if (!colPath) colPath = path.join('test/', options.fixtures);
var cols = collect(Array.isArray(colPath) ? colPath : [colPath]);
return Object.assign(collection.bind(null, cols), {
names: () => cols.map(c => c.name)
});
};

View File

@ -0,0 +1,62 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
/* eslint-env node */
var fs = require('fs');
var ora = require('ora');
var svgstore = require('svgstore');
var cols = require('./collections')();
var browserSession = require('./browser-session');
browserSession((browser, testDir) => {
browser = browser.url(`${testDir}/render/render-test.html`);
var sprites = svgstore({
copyAttrs: ['width', 'height', 'preserveAspectRatio']
});
for (var colname of cols.names()) {
for (var name of cols(colname).names()) {
let sampleName = `${colname}/${name}`;
let structStr = cols(colname).fixture(name);
let opts = {
sample: sampleName,
width: 600,
height: 400
};
let spinner = ora(sampleName);
browser.then(() => spinner.start());
browser = browser
.execute(function (structStr, opts) {
window.renderTest(structStr, opts);
}, structStr, opts)
.waitForExist('#canvas-ketcher')
.getHTML('#canvas-ketcher', false).then(svg => {
// console.info(sampleName, svg.replace(/.*(viewBox=".+?").*/, "$1"));
sprites.add(sampleName, svg);
spinner.succeed();
});
}
}
return browser.then(() => {
// TODO should it be cmd arg?
fs.writeFileSync('test/fixtures/fixtures.svg', sprites);
});
});

View File

@ -0,0 +1,34 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
const fs = require('fs');
const path = require('path');
const xpath = require('xpath');
const DOMParser = require('xmldom').DOMParser;
const XMLSerializer = require('xmldom').XMLSerializer;
let libStr = fs.readFileSync(path.join(__dirname, '../fixtures/fixtures.svg')).toString();
let library = new DOMParser().parseFromString(libStr);
function libSymbol(sampleName) {
let xsym = xpath.evaluate(`//*[@id='${sampleName}']`, library, // ids with '/' are absolutely valid, see https://epa.ms/SGNMm
null, xpath.XPathResult.FIRST_ORDERED_NODE_TYPE, null);
let symbol = xsym.singleNodeValue;
return new XMLSerializer().serializeToString(symbol);
}
module.exports = libSymbol;

View File

@ -0,0 +1,138 @@
/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
'use strict';
const defaultCmpOptions = {
stripSpaces: false,
skipCompare: [],
eps: 0.00011
};
const numberPattern = /-?\d+[\.,]?\d*/g;
function epsEqu(x, y, eps) {
eps = eps || Number.EPSILON * Math.max(Math.abs(x), Math.abs(y));
return Math.abs(x - y) <= eps;
}
function arraysEquals(sArray, rArray, eqFunc) {
return sArray === rArray ||
(
sArray.length === rArray.length &&
sArray.every((elem, index) => eqFunc ? eqFunc(elem, rArray[index]) : elem === rArray[index])
);
}
function extractNumbers(source) {
const matches = source.match(numberPattern);
return {
numbers: matches ? matches.map(parseFloat) : [],
characters: source.replace(numberPattern, '').split(/\s+/)
};
}
function compareFile(source, dest, options) {
const sourceStr = source.split(/\r?\n+/);
const destStr = dest.split(/\r?\n+/);
for (var i = 0; i < sourceStr.length; i++) {
if (options.stripSpaces) {
sourceStr[i] = sourceStr[i].trim();
destStr[i] = destStr[i].trim();
}
const sDataSplitted = extractNumbers(sourceStr[i]);
const rDataSplitted = extractNumbers(destStr[i]);
const numberEquals = arraysEquals(sDataSplitted.numbers, rDataSplitted.numbers, (x, y) => epsEqu(x, y, options.eps));
const characterEquals = arraysEquals(sDataSplitted.characters, rDataSplitted.characters);
if (!numberEquals || !characterEquals)
throw new Error(`\nsource: '${sourceStr[i]}'\ndest: '${destStr[i]}'`);
}
return true;
}
function compareRaw(source, dest, options) {
const sDataMols = source.split('M END');
const rDataMols = dest.split('M END');
let newSdata, newRdata;
if (sDataMols.length !== rDataMols.length)
throw new Error(`\nCount of content blocks are not equal: source = ${sDataMols.length}, dest = ${rDataMols.length}`);
options = Object.assign({}, defaultCmpOptions, options);
for (let i = 0; i < sDataMols.length - 1; i++) {
const sV2000DataIndex = sDataMols[i].indexOf('V2000\n');
const sV3000DataIndex = sDataMols[i].indexOf('V3000\n');
const rV2000DataIndex = rDataMols[i].indexOf('V2000\n');
const rV3000DataIndex = rDataMols[i].indexOf('V3000\n');
newSdata = sDataMols[i].substring(6 + (sV3000DataIndex === -1 ? sV2000DataIndex : sV3000DataIndex));
newRdata = rDataMols[i].substring(6 + (rV3000DataIndex === -1 ? rV2000DataIndex : rV3000DataIndex));
if (!compareFile(newSdata, newRdata, options))
return false;
}
return true;
}
function compareObjects(source, dest, options, parentKey) {
if (typeof source !== typeof dest)
throw new Error(`\ntypes not equal: type ${typeof source} of ${source} vs type ${typeof dest} of ${dest} in ${parentKey}`);
if (typeof source !== 'object')
return source === dest;
return Object.keys(source)
.filter(prop => !options.skipCompare.includes(prop))
.every(key => {
if (dest[key] === undefined)
throw new Error(`\nDest object has no key ${key}`);
if (!compareObjects(source[key], dest[key], options, key))
throw new Error(`\nsource: '${source[key]}'\ndest: '${dest[key]}' in ${key}`);
return true;
});
}
function unicodeLiteral(str) {
function fixedHex(number, length) {
let str = number.toString(16).toUpperCase();
while (str.length < length)
str = "0" + str;
return str;
}
let result = "";
for (var i = 0; i < str.length; ++i) {
if (str.charCodeAt(i) > 126 || str.charCodeAt(i) < 32)
result += "\\u" + fixedHex(str.charCodeAt(i), 4);
else
result += str[i];
}
return result;
}
module.exports = {
raw: compareRaw,
objects: compareObjects,
unicodeLiteral: unicodeLiteral
};