@datagrok/peptides 0.8.9 → 0.8.13
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/.eslintrc.json +2 -1
- package/dist/package-test.js +22626 -0
- package/dist/package.js +21429 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_workers_dimensionality-reducer_js.js +8840 -0
- package/jest.config.js +33 -0
- package/package.json +75 -62
- package/src/__jest__/remote.test.ts +50 -0
- package/src/__jest__/test-node.ts +96 -0
- package/src/model.ts +950 -86
- package/src/monomer-library.ts +8 -0
- package/src/package-test.ts +3 -2
- package/src/package.ts +57 -22
- package/src/peptides.ts +165 -119
- package/src/styles.css +8 -0
- package/src/tests/peptides-tests.ts +17 -78
- package/src/tests/utils.ts +1 -7
- package/src/utils/SAR-multiple-filter.ts +439 -0
- package/src/utils/SAR-multiple-selection.ts +177 -0
- package/src/utils/cell-renderer.ts +49 -50
- package/src/utils/chem-palette.ts +61 -163
- package/src/utils/constants.ts +56 -0
- package/src/utils/filtering-statistics.ts +62 -0
- package/src/utils/multiple-sequence-alignment.ts +33 -2
- package/src/utils/multivariate-analysis.ts +79 -0
- package/src/utils/peptide-similarity-space.ts +12 -31
- package/src/utils/types.ts +10 -0
- package/src/viewers/logo-viewer.ts +2 -1
- package/src/viewers/peptide-space-viewer.ts +121 -0
- package/src/viewers/sar-viewer.ts +111 -313
- package/src/viewers/stacked-barchart-viewer.ts +126 -173
- package/src/widgets/analyze-peptides.ts +39 -18
- package/src/widgets/distribution.ts +61 -0
- package/src/widgets/manual-alignment.ts +3 -3
- package/src/widgets/peptide-molecule.ts +4 -4
- package/src/widgets/subst-table.ts +30 -22
- package/test-Peptides-f8114def7953-4bf59d70.html +256 -0
- package/src/describe.ts +0 -534
- package/src/utils/split-aligned.ts +0 -72
- package/src/viewers/subst-viewer.ts +0 -320
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
import * as ui from 'datagrok-api/ui';
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
import { PeptidesController } from '../peptides';
|
|
3
4
|
|
|
4
|
-
export function
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
export async function substitutionsWidget(table: DG.DataFrame): Promise<DG.Widget> {
|
|
6
|
+
const controller = await PeptidesController.getInstance(table);
|
|
7
|
+
controller.init(table);
|
|
8
|
+
const substTable = controller.getSubstitutions();
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
if (!substTable)
|
|
11
|
+
return new DG.Widget(ui.label('No substitution table generated'));
|
|
12
|
+
|
|
13
|
+
const dfRowCount = substTable.rowCount;
|
|
9
14
|
const aminoInputFrom = ui.stringInput('from', '');
|
|
10
15
|
const aminoInputTo = ui.stringInput('to', '');
|
|
11
16
|
const fromToMap: {[key: string]: DG.BitSet} = {};
|
|
12
17
|
let aminoFrom = '';
|
|
13
18
|
let aminoTo = '';
|
|
14
|
-
const initialCol: DG.Column =
|
|
15
|
-
const substitutedCol: DG.Column =
|
|
16
|
-
|
|
17
|
-
// for (let i = 0; i < initialCol.length; ++i) {
|
|
18
|
-
// const initialPeptide: string = initialCol.get(i);
|
|
19
|
-
// const substPeptide: string = substitutedCol.get(i);
|
|
20
|
-
|
|
21
|
-
// initialCol.set(i, initialPeptide + '#' + substPeptide);
|
|
22
|
-
// }
|
|
19
|
+
const initialCol: DG.Column = substTable.getCol('Initial');
|
|
20
|
+
const substitutedCol: DG.Column = substTable.getCol('Substituted');
|
|
23
21
|
|
|
24
22
|
initialCol.semType = 'alignedSequenceDifference';
|
|
25
23
|
initialCol.name = 'Substitution';
|
|
26
|
-
|
|
24
|
+
// substTable.columns.remove('Substituted');
|
|
27
25
|
// const substCol = table.getCol('Substitution');
|
|
28
26
|
|
|
29
27
|
for (let i = 0; i < dfRowCount; ++i) {
|
|
@@ -35,7 +33,7 @@ export function substTableWidget(table: DG.DataFrame): DG.Widget {
|
|
|
35
33
|
|
|
36
34
|
for (let j = 0; j < aminosFrom.length; ++j) {
|
|
37
35
|
if (aminosFrom[j] != aminosTo[j]) {
|
|
38
|
-
const idx = (aminosFrom[j]
|
|
36
|
+
const idx = `${getAmino(aminosFrom[j])}#${getAmino(aminosTo[j])}`;
|
|
39
37
|
|
|
40
38
|
if (!(idx in fromToMap))
|
|
41
39
|
fromToMap[idx] = DG.BitSet.create(dfRowCount);
|
|
@@ -44,22 +42,32 @@ export function substTableWidget(table: DG.DataFrame): DG.Widget {
|
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
44
|
|
|
45
|
+
for (let i = 0; i < initialCol.length; ++i) {
|
|
46
|
+
const sequenceDifference = `${initialCol.get(i)}#${substitutedCol.get(i)}`;
|
|
47
|
+
initialCol.set(i, sequenceDifference);
|
|
48
|
+
}
|
|
49
|
+
|
|
47
50
|
aminoInputFrom.onInput(() => {
|
|
48
|
-
aminoFrom = aminoInputFrom.value;
|
|
49
|
-
const fromKey = aminoFrom
|
|
51
|
+
aminoFrom = getAmino(aminoInputFrom.value);
|
|
52
|
+
const fromKey = `${aminoFrom}#${aminoTo}`;
|
|
50
53
|
if (fromKey in fromToMap)
|
|
51
|
-
|
|
54
|
+
substTable.selection.copyFrom(fromToMap[fromKey]);
|
|
52
55
|
});
|
|
53
56
|
|
|
54
57
|
aminoInputTo.onInput(() => {
|
|
55
|
-
aminoTo = aminoInputTo.value;
|
|
56
|
-
const toKey = aminoFrom
|
|
58
|
+
aminoTo = getAmino(aminoInputTo.value);
|
|
59
|
+
const toKey = `${aminoFrom}#${aminoTo}`;
|
|
57
60
|
if (toKey in fromToMap)
|
|
58
|
-
|
|
61
|
+
substTable.selection.copyFrom(fromToMap[toKey]);
|
|
59
62
|
});
|
|
60
63
|
|
|
61
|
-
const grid =
|
|
64
|
+
const grid = substTable.plot.grid();
|
|
62
65
|
grid.props.allowEdit = false;
|
|
63
66
|
grid.root.style.width = 'auto';
|
|
67
|
+
grid.root.style.height = '150px';
|
|
64
68
|
return new DG.Widget(ui.divV([aminoInputFrom.root, aminoInputTo.root, grid.root]));
|
|
65
69
|
}
|
|
70
|
+
|
|
71
|
+
function getAmino(amino: string): string {
|
|
72
|
+
return amino === '' ? '-' : amino;
|
|
73
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
<html><head><meta charset="utf-8"/><title>Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=f8114def7953. Commit 4bf59d70.</title><style type="text/css">html,
|
|
2
|
+
body {
|
|
3
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
4
|
+
font-size: 1rem;
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
color: #333;
|
|
8
|
+
}
|
|
9
|
+
body {
|
|
10
|
+
padding: 2rem 1rem;
|
|
11
|
+
font-size: 0.85rem;
|
|
12
|
+
}
|
|
13
|
+
#jesthtml-content {
|
|
14
|
+
margin: 0 auto;
|
|
15
|
+
max-width: 70rem;
|
|
16
|
+
}
|
|
17
|
+
header {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
}
|
|
21
|
+
#title {
|
|
22
|
+
margin: 0;
|
|
23
|
+
flex-grow: 1;
|
|
24
|
+
}
|
|
25
|
+
#logo {
|
|
26
|
+
height: 4rem;
|
|
27
|
+
}
|
|
28
|
+
#timestamp {
|
|
29
|
+
color: #777;
|
|
30
|
+
margin-top: 0.5rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** SUMMARY */
|
|
34
|
+
#summary {
|
|
35
|
+
color: #333;
|
|
36
|
+
margin: 2rem 0;
|
|
37
|
+
display: flex;
|
|
38
|
+
font-family: monospace;
|
|
39
|
+
font-size: 1rem;
|
|
40
|
+
}
|
|
41
|
+
#summary > div {
|
|
42
|
+
margin-right: 2rem;
|
|
43
|
+
background: #eee;
|
|
44
|
+
padding: 1rem;
|
|
45
|
+
min-width: 15rem;
|
|
46
|
+
}
|
|
47
|
+
#summary > div:last-child {
|
|
48
|
+
margin-right: 0;
|
|
49
|
+
}
|
|
50
|
+
@media only screen and (max-width: 720px) {
|
|
51
|
+
#summary {
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
}
|
|
54
|
+
#summary > div {
|
|
55
|
+
margin-right: 0;
|
|
56
|
+
margin-top: 2rem;
|
|
57
|
+
}
|
|
58
|
+
#summary > div:first-child {
|
|
59
|
+
margin-top: 0;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.summary-total {
|
|
64
|
+
font-weight: bold;
|
|
65
|
+
margin-bottom: 0.5rem;
|
|
66
|
+
}
|
|
67
|
+
.summary-passed {
|
|
68
|
+
color: #4f8a10;
|
|
69
|
+
border-left: 0.4rem solid #4f8a10;
|
|
70
|
+
padding-left: 0.5rem;
|
|
71
|
+
}
|
|
72
|
+
.summary-failed,
|
|
73
|
+
.summary-obsolete-snapshots {
|
|
74
|
+
color: #d8000c;
|
|
75
|
+
border-left: 0.4rem solid #d8000c;
|
|
76
|
+
padding-left: 0.5rem;
|
|
77
|
+
}
|
|
78
|
+
.summary-pending {
|
|
79
|
+
color: #9f6000;
|
|
80
|
+
border-left: 0.4rem solid #9f6000;
|
|
81
|
+
padding-left: 0.5rem;
|
|
82
|
+
}
|
|
83
|
+
.summary-empty {
|
|
84
|
+
color: #999;
|
|
85
|
+
border-left: 0.4rem solid #999;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.test-result {
|
|
89
|
+
padding: 1rem;
|
|
90
|
+
margin-bottom: 0.25rem;
|
|
91
|
+
}
|
|
92
|
+
.test-result:last-child {
|
|
93
|
+
border: 0;
|
|
94
|
+
}
|
|
95
|
+
.test-result.passed {
|
|
96
|
+
background-color: #dff2bf;
|
|
97
|
+
color: #4f8a10;
|
|
98
|
+
}
|
|
99
|
+
.test-result.failed {
|
|
100
|
+
background-color: #ffbaba;
|
|
101
|
+
color: #d8000c;
|
|
102
|
+
}
|
|
103
|
+
.test-result.pending {
|
|
104
|
+
background-color: #ffdf61;
|
|
105
|
+
color: #9f6000;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.test-info {
|
|
109
|
+
display: flex;
|
|
110
|
+
justify-content: space-between;
|
|
111
|
+
}
|
|
112
|
+
.test-suitename {
|
|
113
|
+
width: 20%;
|
|
114
|
+
text-align: left;
|
|
115
|
+
font-weight: bold;
|
|
116
|
+
word-break: break-word;
|
|
117
|
+
}
|
|
118
|
+
.test-title {
|
|
119
|
+
width: 40%;
|
|
120
|
+
text-align: left;
|
|
121
|
+
font-style: italic;
|
|
122
|
+
}
|
|
123
|
+
.test-status {
|
|
124
|
+
width: 20%;
|
|
125
|
+
text-align: right;
|
|
126
|
+
}
|
|
127
|
+
.test-duration {
|
|
128
|
+
width: 10%;
|
|
129
|
+
text-align: right;
|
|
130
|
+
font-size: 0.75rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.failureMessages {
|
|
134
|
+
padding: 0 1rem;
|
|
135
|
+
margin-top: 1rem;
|
|
136
|
+
border-top: 1px dashed #d8000c;
|
|
137
|
+
}
|
|
138
|
+
.failureMessages.suiteFailure {
|
|
139
|
+
border-top: none;
|
|
140
|
+
}
|
|
141
|
+
.failureMsg {
|
|
142
|
+
white-space: pre-wrap;
|
|
143
|
+
white-space: -moz-pre-wrap;
|
|
144
|
+
white-space: -pre-wrap;
|
|
145
|
+
white-space: -o-pre-wrap;
|
|
146
|
+
word-wrap: break-word;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.suite-container {
|
|
150
|
+
margin-bottom: 2rem;
|
|
151
|
+
}
|
|
152
|
+
.suite-info {
|
|
153
|
+
padding: 1rem;
|
|
154
|
+
background-color: #eee;
|
|
155
|
+
color: #777;
|
|
156
|
+
display: flex;
|
|
157
|
+
align-items: center;
|
|
158
|
+
margin-bottom: 0.25rem;
|
|
159
|
+
}
|
|
160
|
+
.suite-info .suite-path {
|
|
161
|
+
word-break: break-all;
|
|
162
|
+
flex-grow: 1;
|
|
163
|
+
font-family: monospace;
|
|
164
|
+
font-size: 1rem;
|
|
165
|
+
}
|
|
166
|
+
.suite-info .suite-time {
|
|
167
|
+
margin-left: 0.5rem;
|
|
168
|
+
padding: 0.2rem 0.3rem;
|
|
169
|
+
font-size: 0.75rem;
|
|
170
|
+
}
|
|
171
|
+
.suite-info .suite-time.warn {
|
|
172
|
+
background-color: #d8000c;
|
|
173
|
+
color: #fff;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* CONSOLE LOGS */
|
|
177
|
+
.suite-consolelog {
|
|
178
|
+
margin-bottom: 0.25rem;
|
|
179
|
+
padding: 1rem;
|
|
180
|
+
background-color: #efefef;
|
|
181
|
+
}
|
|
182
|
+
.suite-consolelog-header {
|
|
183
|
+
font-weight: bold;
|
|
184
|
+
}
|
|
185
|
+
.suite-consolelog-item {
|
|
186
|
+
padding: 0.5rem;
|
|
187
|
+
}
|
|
188
|
+
.suite-consolelog-item pre {
|
|
189
|
+
margin: 0.5rem 0;
|
|
190
|
+
white-space: pre-wrap;
|
|
191
|
+
white-space: -moz-pre-wrap;
|
|
192
|
+
white-space: -pre-wrap;
|
|
193
|
+
white-space: -o-pre-wrap;
|
|
194
|
+
word-wrap: break-word;
|
|
195
|
+
}
|
|
196
|
+
.suite-consolelog-item-origin {
|
|
197
|
+
color: #777;
|
|
198
|
+
font-weight: bold;
|
|
199
|
+
}
|
|
200
|
+
.suite-consolelog-item-message {
|
|
201
|
+
color: #000;
|
|
202
|
+
font-size: 1rem;
|
|
203
|
+
padding: 0 0.5rem;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* OBSOLETE SNAPSHOTS */
|
|
207
|
+
.suite-obsolete-snapshots {
|
|
208
|
+
margin-bottom: 0.25rem;
|
|
209
|
+
padding: 1rem;
|
|
210
|
+
background-color: #ffbaba;
|
|
211
|
+
color: #d8000c;
|
|
212
|
+
}
|
|
213
|
+
.suite-obsolete-snapshots-header {
|
|
214
|
+
font-weight: bold;
|
|
215
|
+
}
|
|
216
|
+
.suite-obsolete-snapshots-item {
|
|
217
|
+
padding: 0.5rem;
|
|
218
|
+
}
|
|
219
|
+
.suite-obsolete-snapshots-item pre {
|
|
220
|
+
margin: 0.5rem 0;
|
|
221
|
+
white-space: pre-wrap;
|
|
222
|
+
white-space: -moz-pre-wrap;
|
|
223
|
+
white-space: -pre-wrap;
|
|
224
|
+
white-space: -o-pre-wrap;
|
|
225
|
+
word-wrap: break-word;
|
|
226
|
+
}
|
|
227
|
+
.suite-obsolete-snapshots-item-message {
|
|
228
|
+
color: #000;
|
|
229
|
+
font-size: 1rem;
|
|
230
|
+
padding: 0 0.5rem;
|
|
231
|
+
}
|
|
232
|
+
</style></head><body><div id="jesthtml-content"><header><h1 id="title">Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=f8114def7953. Commit 4bf59d70.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-05-08 20:15:31</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/Peptides/src/__jest__/remote.test.ts</div><div class="suite-time warn">117.567s</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.001s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: thrown: "Exceeded timeout of 100000 ms for a test.
|
|
233
|
+
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."
|
|
234
|
+
at Object.<anonymous> (/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:22:1)
|
|
235
|
+
at Runtime._execModule (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runtime/build/index.js:1646:24)
|
|
236
|
+
at Runtime._loadModule (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runtime/build/index.js:1185:12)
|
|
237
|
+
at Runtime.requireModule (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runtime/build/index.js:1009:12)
|
|
238
|
+
at jestAdapter (/home/runner/work/public/public/packages/Peptides/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
|
|
239
|
+
at runTestInternal (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runner/build/runTest.js:389:16)
|
|
240
|
+
at runTest (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runner/build/runTest.js:475:34)
|
|
241
|
+
at TestRunner.runTests (/home/runner/work/public/public/packages/Peptides/node_modules/jest-runner/build/index.js:101:12)
|
|
242
|
+
at TestScheduler.scheduleTests (/home/runner/work/public/public/packages/Peptides/node_modules/@jest/core/build/TestScheduler.js:333:13)
|
|
243
|
+
at runJest (/home/runner/work/public/public/packages/Peptides/node_modules/@jest/core/build/runJest.js:404:19)
|
|
244
|
+
at _run10000 (/home/runner/work/public/public/packages/Peptides/node_modules/@jest/core/build/cli/index.js:320:7)
|
|
245
|
+
at runCLI (/home/runner/work/public/public/packages/Peptides/node_modules/@jest/core/build/cli/index.js:173:3)
|
|
246
|
+
at Object.run (/home/runner/work/public/public/packages/Peptides/node_modules/jest-cli/build/cli/index.js:155:37)</pre></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.<anonymous> (/home/runner/work/public/public/packages/Peptides/src/__jest__/test-node.ts:62:11)
|
|
247
|
+
at Generator.next (<anonymous>)
|
|
248
|
+
at fulfilled (/home/runner/work/public/public/packages/Peptides/src/__jest__/test-node.ts:24:58)
|
|
249
|
+
at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Using web root: http://localhost:8080</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:24:11
|
|
250
|
+
at Generator.next (<anonymous>)
|
|
251
|
+
at /home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:27:71
|
|
252
|
+
at new Promise (<anonymous>)
|
|
253
|
+
at Object.<anonymous>.__awaiter (/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:23:12)
|
|
254
|
+
at Object.<anonymous> (/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:22:23)
|
|
255
|
+
at Promise.then.completed (/home/runner/work/public/public/packages/Peptides/node_modules/jest-circus/build/utils.js:391:28)
|
|
256
|
+
at new Promise (<anonymous>)</pre><pre class="suite-consolelog-item-message">Testing Peptides package</pre></div></div></div></div></body></html>
|