@datagrok/bio 2.15.13 → 2.16.2
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 +25 -0
- package/detectors.js +16 -11
- package/dist/455.js.map +1 -1
- package/dist/980.js +1 -1
- package/dist/980.js.map +1 -1
- package/dist/package-test.js +6 -6
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/package.json +14 -14
- package/src/analysis/sequence-activity-cliffs.ts +9 -8
- package/src/analysis/sequence-diversity-viewer.ts +6 -4
- package/src/analysis/sequence-similarity-viewer.ts +9 -6
- package/src/analysis/sequence-space.ts +3 -2
- package/src/calculations/monomerLevelMols.ts +4 -5
- package/src/demo/bio01-similarity-diversity.ts +4 -1
- package/src/package-test.ts +1 -1
- package/src/package-types.ts +34 -2
- package/src/package.ts +60 -76
- package/src/substructure-search/substructure-search.ts +15 -9
- package/src/tests/WebLogo-layout-tests.ts +1 -1
- package/src/tests/WebLogo-positions-test.ts +11 -5
- package/src/tests/WebLogo-project-tests.ts +1 -1
- package/src/tests/activity-cliffs-utils.ts +11 -14
- package/src/tests/bio-tests.ts +85 -79
- package/src/tests/checkInputColumn-tests.ts +15 -10
- package/src/tests/converters-test.ts +12 -5
- package/src/tests/detectors-benchmark-tests.ts +5 -2
- package/src/tests/detectors-tests.ts +51 -44
- package/src/tests/detectors-weak-and-likely-tests.ts +12 -5
- package/src/tests/fasta-export-tests.ts +13 -5
- package/src/tests/helm-tests.ts +85 -0
- package/src/tests/mm-distance-tests.ts +14 -7
- package/src/tests/monomer-libraries-tests.ts +1 -1
- package/src/tests/msa-tests.ts +33 -24
- package/src/tests/renderers-monomer-placer-tests.ts +2 -5
- package/src/tests/renderers-test.ts +15 -9
- package/src/tests/scoring.ts +9 -6
- package/src/tests/seq-handler-get-helm-tests.ts +7 -5
- package/src/tests/seq-handler-get-region-tests.ts +9 -3
- package/src/tests/seq-handler-splitted-tests.ts +11 -5
- package/src/tests/seq-handler-tests.ts +17 -10
- package/src/tests/sequence-space-utils.ts +9 -4
- package/src/tests/splitters-test.ts +5 -4
- package/src/tests/substructure-filters-tests.ts +22 -23
- package/src/tests/to-atomic-level-tests.ts +5 -3
- package/src/tests/to-atomic-level-ui-tests.ts +4 -1
- package/src/tests/utils/detectors-utils.ts +4 -4
- package/src/utils/calculate-scores.ts +11 -9
- package/src/utils/cell-renderer-custom.ts +27 -17
- package/src/utils/cell-renderer.ts +14 -8
- package/src/utils/check-input-column.ts +13 -9
- package/src/utils/context-menu.ts +4 -4
- package/src/utils/convert.ts +21 -14
- package/src/utils/get-region-func-editor.ts +8 -5
- package/src/utils/get-region.ts +4 -5
- package/src/utils/helm-to-molfile/converter/helm.ts +4 -4
- package/src/utils/helm-to-molfile/utils.ts +5 -6
- package/src/utils/macromolecule-column-widget.ts +6 -7
- package/src/utils/monomer-cell-renderer-base.ts +8 -1
- package/src/utils/monomer-lib/lib-manager.ts +3 -2
- package/src/utils/monomer-lib/monomer-colors.ts +10 -10
- package/src/utils/monomer-lib/monomer-lib-base.ts +6 -1
- package/src/utils/monomer-lib/monomer-lib.ts +15 -9
- package/src/utils/multiple-sequence-alignment-ui.ts +30 -30
- package/src/utils/save-as-fasta.ts +19 -12
- package/src/utils/seq-helper/seq-handler.ts +836 -0
- package/src/utils/seq-helper/seq-helper.ts +43 -19
- package/src/utils/sequence-to-mol.ts +7 -8
- package/src/utils/split-to-monomers.ts +7 -2
- package/src/utils/types.ts +8 -7
- package/src/utils/ui-utils.ts +2 -2
- package/src/viewers/web-logo-viewer.ts +18 -16
- package/src/widgets/bio-substructure-filter-helm.ts +5 -2
- package/src/widgets/bio-substructure-filter.ts +14 -24
- package/src/widgets/composition-analysis-widget.ts +6 -6
- package/src/widgets/representations.ts +7 -4
- package/src/tests/detectors-custom-notation-tests.ts +0 -37
- package/src/utils/cyclized.ts +0 -89
- package/src/utils/dimerized.ts +0 -10
|
@@ -2,14 +2,21 @@ import * as DG from 'datagrok-api/dg';
|
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
3
|
import * as grok from 'datagrok-api/grok';
|
|
4
4
|
|
|
5
|
-
import {category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
5
|
+
import {before, category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
6
|
+
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
8
|
+
|
|
6
9
|
import {saveAsFastaDo, wrapSequence} from '../utils/save-as-fasta';
|
|
7
|
-
import {NOTATION, splitterAsFasta} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
8
|
-
import {SeqHandler} from '@datagrok-libraries/bio/src/utils/seq-handler';
|
|
9
10
|
|
|
10
11
|
type SaveAsFastaTestArgs = { srcCsv: string, idCols: string [], seqCol: string, lineWidth: number, tgtFasta: string };
|
|
11
12
|
|
|
12
13
|
category('fastaExport', () => {
|
|
14
|
+
let seqHelper: ISeqHelper;
|
|
15
|
+
|
|
16
|
+
before(async () => {
|
|
17
|
+
seqHelper = await getSeqHelper();
|
|
18
|
+
});
|
|
19
|
+
|
|
13
20
|
enum WrapDataTest {
|
|
14
21
|
single = 'single',
|
|
15
22
|
multi = 'multi'
|
|
@@ -92,7 +99,7 @@ MRGGL
|
|
|
92
99
|
const col = DG.Column.fromStrings('src', [srcSeq]);
|
|
93
100
|
col.semType = DG.SEMTYPE.MACROMOLECULE;
|
|
94
101
|
col.meta.units = NOTATION.FASTA;
|
|
95
|
-
const sh =
|
|
102
|
+
const sh = seqHelper.getSeqHandler(col);
|
|
96
103
|
const srcSS = sh.getSplitted(0);
|
|
97
104
|
const wrapRes: string[] = wrapSequence(srcSS, lineWidth);
|
|
98
105
|
const wrapTgt: string[] = wrapData[testKey].tgt;
|
|
@@ -108,7 +115,8 @@ MRGGL
|
|
|
108
115
|
seqCol.meta.units = NOTATION.FASTA;
|
|
109
116
|
const idCols: DG.Column[] = args.idCols.map((colName) => df.getCol(colName));
|
|
110
117
|
|
|
111
|
-
const
|
|
118
|
+
const seqHandler = seqHelper.getSeqHandler(seqCol);
|
|
119
|
+
const fastaRes: string = saveAsFastaDo(idCols, seqHandler, args.lineWidth);
|
|
112
120
|
expect(fastaRes, args.tgtFasta);
|
|
113
121
|
}
|
|
114
122
|
});
|
|
@@ -0,0 +1,85 @@
|
|
|
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 {before, category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
8
|
+
import {Helm} from '../utils/helm-to-molfile/converter/helm';
|
|
9
|
+
|
|
10
|
+
category('helm', () => {
|
|
11
|
+
const tests = {
|
|
12
|
+
'single-linear': {
|
|
13
|
+
src: {helm: 'PEPTIDE1{R.F.Y.[GGaz].T.[meI]}$$$$'},
|
|
14
|
+
tgt: {
|
|
15
|
+
simplePolymers: [6],
|
|
16
|
+
bondedRGroups: [1, 2, 2, 2, 2, 1],
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
'single-cyclized-C-2-2': {
|
|
20
|
+
src: {helm: 'PEPTIDE1{R.F.C.Y.G.H.[GGaz].C.T.[meI]}$PEPTIDE1,PEPTIDE1,3:R3-8,R3$$$'},
|
|
21
|
+
tgt: {
|
|
22
|
+
simplePolymers: [10],
|
|
23
|
+
bondedRGroups: [1, 2, 3, 2, 2, 2, 2, 3, 2, 1],
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
'single-cyclized-C-1-1': {
|
|
27
|
+
src: {helm: 'PEPTIDE1{F.C.Y.G.H.[GGaz].C.[meI]}$PEPTIDE1,PEPTIDE1,2:R3-7,R3$$$'},
|
|
28
|
+
tgt: {
|
|
29
|
+
simplePolymers: [8],
|
|
30
|
+
bondedRGroups: [1, 3, 2, 2, 2, 1, 3, 1],
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
'single-cyclized-C-0-0': {
|
|
34
|
+
src: {helm: 'PEPTIDE1{C.Y.G.H.[GGaz].C}$PEPTIDE1,PEPTIDE1,2:R3-7,R3$$$'},
|
|
35
|
+
tgt: {
|
|
36
|
+
simplePolymers: [6],
|
|
37
|
+
bondedRGroups: [2, 2, 2, 2, 2, 2],
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
'two-separated-1': {
|
|
41
|
+
src: {helm: 'PEPTIDE1{R.F.Y.[GGaz].T}|PEPTIDE2{[meI]}$$$$'},
|
|
42
|
+
tgt: {
|
|
43
|
+
simplePolymers: [5, 1],
|
|
44
|
+
bondedRGroups: [1, 2, 2, 2, 1, 1],
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
'two-separated-2': {
|
|
48
|
+
src: {helm: 'PEPTIDE1{R.F.Y.[GGaz]}|PEPTIDE2{T.[meI]}$$$$'},
|
|
49
|
+
tgt: {
|
|
50
|
+
simplePolymers: [4, 2],
|
|
51
|
+
bondedRGroups: [1, 2, 2, 1, 1, 1],
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
'two-connected-1': {
|
|
55
|
+
src: {helm: 'PEPTIDE1{R.F.Y.[GGaz].T}|PEPTIDE2{[meI]}$PEPTIDE1,PEPTIDE2,5:R2-1,R1$$$'},
|
|
56
|
+
tgt: {
|
|
57
|
+
simplePolymers: [5, 1],
|
|
58
|
+
bondedRGroups: [1, 2, 2, 2, 2, 1],
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
'two-connected-2': {
|
|
62
|
+
src: {helm: 'PEPTIDE1{R.F.Y.[GGaz]}|PEPTIDE2{T.[meI]}$PEPTIDE1,PEPTIDE2,4:R2-1,R1$$$'},
|
|
63
|
+
tgt: {
|
|
64
|
+
simplePolymers: [4, 2],
|
|
65
|
+
bondedRGroups: [1, 2, 2, 2, 2, 1],
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
for (const [testName, {src, tgt}] of Object.entries(tests)) {
|
|
71
|
+
test(testName, async () => {
|
|
72
|
+
const resHelm = new Helm(src.helm);
|
|
73
|
+
|
|
74
|
+
const simplePolymers = resHelm.simplePolymers
|
|
75
|
+
.map((sp) => sp.monomers.length);
|
|
76
|
+
const totalMonomerCount = simplePolymers.reduce((a, b) => a + b, 0);
|
|
77
|
+
expect(simplePolymers, tgt.simplePolymers);
|
|
78
|
+
|
|
79
|
+
const bondedRGroups = wu.count(0).take(resHelm.bondedRGroupsMap.size)
|
|
80
|
+
.map((i) => resHelm.bondedRGroupsMap.get(i)!.length).toArray();
|
|
81
|
+
expect(totalMonomerCount, bondedRGroups.length);
|
|
82
|
+
// expectArray(bondedRGroups, tgt.bondedRGroups);
|
|
83
|
+
}, {skipReason: 'new tests'});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
@@ -2,12 +2,19 @@ import * as grok from 'datagrok-api/grok';
|
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
|
-
import {category, expect, test} from '@datagrok-libraries/utils/src/test';
|
|
6
|
-
import {
|
|
5
|
+
import {before, category, expect, test} from '@datagrok-libraries/utils/src/test';
|
|
6
|
+
import {ISeqHandler} from '@datagrok-libraries/bio/src/utils/macromolecule/seq-handler';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
7
8
|
import {MmDistanceFunctionsNames, mmDistanceFunctions}
|
|
8
9
|
from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
9
10
|
|
|
10
11
|
category('Distance', async () => {
|
|
12
|
+
let seqHelper: ISeqHelper;
|
|
13
|
+
|
|
14
|
+
before(async () => {
|
|
15
|
+
seqHelper = await getSeqHelper();
|
|
16
|
+
});
|
|
17
|
+
|
|
11
18
|
const scoringMatrix = [
|
|
12
19
|
[1, 0, 0, 0],
|
|
13
20
|
[0, 1, 0, 0],
|
|
@@ -42,19 +49,19 @@ ATCGAATCGA
|
|
|
42
49
|
ATCGAATCGA`;
|
|
43
50
|
|
|
44
51
|
test('protein-distance-function', async () => {
|
|
45
|
-
const sh = await _initMacromoleculeColumn(protTable);
|
|
52
|
+
const sh = await _initMacromoleculeColumn(protTable, seqHelper);
|
|
46
53
|
const distFunc = sh.getDistanceFunctionName();
|
|
47
54
|
expect(distFunc, MmDistanceFunctionsNames.LEVENSHTEIN);
|
|
48
55
|
});
|
|
49
56
|
|
|
50
57
|
test('DNA-distance-function', async () => {
|
|
51
|
-
const sh = await _initMacromoleculeColumn(DNATable);
|
|
58
|
+
const sh = await _initMacromoleculeColumn(DNATable, seqHelper);
|
|
52
59
|
const distFunc = sh.getDistanceFunctionName();
|
|
53
60
|
expect(distFunc, MmDistanceFunctionsNames.LEVENSHTEIN);
|
|
54
61
|
});
|
|
55
62
|
|
|
56
63
|
test('MSA-distance-function', async () => {
|
|
57
|
-
const sh = await _initMacromoleculeColumn(MSATable);
|
|
64
|
+
const sh = await _initMacromoleculeColumn(MSATable, seqHelper);
|
|
58
65
|
const distFunc = sh.getDistanceFunctionName();
|
|
59
66
|
expect(distFunc, MmDistanceFunctionsNames.HAMMING);
|
|
60
67
|
});
|
|
@@ -127,7 +134,7 @@ ATCGAATCGA`;
|
|
|
127
134
|
}, {benchmark: true});
|
|
128
135
|
});
|
|
129
136
|
|
|
130
|
-
async function _initMacromoleculeColumn(csv: string): Promise<
|
|
137
|
+
async function _initMacromoleculeColumn(csv: string, seqHelper: ISeqHelper): Promise<ISeqHandler> {
|
|
131
138
|
const srcDf: DG.DataFrame = DG.DataFrame.fromCsv(csv);
|
|
132
139
|
const seqCol = srcDf.col('seq')!;
|
|
133
140
|
const semType: string = await grok.functions
|
|
@@ -135,7 +142,7 @@ async function _initMacromoleculeColumn(csv: string): Promise<SeqHandler> {
|
|
|
135
142
|
if (semType)
|
|
136
143
|
seqCol.semType = semType;
|
|
137
144
|
await grok.data.detectSemanticTypes(srcDf);
|
|
138
|
-
const sh =
|
|
145
|
+
const sh = seqHelper.getSeqHandler(seqCol);
|
|
139
146
|
return sh;
|
|
140
147
|
}
|
|
141
148
|
|
|
@@ -83,7 +83,7 @@ category('monomerLibraries', () => {
|
|
|
83
83
|
const absentOverrideMonomer = monomerLib.getMonomer(overMon.polymerType, overMon.symbol);
|
|
84
84
|
expect(absentOverrideMonomer === null, true, `Unexpectedly found monomer '${overMon.symbol}' `);
|
|
85
85
|
|
|
86
|
-
const overriddenMonomerLib = monomerLib.override({[overMon.polymerType]: {[overMon.symbol]: overMon}});
|
|
86
|
+
const overriddenMonomerLib = monomerLib.override({[overMon.polymerType]: {[overMon.symbol]: overMon}}, 'test');
|
|
87
87
|
const resOverMon = overriddenMonomerLib.getMonomer(overMon.polymerType, overMon.symbol);
|
|
88
88
|
expectObject(resOverMon as any, overMon);
|
|
89
89
|
});
|
package/src/tests/msa-tests.ts
CHANGED
|
@@ -2,13 +2,21 @@ import * as grok from 'datagrok-api/grok';
|
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
|
-
import {category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
5
|
+
import {before, category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
6
6
|
import {ALIGNMENT, ALPHABET, NOTATION, TAGS as bioTAGS} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
8
|
+
|
|
7
9
|
import {runKalign} from '../utils/multiple-sequence-alignment';
|
|
8
10
|
import {multipleSequenceAlignmentUI} from '../utils/multiple-sequence-alignment-ui';
|
|
9
11
|
import {awaitContainerStart} from '../utils/docker';
|
|
10
12
|
|
|
11
13
|
category('MSA', async () => {
|
|
14
|
+
let seqHelper: ISeqHelper;
|
|
15
|
+
|
|
16
|
+
before(async () => {
|
|
17
|
+
seqHelper = await getSeqHelper();
|
|
18
|
+
});
|
|
19
|
+
|
|
12
20
|
//table = await grok.data.files.openTable('Demo:Files/bio/peptides.csv');
|
|
13
21
|
const fromCsv = `seq
|
|
14
22
|
FWRWYVKHP
|
|
@@ -99,6 +107,30 @@ MWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP
|
|
|
99
107
|
SeparatorLongFromCsv, SeparatorLongToCsv, NOTATION.SEPARATOR, NOTATION.FASTA, ALPHABET.PT,
|
|
100
108
|
);
|
|
101
109
|
});
|
|
110
|
+
|
|
111
|
+
async function _testMSAOnColumn(
|
|
112
|
+
srcCsv: string, tgtCsv: string,
|
|
113
|
+
srcNotation: NOTATION, tgtNotation: NOTATION, alphabet?: ALPHABET, pepseaMethod?: string,
|
|
114
|
+
): Promise<void> {
|
|
115
|
+
const srcDf: DG.DataFrame = DG.DataFrame.fromCsv(srcCsv);
|
|
116
|
+
await grok.data.detectSemanticTypes(srcDf);
|
|
117
|
+
const tgtDf: DG.DataFrame = DG.DataFrame.fromCsv(tgtCsv);
|
|
118
|
+
|
|
119
|
+
const tgtCol = tgtDf.getCol('seq')!;
|
|
120
|
+
const srcCol: DG.Column = srcDf.getCol('seq')!;
|
|
121
|
+
expect(srcCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
122
|
+
expect(srcCol.meta.units, srcNotation);
|
|
123
|
+
if (alphabet)
|
|
124
|
+
expect(srcCol.getTag(bioTAGS.alphabet), alphabet);
|
|
125
|
+
|
|
126
|
+
const msaSeqCol = await multipleSequenceAlignmentUI({col: srcCol, pepsea: {method: pepseaMethod}}, seqHelper);
|
|
127
|
+
expect(msaSeqCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
128
|
+
expect(msaSeqCol.meta.units, tgtNotation);
|
|
129
|
+
expect(msaSeqCol.getTag(bioTAGS.aligned), ALIGNMENT.SEQ_MSA);
|
|
130
|
+
if (alphabet)
|
|
131
|
+
expect(msaSeqCol.getTag(bioTAGS.alphabet), alphabet);
|
|
132
|
+
expectArray(msaSeqCol.toList(), tgtCol.toList());
|
|
133
|
+
}
|
|
102
134
|
});
|
|
103
135
|
|
|
104
136
|
async function _testMsaIsCorrect(srcCsv: string, tgtCsv: string): Promise<void> {
|
|
@@ -114,27 +146,4 @@ async function _testMsaIsCorrect(srcCsv: string, tgtCsv: string): Promise<void>
|
|
|
114
146
|
expectArray(resCol.toList(), tgtCol.toList());
|
|
115
147
|
}
|
|
116
148
|
|
|
117
|
-
async function _testMSAOnColumn(
|
|
118
|
-
srcCsv: string, tgtCsv: string,
|
|
119
|
-
srcNotation: NOTATION, tgtNotation: NOTATION, alphabet?: ALPHABET, pepseaMethod?: string,
|
|
120
|
-
): Promise<void> {
|
|
121
|
-
const srcDf: DG.DataFrame = DG.DataFrame.fromCsv(srcCsv);
|
|
122
|
-
await grok.data.detectSemanticTypes(srcDf);
|
|
123
|
-
const tgtDf: DG.DataFrame = DG.DataFrame.fromCsv(tgtCsv);
|
|
124
149
|
|
|
125
|
-
const tgtCol = tgtDf.getCol('seq')!;
|
|
126
|
-
const srcCol: DG.Column = srcDf.getCol('seq')!;
|
|
127
|
-
expect(srcCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
128
|
-
expect(srcCol.meta.units, srcNotation);
|
|
129
|
-
if (alphabet)
|
|
130
|
-
expect(srcCol.getTag(bioTAGS.alphabet), alphabet);
|
|
131
|
-
|
|
132
|
-
const msaSeqCol = await multipleSequenceAlignmentUI({col: srcCol, pepsea: {method: pepseaMethod}});
|
|
133
|
-
expect(msaSeqCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
134
|
-
expect(msaSeqCol.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
135
|
-
expect(msaSeqCol.meta.units, tgtNotation);
|
|
136
|
-
expect(msaSeqCol.getTag(bioTAGS.aligned), ALIGNMENT.SEQ_MSA);
|
|
137
|
-
if (alphabet)
|
|
138
|
-
expect(msaSeqCol.getTag(bioTAGS.alphabet), alphabet);
|
|
139
|
-
expectArray(msaSeqCol.toList(), tgtCol.toList());
|
|
140
|
-
}
|
|
@@ -7,7 +7,7 @@ import wu from 'wu';
|
|
|
7
7
|
import {after, before, category, expect, test} from '@datagrok-libraries/utils/src/test';
|
|
8
8
|
import {MonomerPlacer, hitBounds} from '@datagrok-libraries/bio/src/utils/cell-renderer-monomer-placer';
|
|
9
9
|
import {monomerToShort} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
10
|
-
import {
|
|
10
|
+
import {getSeqHelper, ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
11
11
|
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
12
12
|
import {
|
|
13
13
|
getUserLibSettings, setUserLibSettings
|
|
@@ -115,14 +115,13 @@ id3,QHIRE--LT
|
|
|
115
115
|
const sepWidth: number = 12;
|
|
116
116
|
const colTemp: MonomerPlacer = new MonomerPlacer(null, seqCol, _package.logger, monLength,
|
|
117
117
|
() => {
|
|
118
|
-
const sh = SeqHandler.forColumn(seqCol);
|
|
119
118
|
return {
|
|
120
|
-
seqHandler: sh,
|
|
121
119
|
monomerCharWidth: charWidth,
|
|
122
120
|
separatorWidth: sepWidth,
|
|
123
121
|
monomerToShort: monomerToShort,
|
|
124
122
|
};
|
|
125
123
|
});
|
|
124
|
+
await colTemp.init();
|
|
126
125
|
|
|
127
126
|
const width: number = 10000;
|
|
128
127
|
const testList = testData.testList;
|
|
@@ -142,9 +141,7 @@ id3,QHIRE--LT
|
|
|
142
141
|
throw new Error('Test failed error(s):\n' + errorList.join(', \n'));
|
|
143
142
|
});
|
|
144
143
|
}
|
|
145
|
-
});
|
|
146
144
|
|
|
147
|
-
category('renderers: monomerPlacer', () => {
|
|
148
145
|
const boundsTestData = {
|
|
149
146
|
bounds: [10, 20, 30, 40, 50, 60],
|
|
150
147
|
tests: {
|
|
@@ -5,12 +5,12 @@ import * as ui from 'datagrok-api/ui';
|
|
|
5
5
|
import $ from 'cash-dom';
|
|
6
6
|
import {fromEvent} from 'rxjs';
|
|
7
7
|
|
|
8
|
-
import {category, expect, test, delay, testEvent} from '@datagrok-libraries/utils/src/test';
|
|
8
|
+
import {category, expect, test, delay, testEvent, before} from '@datagrok-libraries/utils/src/test';
|
|
9
9
|
import {ALIGNMENT, ALPHABET, NOTATION, TAGS as bioTAGS} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
10
|
-
import {
|
|
10
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
11
|
+
import {ISeqHandler} from '@datagrok-libraries/bio/src/utils/macromolecule/seq-handler';
|
|
11
12
|
import {generateLongSequence, generateManySequences} from '@datagrok-libraries/bio/src/utils/generator';
|
|
12
13
|
|
|
13
|
-
import {importFasta} from '../package';
|
|
14
14
|
import {convertDo} from '../utils/convert';
|
|
15
15
|
import {performanceTest} from './utils/sequences-generators';
|
|
16
16
|
import {multipleSequenceAlignmentUI} from '../utils/multiple-sequence-alignment-ui';
|
|
@@ -20,6 +20,12 @@ import * as C from '../utils/constants';
|
|
|
20
20
|
import {_package} from '../package-test';
|
|
21
21
|
|
|
22
22
|
category('renderers', () => {
|
|
23
|
+
let seqHelper: ISeqHelper;
|
|
24
|
+
|
|
25
|
+
before(async () => {
|
|
26
|
+
seqHelper = await getSeqHelper();
|
|
27
|
+
});
|
|
28
|
+
|
|
23
29
|
test('long sequence performance ', async () => {
|
|
24
30
|
await performanceTest(generateLongSequence, 'Long sequences');
|
|
25
31
|
});
|
|
@@ -124,7 +130,7 @@ category('renderers', () => {
|
|
|
124
130
|
|
|
125
131
|
async function _testAfterMsa() {
|
|
126
132
|
const fastaTxt: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/FASTA.fasta');
|
|
127
|
-
const df
|
|
133
|
+
const df = (await grok.functions.call('Bio:importFasta', {fileContent: fastaTxt}))[0] as DG.DataFrame;
|
|
128
134
|
|
|
129
135
|
const srcSeqCol: DG.Column = df.getCol('sequence');
|
|
130
136
|
const semType: string = await grok.functions.call('Bio:detectMacromolecule', {col: srcSeqCol});
|
|
@@ -148,7 +154,7 @@ category('renderers', () => {
|
|
|
148
154
|
expect(srcSeqCol.getTag(bioTAGS.alphabet), ALPHABET.PT);
|
|
149
155
|
expect(srcSeqCol.getTag(DG.TAGS.CELL_RENDERER), 'sequence');
|
|
150
156
|
|
|
151
|
-
const msaSeqCol = await multipleSequenceAlignmentUI({col: srcSeqCol});
|
|
157
|
+
const msaSeqCol = await multipleSequenceAlignmentUI({col: srcSeqCol}, seqHelper);
|
|
152
158
|
await awaitGrid(tv.grid);
|
|
153
159
|
expect(tv.grid.dataFrame.id, df.id);
|
|
154
160
|
|
|
@@ -159,7 +165,7 @@ category('renderers', () => {
|
|
|
159
165
|
expect(msaSeqCol.getTag(DG.TAGS.CELL_RENDERER), 'sequence');
|
|
160
166
|
|
|
161
167
|
// check newColumn with SeqHandler constructor
|
|
162
|
-
const _sh:
|
|
168
|
+
const _sh: ISeqHandler = seqHelper.getSeqHandler(msaSeqCol);
|
|
163
169
|
}
|
|
164
170
|
|
|
165
171
|
async function _testAfterConvert() {
|
|
@@ -175,7 +181,7 @@ category('renderers', () => {
|
|
|
175
181
|
// call to calculate 'cell.renderer' tag
|
|
176
182
|
await grok.data.detectSemanticTypes(df);
|
|
177
183
|
|
|
178
|
-
const tgtCol: DG.Column = await convertDo(srcCol, NOTATION.SEPARATOR, '/');
|
|
184
|
+
const tgtCol: DG.Column = await convertDo(srcCol, seqHelper, NOTATION.SEPARATOR, '/');
|
|
179
185
|
await awaitGrid(tv.grid);
|
|
180
186
|
expect(tv.grid.dataFrame.id, df.id);
|
|
181
187
|
|
|
@@ -183,7 +189,7 @@ category('renderers', () => {
|
|
|
183
189
|
expect(resCellRenderer, 'sequence');
|
|
184
190
|
|
|
185
191
|
// check tgtCol with SeqHandler constructor
|
|
186
|
-
const _sh:
|
|
192
|
+
const _sh: ISeqHandler = seqHelper.getSeqHandler(tgtCol);
|
|
187
193
|
}
|
|
188
194
|
|
|
189
195
|
async function _testAfterConvertToHelm() {
|
|
@@ -192,7 +198,7 @@ category('renderers', () => {
|
|
|
192
198
|
await awaitGrid(view.grid);
|
|
193
199
|
|
|
194
200
|
const srcCol = df.getCol('sequence');
|
|
195
|
-
const sh =
|
|
201
|
+
const sh = seqHelper.getSeqHandler(srcCol);
|
|
196
202
|
const tgtCol = sh.convert(NOTATION.HELM);
|
|
197
203
|
df.columns.add(tgtCol);
|
|
198
204
|
await awaitGrid(view.grid);
|
package/src/tests/scoring.ts
CHANGED
|
@@ -6,9 +6,8 @@ import wu from 'wu';
|
|
|
6
6
|
|
|
7
7
|
import {category, test, expectFloat, before, after, expect} from '@datagrok-libraries/utils/src/test';
|
|
8
8
|
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
9
|
-
import {IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
9
|
+
import {IMonomerLibHelper, getMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
10
10
|
|
|
11
|
-
import {getMonomerLibHelper, sequenceIdentityScoring, sequenceSimilarityScoring} from '../package';
|
|
12
11
|
import {
|
|
13
12
|
getUserLibSettings, setUserLibSettings
|
|
14
13
|
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
@@ -51,7 +50,8 @@ PEPTIDE1{[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[
|
|
|
51
50
|
});
|
|
52
51
|
|
|
53
52
|
test('Identity', async () => {
|
|
54
|
-
const scoresCol = await sequenceIdentityScoring
|
|
53
|
+
const scoresCol = await grok.functions.call('Bio:sequenceIdentityScoring',
|
|
54
|
+
{table: table, macromolecule: seqCol, reference: reference}) as DG.Column<number>;
|
|
55
55
|
for (let i = 0; i < scoresCol.length; i++) {
|
|
56
56
|
const resScore = scoresCol.get(i)!;
|
|
57
57
|
const tgtScore = table.get(expectedIdentity, i);
|
|
@@ -61,19 +61,22 @@ PEPTIDE1{[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[
|
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
test('Identity-shortReference', async () => {
|
|
64
|
-
const scoresCol = await sequenceIdentityScoring
|
|
64
|
+
const scoresCol = await grok.functions.call('Bio:sequenceIdentityScoring',
|
|
65
|
+
{table: table, macromolecule: seqCol, reference: shortReference}) as DG.Column<number>;
|
|
65
66
|
expect(wu.count(0).take(scoresCol.length).map((rowI) => scoresCol.get(rowI))
|
|
66
67
|
.every((v) => v != null && !isNaN(v)), true);
|
|
67
68
|
});
|
|
68
69
|
|
|
69
70
|
test('Identity-longReference', async () => {
|
|
70
|
-
const scoresCol = await sequenceIdentityScoring
|
|
71
|
+
const scoresCol = await grok.functions.call('Bio:sequenceIdentityScoring',
|
|
72
|
+
{table: table, macromolecule: seqCol, reference: longReference}) as DG.Column<number>;
|
|
71
73
|
expect(wu.count(0).take(scoresCol.length).map((rowI) => scoresCol.get(rowI))
|
|
72
74
|
.every((v) => v != null && !isNaN(v)), true);
|
|
73
75
|
});
|
|
74
76
|
|
|
75
77
|
test('Similarity', async () => {
|
|
76
|
-
const scoresCol = await sequenceSimilarityScoring
|
|
78
|
+
const scoresCol = await grok.functions.call('Bio:sequenceSimilarityScoring',
|
|
79
|
+
{table: table, macromolecule: seqCol, reference: reference}) as DG.Column<number>;
|
|
77
80
|
for (let i = 0; i < scoresCol.length; i++) {
|
|
78
81
|
const resScore = scoresCol.get(i)!;
|
|
79
82
|
const tgtScore = table.get(expectedSimilarity, i);
|
|
@@ -3,17 +3,19 @@ import * as ui from 'datagrok-api/ui';
|
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
5
|
import {after, before, category, expect, test} from '@datagrok-libraries/utils/src/test';
|
|
6
|
-
import {
|
|
7
|
-
import {NOTATION
|
|
6
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
7
|
+
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
8
8
|
import {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
9
9
|
import {getUserLibSettings, setUserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
10
10
|
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
11
11
|
|
|
12
12
|
category('SeqHandler: getHelm', () => {
|
|
13
|
+
let seqHelper: ISeqHelper;
|
|
13
14
|
let monomerLibHelper: IMonomerLibHelper;
|
|
14
15
|
let userLibSettings: UserLibSettings; // backup
|
|
15
16
|
|
|
16
17
|
before(async () => {
|
|
18
|
+
seqHelper = await getSeqHelper();
|
|
17
19
|
monomerLibHelper = await getMonomerLibHelper();
|
|
18
20
|
userLibSettings = await getUserLibSettings();
|
|
19
21
|
|
|
@@ -26,7 +28,6 @@ category('SeqHandler: getHelm', () => {
|
|
|
26
28
|
await monomerLibHelper.loadMonomerLib(true); // load user settings libraries
|
|
27
29
|
});
|
|
28
30
|
|
|
29
|
-
|
|
30
31
|
const tests: {
|
|
31
32
|
[testName: string]: {
|
|
32
33
|
src: {
|
|
@@ -79,8 +80,9 @@ category('SeqHandler: getHelm', () => {
|
|
|
79
80
|
// if (srcSeparator) seqCol.setTag(TAGS.separator, srcSeparator);
|
|
80
81
|
await grok.data.detectSemanticTypes(df);
|
|
81
82
|
|
|
82
|
-
const sh =
|
|
83
|
-
const
|
|
83
|
+
const sh = seqHelper.getSeqHandler(seqCol);
|
|
84
|
+
const resSemValue = await sh.getHelm(0);
|
|
85
|
+
const resHelm = resSemValue.value;
|
|
84
86
|
expect(resHelm, tgtHelm);
|
|
85
87
|
}
|
|
86
88
|
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import * as grok from 'datagrok-api/grok';
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
3
|
|
|
4
|
-
import {category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
5
|
-
import {
|
|
4
|
+
import {before, category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
5
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
6
6
|
import {ALPHABET, NOTATION, TAGS} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
7
7
|
|
|
8
8
|
category('SeqHandler: getRegion', () => {
|
|
9
|
+
let seqHelper: ISeqHelper;
|
|
10
|
+
|
|
11
|
+
before(async () => {
|
|
12
|
+
seqHelper = await getSeqHelper();
|
|
13
|
+
});
|
|
14
|
+
|
|
9
15
|
const data: {
|
|
10
16
|
[testName: string]: {
|
|
11
17
|
srcCsv: string,
|
|
@@ -76,7 +82,7 @@ PEPTIDE1{[Cys_SEt].T.*.*}$$$$`,
|
|
|
76
82
|
const semType: string | null = await grok.functions.call('Bio:detectMacromolecule', {col: srcSeqCol});
|
|
77
83
|
if (semType) srcSeqCol.semType = semType;
|
|
78
84
|
|
|
79
|
-
const srcSh =
|
|
85
|
+
const srcSh = seqHelper.getSeqHandler(srcSeqCol);
|
|
80
86
|
const resSeqCol = srcSh.getRegion(testData.startIdx, testData.endIdx, 'regSeq');
|
|
81
87
|
|
|
82
88
|
const tgtDf = DG.DataFrame.fromCsv(testData.tgtCsv);
|
|
@@ -3,8 +3,8 @@ import * as DG from 'datagrok-api/dg';
|
|
|
3
3
|
|
|
4
4
|
import wu from 'wu';
|
|
5
5
|
|
|
6
|
-
import {category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
7
|
-
import {
|
|
6
|
+
import {before, category, expect, expectArray, test} from '@datagrok-libraries/utils/src/test';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
8
8
|
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
9
9
|
import {GapOriginals} from '@datagrok-libraries/bio/src/utils/macromolecule/consts';
|
|
10
10
|
|
|
@@ -16,7 +16,13 @@ enum Tests {
|
|
|
16
16
|
helm = 'helm',
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
category('SeqHandler', () => {
|
|
19
|
+
category('SeqHandler: splitted', () => {
|
|
20
|
+
let seqHelper: ISeqHelper;
|
|
21
|
+
|
|
22
|
+
before(async () => {
|
|
23
|
+
seqHelper = await getSeqHelper();
|
|
24
|
+
});
|
|
25
|
+
|
|
20
26
|
const fG = GapOriginals[NOTATION.FASTA];
|
|
21
27
|
const hG = GapOriginals[NOTATION.HELM];
|
|
22
28
|
const sG = GapOriginals[NOTATION.SEPARATOR];
|
|
@@ -123,7 +129,7 @@ PEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.T.dK.Thr_PO3H2}$$$$`
|
|
|
123
129
|
};
|
|
124
130
|
|
|
125
131
|
for (const [testName, testData] of Object.entries(data)) {
|
|
126
|
-
test(
|
|
132
|
+
test(`${testName}`, async () => {
|
|
127
133
|
const df: DG.DataFrame = DG.DataFrame.fromCsv(testData.src.csv);
|
|
128
134
|
const col: DG.Column = df.getCol('seq');
|
|
129
135
|
|
|
@@ -131,7 +137,7 @@ PEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.T.dK.Thr_PO3H2}$$$$`
|
|
|
131
137
|
if (semType) col.semType = semType;
|
|
132
138
|
expect(col.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
133
139
|
|
|
134
|
-
const sh =
|
|
140
|
+
const sh = seqHelper.getSeqHandler(col);
|
|
135
141
|
expect(sh.notation, testData.tgt.notation);
|
|
136
142
|
expect(sh.separator === testData.tgt.separator, true);
|
|
137
143
|
|
|
@@ -2,9 +2,10 @@ import * as grok from 'datagrok-api/grok';
|
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
|
-
import {category, test, expect} from '@datagrok-libraries/utils/src/test';
|
|
6
|
-
import {SeqHandler} from '@datagrok-libraries/bio/src/utils/seq-handler';
|
|
5
|
+
import {category, test, expect, before} from '@datagrok-libraries/utils/src/test';
|
|
7
6
|
import {ALPHABET, NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
8
|
+
import {ISeqHandler} from '@datagrok-libraries/bio/src/utils/macromolecule/seq-handler';
|
|
8
9
|
|
|
9
10
|
const seqDna = `seq
|
|
10
11
|
ACGTCACGTC
|
|
@@ -28,6 +29,12 @@ PEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H
|
|
|
28
29
|
PEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$`;
|
|
29
30
|
|
|
30
31
|
category('SeqHandler', () => {
|
|
32
|
+
let seqHelper: ISeqHelper;
|
|
33
|
+
|
|
34
|
+
before(async () => {
|
|
35
|
+
seqHelper = await getSeqHelper();
|
|
36
|
+
});
|
|
37
|
+
|
|
31
38
|
test('Seq-Fasta', async () => {
|
|
32
39
|
const [_df, sh] = await loadCsvWithDetection(seqDna);
|
|
33
40
|
expect(sh.notation, NOTATION.FASTA);
|
|
@@ -78,38 +85,38 @@ category('SeqHandler', () => {
|
|
|
78
85
|
const seqCol = df.getCol('seq');
|
|
79
86
|
|
|
80
87
|
// col.version will change because of changing .tags
|
|
81
|
-
const sh1 =
|
|
88
|
+
const sh1 = seqHelper.getSeqHandler(seqCol);
|
|
82
89
|
|
|
83
90
|
const v1 = seqCol.version;
|
|
84
91
|
// col.version MUST NOT change and the same object returned
|
|
85
|
-
const sh2 =
|
|
92
|
+
const sh2 = seqHelper.getSeqHandler(seqCol);
|
|
86
93
|
const v2 = seqCol.version;
|
|
87
94
|
expect(v1, v2, 'Unexpected column version changed');
|
|
88
95
|
expect(sh1, sh2, 'Unexpected SeqHandler object changed');
|
|
89
96
|
|
|
90
97
|
df.rows.addNew(['TACCCCTTCAAC']);
|
|
91
|
-
const sh3 =
|
|
98
|
+
const sh3 = seqHelper.getSeqHandler(seqCol);
|
|
92
99
|
const v3 = seqCol.version;
|
|
93
100
|
expect(v2 < v3, true, 'Stalled column version on add row');
|
|
94
101
|
expect(sh2 !== sh3, true, 'Stalled SeqHandler object on add row');
|
|
95
102
|
|
|
96
103
|
seqCol.set(1, 'CAGTGTCCCCGT');
|
|
97
|
-
const sh4 =
|
|
104
|
+
const sh4 = seqHelper.getSeqHandler(seqCol);
|
|
98
105
|
const v4 = seqCol.version;
|
|
99
106
|
expect(v3 < v4, true, 'Stalled column version on change data');
|
|
100
107
|
expect(sh3 !== sh4, true, 'Stalled SeqHandler object on change data');
|
|
101
108
|
|
|
102
109
|
seqCol.setTag('testTag', 'testValue');
|
|
103
|
-
const sh5 =
|
|
110
|
+
const sh5 = seqHelper.getSeqHandler(seqCol);
|
|
104
111
|
const v5 = seqCol.version;
|
|
105
112
|
expect(v4 < v5, true, 'Stalled column version on set tag');
|
|
106
113
|
expect(sh4 !== sh5, true, 'Stalled SeqHandler object on set tag');
|
|
107
114
|
});
|
|
108
115
|
|
|
109
|
-
async function loadCsvWithDetection(csv: string): Promise<[df: DG.DataFrame, sh:
|
|
116
|
+
async function loadCsvWithDetection(csv: string): Promise<[df: DG.DataFrame, sh: ISeqHandler]> {
|
|
110
117
|
const df = DG.DataFrame.fromCsv(csv);
|
|
111
118
|
await grok.data.detectSemanticTypes(df);
|
|
112
|
-
const sh =
|
|
119
|
+
const sh = seqHelper.getSeqHandler(df.getCol('seq'));
|
|
113
120
|
return [df, sh];
|
|
114
121
|
}
|
|
115
122
|
|
|
@@ -121,7 +128,7 @@ category('SeqHandler', () => {
|
|
|
121
128
|
// col.semType = DG.SEMTYPE.MACROMOLECULE;
|
|
122
129
|
// if (value === NOTATION.SEPARATOR)
|
|
123
130
|
// col.setTag(TAGS.separator, '-');
|
|
124
|
-
// const sh =
|
|
131
|
+
// const sh = seqHelper.getSeqHandler(df.getCol('seq'));
|
|
125
132
|
// return [df, sh];
|
|
126
133
|
// }
|
|
127
134
|
});
|