@datagrok/sequence-translator 1.3.14 → 1.3.15
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 +23 -1
- 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/files/polytool-rules/rules_example.json +34 -34
- package/files/samples/cyclized.csv +6 -0
- package/package.json +9 -10
- package/src/apps/common/view/components/colored-input/colored-text-input.ts +2 -2
- package/src/apps/pattern/view/components/bulk-convert/column-input.ts +2 -2
- package/src/apps/pattern/view/components/bulk-convert/table-input.ts +8 -6
- package/src/apps/pattern/view/components/edit-block-controls.ts +5 -5
- package/src/apps/pattern/view/components/load-block-controls.ts +7 -3
- package/src/apps/pattern/view/components/numeric-label-visibility-controls.ts +1 -1
- package/src/apps/pattern/view/components/strand-editor/header-controls.ts +2 -2
- package/src/apps/pattern/view/components/strand-editor/strand-controls.ts +2 -2
- package/src/apps/pattern/view/components/terminal-modification-editor.ts +1 -1
- package/src/apps/structure/view/ui.ts +5 -5
- package/src/apps/translator/view/ui.ts +27 -18
- package/src/package-test.ts +1 -0
- package/src/package.ts +34 -12
- package/src/polytool/pt-conversion.ts +2 -33
- package/src/polytool/pt-convert-editor.ts +116 -0
- package/src/polytool/pt-dialog.ts +177 -97
- package/src/polytool/pt-enumeration-helm-dialog.ts +338 -282
- package/src/polytool/pt-enumeration-helm.ts +6 -2
- package/src/polytool/pt-placeholders-input.ts +1 -2
- package/src/polytool/utils.ts +0 -7
- package/src/tests/polytool-convert-tests.ts +99 -0
- package/src/tests/polytool-enumerate-tests.ts +21 -5
- package/src/utils/context-menu.ts +7 -10
|
@@ -12,7 +12,8 @@ import {Chain} from './pt-conversion';
|
|
|
12
12
|
import {getAvailableMonomers} from './utils';
|
|
13
13
|
import {PolyToolEnumeratorParams, PolyToolEnumeratorTypes, PolyToolPlaceholders} from './types';
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// For example keep monomers presented in HELMCoreLibrary.json only (not [NH2])
|
|
16
|
+
export const PT_HELM_EXAMPLE = 'PEPTIDE1{R.[Aca].T.G.H.F.G.A.A.Y.P.E.[meI]}$$$$';
|
|
16
17
|
|
|
17
18
|
/** Initialized by getHelmHelper via init Helm package */
|
|
18
19
|
declare const JSDraw2: JSDraw2ModuleType;
|
|
@@ -55,7 +56,10 @@ function getPtEnumeratorMatrix(m: HelmMol, placeholders: PolyToolPlaceholders):
|
|
|
55
56
|
return resMolList;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
/** Returns list of Helm with id. Covered with tests. */
|
|
60
|
+
export function doPolyToolEnumerateHelm(
|
|
61
|
+
helm: string, id: string, params: PolyToolEnumeratorParams
|
|
62
|
+
): [ /* helm */ string, /* id */ string][] {
|
|
59
63
|
const molHandler = new JSDraw2.MolHandler<HelmType>();
|
|
60
64
|
const plugin = new org.helm.webeditor.Plugin(molHandler);
|
|
61
65
|
org.helm.webeditor.IO.parseHelm(plugin, helm, new JSDraw2.Point(0, 0), undefined);
|
|
@@ -121,8 +121,7 @@ export function dfToPlaceholders(df: DG.DataFrame): PolyToolPlaceholders {
|
|
|
121
121
|
const pos = parseInt(df.get('Position', rowI));
|
|
122
122
|
if (!isNaN(pos)) {
|
|
123
123
|
const monomerSymbolList = parseMonomerSymbolList(df.get('Monomers', rowI));
|
|
124
|
-
|
|
125
|
-
res[pos - 1] = monomerSymbolList;
|
|
124
|
+
res[pos - 1] = monomerSymbolList;
|
|
126
125
|
}
|
|
127
126
|
}
|
|
128
127
|
return res;
|
package/src/polytool/utils.ts
CHANGED
|
@@ -27,13 +27,6 @@ function addCommonTags(col: DG.Column<any>) {
|
|
|
27
27
|
col.setTag('alphabet', ALPHABET.PT);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export function handleError(err: any): void {
|
|
31
|
-
const errMsg: string = err instanceof Error ? err.message : err.toString();
|
|
32
|
-
const stack: string | undefined = err instanceof Error ? err.stack : undefined;
|
|
33
|
-
grok.shell.error(errMsg);
|
|
34
|
-
_package.logger.error(err.message, undefined, stack);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
30
|
export async function getAvailableMonomers(screenLibrary: string): Promise<string[]> {
|
|
38
31
|
const monomerLibHelper: IMonomerLibHelper = await grok.functions.call('Bio:getMonomerLibHelper', {});
|
|
39
32
|
const monomerLib = await monomerLibHelper.readLibrary(LIB_PATH, screenLibrary);
|
|
@@ -0,0 +1,99 @@
|
|
|
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 {before, after, category, expect, test, expectArray, testEvent, delay} from '@datagrok-libraries/utils/src/test';
|
|
6
|
+
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
7
|
+
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
8
|
+
import {
|
|
9
|
+
getUserLibSettings, setUserLibSettings, setUserLibSettingsForTests
|
|
10
|
+
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
11
|
+
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
12
|
+
|
|
13
|
+
import {doPolyToolConvert} from '../polytool/pt-conversion';
|
|
14
|
+
import {getRules} from '../polytool/pt-rules';
|
|
15
|
+
|
|
16
|
+
import {_package} from '../package-test';
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
category('PolyTool: Convert', () => {
|
|
20
|
+
let monomerLibHelper: IMonomerLibHelper;
|
|
21
|
+
let userLibSettings: UserLibSettings; //backup
|
|
22
|
+
|
|
23
|
+
before(async () => {
|
|
24
|
+
monomerLibHelper = await getMonomerLibHelper();
|
|
25
|
+
userLibSettings = await getUserLibSettings();
|
|
26
|
+
// Clear settings to test default
|
|
27
|
+
await setUserLibSettingsForTests();
|
|
28
|
+
await monomerLibHelper.loadMonomerLib(true);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
after(async () => {
|
|
32
|
+
await setUserLibSettings(userLibSettings);
|
|
33
|
+
await monomerLibHelper.loadMonomerLib(true);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const tests: { [testName: string]: { src: string[], tgt: string[] } } = {
|
|
37
|
+
'cyclized': {
|
|
38
|
+
src: [
|
|
39
|
+
'R-F-C(1)-T-G-H-F-Y-P-C(1)-meI',
|
|
40
|
+
'C(1)-T-G-H-F-Y-P-C(1)-meI',
|
|
41
|
+
'R-F-C(1)-T-G-H-F-Y-P-C(1)',
|
|
42
|
+
'C(1)-T-G-H-F-H-P-C(1)',
|
|
43
|
+
'R-F-D(2)-T-G-H-F-Y-P-NH2(2)',
|
|
44
|
+
],
|
|
45
|
+
tgt: [
|
|
46
|
+
'PEPTIDE1{[R].[F].[C].[T].[G].[H].[F].[Y].[P].[C].[meI]}$PEPTIDE1,PEPTIDE1,3:R3-10:R3$$$',
|
|
47
|
+
'PEPTIDE1{[C].[T].[G].[H].[F].[Y].[P].[C].[meI]}$PEPTIDE1,PEPTIDE1,1:R3-8:R3$$$',
|
|
48
|
+
'PEPTIDE1{[R].[F].[C].[T].[G].[H].[F].[Y].[P].[C]}$PEPTIDE1,PEPTIDE1,3:R3-10:R3$$$',
|
|
49
|
+
'PEPTIDE1{[C].[T].[G].[H].[F].[H].[P].[C]}$PEPTIDE1,PEPTIDE1,1:R3-8:R3$$$',
|
|
50
|
+
'PEPTIDE1{[R].[F].[D].[T].[G].[H].[F].[Y].[P].[NH2]}$PEPTIDE1,PEPTIDE1,10:R2-3:R3$$$',
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
for (const [testName, testData] of Object.entries(tests)) {
|
|
56
|
+
test(`${testName}`, async () => {
|
|
57
|
+
const rules = await getRules(['rules_example.json']);
|
|
58
|
+
const res = doPolyToolConvert(testData.src, rules);
|
|
59
|
+
expectArray(res, testData.tgt);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
test('ui-col-wo-table', async () => {
|
|
65
|
+
const packageName = _package.name;
|
|
66
|
+
const seqCol = DG.Column.fromStrings('seq', tests['cyclized'].src);
|
|
67
|
+
const helmCol: DG.Column = await grok.functions.call(`${packageName}:polyToolConvert2`, {
|
|
68
|
+
seqCol: seqCol,
|
|
69
|
+
generateHelm: true,
|
|
70
|
+
chiralityEngine: true,
|
|
71
|
+
rules: ['rules_example.json']
|
|
72
|
+
});
|
|
73
|
+
expect(helmCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
74
|
+
expect(helmCol.meta.units, NOTATION.HELM);
|
|
75
|
+
expect(helmCol.dataFrame, null);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('ui-col', async () => {
|
|
79
|
+
const packageName = _package.name;
|
|
80
|
+
const seqCol = DG.Column.fromStrings('seq', tests['cyclized'].src);
|
|
81
|
+
const df = DG.DataFrame.fromColumns([seqCol]);
|
|
82
|
+
const tv = grok.shell.addTableView(df);
|
|
83
|
+
|
|
84
|
+
const helmCol: DG.Column = await grok.functions.call(`${packageName}:polyToolConvert2`, {
|
|
85
|
+
seqCol: seqCol,
|
|
86
|
+
generateHelm: true,
|
|
87
|
+
chiralityEngine: true,
|
|
88
|
+
rules: ['rules_example.json']
|
|
89
|
+
});
|
|
90
|
+
expect(helmCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
91
|
+
expect(helmCol.meta.units, NOTATION.HELM);
|
|
92
|
+
expect(helmCol.dataFrame.id, df.id);
|
|
93
|
+
|
|
94
|
+
await testEvent(tv.grid.onAfterDrawContent, () => {}, async () => {
|
|
95
|
+
tv.grid.invalidate();
|
|
96
|
+
}, 15000);
|
|
97
|
+
expect(helmCol.getTag(DG.TAGS.CELL_RENDERER), 'helm');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -4,19 +4,35 @@ import * as DG from 'datagrok-api/dg';
|
|
|
4
4
|
|
|
5
5
|
import {before, after, category, expect, test, expectArray} from '@datagrok-libraries/utils/src/test';
|
|
6
6
|
import {getHelmHelper, IHelmHelper} 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';
|
|
7
12
|
|
|
8
13
|
import {PolyToolEnumeratorParams, PolyToolEnumeratorTypes} from '../polytool/types';
|
|
9
|
-
import {
|
|
14
|
+
import {doPolyToolEnumerateHelm} from '../polytool/pt-enumeration-helm';
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
import {_package} from '../package-test';
|
|
17
|
+
|
|
18
|
+
category('PolyTool: Enumerate', () => {
|
|
12
19
|
let helmHelper: IHelmHelper;
|
|
20
|
+
let monomerLibHelper: IMonomerLibHelper;
|
|
21
|
+
let userLibSettings: UserLibSettings; //backup
|
|
13
22
|
|
|
14
23
|
before(async () => {
|
|
15
24
|
helmHelper = await getHelmHelper(); // initialize JSDraw2 and org
|
|
25
|
+
|
|
26
|
+
monomerLibHelper = await getMonomerLibHelper();
|
|
27
|
+
userLibSettings = await getUserLibSettings();
|
|
28
|
+
// Clear settings to test default
|
|
29
|
+
await setUserLibSettingsForTests();
|
|
30
|
+
await monomerLibHelper.loadMonomerLib(true);
|
|
16
31
|
});
|
|
17
32
|
|
|
18
33
|
after(async () => {
|
|
19
|
-
|
|
34
|
+
await setUserLibSettings(userLibSettings);
|
|
35
|
+
await monomerLibHelper.loadMonomerLib(true);
|
|
20
36
|
});
|
|
21
37
|
|
|
22
38
|
const tests: {
|
|
@@ -87,8 +103,8 @@ category('PolyTool', () => {
|
|
|
87
103
|
};
|
|
88
104
|
|
|
89
105
|
for (const [testName, testData] of Object.entries(tests)) {
|
|
90
|
-
test(
|
|
91
|
-
const res =
|
|
106
|
+
test(`${testName}`, async () => {
|
|
107
|
+
const res = doPolyToolEnumerateHelm(testData.src, '', testData.params);
|
|
92
108
|
expectArray(res, testData.tgt);
|
|
93
109
|
});
|
|
94
110
|
}
|
|
@@ -7,6 +7,7 @@ import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
|
7
7
|
|
|
8
8
|
import {defaultErrorHandler} from './err-info';
|
|
9
9
|
import {polyToolEnumerateHelmUI} from '../polytool/pt-enumeration-helm-dialog';
|
|
10
|
+
import {polyToolEnumerateChemUI} from '../polytool/pt-dialog';
|
|
10
11
|
|
|
11
12
|
import {_package} from '../package';
|
|
12
13
|
|
|
@@ -39,19 +40,15 @@ function addContextMenuForCell(gridCell: DG.GridCell, menu: DG.Menu): boolean {
|
|
|
39
40
|
const logPrefix: string = `ST: addContextMenuForCell()`;
|
|
40
41
|
_package.logger.debug(`${logPrefix}, start`);
|
|
41
42
|
|
|
42
|
-
const polyToolEnumerate = () => {
|
|
43
|
-
polyToolEnumerateHelmUI(gridCell.cell);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
43
|
if (gridCell && gridCell.tableColumn) {
|
|
47
44
|
switch (gridCell.tableColumn.semType) {
|
|
48
45
|
case DG.SEMTYPE.MACROMOLECULE: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
menu.item('PolyTool-Enumerate', () => { polyToolEnumerateHelmUI(gridCell.cell); });
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
case DG.SEMTYPE.MOLECULE: {
|
|
50
|
+
menu.item('PolyTool-Enumerate', () => { polyToolEnumerateChemUI(gridCell.cell); });
|
|
51
|
+
return true;
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
54
|
}
|