@datagrok/bio 1.7.2 → 1.7.3
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/detectors.js +2 -1
- package/dist/package-test.js +380 -309
- package/dist/package.js +295 -276
- package/package.json +3 -6
- package/src/package-test.ts +1 -1
- package/src/package.ts +13 -16
- package/src/tests/WebLogo-test.ts +18 -0
- package/src/tests/activity-cliffs-tests.ts +14 -9
- package/src/tests/convert-test.ts +1 -1
- package/src/tests/detectors-test.ts +8 -2
- package/src/tests/renderer-test.ts +8 -2
- package/src/tests/sequence-space-test.ts +7 -3
- package/src/tests/splitters-test.ts +35 -0
- package/src/utils/cell-renderer.ts +8 -5
- package/src/utils/convert.ts +1 -1
- package/{test-Bio-34f75e5127b8-ac96da52.html → test-Bio-34f75e5127b8-303cfb72.html} +2 -2
- package/src/tests/splitter-test.ts +0 -22
- package/src/utils/notation-converter.ts +0 -280
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@datagrok/bio",
|
|
3
3
|
"beta": false,
|
|
4
4
|
"friendlyName": "Bio",
|
|
5
|
-
"version": "1.7.
|
|
5
|
+
"version": "1.7.3",
|
|
6
6
|
"description": "Bio is a [package](https://datagrok.ai/help/develop/develop#packages) for the [Datagrok](https://datagrok.ai) platform",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@biowasm/aioli": ">=2.4.0",
|
|
14
|
-
"@datagrok-libraries/bio": "
|
|
14
|
+
"@datagrok-libraries/bio": "2.8.1",
|
|
15
15
|
"@datagrok-libraries/utils": "^1.0.0",
|
|
16
16
|
"@datagrok-libraries/ml": "^2.0.10",
|
|
17
17
|
"cash-dom": "latest",
|
|
@@ -60,10 +60,7 @@
|
|
|
60
60
|
],
|
|
61
61
|
"sources": [
|
|
62
62
|
"css/helm.css",
|
|
63
|
-
"https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"
|
|
64
|
-
"helm/JSDraw/Scilligence.JSDraw2.Lite.js",
|
|
65
|
-
"helm/JSDraw/Scilligence.JSDraw2.Resources.js",
|
|
66
|
-
"helm/JSDraw/Pistoia.HELM-uncompressed.js"
|
|
63
|
+
"https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"
|
|
67
64
|
],
|
|
68
65
|
"category": "Bioinformatics"
|
|
69
66
|
}
|
package/src/package-test.ts
CHANGED
|
@@ -8,7 +8,7 @@ import './tests/detectors-test';
|
|
|
8
8
|
import './tests/msa-tests';
|
|
9
9
|
import './tests/sequence-space-test';
|
|
10
10
|
import './tests/activity-cliffs-tests';
|
|
11
|
-
import './tests/
|
|
11
|
+
import './tests/splitters-test';
|
|
12
12
|
import './tests/renderer-test';
|
|
13
13
|
import './tests/convert-test';
|
|
14
14
|
|
package/src/package.ts
CHANGED
|
@@ -11,7 +11,6 @@ import {runKalign, testMSAEnoughMemory} from './utils/multiple-sequence-alignmen
|
|
|
11
11
|
import {SequenceAlignment, Aligned} from './seq_align';
|
|
12
12
|
import {Nucleotides} from '@datagrok-libraries/bio/src/nucleotides';
|
|
13
13
|
import {Aminoacids} from '@datagrok-libraries/bio/src/aminoacids';
|
|
14
|
-
import {convert} from './utils/convert';
|
|
15
14
|
import {getEmbeddingColsNames, sequenceSpace} from './utils/sequence-space';
|
|
16
15
|
import {AvailableMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
17
16
|
import {getActivityCliffs} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
|
|
@@ -19,10 +18,8 @@ import {sequenceGetSimilarities, drawTooltip} from './utils/sequence-activity-cl
|
|
|
19
18
|
import {getMolfilesFromSeq, HELM_CORE_LIB_FILENAME} from './utils/utils';
|
|
20
19
|
import {getMacroMol} from './utils/atomic-works';
|
|
21
20
|
import {MacromoleculeSequenceCellRenderer} from './utils/cell-renderer';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { delay } from '@datagrok-libraries/utils/src/test';
|
|
25
|
-
import { TableView } from 'datagrok-api/dg';
|
|
21
|
+
import {delay} from '@datagrok-libraries/utils/src/test';
|
|
22
|
+
import {convert} from './utils/convert';
|
|
26
23
|
|
|
27
24
|
//tags: init
|
|
28
25
|
export async function initBio(): Promise<void> {
|
|
@@ -175,21 +172,22 @@ export async function toAtomicLevel(df: DG.DataFrame, macroMolecule: DG.Column):
|
|
|
175
172
|
if (!checkInputColumn(macroMolecule, 'To Atomic Level'))
|
|
176
173
|
return;
|
|
177
174
|
|
|
178
|
-
let currentView: TableView;
|
|
179
|
-
for (
|
|
180
|
-
if (df.name === view.name)
|
|
175
|
+
let currentView: DG.TableView;
|
|
176
|
+
for (const view of grok.shell.tableViews) {
|
|
177
|
+
if (df.name === view.name)
|
|
181
178
|
currentView = view;
|
|
182
|
-
}
|
|
183
179
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
|
|
180
|
+
|
|
181
|
+
// Some hack to activate Chem Molecule rendering
|
|
182
|
+
const file2 = await _package.files.readAsText('tests/sar-small.csv');
|
|
183
|
+
const df2 = DG.DataFrame.fromCsv(file2);
|
|
184
|
+
const v2 = grok.shell.addTableView(df2);
|
|
185
|
+
setTimeout(() => {
|
|
188
186
|
grok.shell.closeTable(df2);
|
|
189
|
-
|
|
187
|
+
v2.close();
|
|
190
188
|
grok.shell.v = currentView;
|
|
191
189
|
}, 100);
|
|
192
|
-
|
|
190
|
+
|
|
193
191
|
const monomersLibFile = await _package.files.readAsText(HELM_CORE_LIB_FILENAME);
|
|
194
192
|
const monomersLibObject: any[] = JSON.parse(monomersLibFile);
|
|
195
193
|
const atomicCodes = getMolfilesFromSeq(macroMolecule, monomersLibObject);
|
|
@@ -199,7 +197,6 @@ export async function toAtomicLevel(df: DG.DataFrame, macroMolecule: DG.Column):
|
|
|
199
197
|
col.semType = DG.SEMTYPE.MOLECULE;
|
|
200
198
|
col.tags[DG.TAGS.UNITS] = 'molblock';
|
|
201
199
|
df.columns.add(col, true);
|
|
202
|
-
|
|
203
200
|
}
|
|
204
201
|
|
|
205
202
|
|
|
@@ -61,6 +61,24 @@ XZJ{}2
|
|
|
61
61
|
test('testPickupPaletteX', async () => { await _testPickupPaletteX(csvDfX); });
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
+
category('WebLogo.monomerToText', () => {
|
|
65
|
+
test('longMonomerSingle', async () => {
|
|
66
|
+
await expect(WebLogo.monomerToText('S'), 'S');
|
|
67
|
+
});
|
|
68
|
+
test('longMonomerShort', async () => {
|
|
69
|
+
await expect(WebLogo.monomerToText('Short'), 'Short');
|
|
70
|
+
});
|
|
71
|
+
test('longMonomerLong56', async () => {
|
|
72
|
+
await expect(WebLogo.monomerToText('Long56'), 'Long5…');
|
|
73
|
+
});
|
|
74
|
+
test('longMonomerComplexFirstPartShort', async () => {
|
|
75
|
+
await expect(WebLogo.monomerToText('Long-long'), 'Long…');
|
|
76
|
+
});
|
|
77
|
+
test('longMonomerComplexFirstPartLong56', async () => {
|
|
78
|
+
await expect(WebLogo.monomerToText('Long56-long'), 'Long5…');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
64
82
|
|
|
65
83
|
export async function _testGetStats(csvDfN1: string) {
|
|
66
84
|
const dfN1: DG.DataFrame = DG.DataFrame.fromCsv(csvDfN1);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {after, before, category, expect, expectFloat, test} from '@datagrok-libraries/utils/src/test';
|
|
2
|
+
|
|
2
3
|
import * as DG from 'datagrok-api/dg';
|
|
3
|
-
import
|
|
4
|
-
|
|
4
|
+
import * as grok from 'datagrok-api/grok';
|
|
5
|
+
|
|
6
|
+
import {readDataframe} from './utils';
|
|
5
7
|
import {getEmbeddingColsNames, sequenceSpace} from '../utils/sequence-space';
|
|
6
8
|
import {drawTooltip, sequenceGetSimilarities} from '../utils/sequence-activity-cliffs';
|
|
7
9
|
import {getActivityCliffs} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
|
|
@@ -12,8 +14,15 @@ category('activityCliffs', async () => {
|
|
|
12
14
|
let actCliffsDf: DG.DataFrame;
|
|
13
15
|
|
|
14
16
|
before(async () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
actCliffsDf = await readDataframe('samples/sample_MSA.csv');
|
|
18
|
+
actCliffsTableView = grok.shell.addTableView(actCliffsDf);
|
|
19
|
+
|
|
20
|
+
actCliffsDf = actCliffsTableView.dataFrame;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
after(async () => {
|
|
24
|
+
grok.shell.closeTable(actCliffsDf);
|
|
25
|
+
actCliffsTableView.close();
|
|
17
26
|
});
|
|
18
27
|
|
|
19
28
|
test('activityCliffsOpen', async () => {
|
|
@@ -41,10 +50,6 @@ category('activityCliffs', async () => {
|
|
|
41
50
|
|
|
42
51
|
const cliffsLink = (Array.from(scatterPlot.root.children) as Element[])
|
|
43
52
|
.filter((it) => it.className === 'ui-btn ui-btn-ok');
|
|
44
|
-
expect((cliffsLink[0] as HTMLElement).innerText, '
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
after(async () => {
|
|
48
|
-
actCliffsTableView.close();
|
|
53
|
+
expect((cliffsLink[0] as HTMLElement).innerText, '105 cliffs');
|
|
49
54
|
});
|
|
50
55
|
});
|
|
@@ -4,7 +4,7 @@ import * as grok from 'datagrok-api/grok';
|
|
|
4
4
|
import * as DG from 'datagrok-api/dg';
|
|
5
5
|
|
|
6
6
|
import {ConverterFunc, DfReaderFunc} from './types';
|
|
7
|
-
import {NOTATION, NotationConverter} from '
|
|
7
|
+
import {NOTATION, NotationConverter} from '@datagrok-libraries/bio/src/utils/notation-converter';
|
|
8
8
|
|
|
9
9
|
// import {mmSemType} from '../const';
|
|
10
10
|
// import {importFasta} from '../package';
|
|
@@ -102,6 +102,7 @@ MWRSWY-CKHP
|
|
|
102
102
|
|
|
103
103
|
const enum Samples {
|
|
104
104
|
peptidesComplex = 'peptidesComplex',
|
|
105
|
+
peptidesSimple = 'peptidesSimple',
|
|
105
106
|
fastaCsv = 'fastaCsv',
|
|
106
107
|
fastaFasta = 'fastaFasta',
|
|
107
108
|
fastaPtCsv = 'fastaPtCsv',
|
|
@@ -115,15 +116,16 @@ MWRSWY-CKHP
|
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
const samples: { [key: string]: string } = {
|
|
118
|
-
'peptidesComplex': 'System:AppData/Bio/tests/peptides_complex_msa.csv',
|
|
119
119
|
'fastaCsv': 'System:AppData/Bio/samples/sample_FASTA.csv',
|
|
120
120
|
'fastaFasta': 'System:AppData/Bio/samples/sample_FASTA.fasta',
|
|
121
121
|
'fastaPtCsv': 'System:AppData/Bio/samples/sample_FASTA_PT.csv',
|
|
122
122
|
'msaComplex': 'System:AppData/Bio/samples/sample_MSA.csv',
|
|
123
123
|
'helmCsv': 'System:AppData/Bio/samples/sample_HELM.csv',
|
|
124
|
+
'peptidesComplex': 'System:AppData/Bio/tests/peptides_complex_msa.csv',
|
|
125
|
+
'peptidesSimple': 'System:AppData/Bio/tests/peptides_simple_msa.csv',
|
|
124
126
|
'testDemogCsv': 'System:AppData/Bio/tests/testDemog.csv',
|
|
125
127
|
'testHelmCsv': 'System:AppData/Bio/tests/testHelm.csv',
|
|
126
|
-
'testIdCsv': 'System:AppData/Bio/tests/
|
|
128
|
+
'testIdCsv': 'System:AppData/Bio/tests/testId.csv',
|
|
127
129
|
'testSmilesCsv': 'System:AppData/Bio/tests/testSmiles.csv',
|
|
128
130
|
'testSmiles2Csv': 'System:AppData/Bio/tests/testSmiles2.csv',
|
|
129
131
|
};
|
|
@@ -228,6 +230,10 @@ MWRSWY-CKHP
|
|
|
228
230
|
await _testPos(readSamples(Samples.fastaFasta, readFileFasta), 'sequence', 'fasta:SEQ:PT');
|
|
229
231
|
});
|
|
230
232
|
|
|
233
|
+
// peptidesComplex contains monomers with spaces in AlignedSequence columns, which are forbidden
|
|
234
|
+
// test('samplesPeptidesComplexPositiveAlignedSequence', async () => {
|
|
235
|
+
// await _testPos(readSamples(Samples.peptidesComplex), 'AlignedSequence', 'separator:SEQ:UN', '-');
|
|
236
|
+
// });
|
|
231
237
|
test('samplesPeptidesComplexNegativeID', async () => {
|
|
232
238
|
await _testNeg(readSamples(Samples.peptidesComplex), 'ID');
|
|
233
239
|
});
|
|
@@ -7,12 +7,15 @@ import {importFasta, multipleSequenceAlignmentAny} from '../package';
|
|
|
7
7
|
|
|
8
8
|
category('renderers', () => {
|
|
9
9
|
let tvList: DG.TableView[];
|
|
10
|
+
let dfList: DG.DataFrame[];
|
|
10
11
|
|
|
11
12
|
before(async () => {
|
|
12
13
|
tvList = [];
|
|
14
|
+
dfList = [];
|
|
13
15
|
});
|
|
14
16
|
|
|
15
17
|
after(async () => {
|
|
18
|
+
dfList.forEach((df: DG.DataFrame) => { grok.shell.closeTable(df); });
|
|
16
19
|
tvList.forEach((tv: DG.TableView) => tv.close());
|
|
17
20
|
});
|
|
18
21
|
|
|
@@ -23,6 +26,7 @@ category('renderers', () => {
|
|
|
23
26
|
async function _testAfterMsa() {
|
|
24
27
|
const fastaTxt: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA.fasta');
|
|
25
28
|
const df: DG.DataFrame = importFasta(fastaTxt)[0];
|
|
29
|
+
// await grok.data.detectSemanticTypes(df);
|
|
26
30
|
|
|
27
31
|
const srcSeqCol: DG.Column | null = df.col('sequence');
|
|
28
32
|
expect(srcSeqCol !== null, true);
|
|
@@ -31,14 +35,15 @@ category('renderers', () => {
|
|
|
31
35
|
const tv: DG.TableView = grok.shell.addTableView(df);
|
|
32
36
|
console.log('Bio: tests/renderers/afterMsa, table view');
|
|
33
37
|
|
|
34
|
-
await grok.data.detectSemanticTypes(df);
|
|
38
|
+
// await grok.data.detectSemanticTypes(df);
|
|
35
39
|
console.log('Bio: tests/renderers/afterMsa, detectSemanticTypes');
|
|
36
40
|
|
|
37
|
-
console.log('Bio: tests/renderers/afterMsa, src before test
|
|
41
|
+
console.log('Bio: tests/renderers/afterMsa, src before test ' +
|
|
38
42
|
`semType="${srcSeqCol!.semType}", units="${srcSeqCol!.getTag(DG.TAGS.UNITS)}", ` +
|
|
39
43
|
`cell.renderer="${srcSeqCol!.getTag('cell.renderer')}"`);
|
|
40
44
|
expect(srcSeqCol!.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
41
45
|
expect(srcSeqCol!.getTag(DG.TAGS.UNITS), 'fasta:SEQ:PT');
|
|
46
|
+
// TODO: Find the way to check renderer for columns
|
|
42
47
|
expect(srcSeqCol!.getTag('cell.renderer'), 'Macromolecule');
|
|
43
48
|
console.log('Bio: tests/renderers/afterMsa, src semType tested');
|
|
44
49
|
|
|
@@ -53,6 +58,7 @@ category('renderers', () => {
|
|
|
53
58
|
expect(msaSeqCol!.getTag('cell.renderer'), 'Macromolecule');
|
|
54
59
|
console.log('Bio: tests/renderers/afterMsa, msa semType tested');
|
|
55
60
|
|
|
61
|
+
dfList.push(df);
|
|
56
62
|
tvList.push(tv);
|
|
57
63
|
}
|
|
58
64
|
});
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import {before, category, test, expect} from '@datagrok-libraries/utils/src/test';
|
|
1
|
+
import {after, before, category, test, expect} from '@datagrok-libraries/utils/src/test';
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
3
|
import {sequenceSpace} from '../utils/sequence-space';
|
|
4
4
|
import {readDataframe} from './utils';
|
|
5
|
-
|
|
5
|
+
import * as grok from 'datagrok-api/grok';
|
|
6
6
|
|
|
7
7
|
category('sequenceSpace', async () => {
|
|
8
8
|
let testFastaDf: DG.DataFrame;
|
|
9
9
|
|
|
10
10
|
before(async () => {
|
|
11
|
-
testFastaDf = await readDataframe('sample_FASTA.csv');
|
|
11
|
+
testFastaDf = await readDataframe('samples/sample_FASTA.csv');
|
|
12
|
+
// await grok.data.detectSemanticTypes(testFastaDf);
|
|
12
13
|
});
|
|
13
14
|
|
|
15
|
+
after(async () => {
|
|
16
|
+
grok.shell.closeTable(testFastaDf);
|
|
17
|
+
});
|
|
14
18
|
|
|
15
19
|
test('sequenceSpaceOpens', async () => {
|
|
16
20
|
const sequenceSpaceParams = {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {after, before, category, test, expect, expectArray} from '@datagrok-libraries/utils/src/test';
|
|
2
|
+
|
|
3
|
+
import * as grok from 'datagrok-api/grok';
|
|
4
|
+
import * as ui from 'datagrok-api/ui';
|
|
5
|
+
import * as DG from 'datagrok-api/dg';
|
|
6
|
+
import {WebLogo, SplitterFunc} from '@datagrok-libraries/bio/src/viewers/web-logo';
|
|
7
|
+
|
|
8
|
+
category('splitters', () => {
|
|
9
|
+
const helm1 = 'PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$';
|
|
10
|
+
|
|
11
|
+
const helm2 = 'PEPTIDE1{meI.hHis.Hcy.Q.T.W.Q.Phe_4NH2.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.N.meK}$$$';
|
|
12
|
+
|
|
13
|
+
const data: { [key: string]: [string, string[]] } = {
|
|
14
|
+
helm1: [
|
|
15
|
+
'PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$',
|
|
16
|
+
['meI', 'hHis', 'Aca', 'N', 'T', 'dE', 'Thr_PO3H2', 'Aca', 'D-Tyr_Et',
|
|
17
|
+
'Tyr_ab-dehydroMe', 'dV', 'E', 'N', 'D-Orn', 'D-aThr', 'Phe_4Me']
|
|
18
|
+
],
|
|
19
|
+
helm2: [
|
|
20
|
+
'PEPTIDE1{meI.hHis.Aca.N.T.dK.Thr_PO3H2.Aca.D-Tyr_Et.D-Dap.dV.E.N.pnG.Phe_4Me}$$$',
|
|
21
|
+
['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'Aca',
|
|
22
|
+
'D-Tyr_Et', 'D-Dap', 'dV', 'E', 'N', 'pnG', 'Phe_4Me']
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
test('helm1', async () => { await _testHelmSplitter(data.helm1[0], data.helm1[1]); });
|
|
27
|
+
test('helm2', async () => { await _testHelmSplitter(data.helm2[0], data.helm2[1]); });
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export async function _testHelmSplitter(src: string, tgt: string[]) {
|
|
31
|
+
const res: string[] = WebLogo.splitterAsHelm(src);
|
|
32
|
+
console.debug(`Bio: tests: splitters: src=${JSON.stringify(src)}, res=${JSON.stringify(res)} .`);
|
|
33
|
+
expectArray(res, tgt);
|
|
34
|
+
}
|
|
35
|
+
|
|
@@ -68,9 +68,9 @@ function printLeftOrCentered(
|
|
|
68
68
|
g.textAlign = 'start';
|
|
69
69
|
const colorPart = s.substring(0);
|
|
70
70
|
let grayPart = separator;
|
|
71
|
-
if (last)
|
|
71
|
+
if (last)
|
|
72
72
|
grayPart = '';
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
const textSize = g.measureText(colorPart + grayPart);
|
|
75
75
|
const indent = 5;
|
|
76
76
|
|
|
@@ -98,8 +98,11 @@ function printLeftOrCentered(
|
|
|
98
98
|
|
|
99
99
|
export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
|
|
100
100
|
get name(): string { return 'macromoleculeSequence'; }
|
|
101
|
+
|
|
101
102
|
get cellType(): string { return C.SEM_TYPES.Macro_Molecule; }
|
|
103
|
+
|
|
102
104
|
get defaultHeight(): number { return 30; }
|
|
105
|
+
|
|
103
106
|
get defaultWidth(): number { return 230; }
|
|
104
107
|
|
|
105
108
|
/**
|
|
@@ -166,10 +169,10 @@ export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
|
|
|
166
169
|
color = palette.get(amino);
|
|
167
170
|
g.fillStyle = undefinedColor;
|
|
168
171
|
let last = false;
|
|
169
|
-
if (index === subParts.length - 1)
|
|
172
|
+
if (index === subParts.length - 1)
|
|
170
173
|
last = true;
|
|
171
|
-
|
|
172
|
-
x1 = printLeftOrCentered(x1, y, w, h, g, amino, color, 0, true, 1.0,
|
|
174
|
+
|
|
175
|
+
x1 = printLeftOrCentered(x1, y, w, h, g, amino, color, 0, true, 1.0, separator, last);
|
|
173
176
|
});
|
|
174
177
|
|
|
175
178
|
g.restore();
|
package/src/utils/convert.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
|
-
import {NotationConverter, NOTATION} from '
|
|
3
|
+
import {NotationConverter, NOTATION} from '@datagrok-libraries/bio/src/utils/notation-converter';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Converts notations of a Macromolecule column
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit
|
|
1
|
+
<html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit 303cfb72.</title><style type="text/css">html,
|
|
2
2
|
body {
|
|
3
3
|
font-family: Arial, Helvetica, sans-serif;
|
|
4
4
|
font-size: 1rem;
|
|
@@ -229,7 +229,7 @@ header {
|
|
|
229
229
|
font-size: 1rem;
|
|
230
230
|
padding: 0 0.5rem;
|
|
231
231
|
}
|
|
232
|
-
</style></head><body><div id="jesthtml-content"><header><h1 id="title">Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit
|
|
232
|
+
</style></head><body><div id="jesthtml-content"><header><h1 id="title">Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit 303cfb72.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-07-13 14:53:02</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><div class="suite-info"><div class="suite-path">/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts</div><div class="suite-time warn">110.084s</div></div><div class="suite-tests"><div class="test-result failed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">failed</div><div class="test-duration">100.002s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: thrown: "Exceeded timeout of 100000 ms for a test.
|
|
233
233
|
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."
|
|
234
234
|
at Object.<anonymous> (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:22:1)
|
|
235
235
|
at Runtime._execModule (/home/runner/work/public/public/packages/Bio/node_modules/jest-runtime/build/index.js:1646:24)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {after, before, category, test, expect, expectObject} from '@datagrok-libraries/utils/src/test';
|
|
2
|
-
|
|
3
|
-
import * as grok from 'datagrok-api/grok';
|
|
4
|
-
import * as ui from 'datagrok-api/ui';
|
|
5
|
-
import * as DG from 'datagrok-api/dg';
|
|
6
|
-
import {WebLogo, SplitterFunc} from '@datagrok-libraries/bio/src/viewers/web-logo';
|
|
7
|
-
|
|
8
|
-
category('splitter', () => {
|
|
9
|
-
const helm1 = 'PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$';
|
|
10
|
-
const helm2 = 'PEPTIDE1{meI.hHis.Hcy.Q.T.W.Q.Phe_4NH2.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.N.meK}$$$';
|
|
11
|
-
|
|
12
|
-
test('helm1', async () => { await _testHelmSplitter(helm1); });
|
|
13
|
-
test('helm2', async () => { await _testHelmSplitter(helm2); });
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
export async function _testHelmSplitter(txt: string) {
|
|
17
|
-
// const splitter: SplitterFunc = WebLogo.getSplitterAsHelm();
|
|
18
|
-
//
|
|
19
|
-
// const mList: string[] = splitter(txt);
|
|
20
|
-
// expect(mList.length, 12);
|
|
21
|
-
}
|
|
22
|
-
|