@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
|
@@ -2,13 +2,12 @@ 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';
|
|
5
|
+
import {category, test, expect, before} from '@datagrok-libraries/utils/src/test';
|
|
6
6
|
|
|
7
7
|
import {ALIGNMENT, ALPHABET, NOTATION, TAGS as bioTAGS} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
8
|
-
import {
|
|
8
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
9
9
|
|
|
10
10
|
import {_testNeg, _testPos, DetectorTestData, DfReaderFunc, PosCol} from './utils/detectors-utils';
|
|
11
|
-
import {importFasta} from '../package';
|
|
12
11
|
|
|
13
12
|
/*
|
|
14
13
|
// snippet to list df columns of semType='Macromolecule' (false positive)
|
|
@@ -22,6 +21,12 @@ for (let i = 0; i < df.columns.length; i++) {
|
|
|
22
21
|
*/
|
|
23
22
|
|
|
24
23
|
category('detectors', () => {
|
|
24
|
+
let seqHelper: ISeqHelper;
|
|
25
|
+
|
|
26
|
+
before(async () => {
|
|
27
|
+
seqHelper = await getSeqHelper();
|
|
28
|
+
});
|
|
29
|
+
|
|
25
30
|
const enum csvTests {
|
|
26
31
|
fastaDna1 = 'csvFastaDna1',
|
|
27
32
|
fastaRna1 = 'fastaRna1',
|
|
@@ -177,7 +182,7 @@ PEPTIDE1{Ad(1).S.W.Y.C.K.H.P.M.W.A.A.A.A.C(1)-G-NH2}$$$$`,
|
|
|
177
182
|
for (const negColName of testData.neg ?? [])
|
|
178
183
|
await _testNeg(reader, negColName);
|
|
179
184
|
for (const [posColName, posCol] of Object.entries(testData.pos ?? {})) {
|
|
180
|
-
await _testPos(reader, posColName, posCol.units, posCol.aligned,
|
|
185
|
+
await _testPos(reader, posColName, seqHelper, posCol.units, posCol.aligned,
|
|
181
186
|
posCol.alphabet, posCol.alphabetSize, posCol.alphabetIsMultichar, posCol.separator);
|
|
182
187
|
}
|
|
183
188
|
});
|
|
@@ -318,7 +323,7 @@ MWRSWY-CKHPMWRSWY-CKHP`;
|
|
|
318
323
|
|
|
319
324
|
async function _readFileFasta(file: string): Promise<DG.DataFrame> {
|
|
320
325
|
const txt: string = await grok.dapi.files.readAsText(file);
|
|
321
|
-
const df: DG.DataFrame = importFasta
|
|
326
|
+
const df: DG.DataFrame = (await grok.functions.call('Bio.importFasta', {fileContent: txt}))[0] as DG.DataFrame;
|
|
322
327
|
return df;
|
|
323
328
|
}
|
|
324
329
|
|
|
@@ -336,77 +341,77 @@ MWRSWY-CKHPMWRSWY-CKHP`;
|
|
|
336
341
|
test('NegativeStartEndIntermediate', async () => { await _testNegList(['START', 'END', 'INTERMEDIATE']); });
|
|
337
342
|
|
|
338
343
|
test('FastaDna1', async () => {
|
|
339
|
-
await _testPos(readCsv(csvTests.fastaDna1), 'seq',
|
|
344
|
+
await _testPos(readCsv(csvTests.fastaDna1), 'seq', seqHelper,
|
|
340
345
|
NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.DNA, 4, false);
|
|
341
346
|
});
|
|
342
347
|
test('FastaRna1', async () => {
|
|
343
|
-
await _testPos(readCsv(csvTests.fastaRna1), 'seq',
|
|
348
|
+
await _testPos(readCsv(csvTests.fastaRna1), 'seq', seqHelper,
|
|
344
349
|
NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.RNA, 4, false);
|
|
345
350
|
});
|
|
346
351
|
test('FastaPt1', async () => {
|
|
347
|
-
await _testPos(readCsv(csvTests.fastaPt1), 'seq',
|
|
352
|
+
await _testPos(readCsv(csvTests.fastaPt1), 'seq', seqHelper,
|
|
348
353
|
NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.PT, 20, false);
|
|
349
354
|
});
|
|
350
|
-
test('FastaPtGaps', () => _testPosList(['FW-PH-EYY', 'FYNRQWYV-', 'FKP-Q-SEYV'],
|
|
355
|
+
test('FastaPtGaps', () => _testPosList(['FW-PH-EYY', 'FYNRQWYV-', 'FKP-Q-SEYV'], seqHelper,
|
|
351
356
|
NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.PT, 20, false));
|
|
352
|
-
test('FastaPtGapsMsa', () => _testPosList(['FW-PH-EYY', 'FYNRQWYV-', 'FKP-Q-SEY'],
|
|
357
|
+
test('FastaPtGapsMsa', () => _testPosList(['FW-PH-EYY', 'FYNRQWYV-', 'FKP-Q-SEY'], seqHelper,
|
|
353
358
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.PT, 20, false));
|
|
354
359
|
|
|
355
360
|
test('FastaUn', async () => {
|
|
356
|
-
await _testPos(readCsv(csvTests.fastaUn), 'seq',
|
|
361
|
+
await _testPos(readCsv(csvTests.fastaUn), 'seq', seqHelper,
|
|
357
362
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.UN, 12, true);
|
|
358
363
|
});
|
|
359
364
|
|
|
360
365
|
test('FastaMsaDna1', async () => {
|
|
361
|
-
await _testPos(readCsv(csvTests.fastaMsaDna1), 'seq',
|
|
366
|
+
await _testPos(readCsv(csvTests.fastaMsaDna1), 'seq', seqHelper,
|
|
362
367
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.DNA, 4, false);
|
|
363
368
|
});
|
|
364
369
|
|
|
365
370
|
test('FastaMsaPt1', async () => {
|
|
366
|
-
await _testPos(readCsv(csvTests.fastaMsaPt1), 'seq',
|
|
371
|
+
await _testPos(readCsv(csvTests.fastaMsaPt1), 'seq', seqHelper,
|
|
367
372
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.PT, 20, false);
|
|
368
373
|
});
|
|
369
374
|
|
|
370
375
|
test('SepDna', async () => {
|
|
371
|
-
await _testPos(readCsv(csvTests.sepDna), 'seq',
|
|
376
|
+
await _testPos(readCsv(csvTests.sepDna), 'seq', seqHelper,
|
|
372
377
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.DNA, 4, false, '*');
|
|
373
378
|
});
|
|
374
379
|
test('SepRna', async () => {
|
|
375
|
-
await _testPos(readCsv(csvTests.sepRna), 'seq',
|
|
380
|
+
await _testPos(readCsv(csvTests.sepRna), 'seq', seqHelper,
|
|
376
381
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.RNA, 4, false, '*');
|
|
377
382
|
});
|
|
378
383
|
test('SepPt', async () => {
|
|
379
|
-
await _testPos(readCsv(csvTests.sepPt), 'seq',
|
|
384
|
+
await _testPos(readCsv(csvTests.sepPt), 'seq', seqHelper,
|
|
380
385
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.PT, 20, false, '-');
|
|
381
386
|
});
|
|
382
387
|
test('SepUn1', async () => {
|
|
383
|
-
await _testPos(readCsv(csvTests.sepUn1), 'seq',
|
|
388
|
+
await _testPos(readCsv(csvTests.sepUn1), 'seq', seqHelper,
|
|
384
389
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.UN, 8, true, '-');
|
|
385
390
|
});
|
|
386
391
|
test('SepUn2', async () => {
|
|
387
|
-
await _testPos(readCsv(csvTests.sepUn2), 'seq',
|
|
392
|
+
await _testPos(readCsv(csvTests.sepUn2), 'seq', seqHelper,
|
|
388
393
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.UN, 9, true, '/');
|
|
389
394
|
});
|
|
390
395
|
|
|
391
396
|
test('SepMsaN1', async () => {
|
|
392
|
-
await _testPos(readCsv(csvTests.sepMsaDna1), 'seq',
|
|
397
|
+
await _testPos(readCsv(csvTests.sepMsaDna1), 'seq', seqHelper,
|
|
393
398
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ_MSA, ALPHABET.DNA, 4, false, '-');
|
|
394
399
|
});
|
|
395
400
|
|
|
396
401
|
test('SepMsaUnWEmpty', async () => {
|
|
397
|
-
await _testPos(readCsv(csvTests.sepMsaUnWEmpty), 'seq',
|
|
402
|
+
await _testPos(readCsv(csvTests.sepMsaUnWEmpty), 'seq', seqHelper,
|
|
398
403
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ_MSA, ALPHABET.UN, 14, true);
|
|
399
404
|
});
|
|
400
405
|
|
|
401
406
|
test('SepComplex', async () => {
|
|
402
|
-
await _testPos(readCsv(csvTests.sepComplex), 'seq',
|
|
407
|
+
await _testPos(readCsv(csvTests.sepComplex), 'seq', seqHelper,
|
|
403
408
|
NOTATION.SEPARATOR, ALIGNMENT.SEQ, ALPHABET.UN, 17, true);
|
|
404
409
|
});
|
|
405
410
|
|
|
406
411
|
test('samplesFastaCsv', async () => {
|
|
407
412
|
await _testDf(readSamples(Samples.fastaCsv), {
|
|
408
413
|
'Sequence': new PosCol(NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.PT, 20, false),
|
|
409
|
-
});
|
|
414
|
+
}, seqHelper);
|
|
410
415
|
});
|
|
411
416
|
|
|
412
417
|
// test('samplesFastaFasta', async () => {
|
|
@@ -420,27 +425,27 @@ MWRSWY-CKHPMWRSWY-CKHP`;
|
|
|
420
425
|
// await _testPos(readSamples(Samples.peptidesComplex), 'AlignedSequence', 'separator:SEQ:UN', '-');
|
|
421
426
|
// });
|
|
422
427
|
test('samplesPeptidesComplex', async () => {
|
|
423
|
-
await _testDf(readSamples(Samples.peptidesComplex), {} /* no positive
|
|
428
|
+
await _testDf(readSamples(Samples.peptidesComplex), {} /* no positive */, seqHelper);
|
|
424
429
|
});
|
|
425
430
|
|
|
426
431
|
test('samplesMsaComplex', async () => {
|
|
427
432
|
await _testDf(readSamples(Samples.msaComplex), {
|
|
428
433
|
'MSA': new PosCol(NOTATION.SEPARATOR, ALIGNMENT.SEQ_MSA, ALPHABET.UN, 161, true, '/'),
|
|
429
|
-
});
|
|
434
|
+
}, seqHelper);
|
|
430
435
|
});
|
|
431
436
|
|
|
432
437
|
test('samplesIdCsv', async () => {
|
|
433
|
-
await _testDf(readSamples(Samples.testIdCsv), {} /* no positive
|
|
438
|
+
await _testDf(readSamples(Samples.testIdCsv), {} /* no positive */, seqHelper);
|
|
434
439
|
});
|
|
435
440
|
|
|
436
441
|
test('samplesSarSmallCsv', async () => {
|
|
437
|
-
await _testDf(readSamples(Samples.testSmilesCsv), {} /* nopositive
|
|
442
|
+
await _testDf(readSamples(Samples.testSmilesCsv), {} /* nopositive */, seqHelper);
|
|
438
443
|
});
|
|
439
444
|
|
|
440
445
|
test('samplesHelmCsv', async () => {
|
|
441
446
|
await _testDf(readSamples(Samples.helmCsv), {
|
|
442
447
|
'HELM': new PosCol(NOTATION.HELM, null, null, 160, true),
|
|
443
|
-
});
|
|
448
|
+
}, seqHelper);
|
|
444
449
|
});
|
|
445
450
|
|
|
446
451
|
// sample_testHelm.csv
|
|
@@ -448,57 +453,57 @@ MWRSWY-CKHPMWRSWY-CKHP`;
|
|
|
448
453
|
test('samplesTestHelmCsv', async () => {
|
|
449
454
|
await _testDf(readSamples(Samples.testHelmCsv), {
|
|
450
455
|
'HELM string': new PosCol(NOTATION.HELM, null, null, 9, true),
|
|
451
|
-
});
|
|
456
|
+
}, seqHelper);
|
|
452
457
|
});
|
|
453
458
|
|
|
454
459
|
test('samplesTestDemogCsv', async () => {
|
|
455
|
-
await _testDf(readSamples(Samples.testDemogCsv), {} /* no positive
|
|
460
|
+
await _testDf(readSamples(Samples.testDemogCsv), {} /* no positive */, seqHelper);
|
|
456
461
|
});
|
|
457
462
|
|
|
458
463
|
test('samplesTestSmiles2Csv', async () => {
|
|
459
|
-
await _testDf(readSamples(Samples.testSmiles2Csv), {} /* no positive
|
|
464
|
+
await _testDf(readSamples(Samples.testSmiles2Csv), {} /* no positive */, seqHelper);
|
|
460
465
|
});
|
|
461
466
|
|
|
462
467
|
test('samplesTestSmilesShort', async () => {
|
|
463
|
-
await _testDf(readSamples(Samples.testSmilesShort), {} /* no positive
|
|
468
|
+
await _testDf(readSamples(Samples.testSmilesShort), {} /* no positive */, seqHelper);
|
|
464
469
|
});
|
|
465
470
|
|
|
466
471
|
test('samplesTestActivityCliffsNegativeSmiles', async () => {
|
|
467
|
-
await _testDf(readSamples(Samples.testActivityCliffsCsv), {} /* no positive
|
|
472
|
+
await _testDf(readSamples(Samples.testActivityCliffsCsv), {} /* no positive */, seqHelper);
|
|
468
473
|
});
|
|
469
474
|
|
|
470
475
|
test('samplesFastaPtCsv', async () => {
|
|
471
476
|
await _testDf(readSamples(Samples.fastaPtCsv), {
|
|
472
477
|
'sequence': new PosCol(NOTATION.FASTA, ALIGNMENT.SEQ, ALPHABET.PT, 20, false),
|
|
473
|
-
});
|
|
478
|
+
}, seqHelper);
|
|
474
479
|
});
|
|
475
480
|
|
|
476
481
|
test('samplesTestCerealCsv', async () => {
|
|
477
|
-
await _testDf(readSamples(Samples.testCerealCsv), {} /* no positive
|
|
482
|
+
await _testDf(readSamples(Samples.testCerealCsv), {} /* no positive */, seqHelper);
|
|
478
483
|
});
|
|
479
484
|
|
|
480
485
|
test('samplesTestUnichemSources', async () => {
|
|
481
|
-
await _testDf(readSamples(Samples.testUnichemSources), {} /* no positive
|
|
486
|
+
await _testDf(readSamples(Samples.testUnichemSources), {} /* no positive */, seqHelper);
|
|
482
487
|
});
|
|
483
488
|
|
|
484
489
|
test('samplesTestDmvOffices', async () => {
|
|
485
|
-
await _testDf(readSamples(Samples.testDmvOffices), {} /* no positive
|
|
490
|
+
await _testDf(readSamples(Samples.testDmvOffices), {} /* no positive */, seqHelper);
|
|
486
491
|
});
|
|
487
492
|
|
|
488
493
|
test('samplesTestAlertCollection', async () => {
|
|
489
|
-
await _testDf(readSamples(Samples.testAlertCollection), {} /* no positive
|
|
494
|
+
await _testDf(readSamples(Samples.testAlertCollection), {} /* no positive */, seqHelper);
|
|
490
495
|
});
|
|
491
496
|
|
|
492
497
|
test('samplesTestSpgi', async () => {
|
|
493
|
-
await _testDf(readSamples(Samples.testSpgi), {} /* no positive
|
|
498
|
+
await _testDf(readSamples(Samples.testSpgi), {} /* no positive */, seqHelper);
|
|
494
499
|
});
|
|
495
500
|
|
|
496
501
|
test('samplesTestSpgi100', async () => {
|
|
497
|
-
await _testDf(readSamples(Samples.testSpgi100), {} /* no positive
|
|
502
|
+
await _testDf(readSamples(Samples.testSpgi100), {} /* no positive */, seqHelper);
|
|
498
503
|
});
|
|
499
504
|
|
|
500
505
|
test('samplesTestUrl', async () => {
|
|
501
|
-
await _testDf(readSamples(Samples.testUrl), {} /* no positive
|
|
506
|
+
await _testDf(readSamples(Samples.testUrl), {} /* no positive */, seqHelper);
|
|
502
507
|
});
|
|
503
508
|
});
|
|
504
509
|
|
|
@@ -511,7 +516,7 @@ export async function _testNegList(list: string[]): Promise<void> {
|
|
|
511
516
|
}
|
|
512
517
|
}
|
|
513
518
|
|
|
514
|
-
export async function _testPosList(list: string[], units: NOTATION,
|
|
519
|
+
export async function _testPosList(list: string[], seqHelper: ISeqHelper, units: NOTATION,
|
|
515
520
|
aligned: ALIGNMENT, alphabet: ALPHABET, alphabetSize: number, alphabetIsMultichar: boolean,
|
|
516
521
|
separator: string | null = null
|
|
517
522
|
): Promise<void> {
|
|
@@ -527,7 +532,7 @@ export async function _testPosList(list: string[], units: NOTATION,
|
|
|
527
532
|
if (separator)
|
|
528
533
|
expect(col.getTag(bioTAGS.separator), separator);
|
|
529
534
|
|
|
530
|
-
const sh =
|
|
535
|
+
const sh = seqHelper.getSeqHandler(col);
|
|
531
536
|
expect(sh.getAlphabetSize(), alphabetSize);
|
|
532
537
|
expect(sh.getAlphabetIsMultichar(), alphabetIsMultichar);
|
|
533
538
|
if (!sh.isHelm()) {
|
|
@@ -536,14 +541,16 @@ export async function _testPosList(list: string[], units: NOTATION,
|
|
|
536
541
|
}
|
|
537
542
|
}
|
|
538
543
|
|
|
539
|
-
export async function _testDf(
|
|
544
|
+
export async function _testDf(
|
|
545
|
+
readDf: DfReaderFunc, posCols: { [colName: string]: PosCol }, seqHelper: ISeqHelper
|
|
546
|
+
): Promise<void> {
|
|
540
547
|
const df: DG.DataFrame = await readDf();
|
|
541
548
|
const errList: string[] = [];
|
|
542
549
|
for (const colName of df.columns.names()) {
|
|
543
550
|
if (colName in posCols) {
|
|
544
551
|
const p = posCols[colName];
|
|
545
552
|
try {
|
|
546
|
-
await _testPos(readDf, colName, p.units, p.aligned, p.alphabet,
|
|
553
|
+
await _testPos(readDf, colName, seqHelper, p.units, p.aligned, p.alphabet,
|
|
547
554
|
p.alphabetSize, p.alphabetIsMultichar, p.separator);
|
|
548
555
|
} catch (err: any) {
|
|
549
556
|
const errMsg: string = err.toString();
|
|
@@ -2,13 +2,20 @@ 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} from '@datagrok-libraries/utils/src/test';
|
|
5
|
+
import {before, category, test} from '@datagrok-libraries/utils/src/test';
|
|
6
6
|
import {ALIGNMENT, ALPHABET, NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
7
|
+
import {ISeqHelper, getSeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
|
|
7
8
|
|
|
8
9
|
import {_testNeg, _testPos, DfReaderFunc} from './utils/detectors-utils';
|
|
9
10
|
|
|
10
11
|
|
|
11
|
-
category('detectors
|
|
12
|
+
category('detectors.weak-and-likely', () => {
|
|
13
|
+
let seqHelper: ISeqHelper;
|
|
14
|
+
|
|
15
|
+
before(async () => {
|
|
16
|
+
seqHelper = await getSeqHelper();
|
|
17
|
+
});
|
|
18
|
+
|
|
12
19
|
const enum csvTests {
|
|
13
20
|
fastaDnaWeak1 = 'fastaDnaWeak1',
|
|
14
21
|
fastaDnaWeak1LikelyName = 'fastaDnaWeak1LikelyName',
|
|
@@ -92,7 +99,7 @@ Megafantastic
|
|
|
92
99
|
await _testNeg(readCsv(csvTests.fastaDnaWeak1), 'colName');
|
|
93
100
|
});
|
|
94
101
|
test(csvTests.fastaDnaWeak1LikelyName, async () => {
|
|
95
|
-
await _testPos(readCsv(csvTests.fastaDnaWeak1LikelyName), 'seq',
|
|
102
|
+
await _testPos(readCsv(csvTests.fastaDnaWeak1LikelyName), 'seq', seqHelper,
|
|
96
103
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.DNA, 4, false);
|
|
97
104
|
});
|
|
98
105
|
|
|
@@ -100,7 +107,7 @@ Megafantastic
|
|
|
100
107
|
await _testNeg(readCsv(csvTests.fastaRnaWeak1), 'colName');
|
|
101
108
|
});
|
|
102
109
|
test(csvTests.fastaRnaWeak1LikelyName, async () => {
|
|
103
|
-
await _testPos(readCsv(csvTests.fastaRnaWeak1LikelyName), 'seq',
|
|
110
|
+
await _testPos(readCsv(csvTests.fastaRnaWeak1LikelyName), 'seq', seqHelper,
|
|
104
111
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.RNA, 4, false);
|
|
105
112
|
});
|
|
106
113
|
|
|
@@ -108,7 +115,7 @@ Megafantastic
|
|
|
108
115
|
await _testNeg(readCsv(csvTests.fastaPtWeak1), 'colName');
|
|
109
116
|
});
|
|
110
117
|
test(csvTests.fastaPtWeak1LikelyName, async () => {
|
|
111
|
-
await _testPos(readCsv(csvTests.fastaPtWeak1LikelyName), 'seq',
|
|
118
|
+
await _testPos(readCsv(csvTests.fastaPtWeak1LikelyName), 'seq', seqHelper,
|
|
112
119
|
NOTATION.FASTA, ALIGNMENT.SEQ_MSA, ALPHABET.PT, 20, false);
|
|
113
120
|
});
|
|
114
121
|
|
|
@@ -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: {
|