@datagrok/bio 2.15.13 → 2.16.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 +13 -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 +5 -5
- package/src/analysis/sequence-activity-cliffs.ts +3 -4
- package/src/analysis/sequence-diversity-viewer.ts +5 -3
- package/src/analysis/sequence-similarity-viewer.ts +8 -5
- package/src/analysis/sequence-space.ts +3 -2
- package/src/calculations/monomerLevelMols.ts +3 -3
- package/src/demo/bio01-similarity-diversity.ts +4 -1
- package/src/package-test.ts +1 -1
- package/src/package-types.ts +35 -2
- package/src/package.ts +57 -71
- 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 +16 -13
- 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 +859 -0
- package/src/utils/seq-helper/seq-helper.ts +11 -21
- 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.ts +1 -2
- 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
|
@@ -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
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
2
|
import * as grok from 'datagrok-api/grok';
|
|
3
|
+
|
|
3
4
|
import {expect} from '@datagrok-libraries/utils/src/test';
|
|
4
|
-
import {sequenceSpaceTopMenu} from '../package';
|
|
5
5
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
6
6
|
import {BYPASS_LARGE_DATA_WARNING} from '@datagrok-libraries/ml/src/functionEditors/consts';
|
|
7
7
|
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
8
8
|
|
|
9
9
|
export async function _testSequenceSpaceReturnsResult(
|
|
10
|
-
df: DG.DataFrame, algorithm: DimReductionMethods, colName: string
|
|
10
|
+
df: DG.DataFrame, algorithm: DimReductionMethods, colName: string
|
|
11
11
|
) {
|
|
12
12
|
// await grok.data.detectSemanticTypes(df);
|
|
13
13
|
const col: DG.Column = df.getCol(colName);
|
|
@@ -18,7 +18,12 @@ export async function _testSequenceSpaceReturnsResult(
|
|
|
18
18
|
const preprocessingFunc = DG.Func.find({package: 'Bio', name: 'macromoleculePreprocessingFunction'})[0];
|
|
19
19
|
if (!preprocessingFunc)
|
|
20
20
|
throw new Error('Preprocessing function not found');
|
|
21
|
-
const sp = await
|
|
22
|
-
|
|
21
|
+
const sp = await grok.functions.call('Bio:sequenceSpaceTopMenu', {
|
|
22
|
+
table: df, molecules: df.col(colName)!,
|
|
23
|
+
methodName: algorithm, similarityMetric: MmDistanceFunctionsNames.LEVENSHTEIN,
|
|
24
|
+
plotEmbeddings: true, preprocessingFunction: preprocessingFunc, options: {[BYPASS_LARGE_DATA_WARNING]: true}
|
|
25
|
+
});
|
|
26
|
+
// const sp = await sequenceSpaceTopMenu(df, df.col(colName)!, algorithm, MmDistanceFunctionsNames.LEVENSHTEIN, true,
|
|
27
|
+
// preprocessingFunc, {[BYPASS_LARGE_DATA_WARNING]: true});
|
|
23
28
|
expect(sp != null, true);
|
|
24
29
|
}
|
|
@@ -11,13 +11,12 @@ import {ISeqSplitted} from '@datagrok-libraries/bio/src/utils/macromolecule/type
|
|
|
11
11
|
import {IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
12
12
|
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
13
13
|
import {getMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
14
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
14
15
|
|
|
15
16
|
import {splitToMonomersUI} from '../utils/split-to-monomers';
|
|
16
17
|
import {awaitGrid} from './utils';
|
|
17
18
|
import * as C from '../utils/constants';
|
|
18
|
-
import {getHelmMonomers} from '../package';
|
|
19
19
|
|
|
20
|
-
import {_package} from '../package-test';
|
|
21
20
|
import {getUserLibSettings, setUserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
22
21
|
|
|
23
22
|
category('splitters', async () => {
|
|
@@ -89,10 +88,12 @@ category('splitters', async () => {
|
|
|
89
88
|
});
|
|
90
89
|
|
|
91
90
|
category('splitters', () => {
|
|
91
|
+
let seqHelper: ISeqHelper;
|
|
92
92
|
let monomerLibHelper: IMonomerLibHelper;
|
|
93
93
|
let userLibSettings: UserLibSettings;
|
|
94
94
|
|
|
95
95
|
before(async () => {
|
|
96
|
+
seqHelper = await getSeqHelper();
|
|
96
97
|
monomerLibHelper = await getMonomerLibHelper();
|
|
97
98
|
userLibSettings = await getUserLibSettings();
|
|
98
99
|
|
|
@@ -113,7 +114,7 @@ category('splitters', () => {
|
|
|
113
114
|
seqCol.semType = semType;
|
|
114
115
|
seqCol.setTag(bioTAGS.aligned, C.MSA);
|
|
115
116
|
|
|
116
|
-
const newDf = await
|
|
117
|
+
const newDf: DG.DataFrame = await grok.functions.call('Bio:splitToMonomersTopMenu', {table: df, sequence: seqCol});
|
|
117
118
|
expect(newDf.columns.names().includes('17'), true);
|
|
118
119
|
// call to calculate 'cell.renderer' tag
|
|
119
120
|
await grok.data.detectSemanticTypes(newDf);
|
|
@@ -134,7 +135,7 @@ PEPTIDE1{hHis.Aca.Cys_SEt}$$$,5.72388
|
|
|
134
135
|
const expectedMonomerList = ['hHis', 'Aca', 'Cys_SEt', 'N', 'T'];
|
|
135
136
|
|
|
136
137
|
const helmCol: DG.Column = df.getCol('HELM');
|
|
137
|
-
const res = getHelmMonomers
|
|
138
|
+
const res = await grok.functions.call('Bio:getHelmMonomers', {sequence: helmCol}) as string[];
|
|
138
139
|
|
|
139
140
|
const missed = expectedMonomerList.filter((m) => !res.includes(m));
|
|
140
141
|
const unexpected = res.filter((m) => !expectedMonomerList.includes(m));
|
|
@@ -23,7 +23,6 @@ import {HelmBioFilter} from '../widgets/bio-substructure-filter-helm';
|
|
|
23
23
|
|
|
24
24
|
import {_package} from '../package-test';
|
|
25
25
|
|
|
26
|
-
|
|
27
26
|
category('bio-substructure-filters', async () => {
|
|
28
27
|
let helmHelper: IHelmHelper;
|
|
29
28
|
let monomerLibHelper: IMonomerLibHelper;
|
|
@@ -52,7 +51,7 @@ category('bio-substructure-filters', async () => {
|
|
|
52
51
|
const fSubStr: string = 'MD';
|
|
53
52
|
const fTrueCount: number = 3;
|
|
54
53
|
|
|
55
|
-
const filter =
|
|
54
|
+
const filter = await createBioSubstructureFilter();
|
|
56
55
|
filter.attach(df);
|
|
57
56
|
await filter.awaitRendered();
|
|
58
57
|
try {
|
|
@@ -69,11 +68,11 @@ category('bio-substructure-filters', async () => {
|
|
|
69
68
|
filter.detach();
|
|
70
69
|
}
|
|
71
70
|
await filter.awaitRendered();
|
|
72
|
-
});
|
|
71
|
+
}, {skipReason: 'GROK-16782'});
|
|
73
72
|
|
|
74
73
|
test('separator', async () => {
|
|
75
74
|
const msa = await readDataframe('tests/filter_MSA.csv');
|
|
76
|
-
const filter =
|
|
75
|
+
const filter = await createBioSubstructureFilter();
|
|
77
76
|
await grok.data.detectSemanticTypes(msa);
|
|
78
77
|
filter.attach(msa);
|
|
79
78
|
await filter.awaitRendered();
|
|
@@ -102,7 +101,7 @@ category('bio-substructure-filters', async () => {
|
|
|
102
101
|
filter.detach();
|
|
103
102
|
}
|
|
104
103
|
await filter.awaitRendered();
|
|
105
|
-
});
|
|
104
|
+
}, {skipReason: 'GROK-16782'});
|
|
106
105
|
|
|
107
106
|
// test('helm', async () => {
|
|
108
107
|
// const df = await readDataframe('tests/filter_HELM.csv');
|
|
@@ -112,7 +111,7 @@ category('bio-substructure-filters', async () => {
|
|
|
112
111
|
// // // Helm filter calls waitForElementInDom
|
|
113
112
|
// // const fg = view.getFiltersGroup({createDefaultFilters: false});
|
|
114
113
|
// // _package.logger.debug('Bio tests: substructureFilters/helm, filter attaching.');
|
|
115
|
-
// // const filter =
|
|
114
|
+
// // const filter = await createBioSubstructureFilter();
|
|
116
115
|
// // filter.attach(df);
|
|
117
116
|
// // _package.logger.debug('Bio tests: substructureFilters/helm, filter attached.');
|
|
118
117
|
// // const fg = await df.plot.fromType(DG.VIEWER.FILTERS, {
|
|
@@ -157,7 +156,7 @@ category('bio-substructure-filters', async () => {
|
|
|
157
156
|
const view = grok.shell.addTableView(df);
|
|
158
157
|
|
|
159
158
|
_package.logger.debug(`${logPrefix}, filter attaching.`);
|
|
160
|
-
const filter =
|
|
159
|
+
const filter = await createBioSubstructureFilter();
|
|
161
160
|
filter.attach(df);
|
|
162
161
|
const dlg = ui.dialog('Test filters').add(filter.root).show(); // to waitForElementInDom
|
|
163
162
|
await filter.awaitRendered();
|
|
@@ -188,7 +187,7 @@ category('bio-substructure-filters', async () => {
|
|
|
188
187
|
}
|
|
189
188
|
await filter.awaitRendered();
|
|
190
189
|
await delay(3000); //TODO: await for grid.onLookChanged
|
|
191
|
-
});
|
|
190
|
+
}, {skipReason: 'GROK-16782'});
|
|
192
191
|
|
|
193
192
|
// Generates unhandled exception accessing isFiltering before bioFilter created
|
|
194
193
|
test('helm-view', async () => {
|
|
@@ -235,7 +234,7 @@ category('bio-substructure-filters', async () => {
|
|
|
235
234
|
f2.detach();
|
|
236
235
|
}
|
|
237
236
|
await Promise.all([f1.awaitRendered(), f2.awaitRendered()]);
|
|
238
|
-
});
|
|
237
|
+
}, {skipReason: 'GROK-16782'});
|
|
239
238
|
|
|
240
239
|
// MSA filter has the second input field for separator
|
|
241
240
|
test('sync-msa', async () => {
|
|
@@ -269,7 +268,7 @@ category('bio-substructure-filters', async () => {
|
|
|
269
268
|
f2.detach();
|
|
270
269
|
}
|
|
271
270
|
await Promise.all([f1.awaitRendered(), f2.awaitRendered()]);
|
|
272
|
-
});
|
|
271
|
+
}, {skipReason: 'GROK-16782'});
|
|
273
272
|
|
|
274
273
|
test('sync-helm', async () => {
|
|
275
274
|
const df = await _package.files.readCsv('tests/filter_HELM.csv');
|
|
@@ -312,7 +311,7 @@ category('bio-substructure-filters', async () => {
|
|
|
312
311
|
await Promise.all([f1.awaitRendered(), f2.awaitRendered()]);
|
|
313
312
|
await awaitGrid(view.grid);
|
|
314
313
|
await delay(3000); //TODO: await for grid.onLookChanged
|
|
315
|
-
});
|
|
314
|
+
}, {skipReason: 'GROK-16782'});
|
|
316
315
|
|
|
317
316
|
// two seq columns
|
|
318
317
|
|
|
@@ -337,7 +336,6 @@ category('bio-substructure-filters', async () => {
|
|
|
337
336
|
const fSeq2SubStr: string = 'GCATT';
|
|
338
337
|
const fSeq2Trues: number[] = df.getCol('trueSeq2').toList();
|
|
339
338
|
|
|
340
|
-
//const seq2Filter = new BioSubstructureFilter();
|
|
341
339
|
const filterList: any[] = [
|
|
342
340
|
{type: 'Bio:bioSubstructureFilter', columnName: fSeq1ColName},
|
|
343
341
|
{type: 'Bio:bioSubstructureFilter', columnName: fSeq2ColName},
|
|
@@ -459,7 +457,7 @@ async function createFilter(colName: string, df: DG.DataFrame): Promise<BioSubst
|
|
|
459
457
|
`Available in data frame are ${JSON.stringify(df.columns.names())}`);
|
|
460
458
|
}
|
|
461
459
|
|
|
462
|
-
const filter =
|
|
460
|
+
const filter = await createBioSubstructureFilter();
|
|
463
461
|
filter.attach(df);
|
|
464
462
|
filter.applyState({columnName: colName});
|
|
465
463
|
filter.column = df.col(colName);
|
|
@@ -467,3 +465,8 @@ async function createFilter(colName: string, df: DG.DataFrame): Promise<BioSubst
|
|
|
467
465
|
//filter.tableName = df.name;
|
|
468
466
|
return filter;
|
|
469
467
|
};
|
|
468
|
+
|
|
469
|
+
async function createBioSubstructureFilter(): Promise<BioSubstructureFilter> {
|
|
470
|
+
const filter = await grok.functions.call('Bio:bioSubstructureFilter');
|
|
471
|
+
return filter.dart.jsFilter as BioSubstructureFilter;
|
|
472
|
+
}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
getUserLibSettings, setUserLibSettings
|
|
16
16
|
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
17
17
|
import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
18
|
-
import {
|
|
18
|
+
import {getSeqHelper, ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
19
19
|
import {getRdKitModule} from '@datagrok-libraries/bio/src/chem/rdkit-module';
|
|
20
20
|
|
|
21
21
|
import {_package} from '../package-test';
|
|
@@ -60,11 +60,13 @@ category('toAtomicLevel', async () => {
|
|
|
60
60
|
/** Backup actual user's monomer libraries settings */
|
|
61
61
|
let userLibSettings: UserLibSettings;
|
|
62
62
|
|
|
63
|
+
let seqHelper: ISeqHelper;
|
|
63
64
|
let monomerLib: IMonomerLib;
|
|
64
65
|
let rdKitModule: RDModule;
|
|
65
66
|
|
|
66
67
|
before(async () => {
|
|
67
68
|
rdKitModule = await getRdKitModule();
|
|
69
|
+
seqHelper = await getSeqHelper();
|
|
68
70
|
monomerLibHelper = await getMonomerLibHelper();
|
|
69
71
|
userLibSettings = await getUserLibSettings();
|
|
70
72
|
// Clear settings to test default
|
|
@@ -214,7 +216,7 @@ PEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr
|
|
|
214
216
|
seqCol.semType = DG.SEMTYPE.MACROMOLECULE;
|
|
215
217
|
seqCol.meta.units = NOTATION.FASTA;
|
|
216
218
|
seqCol.setTag(bioTAGS.alphabet, ALPHABET.PT);
|
|
217
|
-
const sh =
|
|
219
|
+
const sh = seqHelper.getSeqHandler(seqCol);
|
|
218
220
|
const resCol = (await _testToAtomicLevel(srcDf, 'seq', monomerLibHelper))!;
|
|
219
221
|
expect(polishMolfile(resCol.get(0)), polishMolfile(tgtMol));
|
|
220
222
|
});
|
|
@@ -223,7 +225,7 @@ PEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr
|
|
|
223
225
|
df: DG.DataFrame, seqColName: string = 'seq', monomerLibHelper: IMonomerLibHelper
|
|
224
226
|
): Promise<DG.Column | null> {
|
|
225
227
|
const seqCol: DG.Column<string> = df.getCol(seqColName);
|
|
226
|
-
const res = await _toAtomicLevel(df, seqCol, monomerLib, rdKitModule);
|
|
228
|
+
const res = await _toAtomicLevel(df, seqCol, monomerLib, seqHelper, rdKitModule);
|
|
227
229
|
if (res.warnings.length > 0)
|
|
228
230
|
_package.logger.warning(`_toAtomicLevel() warnings ${res.warnings.join('\n')}`);
|
|
229
231
|
return res.molCol;
|
|
@@ -11,6 +11,7 @@ import {UserLibSettings} from '@datagrok-libraries/bio/src/monomer-works/types';
|
|
|
11
11
|
import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
12
12
|
import {getRdKitModule} from '@datagrok-libraries/bio/src/chem/rdkit-module';
|
|
13
13
|
import {RDModule} from '@datagrok-libraries/chem-meta/src/rdkit-api';
|
|
14
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
14
15
|
|
|
15
16
|
type TestDataTargetType = { atomCount: number, bondCount: number };
|
|
16
17
|
type TestDataType = {
|
|
@@ -22,10 +23,12 @@ category('toAtomicLevel-ui', () => {
|
|
|
22
23
|
|
|
23
24
|
let monomerLibHelper: IMonomerLibHelper;
|
|
24
25
|
let userLibSettings: UserLibSettings;
|
|
26
|
+
let seqHelper: ISeqHelper;
|
|
25
27
|
let monomerLib: IMonomerLib;
|
|
26
28
|
let rdKitModule: RDModule;
|
|
27
29
|
|
|
28
30
|
before(async () => {
|
|
31
|
+
seqHelper = await getSeqHelper();
|
|
29
32
|
rdKitModule = await getRdKitModule();
|
|
30
33
|
monomerLibHelper = await getMonomerLibHelper();
|
|
31
34
|
userLibSettings = await getUserLibSettings();
|
|
@@ -95,7 +98,7 @@ category('toAtomicLevel-ui', () => {
|
|
|
95
98
|
async function _testToAtomicLevelFunc(
|
|
96
99
|
seqCol: DG.Column<string>, nonlinear: boolean, tgt: TestDataTargetType,
|
|
97
100
|
): Promise<void> {
|
|
98
|
-
const res = (await sequenceToMolfile(seqCol.dataFrame, seqCol, nonlinear, false, monomerLib, rdKitModule))!;
|
|
101
|
+
const res = (await sequenceToMolfile(seqCol.dataFrame, seqCol, nonlinear, false, monomerLib, seqHelper, rdKitModule))!;
|
|
99
102
|
expect(res.molCol!.semType, DG.SEMTYPE.MOLECULE);
|
|
100
103
|
const resMolStr = res.molCol!.get(0)!;
|
|
101
104
|
const resRdMol = rdKitModule.get_mol(resMolStr);
|
|
@@ -3,7 +3,7 @@ import * as grok from 'datagrok-api/grok';
|
|
|
3
3
|
|
|
4
4
|
import {ALIGNMENT, NOTATION, TAGS as bioTAGS} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
5
5
|
import {expect} from '@datagrok-libraries/utils/src/test';
|
|
6
|
-
import {
|
|
6
|
+
import {ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
7
7
|
|
|
8
8
|
export type DetectorTestData = { [testName: string]: { csv: string, neg?: string[], pos?: { [colName: string]: PosCol } } };
|
|
9
9
|
|
|
@@ -35,8 +35,8 @@ export async function _testNeg(readDf: DfReaderFunc, colName: string) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export async function _testPos(
|
|
38
|
-
readDf: DfReaderFunc, colName: string,
|
|
39
|
-
alphabet: string | null, alphabetSize: number, alphabetIsMultichar?: boolean,
|
|
38
|
+
readDf: DfReaderFunc, colName: string, seqHelper: ISeqHelper,
|
|
39
|
+
units: string, aligned: string | null, alphabet: string | null, alphabetSize: number, alphabetIsMultichar?: boolean,
|
|
40
40
|
separator: string | null = null,
|
|
41
41
|
) {
|
|
42
42
|
const df: DG.DataFrame = await readDf();
|
|
@@ -53,7 +53,7 @@ export async function _testPos(
|
|
|
53
53
|
if (separator)
|
|
54
54
|
expect(col.getTag(bioTAGS.separator), separator);
|
|
55
55
|
|
|
56
|
-
const sh =
|
|
56
|
+
const sh = seqHelper.getSeqHandler(col);
|
|
57
57
|
expect(sh.getAlphabetSize(), alphabetSize);
|
|
58
58
|
expect(sh.getAlphabetIsMultichar(), alphabetIsMultichar);
|
|
59
59
|
if (!sh.isHelm()) {
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import {calculateScores, SCORE} from '@datagrok-libraries/bio/src/utils/macromolecule/scoring';
|
|
4
|
+
import {ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
3
5
|
|
|
4
6
|
export async function calculateScoresWithEmptyValues(
|
|
5
|
-
|
|
7
|
+
table: DG.DataFrame, macromolecule: DG.Column, reference: string, scoring: SCORE, seqHelper: ISeqHelper,
|
|
6
8
|
): Promise<DG.Column<number>> {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
const scores = await calculateScores(table, macromolecule, reference, scoring, seqHelper);
|
|
10
|
+
for (let i = 0; i < scores.length; i++) {
|
|
11
|
+
if (macromolecule.isNone(i))
|
|
12
|
+
scores.set(i, null, false);
|
|
13
|
+
}
|
|
14
|
+
return scores;
|
|
15
|
+
}
|