@datagrok/helm 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/package.json +15 -16
- package/src/cell-renderer.ts +13 -36
- package/src/constants.ts +0 -11
- package/src/helm-helper.ts +67 -17
- package/src/helm-monomer-placer.ts +8 -26
- package/src/helm-web-editor.ts +33 -3
- package/src/package-test.ts +12 -4
- package/src/package-utils.ts +160 -0
- package/src/package.ts +123 -197
- package/src/tests/findMonomers-tests.ts +2 -0
- package/src/tests/get-all-parts-tests.ts +5 -0
- package/src/tests/{get-molfiles.ts → get-molfiles-tests.ts} +3 -1
- package/src/tests/get-monomer-tests.ts +279 -0
- package/src/tests/helm-service-tests.ts +4 -0
- package/src/tests/helm-tests.ts +8 -1
- package/src/tests/helm-web-editor-tests.ts +55 -0
- package/src/tests/parse-helm-tests.ts +98 -0
- package/src/tests/properties-widget-tests.ts +33 -4
- package/src/tests/renderers-tests.ts +3 -1
- package/src/tests/utils.ts +6 -0
- package/src/types/index.ts +5 -0
- package/src/utils/get-hovered.ts +9 -21
- package/src/utils/get-monomer-dummy.ts +149 -0
- package/src/utils/get-monomer-of-library.ts +90 -0
- package/src/utils/get-monomer.ts +113 -0
- package/src/utils/helm-grid-cell-renderer.ts +12 -7
- package/src/utils/helm-service.ts +19 -45
- package/src/utils/index.ts +11 -17
- package/src/widgets/properties-widget.ts +29 -9
- package/tsconfig.json +1 -1
- package/vendor/helm-web-editor.development.js +39640 -0
- package/vendor/helm-web-editor.production.js +2 -0
- package/vendor/helm-web-editor.production.js.map +1 -0
- package/webpack.config.js +14 -11
- package/helm/JSDraw/Pistoia.HELM-uncompressed.js +0 -9694
- package/helm/JSDraw/Pistoia.HELM.js +0 -27
- package/helm/JSDraw/ReadMe.txt +0 -8
- package/helm/JSDraw/Scilligence.JSDraw2.Lite-uncompressed.js +0 -31126
- package/helm/JSDraw/Scilligence.JSDraw2.Lite.js +0 -12
- package/helm/JSDraw/Scilligence.JSDraw2.Resources.js +0 -762
- package/helm/JSDraw/dojo.js +0 -250
- package/helm/JSDraw/test.html +0 -24
- package/src/utils/dummy-monomer.ts +0 -69
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import * as grok from 'datagrok-api/grok';
|
|
2
|
+
import * as ui from 'datagrok-api/ui';
|
|
3
|
+
import * as DG from 'datagrok-api/dg';
|
|
4
|
+
|
|
5
|
+
import wu from 'wu';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
after, before, category, delay, expect, test, expectArray, testEvent, expectFloat, timeout
|
|
9
|
+
} from '@datagrok-libraries/utils/src/test';
|
|
10
|
+
import {getHelmHelper} from '@datagrok-libraries/bio/src/helm/helm-helper';
|
|
11
|
+
import {errInfo} from '@datagrok-libraries/bio/src/utils/err-info';
|
|
12
|
+
import {Atom, HelmType, IJsAtom, IWebEditorMonomer, GetMonomerFunc} from '@datagrok-libraries/bio/src/helm/types';
|
|
13
|
+
import {IMonomerLib, Monomer, MonomerLibSummaryType} from '@datagrok-libraries/bio/src/types';
|
|
14
|
+
import {IHelmHelper} from '@datagrok-libraries/bio/src/helm/helm-helper';
|
|
15
|
+
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
16
|
+
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
17
|
+
import {
|
|
18
|
+
getUserLibSettings, setUserLibSettings, setUserLibSettingsForTests
|
|
19
|
+
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
20
|
+
import {defaultMonomerLibSummary, expectMonomerLib} from '@datagrok-libraries/bio/src/tests/monomer-lib-tests';
|
|
21
|
+
|
|
22
|
+
import {getMonomerHandleArgs} from '../utils/get-monomer';
|
|
23
|
+
import {JSDraw2HelmModule, OrgHelmModule} from '../types';
|
|
24
|
+
|
|
25
|
+
import {HelmHelper} from '../helm-helper';
|
|
26
|
+
import {RGROUP_CAP_GROUP_NAME, RGROUP_LABEL, SMILES} from '../constants';
|
|
27
|
+
import {getRS} from '../utils/get-monomer-dummy';
|
|
28
|
+
import {initHelmMainPackage} from './utils';
|
|
29
|
+
|
|
30
|
+
import {_package} from '../package-test';
|
|
31
|
+
|
|
32
|
+
declare const org: OrgHelmModule;
|
|
33
|
+
declare const JSDraw2: JSDraw2HelmModule;
|
|
34
|
+
|
|
35
|
+
type TestDataType = { args: { a: any, name?: string }, tgt: any };
|
|
36
|
+
|
|
37
|
+
const tests: { [testName: string]: TestDataType } = {
|
|
38
|
+
/* eslint-disable */
|
|
39
|
+
//@formatter:off
|
|
40
|
+
t0:{"args":{"a":"HELM_BASE","name":"A"},"tgt":{"id":"A","m":"HELM Core Monomer library\n Ketcher 10131612512D 1 1.00000 0.00000 0\n\n 11 12 0 0 0 999 V2000\n 0.9632 -3.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -4.0450 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -5.0451 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9630 -5.5451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8291 -5.0452 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8293 -4.0451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8536 -5.3539 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4413 -4.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8535 -3.7357 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9632 -2.5448 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1626 -6.3051 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 10 1 0 0 0\n 1 6 2 0 0 0\n 1 2 1 0 0 0\n 9 2 1 0 0 0\n 2 3 2 0 0 0\n 7 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 2 0 0 0\n 5 6 1 0 0 0\n 7 8 1 0 0 0\n 7 11 1 0 0 0\n 8 9 2 0 0 0\nA 11\nR1\nM END\n","n":"Adenine","na":"A","rs":1,"at":{"R1":"H"}}},
|
|
41
|
+
t1:{"args":{"a":"HELM_BASE","name":"C"},"tgt":{"id":"C","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 10.7683 -10.8385 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.7683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -13.0885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -10.8385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -10.0885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -8.5885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -14.5885 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 12.0673 -13.0885 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 1 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 2 0 0\n 6 7 1 0 0\n 3 8 1 0 0\n 2 9 2 0 0\nA 8\nR1\nM END\n","n":"Cytosine","na":"C","rs":1,"at":{"R1":"H"}}},
|
|
42
|
+
t2:{"args":{"a":"HELM_BASE","name":"G"},"tgt":{"id":"G","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 12 13 0 0 0 0 0 0 0 0999 V2000\n 12.7698 -10.2854 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4733 -12.5380 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -10.2854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -9.5354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8623 -11.0354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -9.8154 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -8.0354 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.0689 -12.5354 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -12.2479 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.2789 -13.6737 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 2 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 1 0 0\n 7 8 2 0 0\n 5 8 1 0 0\n 6 9 2 0 0\n 2 10 1 0 0\n 4 11 1 0 0\n 7 11 1 0 0\n 11 12 1 0 0\nA 12\nR1\nM END\n","n":"Guanine","na":"G","rs":1,"at":{"R1":"H"}}},
|
|
43
|
+
t3:{"args":{"a":"HELM_LINKER","name":"p"},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
44
|
+
t4:{"args":{"a":"HELM_SUGAR","name":"p"},"tgt":null},
|
|
45
|
+
t5:{"args":{"a":"HELM_SUGAR","name":"r"},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
46
|
+
t6:{"args":{"a":{"T":"ATOM","p":{"x":144,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":4}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
47
|
+
t7:{"args":{"a":{"T":"ATOM","p":{"x":144,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":4}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
48
|
+
t8:{"args":{"a":{"T":"ATOM","p":{"x":144,"y":48},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"G","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":5}},"tgt":{"id":"G","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 12 13 0 0 0 0 0 0 0 0999 V2000\n 12.7698 -10.2854 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4733 -12.5380 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -10.2854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -9.5354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8623 -11.0354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -9.8154 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -8.0354 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.0689 -12.5354 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -12.2479 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.2789 -13.6737 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 2 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 1 0 0\n 7 8 2 0 0\n 5 8 1 0 0\n 6 9 2 0 0\n 2 10 1 0 0\n 4 11 1 0 0\n 7 11 1 0 0\n 11 12 1 0 0\nA 12\nR1\nM END\n","n":"Guanine","na":"G","rs":1,"at":{"R1":"H"}}},
|
|
49
|
+
t9:{"args":{"a":{"T":"ATOM","p":{"x":192,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":6}},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
50
|
+
t10:{"args":{"a":{"T":"ATOM","p":{"x":192,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":6}},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
51
|
+
t11:{"args":{"a":{"T":"ATOM","p":{"x":205,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null,"annotation":"5'","annotationshowright":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":1,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"r"},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
52
|
+
t12:{"args":{"a":{"T":"ATOM","p":{"x":205,"y":184},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":1,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"A","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":2,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"A"},"tgt":{"id":"A","m":"HELM Core Monomer library\n Ketcher 10131612512D 1 1.00000 0.00000 0\n\n 11 12 0 0 0 999 V2000\n 0.9632 -3.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -4.0450 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -5.0451 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9630 -5.5451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8291 -5.0452 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8293 -4.0451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8536 -5.3539 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4413 -4.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8535 -3.7357 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9632 -2.5448 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1626 -6.3051 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 10 1 0 0 0\n 1 6 2 0 0 0\n 1 2 1 0 0 0\n 9 2 1 0 0 0\n 2 3 2 0 0 0\n 7 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 2 0 0 0\n 5 6 1 0 0 0\n 7 8 1 0 0 0\n 7 11 1 0 0 0\n 8 9 2 0 0 0\nA 11\nR1\nM END\n","n":"Adenine","na":"A","rs":1,"at":{"R1":"H"}}},
|
|
53
|
+
t13:{"args":{"a":{"T":"ATOM","p":{"x":240,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":7}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
54
|
+
t14:{"args":{"a":{"T":"ATOM","p":{"x":240,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":7}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
55
|
+
t15:{"args":{"a":{"T":"ATOM","p":{"x":240,"y":48},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"C","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":8}},"tgt":{"id":"C","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 10.7683 -10.8385 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.7683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -13.0885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -10.8385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -10.0885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -8.5885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -14.5885 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 12.0673 -13.0885 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 1 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 2 0 0\n 6 7 1 0 0\n 3 8 1 0 0\n 2 9 2 0 0\nA 8\nR1\nM END\n","n":"Cytosine","na":"C","rs":1,"at":{"R1":"H"}}},
|
|
56
|
+
t16:{"args":{"a":{"T":"ATOM","p":{"x":253,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":3,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"p"},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
57
|
+
t17:{"args":{"a":{"T":"ATOM","p":{"x":288,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":9}},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
58
|
+
t18:{"args":{"a":{"T":"ATOM","p":{"x":301,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null,"annotation":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":1,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"r"},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
59
|
+
t19:{"args":{"a":{"T":"ATOM","p":{"x":301,"y":184},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":2,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"G","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":2,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"G"},"tgt":{"id":"G","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 12 13 0 0 0 0 0 0 0 0999 V2000\n 12.7698 -10.2854 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4733 -12.5380 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -11.7854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1698 -10.2854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -9.5354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8623 -11.0354 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -9.8154 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4748 -8.0354 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.0689 -12.5354 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7448 -12.2479 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.2789 -13.6737 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 2 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 1 0 0\n 7 8 2 0 0\n 5 8 1 0 0\n 6 9 2 0 0\n 2 10 1 0 0\n 4 11 1 0 0\n 7 11 1 0 0\n 11 12 1 0 0\nA 12\nR1\nM END\n","n":"Guanine","na":"G","rs":1,"at":{"R1":"H"}}},
|
|
60
|
+
t20:{"args":{"a":{"T":"ATOM","p":{"x":349,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":6,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"p"},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
61
|
+
t21:{"args":{"a":{"T":"ATOM","p":{"x":397,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null,"annotation":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":1,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"r"},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
62
|
+
t22:{"args":{"a":{"T":"ATOM","p":{"x":397,"y":184},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":3,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"C","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":2,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"C"},"tgt":{"id":"C","m":"HELM Core Monomer library\nHELMMonomers071816.sdf \n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 10.7683 -10.8385 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 10.7683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -13.0885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -12.3385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1683 -10.8385 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -10.0885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -8.5885 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4733 -14.5885 0.0000 R1 0 0 0 0 0 0 0 0 0 0 0 0\n 12.0673 -13.0885 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0\n 2 3 1 0 0\n 3 4 1 0 0\n 4 5 2 0 0\n 5 6 1 0 0\n 1 6 2 0 0\n 6 7 1 0 0\n 3 8 1 0 0\n 2 9 2 0 0\nA 8\nR1\nM END\n","n":"Cytosine","na":"C","rs":1,"at":{"R1":"H"}}},
|
|
63
|
+
t23:{"args":{"a":{"T":"ATOM","p":{"x":445,"y":136},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":0,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":9,"ringclosures":null,"_outside":false,"_haslabel":false},"name":"p"},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
64
|
+
t24:{"args":{"a":{"T":"ATOM","p":{"x":48,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":1}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
65
|
+
t25:{"args":{"a":{"T":"ATOM","p":{"x":48,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_SUGAR","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"r","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":1}},"tgt":{"id":"r","m":"HELM Core Monomer library\n Ketcher 10111608242D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n -31.2431 12.8416 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.9523 11.8849 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.9523 11.8659 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.6254 12.8108 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -30.4231 13.4140 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -32.1882 13.1686 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5552 11.0872 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -31.5220 10.0877 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -29.3803 11.0458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -28.6686 13.1017 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -32.3775 14.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -33.2435 14.6506 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 1 0 0 0\n 5 1 1 0 0 0\n 1 6 1 1 0 0\n 2 7 1 6 0 0\n 7 8 1 0 0 0\n 3 9 1 6 0 0\n 4 10 1 1 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\nA 8\nR2\nA 10\nR3\nA 12\nR1\nM END\n","n":"Ribose","na":"r","rs":3,"at":{"R1":"H","R2":"H","R3":"OH"}}},
|
|
66
|
+
t26:{"args":{"a":{"T":"ATOM","p":{"x":48,"y":48},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_BASE","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"A","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":2}},"tgt":{"id":"A","m":"HELM Core Monomer library\n Ketcher 10131612512D 1 1.00000 0.00000 0\n\n 11 12 0 0 0 999 V2000\n 0.9632 -3.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -4.0450 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0970 -5.0451 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9630 -5.5451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8291 -5.0452 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8293 -4.0451 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8536 -5.3539 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4413 -4.5449 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8535 -3.7357 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9632 -2.5448 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1626 -6.3051 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 10 1 0 0 0\n 1 6 2 0 0 0\n 1 2 1 0 0 0\n 9 2 1 0 0 0\n 2 3 2 0 0 0\n 7 3 1 0 0 0\n 3 4 1 0 0 0\n 4 5 2 0 0 0\n 5 6 1 0 0 0\n 7 8 1 0 0 0\n 7 11 1 0 0 0\n 8 9 2 0 0 0\nA 11\nR1\nM END\n","n":"Adenine","na":"A","rs":1,"at":{"R1":"H"}}},
|
|
67
|
+
t27:{"args":{"a":{"T":"ATOM","p":{"x":96,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"_parent":"[object Object]","_aaid":3}},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
68
|
+
t28:{"args":{"a":{"T":"ATOM","p":{"x":96,"y":0},"charge":0,"isotope":null,"radical":null,"group":null,"alias":null,"superatom":null,"attachpoints":[],"rgroup":null,"bio":{"type":"HELM_LINKER","id":null,"ambiguity":null},"locked":false,"hidden":null,"_rect":null,"elem":"p","color":null,"hcount":null,"selected":false,"f":null,"bonds":null,"id":null,"atommapid":null,"query":null,"hasError":null,"hs":null,"val":null,"tag":null,"_parent":"[object Object]","_aaid":3}},"tgt":{"id":"p","m":"HELM Core Monomer library\n Ketcher 10061618102D 1 1.00000 0.00000 0\n\n 5 4 0 0 0 999 V2000\n 15.7527 -12.0837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7527 -13.0837 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6188 -13.5837 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2527 -13.9496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.7868 -12.8248 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 2 5 1 0 0 0\nA 1\nR1\nA 3\nR2\nM END\n","n":"Phosphate","na":"p","rs":2,"at":{"R1":"OH","R2":"OH"}}},
|
|
69
|
+
//@formatter:off
|
|
70
|
+
/* eslint-enable */
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
category('getMonomer', ()=>{
|
|
74
|
+
let libHelper: IMonomerLibHelper;
|
|
75
|
+
let helmHelper: IHelmHelper;
|
|
76
|
+
|
|
77
|
+
let monomerLibHelper: IMonomerLibHelper;
|
|
78
|
+
/** Backup actual user's monomer libraries settings */
|
|
79
|
+
let userLibSettings: UserLibSettings;
|
|
80
|
+
|
|
81
|
+
before(async ()=>{
|
|
82
|
+
await initHelmMainPackage();
|
|
83
|
+
|
|
84
|
+
[libHelper, helmHelper] = await Promise.all([getMonomerLibHelper(), getHelmHelper()]);
|
|
85
|
+
|
|
86
|
+
await timeout(async () => { monomerLibHelper = await getMonomerLibHelper(); }, 5000,
|
|
87
|
+
'get monomerLibHelper');
|
|
88
|
+
await timeout(async () => { userLibSettings = await getUserLibSettings(); }, 5000,
|
|
89
|
+
'get user lib settings for backup');
|
|
90
|
+
|
|
91
|
+
// Tests 'findMonomers' requires default monomer library loaded
|
|
92
|
+
await timeout(async () => { await setUserLibSettingsForTests(); }, 5000,
|
|
93
|
+
'set user lib settings for tests');
|
|
94
|
+
await timeout(async ()=> { await monomerLibHelper.awaitLoaded(); }, 5000,
|
|
95
|
+
'await monomerLib to be loaded');
|
|
96
|
+
await timeout(async () => { await monomerLibHelper.loadLibraries(true); }, 5000,
|
|
97
|
+
'reload monomerLib with settings for tests'); // load default libraries for tests
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
after(async ()=>{
|
|
101
|
+
await setUserLibSettings(userLibSettings);
|
|
102
|
+
await monomerLibHelper.loadLibraries(true);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('original', async () =>{
|
|
106
|
+
const monomerLib = libHelper.getBioLib();
|
|
107
|
+
rewriteLibraries(monomerLib);
|
|
108
|
+
|
|
109
|
+
// const overriddenGetMonomer = helmHelper.revertOriginalGetMonomer();
|
|
110
|
+
// try {
|
|
111
|
+
const helmHelper: IHelmHelper = await getHelmHelper();
|
|
112
|
+
expect(helmHelper != null, true);
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
const getMonomerFunc = helmHelper.originalGetMonomer!;
|
|
115
|
+
|
|
116
|
+
return _testAll('original', getMonomerFunc);
|
|
117
|
+
// } finally {
|
|
118
|
+
// helmHelper.overrideGetMonomer(overriddenGetMonomer);
|
|
119
|
+
// }
|
|
120
|
+
}, {isAggregated: true});
|
|
121
|
+
|
|
122
|
+
test('monomerLib', async () =>{
|
|
123
|
+
const monomerLib = monomerLibHelper.getBioLib();
|
|
124
|
+
expectMonomerLib(monomerLib);
|
|
125
|
+
|
|
126
|
+
const getMonomerFunc = org.helm.webeditor.Monomers.getMonomer;
|
|
127
|
+
return _testAll('monomerLib', getMonomerFunc);
|
|
128
|
+
}, {isAggregated: true});
|
|
129
|
+
|
|
130
|
+
function _testAll(prefix: string, getMonomerFunc: GetMonomerFunc): DG.DataFrame {
|
|
131
|
+
const resDf = DG.DataFrame.fromColumns([
|
|
132
|
+
DG.Column.fromStrings('subTest', []),
|
|
133
|
+
DG.Column.fromList(DG.COLUMN_TYPE.BOOL, 'success', []),
|
|
134
|
+
DG.Column.fromStrings('res', []),
|
|
135
|
+
DG.Column.fromStrings('tgt', []),
|
|
136
|
+
DG.Column.fromStrings('error', []),
|
|
137
|
+
DG.Column.fromStrings('stack', []),
|
|
138
|
+
]);
|
|
139
|
+
|
|
140
|
+
// const testCount: number = Object.keys(tests).length + 1;
|
|
141
|
+
// //* eslint-disable no-array-constructor */
|
|
142
|
+
// const subTestList: string[] = new Array<string>(testCount);
|
|
143
|
+
// const successList: boolean[] = new Array<boolean>(testCount);
|
|
144
|
+
// const resList: string[] = new Array<string>(testCount);
|
|
145
|
+
// const tgtList:string[] = new Array<string>(testCount);
|
|
146
|
+
// const errorList: string[] = new Array<string>(testCount);
|
|
147
|
+
// const stackList: string[] = new Array<string>(testCount);
|
|
148
|
+
// /* eslint-enable no-array-constructor */
|
|
149
|
+
|
|
150
|
+
const resI = resDf.rows.addNew().idx;
|
|
151
|
+
resDf.set('subTest', resI, 'Monomer lib');
|
|
152
|
+
resDf.set('res', resI, '');
|
|
153
|
+
resDf.set('tgt', resI, '');
|
|
154
|
+
try {
|
|
155
|
+
const monomerLib = monomerLibHelper.getBioLib();
|
|
156
|
+
expectMonomerLib(monomerLib);
|
|
157
|
+
resDf.set('success', resI, true);
|
|
158
|
+
} catch (err) {
|
|
159
|
+
const [errMsg, errStack] = errInfo(err);
|
|
160
|
+
resDf.set('error', resI, errMsg);
|
|
161
|
+
resDf.set('stack', resI, errStack);
|
|
162
|
+
resDf.set('success', resI, false);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
for (const [[testName, testData], testI] of wu.enumerate(Object.entries(tests))) {
|
|
166
|
+
const a: Atom<HelmType> | HelmType = getAtomFromJson(testData.args.a);
|
|
167
|
+
const [biotype, elem] = getMonomerHandleArgs(a, testData.args.name);
|
|
168
|
+
const tgt = testData.tgt;
|
|
169
|
+
|
|
170
|
+
const resI = resDf.rows.addNew().idx;
|
|
171
|
+
resDf.set('subTest', resI, `${prefix}-${testName}-${biotype}-${elem}`);
|
|
172
|
+
resDf.set('tgt', resI, JSON.stringify(tgt ? {id: tgt.id, n: tgt.n, rs: tgt.rs} : null));
|
|
173
|
+
try {
|
|
174
|
+
const res: any = getMonomerFunc(a, testData.args.name);
|
|
175
|
+
resDf.set('res', resI, JSON.stringify(res ? {id: res.id, n: res.n, rs: res.rs} : null));
|
|
176
|
+
expectObjectWithNull(res, tgt);
|
|
177
|
+
resDf.set('success', resI, true);
|
|
178
|
+
} catch (err) {
|
|
179
|
+
const [errMsg, errStack] = errInfo(err);
|
|
180
|
+
resDf.set('error', resI, errMsg);
|
|
181
|
+
resDf.set('stack', resI, errStack);
|
|
182
|
+
resDf.set('success', resI, false);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return resDf;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
test('missing', async ()=> {
|
|
189
|
+
/* Tests getMonomer function adding missing monomers. */
|
|
190
|
+
const helmStr = 'PEPTIDE1{[mis1].R.[mis2].T.C.F}$$$$;';
|
|
191
|
+
|
|
192
|
+
expectMonomerLib(monomerLibHelper.getBioLib());
|
|
193
|
+
const editor = new JSDraw2.Editor(ui.div(), {viewonly: true});
|
|
194
|
+
editor.setHelm(helmStr);
|
|
195
|
+
const withMissing = JSON.parse(JSON.stringify(
|
|
196
|
+
defaultMonomerLibSummary)) as MonomerLibSummaryType;
|
|
197
|
+
withMissing['PEPTIDE'] += 2;
|
|
198
|
+
expectMonomerLib(monomerLibHelper.getBioLib(), withMissing);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
function getAtomFromJson(argA: IJsAtom<HelmType> | HelmType): Atom<HelmType> | HelmType {
|
|
203
|
+
let res: Atom<HelmType> | HelmType;
|
|
204
|
+
const a = argA as IJsAtom<HelmType>;
|
|
205
|
+
if (a.T === 'ATOM')
|
|
206
|
+
res = new JSDraw2.Atom(a.p, a.elem, a.bio);
|
|
207
|
+
else
|
|
208
|
+
res = argA as HelmType;
|
|
209
|
+
return res;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export function expectObjectWithNull(actual: { [key: string]: any }, expected: { [key: string]: any }) {
|
|
213
|
+
if (actual == null && expected == null)
|
|
214
|
+
return;
|
|
215
|
+
else if (actual == null && expected != null)
|
|
216
|
+
throw new Error('actual is null, but expected is not null');
|
|
217
|
+
else if (actual!= null && expected == null)
|
|
218
|
+
throw new Error('actual is not null, but expected is null');
|
|
219
|
+
else {
|
|
220
|
+
for (const [expectedKey, expectedValue] of Object.entries(expected)) {
|
|
221
|
+
if (!(expectedKey in actual || actual.hasOwnProperty(expectedKey)))
|
|
222
|
+
throw new Error(`Expected property "${expectedKey}" not found`);
|
|
223
|
+
|
|
224
|
+
const actualValue = actual[expectedKey];
|
|
225
|
+
if (actualValue instanceof Array && expectedValue instanceof Array)
|
|
226
|
+
expectArray(actualValue, expectedValue);
|
|
227
|
+
else if (actualValue instanceof Object && expectedValue instanceof Object)
|
|
228
|
+
expectObjectWithNull(actualValue, expectedValue);
|
|
229
|
+
else if (Number.isFinite(actualValue) && Number.isFinite(expectedValue))
|
|
230
|
+
expectFloat(actualValue, expectedValue);
|
|
231
|
+
else if (actualValue != expectedValue)
|
|
232
|
+
throw new Error(`Expected (${expectedValue}) for key '${expectedKey}', got (${actualValue})`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** Fills org.helm.webeditor.Monomers dictionary for WebEditor */
|
|
238
|
+
function rewriteLibraries(monomerLib: IMonomerLib): void {
|
|
239
|
+
org.helm.webeditor.Monomers.clear();
|
|
240
|
+
monomerLib!.getPolymerTypes().forEach((polymerType) => {
|
|
241
|
+
const monomerSymbols = monomerLib!.getMonomerSymbolsByType(polymerType);
|
|
242
|
+
monomerSymbols.forEach((monomerSymbol) => {
|
|
243
|
+
let isBroken = false;
|
|
244
|
+
const monomer: Monomer = monomerLib!.getMonomer(polymerType, monomerSymbol)!;
|
|
245
|
+
const webEditorMonomer: IWebEditorMonomer = {
|
|
246
|
+
id: monomerSymbol,
|
|
247
|
+
m: monomer.molfile,
|
|
248
|
+
n: monomer.name,
|
|
249
|
+
na: monomer.naturalAnalog,
|
|
250
|
+
rs: monomer.rgroups.length,
|
|
251
|
+
type: monomer.polymerType,
|
|
252
|
+
mt: monomer.monomerType,
|
|
253
|
+
at: {},
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
if (monomer.rgroups.length > 0) {
|
|
257
|
+
// @ts-ignore
|
|
258
|
+
webEditorMonomer.rs = monomer.rgroups.length;
|
|
259
|
+
const at: { [prop: string]: any } = {};
|
|
260
|
+
monomer.rgroups.forEach((it) => {
|
|
261
|
+
at[it[RGROUP_LABEL]] = it[RGROUP_CAP_GROUP_NAME];
|
|
262
|
+
});
|
|
263
|
+
webEditorMonomer.at = at;
|
|
264
|
+
} else if (monomer[SMILES] != null) {
|
|
265
|
+
// @ts-ignore
|
|
266
|
+
webEditorMonomer.rs = Object.keys(getRS(monomer[SMILES].toString())).length;
|
|
267
|
+
webEditorMonomer.at = getRS(monomer[SMILES].toString());
|
|
268
|
+
} else
|
|
269
|
+
isBroken = true;
|
|
270
|
+
|
|
271
|
+
if (!isBroken)
|
|
272
|
+
org.helm.webeditor.Monomers.addOneMonomer(webEditorMonomer);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// Obsolete
|
|
277
|
+
const grid: DG.Grid = grok.shell.tv?.grid;
|
|
278
|
+
if (grid) grid.invalidate();
|
|
279
|
+
}
|
|
@@ -7,6 +7,7 @@ import {Subject} from 'rxjs';
|
|
|
7
7
|
import {
|
|
8
8
|
category, expect, test, awaitCheck, delay, testEvent, before, after
|
|
9
9
|
} from '@datagrok-libraries/utils/src/test';
|
|
10
|
+
import {getHelmHelper} from '@datagrok-libraries/bio/src/helm/helm-helper';
|
|
10
11
|
import {
|
|
11
12
|
getHelmService, HelmServiceBase, HelmAux, HelmProps
|
|
12
13
|
} from '@datagrok-libraries/bio/src/viewers/helm-service';
|
|
@@ -18,6 +19,8 @@ import {
|
|
|
18
19
|
getUserLibSettings, setUserLibSettings, setUserLibSettingsForTests
|
|
19
20
|
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
20
21
|
|
|
22
|
+
import {initHelmMainPackage} from './utils';
|
|
23
|
+
|
|
21
24
|
import {_package} from '../package-test';
|
|
22
25
|
|
|
23
26
|
category('HelmService', () => {
|
|
@@ -30,6 +33,7 @@ category('HelmService', () => {
|
|
|
30
33
|
before(async () => {
|
|
31
34
|
const logPrefix = `Helm: tests: HelmService: before`;
|
|
32
35
|
_package.logger.debug(`${logPrefix}, start`);
|
|
36
|
+
await initHelmMainPackage();
|
|
33
37
|
try {
|
|
34
38
|
monomerLibHelper = await getMonomerLibHelper();
|
|
35
39
|
userLibSettings = await getUserLibSettings();
|
package/src/tests/helm-tests.ts
CHANGED
|
@@ -3,8 +3,10 @@ import * as ui from 'datagrok-api/ui';
|
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
5
|
import {after, before, category, delay, expect, test, expectArray} from '@datagrok-libraries/utils/src/test';
|
|
6
|
+
|
|
6
7
|
//import {findMonomers, helmToFasta, helmToPeptide, helmToRNA, initHelm} from '../package';
|
|
7
8
|
import {parseHelm} from '../utils';
|
|
9
|
+
import {initHelmMainPackage} from './utils';
|
|
8
10
|
|
|
9
11
|
import {_package} from '../package-test';
|
|
10
12
|
|
|
@@ -51,7 +53,7 @@ category('Helm', () => {
|
|
|
51
53
|
// });
|
|
52
54
|
|
|
53
55
|
const complexMonomers = [
|
|
54
|
-
// tests parsing of complex
|
|
56
|
+
// tests parsing of complex monomer in square brackets like [L-hArg(Et,Et)]
|
|
55
57
|
'PEPTIDE1{[L-hArg(Et,Et)].E.F.G}|PEPTIDE2{C.E}$PEPTIDE1,PEPTIDE2,2:R3-1:R1$$$V2.0',
|
|
56
58
|
// tests parsing of complex monomer and one as a side chain as well
|
|
57
59
|
'PEPTIDE1{[L-hArg(Et,Et)]([L-hArg(Et,Et)]).E.F.G}$$$$',
|
|
@@ -75,6 +77,11 @@ category('Helm', () => {
|
|
|
75
77
|
'comples-monomer', 'complex-monomer+side-chain', 'complex-monomer+side-chain-RNA',
|
|
76
78
|
'complex-side-chain', 'complex+side-chain+linker'
|
|
77
79
|
];
|
|
80
|
+
|
|
81
|
+
before(async () => {
|
|
82
|
+
await initHelmMainPackage();
|
|
83
|
+
});
|
|
84
|
+
|
|
78
85
|
test('parseHelm', async () => {
|
|
79
86
|
const expectedResults = [
|
|
80
87
|
['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'D-Tyr_Et', 'Aze', 'dV', 'E', 'Phe_4Me'],
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as grok from 'datagrok-api/grok';
|
|
2
|
+
import * as ui from 'datagrok-api/ui';
|
|
3
|
+
import * as DG from 'datagrok-api/dg';
|
|
4
|
+
|
|
5
|
+
import {after, before, category, delay, expect, test, expectArray} from '@datagrok-libraries/utils/src/test';
|
|
6
|
+
import {IHelmHelper, getHelmHelper} from '@datagrok-libraries/bio/src/helm/helm-helper';
|
|
7
|
+
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
8
|
+
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
9
|
+
import {
|
|
10
|
+
getUserLibSettings, setUserLibSettings, setUserLibSettingsForTests
|
|
11
|
+
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
12
|
+
|
|
13
|
+
import {initHelmMainPackage} from './utils';
|
|
14
|
+
|
|
15
|
+
category('helm-web-editor', async () => {
|
|
16
|
+
let monomerLibHelper: IMonomerLibHelper;
|
|
17
|
+
let userLibSettings: UserLibSettings;
|
|
18
|
+
|
|
19
|
+
let hh: IHelmHelper;
|
|
20
|
+
|
|
21
|
+
before(async () => {
|
|
22
|
+
await initHelmMainPackage();
|
|
23
|
+
monomerLibHelper = await getMonomerLibHelper();
|
|
24
|
+
userLibSettings = await getUserLibSettings();
|
|
25
|
+
await setUserLibSettingsForTests();
|
|
26
|
+
await monomerLibHelper.awaitLoaded();
|
|
27
|
+
await monomerLibHelper.loadLibraries(true);
|
|
28
|
+
|
|
29
|
+
hh = await getHelmHelper();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
after(async () => {
|
|
33
|
+
await setUserLibSettings(userLibSettings);
|
|
34
|
+
await monomerLibHelper.loadLibraries(true);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('helm-web-editor', async () => {
|
|
38
|
+
const editor = hh.createHelmWebEditor();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('web-editor-app', async () => {
|
|
42
|
+
const helmStr: string = 'PEPTIDE1{I.H.A.N.T.Thr_PO3H2.Aca.D-Tyr_Et}$$$$';
|
|
43
|
+
|
|
44
|
+
const appHost = ui.div([],
|
|
45
|
+
{style: {width: '700px', height: '432px'}});
|
|
46
|
+
const app = hh.createWebEditorApp(appHost, helmStr);
|
|
47
|
+
|
|
48
|
+
const dlg = ui.dialog().add(appHost).show();
|
|
49
|
+
try {
|
|
50
|
+
|
|
51
|
+
} finally {
|
|
52
|
+
dlg.close();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as grok from 'datagrok-api/grok';
|
|
2
|
+
import * as ui from 'datagrok-api/ui';
|
|
3
|
+
import * as DG from 'datagrok-api/dg';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import {after, before, category, delay, expect, test, expectArray, timeout} from '@datagrok-libraries/utils/src/test';
|
|
7
|
+
import {HelmType, Mol, OrgType} from '@datagrok-libraries/bio/src/helm/types';
|
|
8
|
+
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
9
|
+
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
10
|
+
import {
|
|
11
|
+
getUserLibSettings, setUserLibSettings, setUserLibSettingsForTests
|
|
12
|
+
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
13
|
+
|
|
14
|
+
import {JSDraw2HelmModule} from '../types';
|
|
15
|
+
import {initHelmMainPackage} from './utils';
|
|
16
|
+
|
|
17
|
+
declare const org: OrgType;
|
|
18
|
+
declare const JSDraw2: JSDraw2HelmModule;
|
|
19
|
+
|
|
20
|
+
type TestTgtType = { atomCount: number, bondCount: number };
|
|
21
|
+
|
|
22
|
+
category('parseHelm', () => {
|
|
23
|
+
const testData: { [testName: string]: { src: string, tgt: TestTgtType } } = {
|
|
24
|
+
'PT': {
|
|
25
|
+
src: 'PEPTIDE1{[L-hArg(Et,Et)].E.F.G}|PEPTIDE2{C.E}$PEPTIDE1,PEPTIDE2,2:R3-1:R1$$$V2.0',
|
|
26
|
+
tgt: {atomCount: 6, bondCount: 5}
|
|
27
|
+
},
|
|
28
|
+
'RNA': {
|
|
29
|
+
src: 'RNA1{[dhp]([m1A])p.r(T)p.r(T)p.r(G)p}$$$$V2.0',
|
|
30
|
+
tgt: {atomCount: 12, bondCount: 11}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
let libHelper: IMonomerLibHelper;
|
|
35
|
+
/** Backup actual user's monomer libraries settings */
|
|
36
|
+
let userLibSettings: UserLibSettings;
|
|
37
|
+
|
|
38
|
+
before(async () => {
|
|
39
|
+
await initHelmMainPackage();
|
|
40
|
+
|
|
41
|
+
libHelper = await getMonomerLibHelper();
|
|
42
|
+
|
|
43
|
+
await timeout(async () => { userLibSettings = await getUserLibSettings(); }, 5000,
|
|
44
|
+
'get user lib settings for backup');
|
|
45
|
+
|
|
46
|
+
// parseHelm is dependent on monomers RGroups available, test requires default monomer library
|
|
47
|
+
await setUserLibSettingsForTests();
|
|
48
|
+
await timeout(async () => { await libHelper.awaitLoaded(); }, 5000,
|
|
49
|
+
'await monomerLib to be loaded');
|
|
50
|
+
await libHelper.loadLibraries(true);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
after(async () => {
|
|
54
|
+
await setUserLibSettings(userLibSettings);
|
|
55
|
+
await libHelper.loadLibraries(true);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
for (const [testName, {src, tgt}] of Object.entries(testData)) {
|
|
59
|
+
test(`Editor-${testName}`, async () => {
|
|
60
|
+
_testParseHelmWithEditor(src, tgt);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
for (const [testName, {src, tgt}] of Object.entries(testData)) {
|
|
65
|
+
test(`woDOM-${testName}`, async () => {
|
|
66
|
+
_testParseHelmWithoutDOM(src, tgt);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
function _testParseHelmWithEditor(src: string, tgt: TestTgtType): void {
|
|
72
|
+
const io = org.helm.webeditor.IO;
|
|
73
|
+
|
|
74
|
+
const editorHost = ui.div();
|
|
75
|
+
const editor = new JSDraw2.Editor(editorHost, {viewonly: true});
|
|
76
|
+
|
|
77
|
+
const plugin = new org.helm.webeditor.Plugin(editor);
|
|
78
|
+
const origin = new JSDraw2.Point(0, 0);
|
|
79
|
+
io.parseHelm(plugin, src, origin, null);
|
|
80
|
+
|
|
81
|
+
const m: Mol<HelmType> = plugin.jsd.m;
|
|
82
|
+
expect(m.atoms.length, tgt.atomCount);
|
|
83
|
+
expect(m.bonds.length, tgt.bondCount);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function _testParseHelmWithoutDOM(src: string, tgt: TestTgtType): void {
|
|
87
|
+
const io = org.helm.webeditor.IO;
|
|
88
|
+
|
|
89
|
+
const molHandler = new JSDraw2.MolHandler();
|
|
90
|
+
|
|
91
|
+
const plugin = new org.helm.webeditor.Plugin(molHandler);
|
|
92
|
+
const origin = new JSDraw2.Point(0, 0);
|
|
93
|
+
io.parseHelm(plugin, src, origin, null);
|
|
94
|
+
|
|
95
|
+
const m: Mol<HelmType> = plugin.jsd.m;
|
|
96
|
+
expect(m.atoms.length, tgt.atomCount);
|
|
97
|
+
expect(m.bonds.length, tgt.bondCount);
|
|
98
|
+
}
|