@datagrok/sequence-translator 1.0.7 → 1.0.8
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/dist/package-test.js +135 -43
- package/dist/package.js +96 -62
- package/package.json +2 -2
- package/src/autostart/registration.ts +56 -21
- package/src/structures-works/mol-transformations.ts +1 -1
- package/{test-SequenceTranslator-4ba776b36f56-5798c6fc.html → test-SequenceTranslator-7770371320b2-ca4b554d.html} +17 -7
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datagrok/sequence-translator",
|
|
3
3
|
"friendlyName": "Sequence Translator",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.8",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Vadym Kovadlo",
|
|
7
7
|
"email": "vkovadlo@datagrok.ai"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"directory": "packages/SequenceTranslator"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@datagrok-libraries/utils": "^
|
|
16
|
+
"@datagrok-libraries/utils": "^1.9.2",
|
|
17
17
|
"@types/react": "^18.0.15",
|
|
18
18
|
"datagrok-api": "^1.6.0",
|
|
19
19
|
"datagrok-tools": "^4.1.2",
|
|
@@ -22,6 +22,26 @@ function stringify(items: string[]): string {
|
|
|
22
22
|
return '["' + items.join('", "') + '"]';
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
function saltMass(saltNames: string[], molWeightCol: DG.Column, equivalentsCol: DG.Column, i: number,
|
|
26
|
+
saltCol: DG.Column) {
|
|
27
|
+
const saltRowIndex = saltNames.indexOf(saltCol.get(i));
|
|
28
|
+
return (
|
|
29
|
+
saltRowIndex == -1 || molWeightCol.get(saltRowIndex) == DG.FLOAT_NULL || equivalentsCol.get(i) == DG.INT_NULL) ?
|
|
30
|
+
DG.FLOAT_NULL :
|
|
31
|
+
molWeightCol.get(saltRowIndex) * equivalentsCol.get(i);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function saltMolWeigth(saltNamesList: string[], saltCol: DG.Column, molWeightCol: DG.Column, i: number) {
|
|
35
|
+
const saltRowIndex = saltNamesList.indexOf(saltCol.get(i));
|
|
36
|
+
return (saltRowIndex == -1) ? DG.FLOAT_NULL : molWeightCol.get(saltRowIndex);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function batchMolWeight(compoundMolWeightCol: DG.Column, saltMassCol: DG.Column, i: number) {
|
|
40
|
+
return (compoundMolWeightCol.getString(i) == '' || saltMassCol.getString(i) == '') ?
|
|
41
|
+
DG.FLOAT_NULL :
|
|
42
|
+
compoundMolWeightCol.get(i) + saltMassCol.get(i);
|
|
43
|
+
}
|
|
44
|
+
|
|
25
45
|
function molecularWeight(sequence: string, weightsObj: {[index: string]: number}): number {
|
|
26
46
|
const codes = sortByStringLengthInDescendingOrder(Object.keys(weightsObj)).concat(Object.keys(MODIFICATIONS));
|
|
27
47
|
let weight = 0;
|
|
@@ -117,14 +137,18 @@ export function oligoSdFile(table: DG.DataFrame) {
|
|
|
117
137
|
const icdsDf = DG.DataFrame.fromCsv(ICDS);
|
|
118
138
|
const idpsDf = DG.DataFrame.fromCsv(IDPS);
|
|
119
139
|
|
|
120
|
-
|
|
140
|
+
const sequenceCol = table.getCol(COL_NAMES.SEQUENCE);
|
|
141
|
+
const saltCol = table.getCol(COL_NAMES.SALT);
|
|
142
|
+
const equivalentsCol = table.getCol(COL_NAMES.EQUIVALENTS);
|
|
143
|
+
const typeColumn = table.getCol(COL_NAMES.TYPE);
|
|
144
|
+
|
|
145
|
+
const molWeightCol = saltsDf.getCol('MOLWEIGHT');
|
|
146
|
+
const saltNamesList = saltsDf.getCol('DISPLAY').toList();
|
|
147
|
+
|
|
148
|
+
function addColumns(t: DG.DataFrame) {
|
|
121
149
|
if (t.columns.contains(COL_NAMES.COMPOUND_NAME))
|
|
122
150
|
return grok.shell.error('Columns already exist');
|
|
123
151
|
|
|
124
|
-
const sequenceCol = t.getCol(COL_NAMES.SEQUENCE);
|
|
125
|
-
const saltCol = t.getCol(COL_NAMES.SALT);
|
|
126
|
-
const equivalentsCol = t.getCol(COL_NAMES.EQUIVALENTS);
|
|
127
|
-
|
|
128
152
|
for (let i = t.rowCount - 1; i > -1; i--) {
|
|
129
153
|
if (sequenceCol.get(i) == '')
|
|
130
154
|
t.rows.removeAt(i, 1, false);
|
|
@@ -132,12 +156,11 @@ export function oligoSdFile(table: DG.DataFrame) {
|
|
|
132
156
|
|
|
133
157
|
t.columns.addNewString(COL_NAMES.COMPOUND_NAME).init((i: number) => sequenceCol.get(i));
|
|
134
158
|
|
|
135
|
-
t.columns.addNewString(COL_NAMES.COMPOUND_COMMENTS).init((i: number) => (i >
|
|
159
|
+
t.columns.addNewString(COL_NAMES.COMPOUND_COMMENTS).init((i: number) => (i > 2 && typeColumn.get(i) == 'Duplex') ?
|
|
136
160
|
sequenceCol.get(i) + '; duplex of SS: ' + sequenceCol.get(i - 2) + ' and AS: ' + sequenceCol.get(i - 1) :
|
|
137
161
|
sequenceCol.get(i),
|
|
138
162
|
);
|
|
139
|
-
|
|
140
|
-
const saltNamesList = saltsDf.getCol('DISPLAY').toList();
|
|
163
|
+
|
|
141
164
|
const weightsObj: {[code: string]: number} = {};
|
|
142
165
|
for (const synthesizer of Object.keys(map)) {
|
|
143
166
|
for (const technology of Object.keys(map[synthesizer])) {
|
|
@@ -154,19 +177,14 @@ export function oligoSdFile(table: DG.DataFrame) {
|
|
|
154
177
|
DG.FLOAT_NULL;
|
|
155
178
|
});
|
|
156
179
|
|
|
157
|
-
t.columns.addNewFloat(COL_NAMES.SALT_MASS).init((i: number) =>
|
|
158
|
-
|
|
159
|
-
return (saltRowIndex == -1) ? DG.FLOAT_NULL : molWeightCol.get(saltRowIndex) * equivalentsCol.get(i);
|
|
160
|
-
});
|
|
180
|
+
t.columns.addNewFloat(COL_NAMES.SALT_MASS).init((i: number) =>
|
|
181
|
+
saltMass(saltNamesList, molWeightCol, equivalentsCol, i, saltCol));
|
|
161
182
|
|
|
162
|
-
t.columns.addNewFloat(COL_NAMES.SALT_MOL_WEIGHT).init((i: number) =>
|
|
163
|
-
|
|
164
|
-
return (saltRowIndex == -1) ? DG.FLOAT_NULL : molWeightCol.get(saltRowIndex);
|
|
165
|
-
});
|
|
183
|
+
t.columns.addNewFloat(COL_NAMES.SALT_MOL_WEIGHT).init((i: number) =>
|
|
184
|
+
saltMolWeigth(saltNamesList, saltCol, molWeightCol, i));
|
|
166
185
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
);
|
|
186
|
+
t.columns.addNewFloat(COL_NAMES.BATCH_MW).init((i: number) =>
|
|
187
|
+
batchMolWeight(t.getCol(COL_NAMES.CPD_MW), t.getCol(COL_NAMES.SALT_MASS), i));
|
|
170
188
|
|
|
171
189
|
addColumnsPressed = true;
|
|
172
190
|
return newDf = t;
|
|
@@ -181,8 +199,8 @@ export function oligoSdFile(table: DG.DataFrame) {
|
|
|
181
199
|
if (table.getCol(COL_NAMES.IDP).type != DG.COLUMN_TYPE.STRING)
|
|
182
200
|
table.changeColumnType(COL_NAMES.IDP, DG.COLUMN_TYPE.STRING);
|
|
183
201
|
d.append(
|
|
184
|
-
ui.link('Add Columns',
|
|
185
|
-
|
|
202
|
+
ui.link('Add Columns', () => {
|
|
203
|
+
addColumns(table);
|
|
186
204
|
view.grid.columns.setOrder(Object.values(COL_NAMES));
|
|
187
205
|
}, 'Add columns: \'' + [COL_NAMES.COMPOUND_NAME, COL_NAMES.COMPOUND_COMMENTS, COL_NAMES.CPD_MW,
|
|
188
206
|
COL_NAMES.SALT_MASS, COL_NAMES.BATCH_MW].join('\', \''), '',
|
|
@@ -205,9 +223,26 @@ export function oligoSdFile(table: DG.DataFrame) {
|
|
|
205
223
|
args.args.menu.item('Fill Column With Value', () => {
|
|
206
224
|
const v = args.args.context.table.currentCell.value;
|
|
207
225
|
args.args.context.table.currentCell.column.init(v);
|
|
226
|
+
for (let i = 0; i < view.dataFrame.rowCount; i++)
|
|
227
|
+
updateCalculatedColumns(view.dataFrame, i);
|
|
208
228
|
});
|
|
209
229
|
}
|
|
210
230
|
});
|
|
231
|
+
|
|
232
|
+
view.dataFrame.onDataChanged.subscribe(() => {
|
|
233
|
+
const colName = view.dataFrame.currentCol.name;
|
|
234
|
+
if ([COL_NAMES.SALT, COL_NAMES.EQUIVALENTS, COL_NAMES.SALT_MOL_WEIGHT].includes(colName))
|
|
235
|
+
updateCalculatedColumns(view.dataFrame, view.dataFrame.currentRowIdx);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
function updateCalculatedColumns(t: DG.DataFrame, i: number): void {
|
|
239
|
+
const smValue = saltMass(saltNamesList, molWeightCol, equivalentsCol, i, saltCol);
|
|
240
|
+
t.getCol(COL_NAMES.SALT_MASS).set(i, smValue, false);
|
|
241
|
+
const smwValue = saltMolWeigth(saltNamesList, saltCol, molWeightCol, i);
|
|
242
|
+
t.getCol(COL_NAMES.SALT_MOL_WEIGHT).set(i, smwValue, false);
|
|
243
|
+
const bmw = batchMolWeight(t.getCol(COL_NAMES.CPD_MW), t.getCol(COL_NAMES.SALT_MASS), i);
|
|
244
|
+
t.getCol(COL_NAMES.BATCH_MW).set(i, bmw, false);
|
|
245
|
+
}
|
|
211
246
|
}),
|
|
212
247
|
]);
|
|
213
248
|
grok.shell.v.setRibbonPanels([[d]]);
|
|
@@ -56,7 +56,7 @@ M V30 BEGIN ATOM
|
|
|
56
56
|
M V30 1 O 1.0934 -2.1636 0 0
|
|
57
57
|
M V30 2 C 1.8365 -1.4945 0 0 CFG=2
|
|
58
58
|
M V30 3 C 2.8147 -1.7024 0 0
|
|
59
|
-
M V30 4 C 3.3147 -0.8364 0 0
|
|
59
|
+
M V30 4 C 3.3147 -0.8364 0 0
|
|
60
60
|
M V30 5 O 2.6455 -0.0932 0 0
|
|
61
61
|
M V30 6 C 1.732 -0.5 0 0 CFG=1
|
|
62
62
|
M V30 7 C 0.866 0 0 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<html><head><meta charset="utf-8"/><title>SequenceTranslator Test Report. Datagrok version datagrok/datagrok:latest SHA=
|
|
1
|
+
<html><head><meta charset="utf-8"/><title>SequenceTranslator Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit ca4b554d.</title><style type="text/css">html,
|
|
2
2
|
body {
|
|
3
3
|
font-family: Arial, Helvetica, sans-serif;
|
|
4
4
|
font-size: 1rem;
|
|
@@ -229,11 +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">SequenceTranslator Test Report. Datagrok version datagrok/datagrok:latest SHA=
|
|
233
|
-
at __puppeteer_evaluation_script__:14:72
|
|
234
|
-
at ExecutionContext._evaluateInternal (/home/runner/work/public/public/packages/SequenceTranslator/node_modules/puppeteer/src/common/ExecutionContext.ts:273:13)
|
|
235
|
-
at processTicksAndRejections (internal/process/task_queues.js:97:5)
|
|
236
|
-
at ExecutionContext.evaluate (/home/runner/work/public/public/packages/SequenceTranslator/node_modules/puppeteer/src/common/ExecutionContext.ts:140:12)</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/SequenceTranslator/src/__jest__/test-node.ts:62:11)
|
|
232
|
+
</style></head><body><div id="jesthtml-content"><header><h1 id="title">SequenceTranslator Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit ca4b554d.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-09-27 11:43:44</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 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">1 passed</div><div class="summary-failed summary-empty">0 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/SequenceTranslator/src/__jest__/remote.test.ts</div><div class="suite-time warn">23.627s</div></div><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">passed</div><div class="test-duration">3.851s</div></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/SequenceTranslator/src/__jest__/test-node.ts:62:11)
|
|
237
233
|
at Generator.next (<anonymous>)
|
|
238
234
|
at fulfilled (/home/runner/work/public/public/packages/SequenceTranslator/src/__jest__/test-node.ts:28:58)
|
|
239
235
|
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/SequenceTranslator/src/__jest__/remote.test.ts:40:11
|
|
@@ -243,4 +239,18 @@ header {
|
|
|
243
239
|
at Object.<anonymous>.__awaiter (/home/runner/work/public/public/packages/SequenceTranslator/src/__jest__/remote.test.ts:27:12)
|
|
244
240
|
at Object.<anonymous> (/home/runner/work/public/public/packages/SequenceTranslator/src/__jest__/remote.test.ts:38:23)
|
|
245
241
|
at Promise.then.completed (/home/runner/work/public/public/packages/SequenceTranslator/node_modules/jest-circus/build/utils.js:391:28)
|
|
246
|
-
at new Promise (<anonymous>)</pre><pre class="suite-consolelog-item-message">Testing SequenceTranslator package</pre></div
|
|
242
|
+
at new Promise (<anonymous>)</pre><pre class="suite-consolelog-item-message">Testing SequenceTranslator package</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/SequenceTranslator/src/__jest__/remote.test.ts:66:11
|
|
243
|
+
at Generator.next (<anonymous>)
|
|
244
|
+
at fulfilled (/home/runner/work/public/public/packages/SequenceTranslator/src/__jest__/remote.test.ts:28:58)
|
|
245
|
+
at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 1 : SequenceTranslator.sequence-translator.usCfCfUfGfAf : OK
|
|
246
|
+
Test result : Success : 1 : SequenceTranslator.sequence-translator.usAfsusgsgsg : OK
|
|
247
|
+
Test result : Success : 1 : SequenceTranslator.sequence-translator.UfUfUfsCfsuacg : OK
|
|
248
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.susususauasu : OK
|
|
249
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.CfGfCfsGfsCf : OK
|
|
250
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.acacacsacsac : OK
|
|
251
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.cccgggusug : OK
|
|
252
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.UfAfCfGfGfCfAfUf : OK
|
|
253
|
+
Test result : Success : 1 : SequenceTranslator.sequence-translator.(invabasic)cuCfuUfsc : OK
|
|
254
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.(invabasic)usAfsucuCfuUfAfgcugUfgCfacususu : OK
|
|
255
|
+
Test result : Success : 0 : SequenceTranslator.sequence-translator.(invabasic)asacgGfuGfCfAfacucuauuca : OK
|
|
256
|
+
</pre></div></div></div></div></body></html>
|