@datagrok/bio 2.13.2 → 2.13.5
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 +1 -1
- package/CHANGELOG.md +26 -0
- package/detectors.js +52 -38
- package/dist/111.js +2 -0
- package/dist/111.js.map +1 -0
- package/dist/234.js +2 -0
- package/dist/234.js.map +1 -0
- package/dist/242.js +2 -0
- package/dist/242.js.map +1 -0
- package/dist/{286.js → 248.js} +1 -1
- package/dist/248.js.map +1 -0
- package/dist/284.js +3 -0
- package/dist/284.js.map +1 -0
- package/dist/317.js +2 -0
- package/dist/317.js.map +1 -0
- package/dist/589.js +2 -0
- package/dist/589.js.map +1 -0
- package/dist/603.js +2 -0
- package/dist/603.js.map +1 -0
- package/dist/682.js +2 -0
- package/dist/682.js.map +1 -0
- package/dist/705.js +2 -0
- package/dist/705.js.map +1 -0
- package/dist/{590.js → 731.js} +2 -2
- package/dist/731.js.map +1 -0
- package/dist/778.js +2 -0
- package/dist/778.js.map +1 -0
- package/dist/793.js +2 -0
- package/dist/793.js.map +1 -0
- package/dist/950.js +2 -0
- package/dist/950.js.map +1 -0
- package/dist/package-test.js +6 -7
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +6 -7
- package/dist/package.js.map +1 -1
- package/files/cache_config.json +7 -0
- package/package.json +17 -23
- package/src/analysis/sequence-activity-cliffs.ts +1 -1
- package/src/function-edtiors/split-to-monomers-editor.ts +6 -7
- package/src/package-types.ts +19 -19
- package/src/package.ts +23 -16
- package/src/substructure-search/substructure-search.ts +9 -10
- package/src/tests/WebLogo-positions-test.ts +6 -6
- package/src/tests/activity-cliffs-tests.ts +5 -2
- package/src/tests/bio-tests.ts +6 -6
- package/src/tests/checkInputColumn-tests.ts +3 -3
- package/src/tests/converters-test.ts +1 -1
- package/src/tests/detectors-tests.ts +25 -13
- package/src/tests/fasta-export-tests.ts +2 -2
- package/src/tests/mm-distance-tests.ts +1 -1
- package/src/tests/msa-tests.ts +2 -2
- package/src/tests/renderers-test.ts +5 -5
- package/src/tests/scoring.ts +26 -5
- package/src/tests/seq-handler-get-region.ts +4 -4
- package/src/tests/sequence-space-test.ts +1 -1
- package/src/tests/substructure-filters-tests.ts +4 -1
- package/src/tests/to-atomic-level-tests.ts +1 -1
- package/src/utils/cell-renderer-consts.ts +3 -11
- package/src/utils/cell-renderer.ts +15 -17
- package/src/utils/context-menu.ts +1 -1
- package/src/utils/convert.ts +7 -4
- package/src/utils/get-region-func-editor.ts +11 -16
- package/src/utils/get-region.ts +5 -5
- package/src/utils/macromolecule-column-widget.ts +1 -1
- package/src/utils/monomer-lib/lib-manager.ts +20 -8
- package/src/utils/monomer-lib/library-file-manager/file-manager.ts +28 -24
- package/src/utils/monomer-lib/library-file-manager/file-validator.ts +2 -1
- package/src/utils/monomer-lib/library-file-manager/ui.ts +3 -6
- package/src/utils/multiple-sequence-alignment-ui.ts +10 -11
- package/src/utils/multiple-sequence-alignment.ts +2 -2
- package/src/utils/pepsea.ts +1 -1
- package/src/utils/save-as-fasta.ts +5 -5
- package/src/viewers/vd-regions-viewer.ts +2 -2
- package/src/widgets/bio-substructure-filter.ts +7 -7
- package/src/widgets/package-settings-editor-widget.ts +27 -27
- package/src/widgets/representations.ts +57 -61
- package/tsconfig.json +4 -4
- package/webpack.config.js +1 -1
- package/dist/23.js +0 -2
- package/dist/23.js.map +0 -1
- package/dist/231.js +0 -2
- package/dist/231.js.map +0 -1
- package/dist/282.js +0 -2
- package/dist/282.js.map +0 -1
- package/dist/286.js.map +0 -1
- package/dist/356.js +0 -2
- package/dist/356.js.map +0 -1
- package/dist/36.js +0 -2
- package/dist/36.js.map +0 -1
- package/dist/40.js +0 -2
- package/dist/40.js.map +0 -1
- package/dist/413.js +0 -2
- package/dist/413.js.map +0 -1
- package/dist/42.js +0 -2
- package/dist/42.js.map +0 -1
- package/dist/427.js +0 -2
- package/dist/427.js.map +0 -1
- package/dist/545.js +0 -3
- package/dist/545.js.map +0 -1
- package/dist/590.js.map +0 -1
- package/dist/65.js +0 -2
- package/dist/65.js.map +0 -1
- package/dist/796.js +0 -2
- package/dist/796.js.map +0 -1
- package/dist/package-test.js.LICENSE.txt +0 -1
- package/dist/package.js.LICENSE.txt +0 -1
- /package/dist/{545.js.LICENSE.txt → 284.js.LICENSE.txt} +0 -0
|
@@ -14,7 +14,8 @@ export class MonomerLibFileValidator {
|
|
|
14
14
|
constructor(
|
|
15
15
|
private helmMonomerSchema: JSONSchemaType<any>
|
|
16
16
|
) {
|
|
17
|
-
|
|
17
|
+
// HELMMonomerSchema.json / #/properties/id uses a union type (string added by Maria Dolotova)
|
|
18
|
+
const ajv = new Ajv2020({allErrors: true, strictTuples: false, allowUnionTypes: true});
|
|
18
19
|
addErrors(ajv);
|
|
19
20
|
this.validateMonomerSchema = ajv.compile(this.helmMonomerSchema);
|
|
20
21
|
}
|
|
@@ -139,12 +139,9 @@ class LibraryControlsManager {
|
|
|
139
139
|
const logPrefix = `${this.toLog()}.createLibInput()`;
|
|
140
140
|
_package.logger.debug(`${logPrefix}, libFileName = '${libFileName}', start`);
|
|
141
141
|
const isMonomerLibrarySelected = !this.userLibSettings.exclude.includes(libFileName);
|
|
142
|
-
const libInput = ui.
|
|
143
|
-
libFileName,
|
|
144
|
-
|
|
145
|
-
(isSelected: boolean) => {
|
|
146
|
-
this.fileManager.eventManager.updateLibrarySelectionStatus(libFileName, isSelected);
|
|
147
|
-
});
|
|
142
|
+
const libInput = ui.input.bool(libFileName, {value: isMonomerLibrarySelected, onValueChanged: (input) => {
|
|
143
|
+
this.fileManager.eventManager.updateLibrarySelectionStatus(libFileName, input.value);
|
|
144
|
+
}});
|
|
148
145
|
ui.tooltip.bind(libInput.root, `Include monomers from ${libFileName}`);
|
|
149
146
|
const deleteIcon = ui.iconFA('trash-alt', () => this.promptForLibraryDeletion(libFileName));
|
|
150
147
|
ui.tooltip.bind(deleteIcon, `Delete ${libFileName}`);
|
|
@@ -38,18 +38,18 @@ export async function multipleSequenceAlignmentUI(
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// UI for PepSea alignment
|
|
41
|
-
const methodInput = ui.
|
|
41
|
+
const methodInput = ui.input.choice('Method', {value: options.pepsea.method, items: pepseaMethods});
|
|
42
42
|
methodInput.setTooltip('Alignment method');
|
|
43
43
|
|
|
44
44
|
// UI for Kalign alignment
|
|
45
|
-
const terminalGapInput = ui.
|
|
45
|
+
const terminalGapInput = ui.input.float('Terminal gap', {value: options?.kalign?.terminalGap});
|
|
46
46
|
terminalGapInput.setTooltip('Penalty for opening a gap at the beginning or end of the sequence');
|
|
47
47
|
const kalignVersionDiv = ui.p(`Kalign version: ${kalignVersion}`, 'kalign-version');
|
|
48
48
|
|
|
49
49
|
// shared UI
|
|
50
|
-
const gapOpenInput = ui.
|
|
50
|
+
const gapOpenInput = ui.input.float('Gap open', {value: options.pepsea.gapOpen});
|
|
51
51
|
gapOpenInput.setTooltip('Gap opening penalty at group-to-group alignment');
|
|
52
|
-
const gapExtendInput = ui.
|
|
52
|
+
const gapExtendInput = ui.input.float('Gap extend', {value: options.pepsea.gapExtend});
|
|
53
53
|
gapExtendInput.setTooltip('Gap extension penalty to skip the alignment');
|
|
54
54
|
|
|
55
55
|
const msaParamsDiv = ui.inputs([gapOpenInput, gapExtendInput, terminalGapInput]);
|
|
@@ -69,25 +69,24 @@ export async function multipleSequenceAlignmentUI(
|
|
|
69
69
|
let performAlignment: (() => Promise<DG.Column<string> | null>) | undefined;
|
|
70
70
|
|
|
71
71
|
let prevSeqCol = seqCol;
|
|
72
|
-
const colInput = ui.
|
|
73
|
-
'Sequence', table, seqCol,
|
|
74
|
-
|
|
75
|
-
if (!valueCol || valueCol.semType !== DG.SEMTYPE.MACROMOLECULE) {
|
|
72
|
+
const colInput = ui.input.column(
|
|
73
|
+
'Sequence', {table: table, value: seqCol, onValueChanged: async (input: DG.InputBase<DG.Column<string>>): Promise<void> => {
|
|
74
|
+
if (!input.value || input.value.semType !== DG.SEMTYPE.MACROMOLECULE) {
|
|
76
75
|
okBtn.disabled = true;
|
|
77
76
|
await delay(0); // to
|
|
78
77
|
colInput.value = prevSeqCol as DG.Column<string>;
|
|
79
78
|
return;
|
|
80
79
|
}
|
|
81
|
-
prevSeqCol =
|
|
80
|
+
prevSeqCol = input.value;
|
|
82
81
|
okBtn.disabled = false;
|
|
83
82
|
performAlignment = await onColInputChange(
|
|
84
83
|
colInput.value, table, pepseaInputRootStyles, kalignInputRootStyles,
|
|
85
84
|
methodInput, clustersColInput, gapOpenInput, gapExtendInput, terminalGapInput,
|
|
86
85
|
);
|
|
87
|
-
},
|
|
86
|
+
}, filter: (col: DG.Column) => col.semType === DG.SEMTYPE.MACROMOLECULE} as ColumnInputOptions
|
|
88
87
|
) as DG.InputBase<DG.Column<string>>;
|
|
89
88
|
colInput.setTooltip('Sequences column to use for alignment');
|
|
90
|
-
const clustersColInput = ui.
|
|
89
|
+
const clustersColInput = ui.input.column('Clusters', {table: table, value: options.clustersCol!});
|
|
91
90
|
clustersColInput.nullable = true;
|
|
92
91
|
|
|
93
92
|
const dlg = ui.dialog('MSA')
|
|
@@ -103,13 +103,13 @@ export async function runKalign(srcCol: DG.Column<string>, isAligned: boolean =
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// units
|
|
106
|
-
const srcUnits = srcCol.
|
|
106
|
+
const srcUnits = srcCol.meta.units;
|
|
107
107
|
//aligned
|
|
108
108
|
const tgtAligned = ALIGNMENT.SEQ_MSA;
|
|
109
109
|
//alphabet
|
|
110
110
|
const srcAlphabet = srcCol.getTag(bioTAGS.alphabet);
|
|
111
111
|
|
|
112
|
-
tgtCol.
|
|
112
|
+
tgtCol.meta.units = srcUnits;
|
|
113
113
|
tgtCol.setTag(bioTAGS.aligned, tgtAligned);
|
|
114
114
|
tgtCol.setTag(bioTAGS.alphabet, srcAlphabet);
|
|
115
115
|
tgtCol.semType = DG.SEMTYPE.MACROMOLECULE;
|
package/src/utils/pepsea.ts
CHANGED
|
@@ -91,7 +91,7 @@ export async function runPepsea(srcCol: DG.Column<string>, unUsedName: string,
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
const alignedSequencesCol: DG.Column<string> = DG.Column.fromStrings(unUsedName, alignedSequences);
|
|
94
|
-
alignedSequencesCol.
|
|
94
|
+
alignedSequencesCol.meta.units = NOTATION.SEPARATOR;
|
|
95
95
|
alignedSequencesCol.setTag(bioTAGS.separator, C.PEPSEA.SEPARATOR);
|
|
96
96
|
alignedSequencesCol.setTag(bioTAGS.aligned, ALIGNMENT.SEQ_MSA);
|
|
97
97
|
alignedSequencesCol.setTag(bioTAGS.alphabet, ALPHABET.UN);
|
|
@@ -20,8 +20,8 @@ export function saveAsFastaUI() {
|
|
|
20
20
|
.find((gcol: DG.GridColumn) => gcol.name.toLowerCase().indexOf('id') !== -1);
|
|
21
21
|
const idDefaultValue = defaultIdGCol ? [defaultIdGCol.name] : [];
|
|
22
22
|
|
|
23
|
-
const idGColListInput = ui.
|
|
24
|
-
idGColList.map((gcol: DG.GridColumn) => gcol.name));
|
|
23
|
+
const idGColListInput = ui.input.multiChoice('Seq id columns', {value: idDefaultValue,
|
|
24
|
+
items: idGColList.map((gcol: DG.GridColumn) => gcol.name)});
|
|
25
25
|
|
|
26
26
|
const seqGColList: DG.GridColumn[] = wu.count(0).take(grid.columns.length)/* range rom 0 to grid.columns.length */
|
|
27
27
|
.map((colI: number) => grid.columns.byIndex(colI)!)
|
|
@@ -35,10 +35,10 @@ export function saveAsFastaUI() {
|
|
|
35
35
|
}).toArray();
|
|
36
36
|
|
|
37
37
|
const seqDefaultValue = seqGColList.length > 0 ? seqGColList[0].name : [];
|
|
38
|
-
const seqColInput = ui.
|
|
39
|
-
seqGColList.map((gCol: DG.GridColumn) => gCol.name));
|
|
38
|
+
const seqColInput = ui.input.choice('Seq column', {value: seqDefaultValue,
|
|
39
|
+
items: seqGColList.map((gCol: DG.GridColumn) => gCol.name)});
|
|
40
40
|
|
|
41
|
-
const lineWidthInput = ui.
|
|
41
|
+
const lineWidthInput = ui.input.int('FASTA line width', {value: FASTA_LINE_WIDTH});
|
|
42
42
|
|
|
43
43
|
ui.dialog({title: 'Save as FASTA'})
|
|
44
44
|
.add(ui.inputs([
|
|
@@ -392,8 +392,8 @@ export class VdRegionsViewer extends DG.JsViewer implements IVdRegionsViewer {
|
|
|
392
392
|
// this.mainLayout.style.height = '100%';
|
|
393
393
|
// this.mainLayout.style.border = '1px solid black';
|
|
394
394
|
|
|
395
|
-
this.filterSourceInput = ui.
|
|
396
|
-
Object.values(FilterSources), this.filterSourceInputOnValueChanged.bind(this));
|
|
395
|
+
this.filterSourceInput = ui.input.choice<FilterSources>('Data source', {value: this.filterSource,
|
|
396
|
+
items: Object.values(FilterSources), onValueChanged: this.filterSourceInputOnValueChanged.bind(this)});
|
|
397
397
|
this.filterSourceInput.root.style.position = 'absolute';
|
|
398
398
|
this.filterSourceInput.root.style.right = '9px';
|
|
399
399
|
this.filterSourceInput.root.style.top = '-4px';
|
|
@@ -128,7 +128,7 @@ export class BioSubstructureFilter extends DG.Filter implements IRenderer {
|
|
|
128
128
|
}
|
|
129
129
|
const sh = SeqHandler.forColumn(this.column!);
|
|
130
130
|
this.columnName ??= this.column?.name;
|
|
131
|
-
this.notation ??= this.column?.
|
|
131
|
+
this.notation ??= this.column?.meta.units!;
|
|
132
132
|
|
|
133
133
|
this.bioFilter = this.notation === NOTATION.FASTA ?
|
|
134
134
|
new FastaBioFilter() : this.notation === NOTATION.SEPARATOR ?
|
|
@@ -296,10 +296,10 @@ export class FastaBioFilter extends BioFilterBase<BioFilterProps> {
|
|
|
296
296
|
constructor() {
|
|
297
297
|
super();
|
|
298
298
|
|
|
299
|
-
this.substructureInput = ui.
|
|
299
|
+
this.substructureInput = ui.input.string('', {value: '', onValueChanged: () => {
|
|
300
300
|
this.props = new BioFilterProps(this.substructureInput.value);
|
|
301
301
|
if (!this._propsChanging) this.onChanged.next();
|
|
302
|
-
},
|
|
302
|
+
}, placeholder: 'Substructure'});
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
public applyProps() {
|
|
@@ -336,15 +336,15 @@ export class SeparatorBioFilter extends BioFilterBase<SeparatorFilterProps> {
|
|
|
336
336
|
constructor(colSeparator: string) {
|
|
337
337
|
super();
|
|
338
338
|
|
|
339
|
-
this.substructureInput = ui.
|
|
339
|
+
this.substructureInput = ui.input.string('', {value: '', onValueChanged: () => {
|
|
340
340
|
this.props = new SeparatorFilterProps(this.substructureInput.value, this.props.separator);
|
|
341
341
|
if (!this._propsChanging) this.onChanged.next();
|
|
342
|
-
},
|
|
343
|
-
this.separatorInput = ui.
|
|
342
|
+
}, placeholder: 'Substructure'});
|
|
343
|
+
this.separatorInput = ui.input.string('', {value: this.colSeparator = colSeparator, onValueChanged: () => {
|
|
344
344
|
const separator: string | undefined = !!this.separatorInput.value ? this.separatorInput.value : undefined;
|
|
345
345
|
this.props = new SeparatorFilterProps(this.props.substructure, separator);
|
|
346
346
|
if (!this._propsChanging) this.onChanged.next();
|
|
347
|
-
},
|
|
347
|
+
}, placeholder: 'Separator'});
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
applyProps(): void {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as ui from 'datagrok-api/ui';
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
3
|
|
|
4
|
-
import {MonomerWidthMode} from '../utils/cell-renderer-consts';
|
|
5
|
-
|
|
6
4
|
import {_package} from '../package';
|
|
7
5
|
|
|
6
|
+
|
|
8
7
|
export class PackageSettingsEditorWidget extends DG.Widget {
|
|
9
8
|
maxMonomerLengthProp: DG.Property;
|
|
10
9
|
tooltipWebLogo: DG.Property;
|
|
@@ -22,34 +21,35 @@ export class PackageSettingsEditorWidget extends DG.Widget {
|
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
async init(): Promise<void> {
|
|
25
|
-
const
|
|
26
|
-
_package.properties.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
_package.properties.MonomerWidthMode = value;
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const maxMonomerLengthInput = ui.intInput('Max monomer length',
|
|
33
|
-
_package.properties.MaxMonomerLength,
|
|
34
|
-
(value: number) => {
|
|
24
|
+
const maxMonomerLengthInput = ui.input.int('Max Monomer Length', {
|
|
25
|
+
value: _package.properties.maxMonomerLength!,
|
|
26
|
+
nullable: true, min: 0,
|
|
27
|
+
onValueChanged: () => {
|
|
35
28
|
// Handle user changed value
|
|
36
|
-
_package.properties.
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
29
|
+
_package.properties.maxMonomerLength = maxMonomerLengthInput.value ?? null;
|
|
30
|
+
},
|
|
31
|
+
tooltipText: this.maxMonomerLengthProp.description,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const tooltipWebLogoInput = ui.input.bool('Tooltip WebLogo', {
|
|
35
|
+
value: _package.properties.tooltipWebLogo,
|
|
36
|
+
nullable: false,
|
|
37
|
+
onValueChanged: () => {
|
|
38
|
+
_package.properties.tooltipWebLogo = tooltipWebLogoInput.value!;
|
|
39
|
+
},
|
|
40
|
+
tooltipText: this.tooltipWebLogo.description,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const defaultSeparatorInput = ui.input.choice('Default Separator', {
|
|
44
|
+
value: _package.properties.defaultSeparator,
|
|
45
|
+
items: ['.', '/', '-'],
|
|
46
|
+
onValueChanged: () => {
|
|
47
|
+
_package.properties.defaultSeparator = defaultSeparatorInput.value!;
|
|
48
|
+
},
|
|
49
|
+
tooltipText: this.defaultSeparator.description,
|
|
50
|
+
});
|
|
50
51
|
|
|
51
52
|
this.root.appendChild(ui.form([
|
|
52
|
-
monomerWidthModeInput,
|
|
53
53
|
maxMonomerLengthInput,
|
|
54
54
|
tooltipWebLogoInput,
|
|
55
55
|
defaultSeparatorInput,
|
|
@@ -6,11 +6,11 @@ import {getMolfilesFromSingleSeq} from '@datagrok-libraries/bio/src/monomer-work
|
|
|
6
6
|
import {TAGS as mmcrTAGS} from '@datagrok-libraries/bio/src/utils/cell-renderer';
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
tempTAGS, rendererSettingsChangedState
|
|
9
|
+
Temps as mmcrTemps, rendererSettingsChangedState, Temps
|
|
11
10
|
} from '../utils/cell-renderer-consts';
|
|
12
11
|
|
|
13
12
|
import {_package} from '../package';
|
|
13
|
+
import {max} from 'rxjs/operators';
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -25,81 +25,77 @@ export function getMacromoleculeColumnPropertyPanel(col: DG.Column): DG.Widget {
|
|
|
25
25
|
const columnsSet = new Set(columnsList);
|
|
26
26
|
columnsSet.delete(col.name);
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
let maxMonomerLength: number | null = (_package.properties ? _package.properties.maxMonomerLength : 4);
|
|
29
|
+
if (mmcrTAGS.maxMonomerLength in col.tags) {
|
|
30
|
+
const v = parseInt(col.getTag(mmcrTAGS.maxMonomerLength));
|
|
31
|
+
maxMonomerLength = !isNaN(v) ? v : maxMonomerLength;
|
|
32
|
+
}
|
|
33
|
+
if (Temps.maxMonomerLength in col.temp) {
|
|
34
|
+
const v = parseInt(col.temp[Temps.maxMonomerLength]);
|
|
35
|
+
maxMonomerLength = !isNaN(v) ? v : maxMonomerLength;
|
|
36
|
+
}
|
|
37
|
+
const maxMonomerLengthInput = ui.input.int('Max Monomer Length', {
|
|
38
|
+
value: maxMonomerLength!,
|
|
39
|
+
nullable: true, min: 1, max: 50, step: 1,
|
|
32
40
|
onValueChanged: () => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
if (maxMonomerLengthInput.value == 0)
|
|
42
|
+
setTimeout(() => { maxMonomerLengthInput.value = null!; }, 0);
|
|
43
|
+
else {
|
|
44
|
+
const value = maxMonomerLengthInput.value ?? '';
|
|
45
|
+
const tagValue = value == null ? '' : value.toString();
|
|
46
|
+
col.temp[Temps.maxMonomerLength] = tagValue;
|
|
47
|
+
col.temp[Temps.rendererSettingsChanged] = rendererSettingsChangedState.true;
|
|
48
|
+
col.dataFrame.fireValuesChanged();
|
|
49
|
+
}
|
|
39
50
|
},
|
|
51
|
+
tooltipText: `The max length of monomer symbol displayed without shortening, empty to no limit`
|
|
40
52
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const tagMaxMonomerLength: number = parseInt(col.getTag(mmcrTAGS.maxMonomerLength));
|
|
45
|
-
const maxMonomerLengthInput = ui.input.slider('Max monomer length', {
|
|
46
|
-
value: !isNaN(tagMaxMonomerLength) ? tagMaxMonomerLength :
|
|
47
|
-
(_package.properties?.MaxMonomerLength ?? 4),
|
|
48
|
-
min: 1, max: 16, step: 1,
|
|
53
|
+
|
|
54
|
+
const gapLengthInput = ui.input.int('Monomer Margin', {
|
|
55
|
+
value: col.temp[mmcrTemps.gapLength] ?? 0,
|
|
49
56
|
onValueChanged: () => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
col.setTag(mmcrTAGS.maxMonomerLength, value.toString());
|
|
53
|
-
col.setTag(mmcrTags.RendererSettingsChanged, rendererSettingsChangedState.true);
|
|
57
|
+
col.temp[mmcrTemps.gapLength] = gapLengthInput.value;
|
|
58
|
+
col.temp[mmcrTemps.rendererSettingsChanged] = rendererSettingsChangedState.true;
|
|
54
59
|
col.dataFrame.fireValuesChanged();
|
|
55
60
|
},
|
|
61
|
+
tooltipText: 'The size of margin between monomers (in pixels)'
|
|
56
62
|
});
|
|
57
|
-
const maxMonomerLengthValueDiv = ui.divText(maxMonomerLengthInput.stringValue, 'ui-input-description');
|
|
58
|
-
maxMonomerLengthInput.addOptions(maxMonomerLengthValueDiv);
|
|
59
|
-
maxMonomerLengthInput.setTooltip(
|
|
60
|
-
`The max length of monomer name displayed without shortening ` +
|
|
61
|
-
` in '${MonomerWidthMode.short}' monomer width mode.`);
|
|
62
|
-
maxMonomerLengthInput.enabled = monomerWidthModeInput.value === MonomerWidthMode.short;
|
|
63
|
-
|
|
64
|
-
const gapLengthInput = ui.intInput('Monomer margin', col.temp[mmcrTemps.gapLength] ?? 0,
|
|
65
|
-
(value: number) => {
|
|
66
|
-
col.temp[mmcrTemps.gapLength] = value;
|
|
67
|
-
col.setTag(mmcrTags.RendererSettingsChanged, rendererSettingsChangedState.true);
|
|
68
|
-
col.dataFrame.fireValuesChanged();
|
|
69
|
-
});
|
|
70
|
-
gapLengthInput.setTooltip('The size of margin between monomers (in pixels)');
|
|
71
63
|
|
|
72
|
-
const
|
|
73
|
-
(col?.temp['color-code'] != null) ? col.temp['color-code'] : true,
|
|
74
|
-
|
|
75
|
-
col.temp['color-code'] =
|
|
64
|
+
const colorCodeInput = ui.input.bool('Color Code', {
|
|
65
|
+
value: (col?.temp['color-code'] != null) ? col.temp['color-code'] : true,
|
|
66
|
+
onValueChanged: () => {
|
|
67
|
+
col.temp['color-code'] = colorCodeInput.value;
|
|
76
68
|
col.dataFrame.fireValuesChanged();
|
|
77
|
-
}
|
|
78
|
-
|
|
69
|
+
},
|
|
70
|
+
tooltipText: 'Color code'
|
|
71
|
+
});
|
|
79
72
|
|
|
80
|
-
const
|
|
81
|
-
(col?.temp['reference-sequence'] != null) ? col?.temp['reference-sequence'] : '',
|
|
82
|
-
|
|
73
|
+
const referenceSequenceInput = ui.input.string('Reference Sequence', {
|
|
74
|
+
value: (col?.temp['reference-sequence'] != null) ? col?.temp['reference-sequence'] : '',
|
|
75
|
+
nullable: true,
|
|
76
|
+
onValueChanged: () => {
|
|
77
|
+
col.temp['reference-sequence'] = referenceSequenceInput.value;
|
|
83
78
|
col.dataFrame.fireValuesChanged();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
79
|
+
},
|
|
80
|
+
tooltipText: 'Reference sequence is not empty, then the sequence will be render ' + '\n' +
|
|
81
|
+
'as a difference from the reference sequence'
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const compareWithCurrentInput = ui.input.bool('Compare with current', {
|
|
85
|
+
value: (col?.temp['compare-with-current'] != null) ? col.temp['compare-with-current'] : true,
|
|
86
|
+
onValueChanged: () => {
|
|
87
|
+
col.temp['compare-with-current'] = compareWithCurrentInput.value;
|
|
92
88
|
col.dataFrame.fireValuesChanged();
|
|
93
|
-
}
|
|
94
|
-
|
|
89
|
+
},
|
|
90
|
+
tooltipText: 'When on, all sequences get rendered in the "diff" mode'
|
|
91
|
+
});
|
|
95
92
|
|
|
96
93
|
const rdKitInputs = ui.inputs([
|
|
97
|
-
monomerWidthModeInput,
|
|
98
94
|
maxMonomerLengthInput,
|
|
99
95
|
gapLengthInput,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
referenceSequenceInput,
|
|
97
|
+
colorCodeInput,
|
|
98
|
+
compareWithCurrentInput,
|
|
103
99
|
]);
|
|
104
100
|
|
|
105
101
|
return new DG.Widget(rdKitInputs);
|
package/tsconfig.json
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
/* Basic Options */
|
|
6
6
|
// "incremental": true, /* Enable incremental compilation */
|
|
7
|
-
"target": "
|
|
8
|
-
"module": "
|
|
9
|
-
"lib": ["ES2022", "ES2022.String", "
|
|
7
|
+
"target": "ES2022", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
|
|
8
|
+
"module": "ES2022", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
|
9
|
+
"lib": ["ES2022", "ES2022.String", "DOM"], /* Specify library files to be included in the compilation. */
|
|
10
10
|
// "allowJs": true, /* Allow javascript files to be compiled. */
|
|
11
11
|
// "checkJs": true, /* Report errors in .js files. */
|
|
12
12
|
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
|
66
66
|
"typeRoots": ["./node_modules/@webgpu/types", "./node_modules/@types"],
|
|
67
67
|
/* Advanced Options */
|
|
68
|
-
"skipLibCheck":
|
|
68
|
+
"skipLibCheck": true, /* Skip type checking of declaration files. */
|
|
69
69
|
"forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
|
|
70
70
|
//"jsx": "react"
|
|
71
71
|
}
|
package/webpack.config.js
CHANGED
|
@@ -31,7 +31,7 @@ module.exports = {
|
|
|
31
31
|
plugins: [
|
|
32
32
|
new FuncGeneratorPlugin({outputPath: './src/package.g.ts'}),
|
|
33
33
|
],
|
|
34
|
-
devtool:
|
|
34
|
+
devtool: 'source-map',
|
|
35
35
|
externals: {
|
|
36
36
|
'datagrok-api/dg': 'DG',
|
|
37
37
|
'datagrok-api/grok': 'grok',
|
package/dist/23.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";var e,r,t={5023:(e,r,t)=>{var n=t(7862);const o=e=>null==e;var a=t(6361),s=t(9657);onmessage=async e=>{const{values:r,startIdx:t,endIdx:i,threshold:l,fnNames:c,opts:h,aggregationMethod:p,weights:u}=e.data;try{const e=[],f=[],g=[],v=i-t,d=function(e,r){return e===n.y.MANHATTAN?e=>e.reduce(((e,t,n)=>e+t*r[n]),0):e=>{const t=e.reduce(((e,t,n)=>e+(t*r[n])**2),0);return Math.sqrt(t)}}(p,u);r.forEach(((e,t)=>{if((0,a.sQ)(c[t]))for(let n=0;n<e.length;++n)o(e[n])||(r[t][n]=new s.Z(r[t][n]._data,r[t][n]._length))}));let b=0;const w=new Array(c.length).fill(null).map(((e,r)=>new a.UH(c[r]).getMeasure(h[r]))),y=r[0].length-2-Math.floor(Math.sqrt(-8*t+4*r[0].length*(r[0].length-1)-7)/2-.5),m=t-r[0].length*y+Math.floor((y+1)*(y+2)/2);let x=y,O=m;for(;b<v;){const t=w.map(((e,t)=>o(r[t][x])||o(r[t][O])?1:e(r[t][x],r[t][O]))),n=1===t.length?t[0]:d(t);1-n>=l&&(e.push(x),f.push(O),g.push(n)),b++,O++,O===r[0].length&&(x++,O=x+1)}const M=new Int32Array(e),j=new Int32Array(f),A=new Float32Array(g);postMessage({i:M,j,distance:A})}catch(e){postMessage({error:e})}}}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,o),a.exports}o.m=t,o.x=()=>{var e=o.O(void 0,[36,413],(()=>o(5023)));return o.O(e)},e=[],o.O=(r,t,n,a)=>{if(!t){var s=1/0;for(h=0;h<e.length;h++){for(var[t,n,a]=e[h],i=!0,l=0;l<t.length;l++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](t[l])))?t.splice(l--,1):(i=!1,a<s&&(s=a));if(i){e.splice(h--,1);var c=n();void 0!==c&&(r=c)}}return r}a=a||0;for(var h=e.length;h>0&&e[h-1][2]>a;h--)e[h]=e[h-1];e[h]=[t,n,a]},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),o.u=e=>e+".js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&!e;)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{var e={23:1};o.f.i=(r,t)=>{e[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunkbio=self.webpackChunkbio||[],t=r.push.bind(r);r.push=r=>{var[n,a,s]=r;for(var i in a)o.o(a,i)&&(o.m[i]=a[i]);for(s&&s(o);n.length;)e[n.pop()]=1;t(r)}})(),r=o.x,o.x=()=>Promise.all([o.e(36),o.e(413)]).then(r);var a=o.x();bio=a})();
|
|
2
|
-
//# sourceMappingURL=23.js.map
|
package/dist/23.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"23.js","mappings":"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","sources":["webpack://bio/webpack/runtime/chunk loaded","webpack://bio/webpack/runtime/startup chunk dependencies","webpack://bio/./node_modules/@datagrok-libraries/ml/src/distance-matrix/utils.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/distance-matrix/sparse-matrix-worker.js","webpack://bio/webpack/bootstrap","webpack://bio/webpack/runtime/define property getters","webpack://bio/webpack/runtime/ensure chunk","webpack://bio/webpack/runtime/get javascript chunk filename","webpack://bio/webpack/runtime/global","webpack://bio/webpack/runtime/hasOwnProperty shorthand","webpack://bio/webpack/runtime/publicPath","webpack://bio/webpack/runtime/importScripts chunk loading","webpack://bio/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([\n\t\t__webpack_require__.e(36),\n\t\t__webpack_require__.e(413)\n\t]).then(next);\n};","import { DistanceAggregationMethods } from './types';\nexport const isNil = (x) => x === null || x === undefined;\nexport function insertSmaller(distancesAr, indexes, num, index) {\n if (num > distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num < v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function insertLarger(distancesAr, indexes, num, index) {\n if (num < distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num > v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function getAggregationFunction(aggregationMethod, weights) {\n switch (aggregationMethod) {\n case DistanceAggregationMethods.MANHATTAN:\n return (vs) => vs.reduce((acc, val, idx) => acc + val * weights[idx], 0);\n default:\n return (vs) => {\n // euclidean\n const sum = vs.reduce((acc, val, idx) => acc + (val * weights[idx]) ** 2, 0);\n return Math.sqrt(sum);\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLDBCQUEwQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBRS9ELE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBcUIsRUFBRSxPQUFpQixFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQ2hHLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPO0lBRVQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQXFCLEVBQUUsT0FBaUIsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUMvRixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTztJQUVULE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxpQkFBNEMsRUFBRSxPQUFpQjtJQUUvRCxRQUFRLGlCQUFpQixFQUFFO1FBQ3pCLEtBQUssMEJBQTBCLENBQUMsU0FBUztZQUN2QyxPQUFPLENBQUMsRUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JGO1lBQ0UsT0FBTyxDQUFDLEVBQVksRUFBRSxFQUFFO2dCQUN0QixZQUFZO2dCQUNaLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQztLQUNMO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZCwgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeDogYW55KSA9PiB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXI6IG51bWJlcltdLCBpbmRleGVzOiBudW1iZXJbXSwgbnVtOiBudW1iZXIsIGluZGV4OiBudW1iZXIpIHtcbiAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aC0xXSlcbiAgICByZXR1cm47XG5cbiAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA8IHYpO1xuICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICBpbmRleGVzLnBvcCgpO1xuICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyOiBudW1iZXJbXSwgaW5kZXhlczogbnVtYmVyW10sIG51bTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGgtMV0pXG4gICAgcmV0dXJuO1xuXG4gIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgZGlzdGFuY2VzQXIucG9wKCk7XG4gIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgaW5kZXhlcy5wb3AoKTtcbiAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oXG4gIGFnZ3JlZ2F0aW9uTWV0aG9kOiBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzOiBudW1iZXJbXVxuKTogKHZhbHVlczogbnVtYmVyW10pID0+IG51bWJlciB7XG4gIHN3aXRjaCAoYWdncmVnYXRpb25NZXRob2QpIHtcbiAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgIHJldHVybiAodnM6IG51bWJlcltdKSA9PiB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArIHZhbCAqIHdlaWdodHNbaWR4XSwgMCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAodnM6IG51bWJlcltdKSA9PiB7XG4gICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICB9O1xuICB9XG59XG4iXX0=","import { getAggregationFunction, isNil } from './utils';\nimport { Measure, isBitArrayMetric } from '../typed-metrics';\nimport BitArray from '@datagrok-libraries/utils/src/bit-array';\nonmessage = async (event) => {\n const { values, startIdx, endIdx, threshold, fnNames, opts, aggregationMethod, weights } = event.data;\n try {\n // if (startIdx != -1)\n // throw new Error('Error in sparse matrix worker'); // TODO: remove this line\n const i = [];\n const j = [];\n const distances = [];\n const chunkSize = endIdx - startIdx;\n //const mi = startRow;\n //const mj = startCol;\n const aggregate = getAggregationFunction(aggregationMethod, weights);\n values.forEach((v, colIdx) => {\n if (isBitArrayMetric(fnNames[colIdx])) {\n for (let i = 0; i < v.length; ++i) {\n if (isNil(v[i]))\n continue;\n values[colIdx][i] = new BitArray(values[colIdx][i]._data, values[colIdx][i]._length);\n }\n }\n });\n let cnt = 0;\n const distanceFns = new Array(fnNames.length).fill(null).map((_, i) => new Measure(fnNames[i]).getMeasure(opts[i]));\n const startRow = values[0].length - 2 - Math.floor(Math.sqrt(-8 * startIdx + 4 * values[0].length * (values[0].length - 1) - 7) / 2 - 0.5);\n const startCol = startIdx - values[0].length * startRow + Math.floor((startRow + 1) * (startRow + 2) / 2);\n let mi = startRow;\n let mj = startCol;\n while (cnt < chunkSize) {\n //const value = seq1List[mi] && seq1List[mj] ? hamming(seq1List[mi], seq1List[mj]) : 0;\n const distanceValues = distanceFns.map((fn, idx) => !isNil(values[idx][mi]) && !isNil(values[idx][mj]) ?\n fn(values[idx][mi], values[idx][mj]) : 1);\n const value = distanceValues.length === 1 ? distanceValues[0] : aggregate(distanceValues);\n if (1 - value >= threshold) {\n i.push(mi);\n j.push(mj);\n distances.push(value);\n }\n cnt++;\n mj++;\n if (mj === values[0].length) {\n mi++;\n mj = mi + 1;\n }\n }\n const iArray = new Int32Array(i);\n const jArray = new Int32Array(j);\n const distanceArray = new Float32Array(distances);\n postMessage({ i: iArray, j: jArray, distance: distanceArray });\n }\n catch (e) {\n postMessage({ error: e });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLW1hdHJpeC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcGFyc2UtbWF0cml4LXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3RELE9BQU8sRUFBZSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLFFBQVEsTUFBTSx5Q0FBeUMsQ0FBQztBQUUvRCxTQUFTLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzFCLE1BQU0sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsR0FHbEMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMvRCxJQUFJO1FBQ0Ysc0JBQXNCO1FBQ3RCLGdGQUFnRjtRQUNoRixNQUFNLENBQUMsR0FBYSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3BDLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFFdEIsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQixJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtvQkFDakMsSUFBSSxLQUFLLENBQUMsQ0FB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QUFDO2FBQ2I7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztLQUM5RDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsV0FBVyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7S0FDekI7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldEFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGlzTmlsfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7S25vd25NZXRyaWNzLCBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXknO1xuaW1wb3J0IHtEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kfSBmcm9tICcuL3R5cGVzJztcbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zdCB7dmFsdWVzLCBzdGFydElkeCwgZW5kSWR4LCB0aHJlc2hvbGQsIGZuTmFtZXMsIG9wdHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzfTpcbiAgICB7dmFsdWVzOiBBcnJheTxhbnlbXT4sIHN0YXJ0SWR4OiBudW1iZXIsIGVuZElkeDogbnVtYmVyLFxuICAgICAgdGhyZXNob2xkOiBudW1iZXIsIGZuTmFtZXM6IEtub3duTWV0cmljc1tdLCBvcHRzOiBhbnlbXSwgd2VpZ2h0czogbnVtYmVyW10sXG4gICAgICBhZ2dyZWdhdGlvbk1ldGhvZDogRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZH0gPSBldmVudC5kYXRhO1xuICB0cnkge1xuICAgIC8vIGlmIChzdGFydElkeCAhPSAtMSlcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gc3BhcnNlIG1hdHJpeCB3b3JrZXInKTsgLy8gVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICAgIGNvbnN0IGk6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgajogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBkaXN0YW5jZXM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgY2h1bmtTaXplID0gZW5kSWR4IC0gc3RhcnRJZHg7XG4gICAgLy9jb25zdCBtaSA9IHN0YXJ0Um93O1xuICAgIC8vY29uc3QgbWogPSBzdGFydENvbDtcblxuICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpO1xuXG4gICAgdmFsdWVzLmZvckVhY2goKHYsIGNvbElkeCkgPT4ge1xuICAgICAgaWYgKGlzQml0QXJyYXlNZXRyaWMoZm5OYW1lc1tjb2xJZHhdKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpZiAoaXNOaWwodltpXSkpIGNvbnRpbnVlO1xuICAgICAgICAgIHZhbHVlc1tjb2xJZHhdW2ldID0gbmV3IEJpdEFycmF5KHZhbHVlc1tjb2xJZHhdW2ldLl9kYXRhLCB2YWx1ZXNbY29sSWR4XVtpXS5fbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IGRpc3RhbmNlRm5zID0gbmV3IEFycmF5KGZuTmFtZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tpXSkuZ2V0TWVhc3VyZShvcHRzW2ldKSk7XG4gICAgY29uc3Qgc3RhcnRSb3cgPSB2YWx1ZXNbMF0ubGVuZ3RoIC0gMiAtIE1hdGguZmxvb3IoXG4gICAgICBNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiB2YWx1ZXNbMF0ubGVuZ3RoICogKHZhbHVlc1swXS5sZW5ndGggLSAxKSAtIDcpIC8gMiAtIDAuNSk7XG4gICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlc1swXS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBtaSA9IHN0YXJ0Um93O1xuICAgIGxldCBtaiA9IHN0YXJ0Q29sO1xuICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgY29uc3QgZGlzdGFuY2VWYWx1ZXMgPSBkaXN0YW5jZUZucy5tYXAoKGZuLCBpZHgpID0+ICFpc05pbCh2YWx1ZXNbaWR4XVttaV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVttal0pID9cbiAgICAgICAgZm4odmFsdWVzW2lkeF1bbWldLCB2YWx1ZXNbaWR4XVttal0pIDogMSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRpc3RhbmNlVmFsdWVzLmxlbmd0aCA9PT0gMSA/IGRpc3RhbmNlVmFsdWVzWzBdIDogYWdncmVnYXRlKGRpc3RhbmNlVmFsdWVzKTtcbiAgICAgIGlmICgxIC0gdmFsdWUgPj0gdGhyZXNob2xkKSB7XG4gICAgICAgIGkucHVzaChtaSk7XG4gICAgICAgIGoucHVzaChtaik7XG4gICAgICAgIGRpc3RhbmNlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNudCsrO1xuICAgICAgbWorKztcbiAgICAgIGlmIChtaiA9PT0gdmFsdWVzWzBdLmxlbmd0aCkge1xuICAgICAgICBtaSsrO1xuICAgICAgICBtaiA9IG1pICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpQXJyYXkgPSBuZXcgSW50MzJBcnJheShpKTtcbiAgICBjb25zdCBqQXJyYXkgPSBuZXcgSW50MzJBcnJheShqKTtcbiAgICBjb25zdCBkaXN0YW5jZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShkaXN0YW5jZXMpO1xuICAgIHBvc3RNZXNzYWdlKHtpOiBpQXJyYXksIGo6IGpBcnJheSwgZGlzdGFuY2U6IGRpc3RhbmNlQXJyYXl9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBvc3RNZXNzYWdlKHtlcnJvcjogZX0pO1xuICB9XG59O1xuIl19","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [36,413], () => (__webpack_require__(5023)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t23: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkbio\"] = self[\"webpackChunkbio\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","isNil","x","onmessage","async","event","values","startIdx","endIdx","threshold","fnNames","opts","aggregationMethod","weights","data","i","j","distances","chunkSize","aggregate","MANHATTAN","vs","reduce","acc","val","idx","sum","Math","sqrt","getAggregationFunction","forEach","v","colIdx","length","_data","_length","cnt","distanceFns","Array","fill","map","_","getMeasure","startRow","floor","startCol","mi","mj","distanceValues","fn","value","push","iArray","Int32Array","jArray","distanceArray","Float32Array","postMessage","distance","e","error","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","__webpack_exports__","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","key","splice","r","d","definition","o","defineProperty","enumerable","get","f","chunkId","Promise","all","promises","u","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","call","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","self","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""}
|