@datagrok/bio 2.27.8 → 2.27.9
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/CLAUDE.md +77 -12
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/files/demo-files/Antibody_HC.csv +494 -0
- package/files/demo-files/Antibody_HC.layout +516 -0
- package/files/demo-files/Atomic_Level.csv +4030 -0
- package/files/demo-files/SIRNA.csv +66018 -0
- package/files/demo-files/SIRNA.layout +2784 -0
- package/files/demo-files/bio_similarity_diversity.layout +205 -0
- package/package.json +1 -1
- package/projects/bio_demo_activity_cliffs.zip +0 -0
- package/src/demo/bio01-similarity-diversity.ts +10 -0
- package/src/demo/bio01a-hierarchical-clustering-and-sequence-space.ts +0 -1
- package/src/demo/bio01b-hierarchical-clustering-and-activity-cliffs.ts +25 -0
- package/src/demo/bio03-atomic-level.ts +0 -14
- package/src/demo/feature_demos.ts +103 -0
- package/src/package-api.ts +14 -0
- package/src/package.g.ts +16 -0
- package/src/package.ts +28 -8
- package/src/tests/to-atomic-level-tests.ts +494 -200
- package/test-console-output-1.log +509 -596
- package/test-record-1.mp4 +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
{
|
|
2
|
+
"#type": "ViewLayout",
|
|
3
|
+
"viewStateMap": {
|
|
4
|
+
"containerType": "horizontal",
|
|
5
|
+
"state": {
|
|
6
|
+
"width": 1616,
|
|
7
|
+
"height": 833
|
|
8
|
+
},
|
|
9
|
+
"children": [
|
|
10
|
+
{
|
|
11
|
+
"containerType": "fill",
|
|
12
|
+
"state": {
|
|
13
|
+
"width": 812,
|
|
14
|
+
"height": 833,
|
|
15
|
+
"documentManager": true
|
|
16
|
+
},
|
|
17
|
+
"children": [
|
|
18
|
+
{
|
|
19
|
+
"containerType": "panel",
|
|
20
|
+
"state": {
|
|
21
|
+
"width": 812,
|
|
22
|
+
"height": 833,
|
|
23
|
+
"element": {
|
|
24
|
+
"id": "4a541150-48b0-11f1-921a-4b0415f08584",
|
|
25
|
+
"type": "Grid",
|
|
26
|
+
"look": {
|
|
27
|
+
"#type": "GridLook",
|
|
28
|
+
"showAddNewRowIcon": true,
|
|
29
|
+
"addNewRowOnLastRowEdit": true,
|
|
30
|
+
"rowHeight": 30,
|
|
31
|
+
"topLevelDefaultMenu": true,
|
|
32
|
+
"allowColumnMenu": true,
|
|
33
|
+
"columns": [
|
|
34
|
+
{
|
|
35
|
+
"width": 44,
|
|
36
|
+
"backgroundColor": 4294440951,
|
|
37
|
+
"customName": "",
|
|
38
|
+
"cellType": "row header",
|
|
39
|
+
"headerCellStyle": {
|
|
40
|
+
"textWrap": "words"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"width": 230,
|
|
45
|
+
"columnName": "sequence",
|
|
46
|
+
"cellType": "sequence",
|
|
47
|
+
"headerCellStyle": {
|
|
48
|
+
"textWrap": "words"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"width": 155,
|
|
53
|
+
"columnName": "Activity",
|
|
54
|
+
"customFormat": "0.0000000000000000",
|
|
55
|
+
"cellType": "number",
|
|
56
|
+
"format": "0.0000000000000000",
|
|
57
|
+
"headerCellStyle": {
|
|
58
|
+
"textWrap": "words"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"onInitializedScript": "\n setTimeout(async () => {\n const t = grok.shell.table('Table');\n if (!t)\n return;\n await t.meta.detectSemanticTypes();\n const func = DG.Func.find({name: 'hierarchicalClustering'})[0];\n if (!func)\n return;\n const cols = [\"sequence\"];\n func.apply({\n df: t,\n colNameList: cols,\n distance: 'euclidean',\n linkage: 'complete'\n });\n }, 1000)\n "
|
|
63
|
+
},
|
|
64
|
+
"title": "peptides-non-natural",
|
|
65
|
+
"default": true
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"children": []
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"containerType": "vertical",
|
|
74
|
+
"state": {
|
|
75
|
+
"width": 803,
|
|
76
|
+
"height": 833
|
|
77
|
+
},
|
|
78
|
+
"children": [
|
|
79
|
+
{
|
|
80
|
+
"containerType": "panel",
|
|
81
|
+
"state": {
|
|
82
|
+
"width": 803,
|
|
83
|
+
"height": 396,
|
|
84
|
+
"element": {
|
|
85
|
+
"id": "4a543860-48b0-11f1-83c0-f546b6d79614",
|
|
86
|
+
"type": "Sequence Similarity Search",
|
|
87
|
+
"look": {
|
|
88
|
+
"#type": "JsViewerHostLook",
|
|
89
|
+
"limit": 10,
|
|
90
|
+
"targetColumnName": "sequence",
|
|
91
|
+
"distanceMetric": "Hamming",
|
|
92
|
+
"fingerprint": "Morgan",
|
|
93
|
+
"gapOpen": 1,
|
|
94
|
+
"gapExtend": 0.6,
|
|
95
|
+
"cutoff": 0.01,
|
|
96
|
+
"hotSearch": true,
|
|
97
|
+
"similarColumnLabel": null
|
|
98
|
+
},
|
|
99
|
+
"title": "Sequence Similarity Search"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"children": []
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"containerType": "panel",
|
|
106
|
+
"state": {
|
|
107
|
+
"width": 803,
|
|
108
|
+
"height": 436,
|
|
109
|
+
"element": {
|
|
110
|
+
"id": "4a545f70-48b0-11f1-8ba2-6d41f5aaac0d",
|
|
111
|
+
"type": "Sequence Diversity Search",
|
|
112
|
+
"look": {
|
|
113
|
+
"#type": "JsViewerHostLook",
|
|
114
|
+
"limit": 10,
|
|
115
|
+
"targetColumnName": "sequence",
|
|
116
|
+
"distanceMetric": "Hamming",
|
|
117
|
+
"fingerprint": "Morgan",
|
|
118
|
+
"gapOpen": 1,
|
|
119
|
+
"gapExtend": 0.6,
|
|
120
|
+
"diverseColumnLabel": null
|
|
121
|
+
},
|
|
122
|
+
"title": "Sequence Diversity Search"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"children": []
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"floating": [],
|
|
131
|
+
"tableId": "1ac6c220-48b0-11f1-96f8-25bc74a4f3be",
|
|
132
|
+
"tableName": "Table"
|
|
133
|
+
},
|
|
134
|
+
"userData": {
|
|
135
|
+
".columnTags": {
|
|
136
|
+
"sequence": {
|
|
137
|
+
"units": "separator",
|
|
138
|
+
"cell.renderer": "sequence",
|
|
139
|
+
"quality": "Macromolecule"
|
|
140
|
+
},
|
|
141
|
+
"Activity": {
|
|
142
|
+
"format": "0.0000000000000000"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"columns": [
|
|
147
|
+
{
|
|
148
|
+
"name": "sequence",
|
|
149
|
+
"type": "string",
|
|
150
|
+
"semType": "Macromolecule",
|
|
151
|
+
"id": "4a5522c0-48b0-11f1-aa6b-0144c5d96cd0",
|
|
152
|
+
"friendlyName": "Sequence",
|
|
153
|
+
"entityTags": [
|
|
154
|
+
{
|
|
155
|
+
"tag": "units",
|
|
156
|
+
"id": "4a54ad90-48b0-11f1-b76c-7b84e409c4c8"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"tag": "separator",
|
|
160
|
+
"id": "4a54ad90-48b0-11f1-a63d-e750540d4500"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"tag": "aligned",
|
|
164
|
+
"id": "4a54ad90-48b0-11f1-bacb-b7efc320ed4f"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"tag": "alphabet",
|
|
168
|
+
"id": "4a54d4a0-48b0-11f1-e38d-791eed2bbb06"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"tag": ".alphabetIsMultichar",
|
|
172
|
+
"id": "4a54d4a0-48b0-11f1-d005-9b6dd0639b69"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"tag": "cell.renderer",
|
|
176
|
+
"id": "4a54fbb0-48b0-11f1-f185-1736b856a5fd"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"tag": "quality",
|
|
180
|
+
"id": "4a54fbb0-48b0-11f1-9edd-8bfb44ec952c"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"tag": ".semantic-detection-duration",
|
|
184
|
+
"id": "4a54fbb0-48b0-11f1-a122-c1e30be38aa5"
|
|
185
|
+
}
|
|
186
|
+
],
|
|
187
|
+
"metaParams": {
|
|
188
|
+
"units": "separator",
|
|
189
|
+
"separator": "/",
|
|
190
|
+
"aligned": "SEQ.MSA",
|
|
191
|
+
"alphabet": "UN",
|
|
192
|
+
".alphabetIsMultichar": "true",
|
|
193
|
+
"cell.renderer": "sequence",
|
|
194
|
+
"quality": "Macromolecule",
|
|
195
|
+
".semantic-detection-duration": "17"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
"name": "Table",
|
|
200
|
+
"friendlyName": "Table",
|
|
201
|
+
"author": {
|
|
202
|
+
"id": "cb276bc0-6280-11ee-82f7-8dc8dd5df45b"
|
|
203
|
+
},
|
|
204
|
+
"createdOn": "2026-05-10T15:59:56.643Z"
|
|
205
|
+
}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "Davit Rizhinashvili",
|
|
6
6
|
"email": "drizhinashvili@datagrok.ai"
|
|
7
7
|
},
|
|
8
|
-
"version": "2.27.
|
|
8
|
+
"version": "2.27.9",
|
|
9
9
|
"description": "Bioinformatics support (import/export of sequences, conversion, visualization, analysis). [See more](https://github.com/datagrok-ai/public/blob/master/packages/Bio/README.md) for details.",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
Binary file
|
|
@@ -30,6 +30,16 @@ export async function demoBioSimDiv() {
|
|
|
30
30
|
{df: grok.shell.t, colNameList: ['sequence'], distance: 'euclidian', linkage: 'complete'});
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
export async function demoBioSimDivLayout() {
|
|
34
|
+
const t = await _package.files.readCsv('samples/peptides-non-natural.csv');
|
|
35
|
+
const tv = grok.shell.addTableView(t);
|
|
36
|
+
_package.files.readAsText('demo-files/bio_similarity_diversity.layout').then(async (layoutString: string) => {
|
|
37
|
+
const layout = DG.ViewLayout.fromJson(layoutString);
|
|
38
|
+
await DG.delay(100);
|
|
39
|
+
tv.loadLayout(layout);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
33
43
|
export async function demoBio01UISteps() {
|
|
34
44
|
const seqHelper: ISeqHelper = await getSeqHelper();
|
|
35
45
|
|
|
@@ -16,7 +16,6 @@ export async function demoSeqSpace() {
|
|
|
16
16
|
const p = await grok.functions.eval('Bio:SeqSpaceDemo');
|
|
17
17
|
const project = await grok.dapi.projects.find(p.id);
|
|
18
18
|
await project.open();
|
|
19
|
-
grok.shell.windows.help.showHelp('/help/datagrok/solutions/domains/bio/bio.md#sequence-space');
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
export async function demoBio01aUI() {
|
|
@@ -157,3 +157,28 @@ export async function demoActivityCliffsCyclic() {
|
|
|
157
157
|
}
|
|
158
158
|
grok.shell.windows.help.showHelp('/help/datagrok/solutions/domains/bio/bio.md#activity-cliffs');
|
|
159
159
|
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
export async function demoActivityCliffsCyclicLayout(): Promise<void> {
|
|
163
|
+
grok.shell.windows.showContextPanel = true;
|
|
164
|
+
const p = await grok.functions.eval('Bio:BioDemoActivityCliffs');
|
|
165
|
+
const project = await grok.dapi.projects.find(p.id);
|
|
166
|
+
await project.open();
|
|
167
|
+
let scatterPlot: DG.Viewer | null = null;
|
|
168
|
+
for (const i of grok.shell.tv.viewers) {
|
|
169
|
+
if (i.type == DG.VIEWER.SCATTER_PLOT)
|
|
170
|
+
scatterPlot = i;
|
|
171
|
+
}
|
|
172
|
+
let cliffsLink;
|
|
173
|
+
try {
|
|
174
|
+
await awaitCheck(() => {
|
|
175
|
+
const link = scatterPlot?.root.getElementsByClassName('scatter_plot_link');
|
|
176
|
+
if (link?.length) {
|
|
177
|
+
cliffsLink = link[0];
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}, '', 10000);
|
|
182
|
+
(cliffsLink as any as HTMLElement).click();
|
|
183
|
+
} catch (e) {}
|
|
184
|
+
}
|
|
@@ -6,20 +6,6 @@ import {handleError} from './utils';
|
|
|
6
6
|
import {DemoScript} from '@datagrok-libraries/tutorials/src/demo-script';
|
|
7
7
|
import {adjustGridcolAfterRender} from '../utils/ui-utils';
|
|
8
8
|
|
|
9
|
-
export async function demoToAtomicLevel(): Promise<void> {
|
|
10
|
-
const data = await _package.files.readCsv('samples/HELM_BI_CYCLIC.csv');
|
|
11
|
-
data.name = 'To Atomic Level';
|
|
12
|
-
await data.meta.detectSemanticTypes();
|
|
13
|
-
await grok.data.detectSemanticTypes(data);
|
|
14
|
-
const view = grok.shell.addTableView(data);
|
|
15
|
-
const seqCol = data.col('HELM')!;
|
|
16
|
-
await PackageFunctions.toAtomicLevel(data, seqCol, true, false);
|
|
17
|
-
adjustGridcolAfterRender(view.grid, 'molfile(HELM)', 500, 300, true);
|
|
18
|
-
adjustGridcolAfterRender(view.grid, 'HELM', 500, undefined, true);
|
|
19
|
-
grok.shell.info('Hover over monomers in HELM column to highlight them in molecular structure.', {timeout: 10});
|
|
20
|
-
grok.shell.windows.help.showHelp('/help/datagrok/solutions/domains/bio/bio.md#convert-to-atomic-level');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
9
|
export async function demoBio03UI(): Promise<void> {
|
|
24
10
|
const dataFn: string = 'samples/HELM.csv';
|
|
25
11
|
const seqColName = 'HELM';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
import * as grok from 'datagrok-api/grok';
|
|
4
|
+
import * as ui from 'datagrok-api/ui';
|
|
5
|
+
import {_package} from '../package';
|
|
6
|
+
import {adjustGridcolAfterRender} from '../utils/ui-utils';
|
|
7
|
+
import {buildMonomerHoverLink} from '@datagrok-libraries/bio/src/monomer-works/monomer-hover';
|
|
8
|
+
import {ChemTags} from '@datagrok-libraries/chem-meta/src/consts';
|
|
9
|
+
|
|
10
|
+
export async function antibodyDemo() {
|
|
11
|
+
// for some reason the col is not saved in the layout
|
|
12
|
+
const antibodyTags = [
|
|
13
|
+
[
|
|
14
|
+
'units',
|
|
15
|
+
'fasta'
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
'aligned',
|
|
19
|
+
'SEQ.MSA'
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
'alphabet',
|
|
23
|
+
'PT'
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
'cell.renderer',
|
|
27
|
+
'sequence'
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
'quality',
|
|
31
|
+
'Macromolecule'
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
'.semantic-detection-duration',
|
|
35
|
+
'8'
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
'.annotations',
|
|
39
|
+
'[{"id":"deamid-ng","name":"Deamidation (NG)","description":"deamidation liability pattern (111 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#E53935","severity":"high","motifPattern":"NG","autoGenerated":true},{"id":"deamid-ns","name":"Deamidation (NS)","description":"deamidation liability pattern (859 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#E53935","severity":"medium","motifPattern":"NS","autoGenerated":true},{"id":"deamid-na","name":"Deamidation (NA)","description":"deamidation liability pattern (69 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#E53935","severity":"low","motifPattern":"NA","autoGenerated":true},{"id":"deamid-nd","name":"Deamidation (ND)","description":"deamidation liability pattern (18 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#E53935","severity":"low","motifPattern":"ND","autoGenerated":true},{"id":"deamid-nt","name":"Deamidation (NT)","description":"deamidation liability pattern (546 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#E53935","severity":"low","motifPattern":"NT","autoGenerated":true},{"id":"isom-dg","name":"Isomerization (DG)","description":"isomerization liability pattern (118 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#FF9800","severity":"high","motifPattern":"DG","autoGenerated":true},{"id":"isom-ds","name":"Isomerization (DS)","description":"isomerization liability pattern (306 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#FF9800","severity":"medium","motifPattern":"DS","autoGenerated":true},{"id":"oxid-m","name":"Oxidation (Met)","description":"oxidation liability pattern (1220 hits)","start":null,"end":null,"visualType":"point","category":"liability","color":"#9C27B0","severity":"medium","motifPattern":"M","autoGenerated":true},{"id":"oxid-w","name":"Oxidation (Trp)","description":"oxidation liability pattern (2593 hits)","start":null,"end":null,"visualType":"point","category":"liability","color":"#9C27B0","severity":"low","motifPattern":"W","autoGenerated":true},{"id":"glyco-nxst","name":"N-glycosylation","description":"glycosylation liability pattern (38 hits)","start":null,"end":null,"visualType":"motif","category":"liability","color":"#4CAF50","severity":"high","motifPattern":"N[^P][ST]","autoGenerated":true},{"id":"free-cys","name":"Free Cysteine","description":"freeCysteine liability pattern (2327 hits)","start":null,"end":null,"visualType":"point","category":"liability","color":"#607D8B","severity":"info","motifPattern":"C","autoGenerated":true},{"id":"kabat-heavy-fr1","name":"FR1","description":"FR1 (KABAT 1-30)","start":"1","end":"30","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-cdr1","name":"CDR1","description":"CDR1 (KABAT 31-35)","start":"31","end":"35","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-fr2","name":"FR2","description":"FR2 (KABAT 36-49)","start":"36","end":"49","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-cdr2","name":"CDR2","description":"CDR2 (KABAT 50-65)","start":"50","end":"65","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-fr3","name":"FR3","description":"FR3 (KABAT 66-94)","start":"66","end":"94","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-cdr3","name":"CDR3","description":"CDR3 (KABAT 95-102)","start":"95","end":"102","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true},{"id":"kabat-heavy-fr4","name":"FR4","description":"FR4 (KABAT 103-113)","start":"103","end":"113","visualType":"region","category":"structure","sourceScheme":"KABAT","autoGenerated":true}]'
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
'.annotationColumnName',
|
|
43
|
+
'~AntibodyHC_annotations'
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
'.id',
|
|
47
|
+
'750dcca0-48b0-11f1-e663-211b32f9e20c'
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
'.numberingScheme',
|
|
51
|
+
'kabat'
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
'.regions',
|
|
55
|
+
'[{"name":"FR1","description":"FR1 (KABAT 1-30)","start":"1","end":"30"},{"name":"CDR1","description":"CDR1 (KABAT 31-35)","start":"31","end":"35"},{"name":"FR2","description":"FR2 (KABAT 36-49)","start":"36","end":"49"},{"name":"CDR2","description":"CDR2 (KABAT 50-65)","start":"50","end":"65"},{"name":"FR3","description":"FR3 (KABAT 66-94)","start":"66","end":"94"},{"name":"CDR3","description":"CDR3 (KABAT 95-102)","start":"95","end":"102"},{"name":"FR4","description":"FR4 (KABAT 103-113)","start":"103","end":"113"}]'
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
'.positionShift',
|
|
59
|
+
'42.10943057774151'
|
|
60
|
+
]
|
|
61
|
+
];
|
|
62
|
+
const df = await _package.files.readCsv('demo-files/Antibody_HC.csv');
|
|
63
|
+
const orCol = df.col('AntibodyHC')!;
|
|
64
|
+
antibodyTags.forEach(([k, v]) => orCol.setTag(k, v));
|
|
65
|
+
const clustCol = df.col('cluster (dbscan)')!;
|
|
66
|
+
const stCol = clustCol.convertTo(DG.TYPE.STRING);
|
|
67
|
+
df.columns.remove(clustCol.name);
|
|
68
|
+
df.columns.add(stCol);
|
|
69
|
+
const layoutTXT = await _package.files.readAsText('demo-files/Antibody_HC.layout');
|
|
70
|
+
const layout = DG.ViewLayout.fromJson(layoutTXT);
|
|
71
|
+
layout.columns.forEach((c) => {
|
|
72
|
+
const col = df.col(c.name);
|
|
73
|
+
if (col)
|
|
74
|
+
Object.entries(c.tags).forEach(([k, v]) => col.setTag(k, v));
|
|
75
|
+
});
|
|
76
|
+
const tv = grok.shell.addTableView(df);
|
|
77
|
+
await DG.delay(100);
|
|
78
|
+
tv.loadLayout(layout, true);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export async function atomicLevelDemo() {
|
|
82
|
+
const df = await _package.files.readCsv('demo-files/Atomic_Level.csv');
|
|
83
|
+
await df.meta.detectSemanticTypes();
|
|
84
|
+
const tv = grok.shell.addTableView(df);
|
|
85
|
+
await DG.delay(100);
|
|
86
|
+
await buildMonomerHoverLink(df.col('helm')!, df.col('molfile(helm)')!, _package.monomerLib, _package.seqHelper, _package.rdKitModule, true);
|
|
87
|
+
adjustGridcolAfterRender(tv.grid, 'molfile(HELM)', 500, 300, true);
|
|
88
|
+
adjustGridcolAfterRender(tv.grid, 'HELM', 500, undefined, true);
|
|
89
|
+
df.col('molfile(helm)')!.setTag(ChemTags.SEQUENCE_SRC_HL_MONOMERS, 'false');
|
|
90
|
+
df.col('molfile(helm)')!.setTag(ChemTags.SEQUENCE_SRC_COL, 'HELM');
|
|
91
|
+
grok.shell.info('Hover over monomers in HELM column to highlight them in molecular structure.', {timeout: 10});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export async function sirnaDemo() {
|
|
95
|
+
const df = await _package.files.readCsv('demo-files/SIRNA.csv');
|
|
96
|
+
const layoutTXT = await _package.files.readAsText('demo-files/SIRNA.layout');
|
|
97
|
+
const layout = DG.ViewLayout.fromJson(layoutTXT);
|
|
98
|
+
const tv = grok.shell.addTableView(df);
|
|
99
|
+
await DG.delay(100);
|
|
100
|
+
tv.loadLayout(layout, true);
|
|
101
|
+
await df.meta.detectSemanticTypes();
|
|
102
|
+
grok.shell.info('Hover over the oligo structrues to see modifications to different sugars, linkers and residues.', {timeout: 10});
|
|
103
|
+
}
|
package/src/package-api.ts
CHANGED
|
@@ -498,10 +498,24 @@ export namespace funcs {
|
|
|
498
498
|
return await grok.functions.call('Bio:DemoBioAtomicLevel', {});
|
|
499
499
|
}
|
|
500
500
|
|
|
501
|
+
/**
|
|
502
|
+
SI-RNA sequences, molecular structures, curves and assay data
|
|
503
|
+
*/
|
|
504
|
+
export async function demoBioSiRNA(): Promise<void> {
|
|
505
|
+
return await grok.functions.call('Bio:DemoBioSiRNA', {});
|
|
506
|
+
}
|
|
507
|
+
|
|
501
508
|
export async function sdfToJsonLib(table: DG.DataFrame ): Promise<void> {
|
|
502
509
|
return await grok.functions.call('Bio:SdfToJsonLib', { table });
|
|
503
510
|
}
|
|
504
511
|
|
|
512
|
+
/**
|
|
513
|
+
Antibody sequences, numbering, liabilities, extraction and SAR
|
|
514
|
+
*/
|
|
515
|
+
export async function demoAntibodies(): Promise<void> {
|
|
516
|
+
return await grok.functions.call('Bio:DemoAntibodies', {});
|
|
517
|
+
}
|
|
518
|
+
|
|
505
519
|
/**
|
|
506
520
|
Converts a `Macromolecule` sequence to its atomic level `Molecule` representation
|
|
507
521
|
*/
|
package/src/package.g.ts
CHANGED
|
@@ -753,18 +753,34 @@ export async function demoBioActivityCliffs() : Promise<void> {
|
|
|
753
753
|
}
|
|
754
754
|
|
|
755
755
|
//description: Atomic level structure of Macromolecules
|
|
756
|
+
//meta.demoSkip: true
|
|
756
757
|
//meta.demoPath: Bioinformatics | Atomic Level
|
|
757
758
|
//meta.path: /apps/Tutorials/Demo/Bioinformatics/Atomic%20Level
|
|
758
759
|
export async function demoBioAtomicLevel() : Promise<void> {
|
|
759
760
|
await PackageFunctions.demoBioAtomicLevel();
|
|
760
761
|
}
|
|
761
762
|
|
|
763
|
+
//description: SI-RNA sequences, molecular structures, curves and assay data
|
|
764
|
+
//meta.demoSkip: true
|
|
765
|
+
//meta.demoPath: Bioinformatics | SI-RNA
|
|
766
|
+
//meta.path: /apps/Tutorials/Demo/Bioinformatics/SI-RNA
|
|
767
|
+
export async function demoBioSiRNA() : Promise<void> {
|
|
768
|
+
await PackageFunctions.demoBioSiRNA();
|
|
769
|
+
}
|
|
770
|
+
|
|
762
771
|
//name: SDF to JSON Library
|
|
763
772
|
//input: dataframe table
|
|
764
773
|
export async function sdfToJsonLib(table: DG.DataFrame) : Promise<void> {
|
|
765
774
|
await PackageFunctions.sdfToJsonLib(table);
|
|
766
775
|
}
|
|
767
776
|
|
|
777
|
+
//description: Antibody sequences, numbering, liabilities, extraction and SAR
|
|
778
|
+
//meta.demoPath: Bioinformatics | Antibodies
|
|
779
|
+
//meta.path: /apps/Tutorials/Demo/Bioinformatics/Antibodies
|
|
780
|
+
export async function demoAntibodies() : Promise<void> {
|
|
781
|
+
await PackageFunctions.demoAntibodies();
|
|
782
|
+
}
|
|
783
|
+
|
|
768
784
|
//description: Converts a `Macromolecule` sequence to its atomic level `Molecule` representation
|
|
769
785
|
//input: string seq { semType: Macromolecule }
|
|
770
786
|
//input: bool nonlinear
|
package/src/package.ts
CHANGED
|
@@ -53,10 +53,9 @@ import {WebLogoViewer} from './viewers/web-logo-viewer';
|
|
|
53
53
|
import {MonomerLibManager} from './utils/monomer-lib/lib-manager';
|
|
54
54
|
import {MonomerCollectionHandler} from './utils/monomer-lib/monomer-collection-handler';
|
|
55
55
|
import {getMonomerLibraryManagerLink, showManageLibrariesDialog, showManageLibrariesView} from './utils/monomer-lib/library-file-manager/ui';
|
|
56
|
-
import {
|
|
56
|
+
import {demoBioSimDivLayout} from './demo/bio01-similarity-diversity';
|
|
57
57
|
import {demoSeqSpace} from './demo/bio01a-hierarchical-clustering-and-sequence-space';
|
|
58
|
-
import {
|
|
59
|
-
import {demoToAtomicLevel} from './demo/bio03-atomic-level';
|
|
58
|
+
import {demoActivityCliffsCyclicLayout} from './demo/bio01b-hierarchical-clustering-and-activity-cliffs';
|
|
60
59
|
import {checkInputColumnUI} from './utils/check-input-column';
|
|
61
60
|
import {MsaWarning} from './utils/multiple-sequence-alignment';
|
|
62
61
|
import {multipleSequenceAlignmentUI} from './utils/multiple-sequence-alignment-ui';
|
|
@@ -92,6 +91,7 @@ import {showAnnotationManagerDialog} from './utils/annotations/annotation-manage
|
|
|
92
91
|
import {numberAntibodyColumn} from './utils/antibody-numbering/number-antibody';
|
|
93
92
|
|
|
94
93
|
import * as api from './package-api';
|
|
94
|
+
import {antibodyDemo, atomicLevelDemo, sirnaDemo} from './demo/feature_demos';
|
|
95
95
|
export const _package = new BioPackage(/*{debug: true}/**/);
|
|
96
96
|
export * from './package.g';
|
|
97
97
|
|
|
@@ -615,7 +615,7 @@ export class PackageFunctions {
|
|
|
615
615
|
return;
|
|
616
616
|
}
|
|
617
617
|
const actCliffsParams: SeqActivityCliffsParams = JSON.parse(tag);
|
|
618
|
-
const molCol = sp.dataFrame.col(actCliffsParams.seqColName)
|
|
618
|
+
const molCol = sp.dataFrame.col(actCliffsParams.seqColName)!;
|
|
619
619
|
const actCol = sp.dataFrame.col(actCliffsParams.activityColName)!;
|
|
620
620
|
|
|
621
621
|
const preprocessingFunction = DG.Func.find({name: 'macromoleculePreprocessingFunction', package: 'Bio'})[0];
|
|
@@ -650,7 +650,7 @@ export class PackageFunctions {
|
|
|
650
650
|
@grok.decorators.param({options: {optional: true}}) options?: string,
|
|
651
651
|
@grok.decorators.param({options: {optional: true}}) isDemo?: boolean,
|
|
652
652
|
@grok.decorators.param({options: {optional: true}}) axesNames?: string[]): Promise<void> {
|
|
653
|
-
await table.meta.detectSemanticTypes();
|
|
653
|
+
await table.meta.detectSemanticTypes();
|
|
654
654
|
const preprocessingFunction = DG.Func.find({name: 'macromoleculePreprocessingFunction', package: 'Bio'})[0];
|
|
655
655
|
if (!axesNames)
|
|
656
656
|
axesNames = getEmbeddingColsNames(table);
|
|
@@ -1522,7 +1522,7 @@ export class PackageFunctions {
|
|
|
1522
1522
|
path: '/apps/Tutorials/Demo/Bioinformatics/Similarity,%20Diversity',
|
|
1523
1523
|
})
|
|
1524
1524
|
static async demoBioSimilarityDiversity(): Promise<void> {
|
|
1525
|
-
await
|
|
1525
|
+
await demoBioSimDivLayout();
|
|
1526
1526
|
}
|
|
1527
1527
|
|
|
1528
1528
|
@grok.decorators.demo({
|
|
@@ -1543,16 +1543,27 @@ export class PackageFunctions {
|
|
|
1543
1543
|
path: '/apps/Tutorials/Demo/Bioinformatics/Activity%20Cliffs',
|
|
1544
1544
|
})
|
|
1545
1545
|
static async demoBioActivityCliffs(): Promise<void> {
|
|
1546
|
-
await
|
|
1546
|
+
await demoActivityCliffsCyclicLayout();
|
|
1547
1547
|
}
|
|
1548
1548
|
|
|
1549
1549
|
@grok.decorators.demo({
|
|
1550
1550
|
description: 'Atomic level structure of Macromolecules',
|
|
1551
1551
|
demoPath: 'Bioinformatics | Atomic Level',
|
|
1552
1552
|
path: '/apps/Tutorials/Demo/Bioinformatics/Atomic%20Level',
|
|
1553
|
+
meta: {demoSkip: 'true'} // skip for now, not sure why the tests are failing
|
|
1553
1554
|
})
|
|
1554
1555
|
static async demoBioAtomicLevel(): Promise<void> {
|
|
1555
|
-
await
|
|
1556
|
+
await atomicLevelDemo();
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1559
|
+
@grok.decorators.demo({
|
|
1560
|
+
description: 'SI-RNA sequences, molecular structures, curves and assay data',
|
|
1561
|
+
demoPath: 'Bioinformatics | SI-RNA',
|
|
1562
|
+
path: '/apps/Tutorials/Demo/Bioinformatics/SI-RNA',
|
|
1563
|
+
meta: {demoSkip: 'true'} // skip for now, not sure why the tests are failing
|
|
1564
|
+
})
|
|
1565
|
+
static async demoBioSiRNA(): Promise<void> {
|
|
1566
|
+
await sirnaDemo();
|
|
1556
1567
|
}
|
|
1557
1568
|
|
|
1558
1569
|
@grok.decorators.func({name: 'SDF to JSON Library'})
|
|
@@ -1562,6 +1573,15 @@ export class PackageFunctions {
|
|
|
1562
1573
|
DG.Utils.download(`${table.name}.json`, jsonMonomerLibrary);
|
|
1563
1574
|
}
|
|
1564
1575
|
|
|
1576
|
+
@grok.decorators.demo({
|
|
1577
|
+
description: 'Antibody sequences, numbering, liabilities, extraction and SAR',
|
|
1578
|
+
demoPath: 'Bioinformatics | Antibodies',
|
|
1579
|
+
path: '/apps/Tutorials/Demo/Bioinformatics/Antibodies',
|
|
1580
|
+
})
|
|
1581
|
+
static async demoAntibodies(): Promise<void> {
|
|
1582
|
+
await antibodyDemo();
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1565
1585
|
// -- Utils --
|
|
1566
1586
|
|
|
1567
1587
|
@grok.decorators.func({
|