@datagrok-libraries/bio 0.0.4 → 0.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.
@@ -0,0 +1,38 @@
1
+ export class SeqPaletteBase {
2
+ static makePalette(dt, simplified = false) {
3
+ const palette = {};
4
+ dt.forEach((cp) => {
5
+ const objList = cp[0];
6
+ const colour = cp[1];
7
+ objList.forEach((obj, ind) => {
8
+ palette[obj] = this.colourPalette[colour][simplified ? 0 : ind];
9
+ });
10
+ });
11
+ return palette;
12
+ }
13
+ }
14
+ /** Palette with shades of primary colors
15
+ */
16
+ SeqPaletteBase.colourPalette = {
17
+ 'orange': ['rgb(255,187,120)', 'rgb(245,167,100)', 'rgb(235,137,70)', 'rgb(205, 111, 71)'],
18
+ 'all_green': ['rgb(44,160,44)', 'rgb(74,160,74)', 'rgb(23,103,57)', 'rgb(30,110,96)', 'rgb(60,131,95)',
19
+ 'rgb(24,110,79)', 'rgb(152,223,138)', 'rgb(182, 223, 138)', 'rgb(152, 193, 138)'],
20
+ 'all_blue': ['rgb(31,119,180)', 'rgb(23,190,207)', 'rgb(122, 102, 189)', 'rgb(158,218,229)', 'rgb(141, 124, 217)',
21
+ 'rgb(31, 120, 150)'],
22
+ 'magenta': ['rgb(162,106,192)', 'rgb(197,165,224)', 'rgb(208,113,218)'],
23
+ 'red': ['rgb(214,39,40)', 'rgb(255,152,150)'],
24
+ 'st_blue': ['rgb(23,190,207)', 'rgb(158,218,229)', 'rgb(31,119,180)'],
25
+ 'dark_blue': ['rgb(31,119,180)', 'rgb(31, 120, 150)'],
26
+ 'light_blue': ['rgb(23,190,207)', 'rgb(158,218,229)', 'rgb(108, 218, 229)', 'rgb(23,190,227)'],
27
+ 'lilac_blue': ['rgb(124,102,211)', 'rgb(149,134,217)', 'rgb(97, 81, 150)'],
28
+ 'dark_green': ['rgb(23,103,57)', 'rgb(30,110,96)', 'rgb(60,131,95)', 'rgb(24,110,79)'],
29
+ 'green': ['rgb(44,160,44)', 'rgb(74,160,74)'],
30
+ 'light_green': ['rgb(152,223,138)', 'rgb(182, 223, 138)', 'rgb(152, 193, 138)'],
31
+ 'st_green': ['rgb(44,160,44)', 'rgb(152,223,138)', 'rgb(39, 174, 96)', 'rgb(74,160,74)'],
32
+ 'pink': ['rgb(247,182,210)'],
33
+ 'brown': ['rgb(140,86,75)', 'rgb(102, 62, 54)'],
34
+ 'gray': ['rgb(127,127,127)', 'rgb(199,199,199)', 'rgb(196,156,148)', 'rgb(222, 222, 180)'],
35
+ 'yellow': ['rgb(188,189,34)'],
36
+ 'white': ['rgb(230,230,230)'],
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxLXBhbGV0dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VxLXBhbGV0dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sT0FBTyxjQUFjO0lBMEJmLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBd0IsRUFBRSxVQUFVLEdBQUcsS0FBSztRQUN2RSxNQUFNLE9BQU8sR0FBOEIsRUFBRSxDQUFDO1FBQzlDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7QUFuQ0Q7R0FDRztBQUNZLDRCQUFhLEdBQWdDO0lBQzFELFFBQVEsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO0lBQzFGLFdBQVcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNwRyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQztJQUNuRixVQUFVLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0I7UUFDL0csbUJBQW1CLENBQUM7SUFDdEIsU0FBUyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkUsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7SUFDN0MsU0FBUyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUM7SUFDckQsWUFBWSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUM7SUFDOUYsWUFBWSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7SUFDMUUsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDdEYsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDN0MsYUFBYSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUM7SUFDL0UsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUM7SUFDeEYsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUM7SUFDNUIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7SUFDL0MsTUFBTSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7SUFDMUYsUUFBUSxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDN0IsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Q0FDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VxUGFsZXR0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbSBNb25vbWVyIGNoYXJhY3RlclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yXG4gICAqL1xuICBbbTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU2VxUGFsZXR0ZUJhc2Uge1xuICAvKiogUGFsZXR0ZSB3aXRoIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgY29sb3VyUGFsZXR0ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICAgICdvcmFuZ2UnOiBbJ3JnYigyNTUsMTg3LDEyMCknLCAncmdiKDI0NSwxNjcsMTAwKScsICdyZ2IoMjM1LDEzNyw3MCknLCAncmdiKDIwNSwgMTExLCA3MSknXSxcbiAgICAnYWxsX2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoNzQsMTYwLDc0KScsICdyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsXG4gICAgICAncmdiKDI0LDExMCw3OSknLCAncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMTgyLCAyMjMsIDEzOCknLCAncmdiKDE1MiwgMTkzLCAxMzgpJ10sXG4gICAgJ2FsbF9ibHVlJzogWydyZ2IoMzEsMTE5LDE4MCknLCAncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxMjIsIDEwMiwgMTg5KScsICdyZ2IoMTU4LDIxOCwyMjkpJywgJ3JnYigxNDEsIDEyNCwgMjE3KScsXG4gICAgICAncmdiKDMxLCAxMjAsIDE1MCknXSxcbiAgICAnbWFnZW50YSc6IFsncmdiKDE2MiwxMDYsMTkyKScsICdyZ2IoMTk3LDE2NSwyMjQpJywgJ3JnYigyMDgsMTEzLDIxOCknXSxcbiAgICAncmVkJzogWydyZ2IoMjE0LDM5LDQwKScsICdyZ2IoMjU1LDE1MiwxNTApJ10sXG4gICAgJ3N0X2JsdWUnOiBbJ3JnYigyMywxOTAsMjA3KScsICdyZ2IoMTU4LDIxOCwyMjkpJywgJ3JnYigzMSwxMTksMTgwKSddLFxuICAgICdkYXJrX2JsdWUnOiBbJ3JnYigzMSwxMTksMTgwKScsICdyZ2IoMzEsIDEyMCwgMTUwKSddLFxuICAgICdsaWdodF9ibHVlJzogWydyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDE1OCwyMTgsMjI5KScsICdyZ2IoMTA4LCAyMTgsIDIyOSknLCAncmdiKDIzLDE5MCwyMjcpJ10sXG4gICAgJ2xpbGFjX2JsdWUnOiBbJ3JnYigxMjQsMTAyLDIxMSknLCAncmdiKDE0OSwxMzQsMjE3KScsICdyZ2IoOTcsIDgxLCAxNTApJ10sXG4gICAgJ2RhcmtfZ3JlZW4nOiBbJ3JnYigyMywxMDMsNTcpJywgJ3JnYigzMCwxMTAsOTYpJywgJ3JnYig2MCwxMzEsOTUpJywgJ3JnYigyNCwxMTAsNzkpJ10sXG4gICAgJ2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoNzQsMTYwLDc0KSddLFxuICAgICdsaWdodF9ncmVlbic6IFsncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMTgyLCAyMjMsIDEzOCknLCAncmdiKDE1MiwgMTkzLCAxMzgpJ10sXG4gICAgJ3N0X2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoMTUyLDIyMywxMzgpJywgJ3JnYigzOSwgMTc0LCA5NiknLCAncmdiKDc0LDE2MCw3NCknXSxcbiAgICAncGluayc6IFsncmdiKDI0NywxODIsMjEwKSddLFxuICAgICdicm93bic6IFsncmdiKDE0MCw4Niw3NSknLCAncmdiKDEwMiwgNjIsIDU0KSddLFxuICAgICdncmF5JzogWydyZ2IoMTI3LDEyNywxMjcpJywgJ3JnYigxOTksMTk5LDE5OSknLCAncmdiKDE5NiwxNTYsMTQ4KScsICdyZ2IoMjIyLCAyMjIsIDE4MCknXSxcbiAgICAneWVsbG93JzogWydyZ2IoMTg4LDE4OSwzNCknXSxcbiAgICAnd2hpdGUnOiBbJ3JnYigyMzAsMjMwLDIzMCknXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgc3RhdGljIG1ha2VQYWxldHRlKGR0OiBbc3RyaW5nW10sIHN0cmluZ11bXSwgc2ltcGxpZmllZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgcGFsZXR0ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGR0LmZvckVhY2goKGNwKSA9PiB7XG4gICAgICBjb25zdCBvYmpMaXN0ID0gY3BbMF07XG4gICAgICBjb25zdCBjb2xvdXIgPSBjcFsxXTtcbiAgICAgIG9iakxpc3QuZm9yRWFjaCgob2JqLCBpbmQpID0+IHtcbiAgICAgICAgcGFsZXR0ZVtvYmpdID0gdGhpcy5jb2xvdXJQYWxldHRlW2NvbG91cl1bc2ltcGxpZmllZCA/IDAgOiBpbmRdO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhbGV0dGU7XG4gIH1cbn1cbiJdfQ==
@@ -1,62 +1,62 @@
1
- declare type SideChainScale = {
2
- [name: string]: number;
3
- };
4
- /**
5
- * Class to categorial encode/decode aligned amino acid residues sequence.
6
- *
7
- * @export
8
- * @class AlignedSequenceEncoder
9
- */
10
- export declare class AlignedSequenceEncoder {
11
- protected aa2num: SideChainScale;
12
- protected num2aa: {
13
- [code: number]: string;
14
- };
15
- constructor(scale?: string);
16
- /**
17
- * Truncate NH2 and -COOH terminals of the given sequence.
18
- *
19
- * @static
20
- * @param {string} seq The sequence provided.
21
- * @return {string} Truncated sequence.
22
- * @memberof AlignedSequenceEncoder
23
- */
24
- static _truncateSequence(seq: string): string;
25
- /**
26
- * Cuts auxiliary defises before a residue.
27
- *
28
- * @static
29
- * @param {string} seq The sequence to process.
30
- * @return {string} Processed sequence.
31
- * @memberof AlignedSequenceEncoder
32
- */
33
- static _dropDefises(seq: string): string;
34
- /**
35
- * Performs truncation and cutting auxiliary defises.
36
- *
37
- * @static
38
- * @param {string} sequence The sequence work under process.
39
- * @return {string} Result of cleaning.
40
- * @memberof AlignedSequenceEncoder
41
- */
42
- static clean(sequence: string): string;
43
- /**
44
- * Categorial encode of the sequence provided.
45
- *
46
- * @param {string} sequence The sequence.
47
- * @return {number[]} Encoded vector.
48
- * @memberof AlignedSequenceEncoder
49
- */
50
- encode(sequence: string): number[];
51
- encodeLettter(letter: string): number;
52
- /**
53
- * Decode the encoded vector into the sequence back.
54
- *
55
- * @param {number[]} value The vector encoded.
56
- * @return {string} Decoded sequence.
57
- * @memberof AlignedSequenceEncoder
58
- */
59
- decode(value: number[]): string;
60
- }
61
- export {};
1
+ declare type SideChainScale = {
2
+ [name: string]: number;
3
+ };
4
+ /**
5
+ * Class to categorial encode/decode aligned amino acid residues sequence.
6
+ *
7
+ * @export
8
+ * @class AlignedSequenceEncoder
9
+ */
10
+ export declare class AlignedSequenceEncoder {
11
+ protected aa2num: SideChainScale;
12
+ protected num2aa: {
13
+ [code: number]: string;
14
+ };
15
+ constructor(scale?: string);
16
+ /**
17
+ * Truncate NH2 and -COOH terminals of the given sequence.
18
+ *
19
+ * @static
20
+ * @param {string} seq The sequence provided.
21
+ * @return {string} Truncated sequence.
22
+ * @memberof AlignedSequenceEncoder
23
+ */
24
+ static _truncateSequence(seq: string): string;
25
+ /**
26
+ * Cuts auxiliary defises before a residue.
27
+ *
28
+ * @static
29
+ * @param {string} seq The sequence to process.
30
+ * @return {string} Processed sequence.
31
+ * @memberof AlignedSequenceEncoder
32
+ */
33
+ static _dropDefises(seq: string): string;
34
+ /**
35
+ * Performs truncation and cutting auxiliary defises.
36
+ *
37
+ * @static
38
+ * @param {string} sequence The sequence work under process.
39
+ * @return {string} Result of cleaning.
40
+ * @memberof AlignedSequenceEncoder
41
+ */
42
+ static clean(sequence: string): string;
43
+ /**
44
+ * Categorial encode of the sequence provided.
45
+ *
46
+ * @param {string} sequence The sequence.
47
+ * @return {number[]} Encoded vector.
48
+ * @memberof AlignedSequenceEncoder
49
+ */
50
+ encode(sequence: string): number[];
51
+ encodeLettter(letter: string): number;
52
+ /**
53
+ * Decode the encoded vector into the sequence back.
54
+ *
55
+ * @param {number[]} value The vector encoded.
56
+ * @return {string} Decoded sequence.
57
+ * @memberof AlignedSequenceEncoder
58
+ */
59
+ decode(value: number[]): string;
60
+ }
61
+ export {};
62
62
  //# sourceMappingURL=sequence-encoder.d.ts.map
@@ -1,155 +1,155 @@
1
- import { assert } from '@datagrok-libraries/utils/src/operations';
2
- class SideChainScales {
3
- static getAvailableScales() {
4
- return Object.entries(this.scales).map(([k, _]) => k);
5
- }
6
- static getScale(name) {
7
- assert(!(this.scales[name] === undefined), `Scale '${name}' was not found.`);
8
- return this.scales[name];
9
- }
10
- }
11
- SideChainScales.scales = {
12
- // Wimley-White interfacial hydrophobicity scale
13
- 'WimleyWhite': {
14
- '-': 0,
15
- 'A': 0.17,
16
- 'C': -0.24,
17
- 'D': -0.07,
18
- 'E': -0.01,
19
- 'F': -1.13,
20
- 'G': 0.01,
21
- 'H': 0.17,
22
- 'I': -0.31,
23
- 'K': 0.99,
24
- 'L': -0.56,
25
- 'M': -0.23,
26
- 'N': 0.42,
27
- 'P': 0.45,
28
- 'Q': 0.58,
29
- 'R': 0.81,
30
- 'S': 0.13,
31
- 'T': 0.14,
32
- 'V': 0.07,
33
- 'W': -1.85,
34
- 'Y': -0.94,
35
- },
36
- 'categorial': {
37
- '-': 0,
38
- 'A': 1,
39
- 'C': 2,
40
- 'D': 3,
41
- 'E': 4,
42
- 'F': 5,
43
- 'G': 6,
44
- 'H': 7,
45
- 'I': 8,
46
- 'K': 9,
47
- 'L': 10,
48
- 'M': 11,
49
- 'N': 12,
50
- 'P': 13,
51
- 'Q': 14,
52
- 'R': 15,
53
- 'S': 16,
54
- 'T': 17,
55
- 'V': 18,
56
- 'W': 19,
57
- 'Y': 20,
58
- },
59
- };
60
- /**
61
- * Class to categorial encode/decode aligned amino acid residues sequence.
62
- *
63
- * @export
64
- * @class AlignedSequenceEncoder
65
- */
66
- export class AlignedSequenceEncoder {
67
- constructor(scale = 'categorial') {
68
- this.aa2num = SideChainScales.getScale(scale);
69
- this.num2aa = {};
70
- Object.entries(this.aa2num).forEach(([k, v]) => (this.num2aa[v] = k));
71
- }
72
- /**
73
- * Truncate NH2 and -COOH terminals of the given sequence.
74
- *
75
- * @static
76
- * @param {string} seq The sequence provided.
77
- * @return {string} Truncated sequence.
78
- * @memberof AlignedSequenceEncoder
79
- */
80
- static _truncateSequence(seq) {
81
- let start = 0;
82
- let end = seq.length;
83
- const termina = ['NH2', 'COOH'];
84
- if (seq.startsWith(termina[0])) {
85
- const l = termina[0].length; // Cut only 'NH2' without following '-'.
86
- assert(seq[l] == '-', `Wrong sequence format: ${termina[0]} without following '-' in '${seq}'.`);
87
- start = l;
88
- }
89
- if (seq.endsWith(termina[1])) {
90
- const l = termina[1].length + 1; // Cut both 'COOH' and precending '-'.
91
- assert(seq[end - l] == '-', `Wrong sequence format: ${termina[1]} without '-' precending in '${seq}'.`);
92
- end -= l;
93
- }
94
- return seq.substring(start, end);
95
- }
96
- /**
97
- * Cuts auxiliary defises before a residue.
98
- *
99
- * @static
100
- * @param {string} seq The sequence to process.
101
- * @return {string} Processed sequence.
102
- * @memberof AlignedSequenceEncoder
103
- */
104
- static _dropDefises(seq) {
105
- return seq.replace(/(-)([^-]+)/g, '$2');
106
- }
107
- /**
108
- * Performs truncation and cutting auxiliary defises.
109
- *
110
- * @static
111
- * @param {string} sequence The sequence work under process.
112
- * @return {string} Result of cleaning.
113
- * @memberof AlignedSequenceEncoder
114
- */
115
- static clean(sequence) {
116
- return AlignedSequenceEncoder._dropDefises(AlignedSequenceEncoder._truncateSequence(sequence));
117
- }
118
- /**
119
- * Categorial encode of the sequence provided.
120
- *
121
- * @param {string} sequence The sequence.
122
- * @return {number[]} Encoded vector.
123
- * @memberof AlignedSequenceEncoder
124
- */
125
- encode(sequence) {
126
- const nItems = sequence.length;
127
- const values = new Array(nItems).fill(0);
128
- for (let i = 0; i < nItems; ++i) {
129
- const char = sequence[i];
130
- assert(char in this.aa2num, `Unknown char '${char}' found in sequence '${sequence}'`);
131
- values[i] = this.encodeLettter(char);
132
- }
133
- return values;
134
- }
135
- encodeLettter(letter) {
136
- return this.aa2num[letter];
137
- }
138
- /**
139
- * Decode the encoded vector into the sequence back.
140
- *
141
- * @param {number[]} value The vector encoded.
142
- * @return {string} Decoded sequence.
143
- * @memberof AlignedSequenceEncoder
144
- */
145
- decode(value) {
146
- let s = '';
147
- for (let i = 0; i < value.length; ++i) {
148
- const code = value[i];
149
- assert(code in this.num2aa, `Unknown code '${code}' found in vector '${value}'`);
150
- s += this.num2aa[code];
151
- }
152
- return s;
153
- }
154
- }
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcXVlbmNlLWVuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBS2hFLE1BQU0sZUFBZTtJQW1EbkIsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxVQUFVLElBQUksa0JBQWtCLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7QUF6RE0sc0JBQU0sR0FBNkI7SUFDeEMsZ0RBQWdEO0lBQ2hELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSxDQUFDO1FBQ04sR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUNWLEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFB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LElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLHNCQUFzQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWpGLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Fzc2VydH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvb3BlcmF0aW9ucyc7XHJcblxyXG50eXBlIFNpZGVDaGFpblNjYWxlID0ge1tuYW1lOiBzdHJpbmddOiBudW1iZXJ9O1xyXG50eXBlIFNpZGVDaGFpblNjYWxlQ29sbGVjdGlvbiA9IHtbbmFtZTogc3RyaW5nXTogU2lkZUNoYWluU2NhbGV9O1xyXG5cclxuY2xhc3MgU2lkZUNoYWluU2NhbGVzIHtcclxuICBzdGF0aWMgc2NhbGVzOiBTaWRlQ2hhaW5TY2FsZUNvbGxlY3Rpb24gPSB7XHJcbiAgICAvLyBXaW1sZXktV2hpdGUgaW50ZXJmYWNpYWwgaHlkcm9waG9iaWNpdHkgc2NhbGVcclxuICAgICdXaW1sZXlXaGl0ZSc6IHtcclxuICAgICAgJy0nOiAwLFxyXG4gICAgICAnQSc6IDAuMTcsXHJcbiAgICAgICdDJzogLTAuMjQsXHJcbiAgICAgICdEJzogLTAuMDcsIC8vIEFzcC06IDEuMjNcclxuICAgICAgJ0UnOiAtMC4wMSwgLy8gR2x1LTogMi4wMlxyXG4gICAgICAnRic6IC0xLjEzLCAvL1xyXG4gICAgICAnRyc6IDAuMDEsXHJcbiAgICAgICdIJzogMC4xNywgLy8gSGlzKzogMC45NlxyXG4gICAgICAnSSc6IC0wLjMxLFxyXG4gICAgICAnSyc6IDAuOTksIC8vIEx5cytcclxuICAgICAgJ0wnOiAtMC41NixcclxuICAgICAgJ00nOiAtMC4yMyxcclxuICAgICAgJ04nOiAwLjQyLFxyXG4gICAgICAnUCc6IDAuNDUsXHJcbiAgICAgICdRJzogMC41OCxcclxuICAgICAgJ1InOiAwLjgxLCAvLyBBcmcrXHJcbiAgICAgICdTJzogMC4xMyxcclxuICAgICAgJ1QnOiAwLjE0LFxyXG4gICAgICAnVic6IDAuMDcsXHJcbiAgICAgICdXJzogLTEuODUsXHJcbiAgICAgICdZJzogLTAuOTQsXHJcbiAgICB9LFxyXG4gICAgJ2NhdGVnb3JpYWwnOiB7XHJcbiAgICAgICctJzogMCxcclxuICAgICAgJ0EnOiAxLFxyXG4gICAgICAnQyc6IDIsXHJcbiAgICAgICdEJzogMyxcclxuICAgICAgJ0UnOiA0LFxyXG4gICAgICAnRic6IDUsXHJcbiAgICAgICdHJzogNixcclxuICAgICAgJ0gnOiA3LFxyXG4gICAgICAnSSc6IDgsXHJcbiAgICAgICdLJzogOSxcclxuICAgICAgJ0wnOiAxMCxcclxuICAgICAgJ00nOiAxMSxcclxuICAgICAgJ04nOiAxMixcclxuICAgICAgJ1AnOiAxMyxcclxuICAgICAgJ1EnOiAxNCxcclxuICAgICAgJ1InOiAxNSxcclxuICAgICAgJ1MnOiAxNixcclxuICAgICAgJ1QnOiAxNyxcclxuICAgICAgJ1YnOiAxOCxcclxuICAgICAgJ1cnOiAxOSxcclxuICAgICAgJ1knOiAyMCxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGdldEF2YWlsYWJsZVNjYWxlcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2FsZXMpLm1hcCgoW2ssIF9dKSA9PiBrKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRTY2FsZShuYW1lOiBzdHJpbmcpOiBTaWRlQ2hhaW5TY2FsZSB7XHJcbiAgICBhc3NlcnQoISh0aGlzLnNjYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSwgYFNjYWxlICcke25hbWV9JyB3YXMgbm90IGZvdW5kLmApO1xyXG4gICAgcmV0dXJuIHRoaXMuc2NhbGVzW25hbWVdO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENsYXNzIHRvIGNhdGVnb3JpYWwgZW5jb2RlL2RlY29kZSBhbGlnbmVkIGFtaW5vIGFjaWQgcmVzaWR1ZXMgc2VxdWVuY2UuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyIHtcclxuICBwcm90ZWN0ZWQgYWEybnVtOiBTaWRlQ2hhaW5TY2FsZTtcclxuICBwcm90ZWN0ZWQgbnVtMmFhOiB7W2NvZGU6IG51bWJlcl06IHN0cmluZ307XHJcblxyXG4gIGNvbnN0cnVjdG9yKHNjYWxlOiBzdHJpbmcgPSAnY2F0ZWdvcmlhbCcpIHtcclxuICAgIHRoaXMuYWEybnVtID0gU2lkZUNoYWluU2NhbGVzLmdldFNjYWxlKHNjYWxlKTtcclxuICAgIHRoaXMubnVtMmFhID0ge307XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmFhMm51bSkuZm9yRWFjaCgoW2ssIHZdKSA9PiAodGhpcy5udW0yYWFbdl0gPSBrKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIFRydW5jYXRlIE5IMiBhbmQgLUNPT0ggdGVybWluYWxzIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc3RhdGljXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVHJ1bmNhdGVkIHNlcXVlbmNlLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gIHN0YXRpYyBfdHJ1bmNhdGVTZXF1ZW5jZShzZXE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RhcnQgPSAwO1xyXG4gICAgbGV0IGVuZCA9IHNlcS5sZW5ndGg7XHJcbiAgICBjb25zdCB0ZXJtaW5hID0gWydOSDInLCAnQ09PSCddO1xyXG5cclxuICAgIGlmIChzZXEuc3RhcnRzV2l0aCh0ZXJtaW5hWzBdKSkge1xyXG4gICAgICBjb25zdCBsID0gdGVybWluYVswXS5sZW5ndGg7IC8vIEN1dCBvbmx5ICdOSDInIHdpdGhvdXQgZm9sbG93aW5nICctJy5cclxuICAgICAgYXNzZXJ0KHNlcVtsXSA9PSAnLScsIGBXcm9uZyBzZXF1ZW5jZSBmb3JtYXQ6ICR7dGVybWluYVswXX0gd2l0aG91dCBmb2xsb3dpbmcgJy0nIGluICcke3NlcX0nLmApO1xyXG4gICAgICBzdGFydCA9IGw7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VxLmVuZHNXaXRoKHRlcm1pbmFbMV0pKSB7XHJcbiAgICAgIGNvbnN0IGwgPSB0ZXJtaW5hWzFdLmxlbmd0aCsxOyAvLyBDdXQgYm90aCAnQ09PSCcgYW5kIHByZWNlbmRpbmcgJy0nLlxyXG4gICAgICBhc3NlcnQoc2VxW2VuZC1sXSA9PSAnLScsIGBXcm9uZyBzZXF1ZW5jZSBmb3JtYXQ6ICR7dGVybWluYVsxXX0gd2l0aG91dCAnLScgcHJlY2VuZGluZyBpbiAnJHtzZXF9Jy5gKTtcclxuICAgICAgZW5kIC09IGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VxLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgICogQ3V0cyBhdXhpbGlhcnkgZGVmaXNlcyBiZWZvcmUgYSByZXNpZHVlLlxyXG4gICAgICpcclxuICAgICAqIEBzdGF0aWNcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXEgVGhlIHNlcXVlbmNlIHRvIHByb2Nlc3MuXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFByb2Nlc3NlZCBzZXF1ZW5jZS5cclxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXHJcbiAgICAgKi9cclxuICBzdGF0aWMgX2Ryb3BEZWZpc2VzKHNlcTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzZXEucmVwbGFjZSgvKC0pKFteLV0rKS9nLCAnJDInKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdHJ1bmNhdGlvbiBhbmQgY3V0dGluZyBhdXhpbGlhcnkgZGVmaXNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAc3RhdGljXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxdWVuY2UgVGhlIHNlcXVlbmNlIHdvcmsgdW5kZXIgcHJvY2Vzcy5cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmVzdWx0IG9mIGNsZWFuaW5nLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gIHN0YXRpYyBjbGVhbihzZXF1ZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl9kcm9wRGVmaXNlcyhBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl90cnVuY2F0ZVNlcXVlbmNlKHNlcXVlbmNlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIENhdGVnb3JpYWwgZW5jb2RlIG9mIHRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxdWVuY2UgVGhlIHNlcXVlbmNlLlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEVuY29kZWQgdmVjdG9yLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gIHB1YmxpYyBlbmNvZGUoc2VxdWVuY2U6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IG5JdGVtcyA9IHNlcXVlbmNlLmxlbmd0aDtcclxuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBBcnJheShuSXRlbXMpLmZpbGwoMCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xyXG4gICAgICBjb25zdCBjaGFyID0gc2VxdWVuY2VbaV07XHJcblxyXG4gICAgICBhc3NlcnQoY2hhciBpbiB0aGlzLmFhMm51bSwgYFVua25vd24gY2hhciAnJHtjaGFyfScgZm91bmQgaW4gc2VxdWVuY2UgJyR7c2VxdWVuY2V9J2ApO1xyXG5cclxuICAgICAgdmFsdWVzW2ldID0gdGhpcy5lbmNvZGVMZXR0dGVyKGNoYXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmNvZGVMZXR0dGVyKGxldHRlcjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFhMm51bVtsZXR0ZXJdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gdmFsdWUgVGhlIHZlY3RvciBlbmNvZGVkLlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gIHB1YmxpYyBkZWNvZGUodmFsdWU6IG51bWJlcltdKTogc3RyaW5nIHtcclxuICAgIGxldCBzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWx1ZVtpXTtcclxuXHJcbiAgICAgIGFzc2VydChjb2RlIGluIHRoaXMubnVtMmFhLCBgVW5rbm93biBjb2RlICcke2NvZGV9JyBmb3VuZCBpbiB2ZWN0b3IgJyR7dmFsdWV9J2ApO1xyXG5cclxuICAgICAgcyArPSB0aGlzLm51bTJhYVtjb2RlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { assert } from '@datagrok-libraries/utils/src/vector-operations';
2
+ class SideChainScales {
3
+ static getAvailableScales() {
4
+ return Object.entries(this.scales).map(([k, _]) => k);
5
+ }
6
+ static getScale(name) {
7
+ assert(!(this.scales[name] === undefined), `Scale '${name}' was not found.`);
8
+ return this.scales[name];
9
+ }
10
+ }
11
+ SideChainScales.scales = {
12
+ // Wimley-White interfacial hydrophobicity scale
13
+ 'WimleyWhite': {
14
+ '-': 0,
15
+ 'A': 0.17,
16
+ 'C': -0.24,
17
+ 'D': -0.07,
18
+ 'E': -0.01,
19
+ 'F': -1.13,
20
+ 'G': 0.01,
21
+ 'H': 0.17,
22
+ 'I': -0.31,
23
+ 'K': 0.99,
24
+ 'L': -0.56,
25
+ 'M': -0.23,
26
+ 'N': 0.42,
27
+ 'P': 0.45,
28
+ 'Q': 0.58,
29
+ 'R': 0.81,
30
+ 'S': 0.13,
31
+ 'T': 0.14,
32
+ 'V': 0.07,
33
+ 'W': -1.85,
34
+ 'Y': -0.94,
35
+ },
36
+ 'categorial': {
37
+ '-': 0,
38
+ 'A': 1,
39
+ 'C': 2,
40
+ 'D': 3,
41
+ 'E': 4,
42
+ 'F': 5,
43
+ 'G': 6,
44
+ 'H': 7,
45
+ 'I': 8,
46
+ 'K': 9,
47
+ 'L': 10,
48
+ 'M': 11,
49
+ 'N': 12,
50
+ 'P': 13,
51
+ 'Q': 14,
52
+ 'R': 15,
53
+ 'S': 16,
54
+ 'T': 17,
55
+ 'V': 18,
56
+ 'W': 19,
57
+ 'Y': 20,
58
+ },
59
+ };
60
+ /**
61
+ * Class to categorial encode/decode aligned amino acid residues sequence.
62
+ *
63
+ * @export
64
+ * @class AlignedSequenceEncoder
65
+ */
66
+ export class AlignedSequenceEncoder {
67
+ constructor(scale = 'categorial') {
68
+ this.aa2num = SideChainScales.getScale(scale);
69
+ this.num2aa = {};
70
+ Object.entries(this.aa2num).forEach(([k, v]) => (this.num2aa[v] = k));
71
+ }
72
+ /**
73
+ * Truncate NH2 and -COOH terminals of the given sequence.
74
+ *
75
+ * @static
76
+ * @param {string} seq The sequence provided.
77
+ * @return {string} Truncated sequence.
78
+ * @memberof AlignedSequenceEncoder
79
+ */
80
+ static _truncateSequence(seq) {
81
+ let start = 0;
82
+ let end = seq.length;
83
+ const termina = ['NH2', 'COOH'];
84
+ if (seq.startsWith(termina[0])) {
85
+ const l = termina[0].length; // Cut only 'NH2' without following '-'.
86
+ assert(seq[l] == '-', `Wrong sequence format: ${termina[0]} without following '-' in '${seq}'.`);
87
+ start = l;
88
+ }
89
+ if (seq.endsWith(termina[1])) {
90
+ const l = termina[1].length + 1; // Cut both 'COOH' and precending '-'.
91
+ assert(seq[end - l] == '-', `Wrong sequence format: ${termina[1]} without '-' precending in '${seq}'.`);
92
+ end -= l;
93
+ }
94
+ return seq.substring(start, end);
95
+ }
96
+ /**
97
+ * Cuts auxiliary defises before a residue.
98
+ *
99
+ * @static
100
+ * @param {string} seq The sequence to process.
101
+ * @return {string} Processed sequence.
102
+ * @memberof AlignedSequenceEncoder
103
+ */
104
+ static _dropDefises(seq) {
105
+ return seq.replace(/(-)([^-]+)/g, '$2');
106
+ }
107
+ /**
108
+ * Performs truncation and cutting auxiliary defises.
109
+ *
110
+ * @static
111
+ * @param {string} sequence The sequence work under process.
112
+ * @return {string} Result of cleaning.
113
+ * @memberof AlignedSequenceEncoder
114
+ */
115
+ static clean(sequence) {
116
+ return AlignedSequenceEncoder._dropDefises(AlignedSequenceEncoder._truncateSequence(sequence));
117
+ }
118
+ /**
119
+ * Categorial encode of the sequence provided.
120
+ *
121
+ * @param {string} sequence The sequence.
122
+ * @return {number[]} Encoded vector.
123
+ * @memberof AlignedSequenceEncoder
124
+ */
125
+ encode(sequence) {
126
+ const nItems = sequence.length;
127
+ const values = new Array(nItems).fill(0);
128
+ for (let i = 0; i < nItems; ++i) {
129
+ const char = sequence[i];
130
+ assert(char in this.aa2num, `Unknown char '${char}' found in sequence '${sequence}'`);
131
+ values[i] = this.encodeLettter(char);
132
+ }
133
+ return values;
134
+ }
135
+ encodeLettter(letter) {
136
+ return this.aa2num[letter];
137
+ }
138
+ /**
139
+ * Decode the encoded vector into the sequence back.
140
+ *
141
+ * @param {number[]} value The vector encoded.
142
+ * @return {string} Decoded sequence.
143
+ * @memberof AlignedSequenceEncoder
144
+ */
145
+ decode(value) {
146
+ let s = '';
147
+ for (let i = 0; i < value.length; ++i) {
148
+ const code = value[i];
149
+ assert(code in this.num2aa, `Unknown code '${code}' found in vector '${value}'`);
150
+ s += this.num2aa[code];
151
+ }
152
+ return s;
153
+ }
154
+ }
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcXVlbmNlLWVuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBS3ZFLE1BQU0sZUFBZTtJQW1EbkIsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxVQUFVLElBQUksa0JBQWtCLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7QUF6RE0sc0JBQU0sR0FBNkI7SUFDeEMsZ0RBQWdEO0lBQ2hELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSxDQUFDO1FBQ04sR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUNWLEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDVixHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ1YsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFB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LElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLHNCQUFzQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWpGLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Fzc2VydH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuXG50eXBlIFNpZGVDaGFpblNjYWxlID0ge1tuYW1lOiBzdHJpbmddOiBudW1iZXJ9O1xudHlwZSBTaWRlQ2hhaW5TY2FsZUNvbGxlY3Rpb24gPSB7W25hbWU6IHN0cmluZ106IFNpZGVDaGFpblNjYWxlfTtcblxuY2xhc3MgU2lkZUNoYWluU2NhbGVzIHtcbiAgc3RhdGljIHNjYWxlczogU2lkZUNoYWluU2NhbGVDb2xsZWN0aW9uID0ge1xuICAgIC8vIFdpbWxleS1XaGl0ZSBpbnRlcmZhY2lhbCBoeWRyb3Bob2JpY2l0eSBzY2FsZVxuICAgICdXaW1sZXlXaGl0ZSc6IHtcbiAgICAgICctJzogMCxcbiAgICAgICdBJzogMC4xNyxcbiAgICAgICdDJzogLTAuMjQsXG4gICAgICAnRCc6IC0wLjA3LCAvLyBBc3AtOiAxLjIzXG4gICAgICAnRSc6IC0wLjAxLCAvLyBHbHUtOiAyLjAyXG4gICAgICAnRic6IC0xLjEzLCAvL1xuICAgICAgJ0cnOiAwLjAxLFxuICAgICAgJ0gnOiAwLjE3LCAvLyBIaXMrOiAwLjk2XG4gICAgICAnSSc6IC0wLjMxLFxuICAgICAgJ0snOiAwLjk5LCAvLyBMeXMrXG4gICAgICAnTCc6IC0wLjU2LFxuICAgICAgJ00nOiAtMC4yMyxcbiAgICAgICdOJzogMC40MixcbiAgICAgICdQJzogMC40NSxcbiAgICAgICdRJzogMC41OCxcbiAgICAgICdSJzogMC44MSwgLy8gQXJnK1xuICAgICAgJ1MnOiAwLjEzLFxuICAgICAgJ1QnOiAwLjE0LFxuICAgICAgJ1YnOiAwLjA3LFxuICAgICAgJ1cnOiAtMS44NSxcbiAgICAgICdZJzogLTAuOTQsXG4gICAgfSxcbiAgICAnY2F0ZWdvcmlhbCc6IHtcbiAgICAgICctJzogMCxcbiAgICAgICdBJzogMSxcbiAgICAgICdDJzogMixcbiAgICAgICdEJzogMyxcbiAgICAgICdFJzogNCxcbiAgICAgICdGJzogNSxcbiAgICAgICdHJzogNixcbiAgICAgICdIJzogNyxcbiAgICAgICdJJzogOCxcbiAgICAgICdLJzogOSxcbiAgICAgICdMJzogMTAsXG4gICAgICAnTSc6IDExLFxuICAgICAgJ04nOiAxMixcbiAgICAgICdQJzogMTMsXG4gICAgICAnUSc6IDE0LFxuICAgICAgJ1InOiAxNSxcbiAgICAgICdTJzogMTYsXG4gICAgICAnVCc6IDE3LFxuICAgICAgJ1YnOiAxOCxcbiAgICAgICdXJzogMTksXG4gICAgICAnWSc6IDIwLFxuICAgIH0sXG4gIH07XG5cbiAgc3RhdGljIGdldEF2YWlsYWJsZVNjYWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NhbGVzKS5tYXAoKFtrLCBfXSkgPT4gayk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U2NhbGUobmFtZTogc3RyaW5nKTogU2lkZUNoYWluU2NhbGUge1xuICAgIGFzc2VydCghKHRoaXMuc2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQpLCBgU2NhbGUgJyR7bmFtZX0nIHdhcyBub3QgZm91bmQuYCk7XG4gICAgcmV0dXJuIHRoaXMuc2NhbGVzW25hbWVdO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3MgdG8gY2F0ZWdvcmlhbCBlbmNvZGUvZGVjb2RlIGFsaWduZWQgYW1pbm8gYWNpZCByZXNpZHVlcyBzZXF1ZW5jZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICovXG5leHBvcnQgY2xhc3MgQWxpZ25lZFNlcXVlbmNlRW5jb2RlciB7XG4gIHByb3RlY3RlZCBhYTJudW06IFNpZGVDaGFpblNjYWxlO1xuICBwcm90ZWN0ZWQgbnVtMmFhOiB7W2NvZGU6IG51bWJlcl06IHN0cmluZ307XG5cbiAgY29uc3RydWN0b3Ioc2NhbGU6IHN0cmluZyA9ICdjYXRlZ29yaWFsJykge1xuICAgIHRoaXMuYWEybnVtID0gU2lkZUNoYWluU2NhbGVzLmdldFNjYWxlKHNjYWxlKTtcbiAgICB0aGlzLm51bTJhYSA9IHt9O1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWEybnVtKS5mb3JFYWNoKChbaywgdl0pID0+ICh0aGlzLm51bTJhYVt2XSA9IGspKTtcbiAgfVxuXG4gIC8qKlxuICAgICAqIFRydW5jYXRlIE5IMiBhbmQgLUNPT0ggdGVybWluYWxzIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRydW5jYXRlZCBzZXF1ZW5jZS5cbiAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAqL1xuICBzdGF0aWMgX3RydW5jYXRlU2VxdWVuY2Uoc2VxOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IGVuZCA9IHNlcS5sZW5ndGg7XG4gICAgY29uc3QgdGVybWluYSA9IFsnTkgyJywgJ0NPT0gnXTtcblxuICAgIGlmIChzZXEuc3RhcnRzV2l0aCh0ZXJtaW5hWzBdKSkge1xuICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMF0ubGVuZ3RoOyAvLyBDdXQgb25seSAnTkgyJyB3aXRob3V0IGZvbGxvd2luZyAnLScuXG4gICAgICBhc3NlcnQoc2VxW2xdID09ICctJywgYFdyb25nIHNlcXVlbmNlIGZvcm1hdDogJHt0ZXJtaW5hWzBdfSB3aXRob3V0IGZvbGxvd2luZyAnLScgaW4gJyR7c2VxfScuYCk7XG4gICAgICBzdGFydCA9IGw7XG4gICAgfVxuICAgIGlmIChzZXEuZW5kc1dpdGgodGVybWluYVsxXSkpIHtcbiAgICAgIGNvbnN0IGwgPSB0ZXJtaW5hWzFdLmxlbmd0aCsxOyAvLyBDdXQgYm90aCAnQ09PSCcgYW5kIHByZWNlbmRpbmcgJy0nLlxuICAgICAgYXNzZXJ0KHNlcVtlbmQtbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMV19IHdpdGhvdXQgJy0nIHByZWNlbmRpbmcgaW4gJyR7c2VxfScuYCk7XG4gICAgICBlbmQgLT0gbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlcS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICAgKiBDdXRzIGF1eGlsaWFyeSBkZWZpc2VzIGJlZm9yZSBhIHJlc2lkdWUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcSBUaGUgc2VxdWVuY2UgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFByb2Nlc3NlZCBzZXF1ZW5jZS5cbiAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAqL1xuICBzdGF0aWMgX2Ryb3BEZWZpc2VzKHNlcTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VxLnJlcGxhY2UoLygtKShbXi1dKykvZywgJyQyJyk7XG4gIH1cblxuICAvKipcbiAgICAgKiBQZXJmb3JtcyB0cnVuY2F0aW9uIGFuZCBjdXR0aW5nIGF1eGlsaWFyeSBkZWZpc2VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2Ugd29yayB1bmRlciBwcm9jZXNzLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmVzdWx0IG9mIGNsZWFuaW5nLlxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXG4gICAgICovXG4gIHN0YXRpYyBjbGVhbihzZXF1ZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5fZHJvcERlZmlzZXMoQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5fdHJ1bmNhdGVTZXF1ZW5jZShzZXF1ZW5jZSkpO1xuICB9XG5cbiAgLyoqXG4gICAgICogQ2F0ZWdvcmlhbCBlbmNvZGUgb2YgdGhlIHNlcXVlbmNlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcXVlbmNlIFRoZSBzZXF1ZW5jZS5cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gRW5jb2RlZCB2ZWN0b3IuXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgKi9cbiAgcHVibGljIGVuY29kZShzZXF1ZW5jZTogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG5JdGVtcyA9IHNlcXVlbmNlLmxlbmd0aDtcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgQXJyYXkobkl0ZW1zKS5maWxsKDApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgY29uc3QgY2hhciA9IHNlcXVlbmNlW2ldO1xuXG4gICAgICBhc3NlcnQoY2hhciBpbiB0aGlzLmFhMm51bSwgYFVua25vd24gY2hhciAnJHtjaGFyfScgZm91bmQgaW4gc2VxdWVuY2UgJyR7c2VxdWVuY2V9J2ApO1xuXG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmVuY29kZUxldHR0ZXIoY2hhcik7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZW5jb2RlTGV0dHRlcihsZXR0ZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWEybnVtW2xldHRlcl07XG4gIH1cblxuICAvKipcbiAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSB2YWx1ZSBUaGUgdmVjdG9yIGVuY29kZWQuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXG4gICAgICovXG4gIHB1YmxpYyBkZWNvZGUodmFsdWU6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgICBsZXQgczogc3RyaW5nID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBjb2RlID0gdmFsdWVbaV07XG5cbiAgICAgIGFzc2VydChjb2RlIGluIHRoaXMubnVtMmFhLCBgVW5rbm93biBjb2RlICcke2NvZGV9JyBmb3VuZCBpbiB2ZWN0b3IgJyR7dmFsdWV9J2ApO1xuXG4gICAgICBzICs9IHRoaXMubnVtMmFhW2NvZGVdO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxufVxuIl19
@@ -0,0 +1,67 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import { StringDictionary } from '@datagrok-libraries/utils/src/type-declarations';
3
+ declare module 'datagrok-api/src/grid' {
4
+ interface Rect {
5
+ contains(x: number, y: number): boolean;
6
+ }
7
+ }
8
+ declare global {
9
+ interface HTMLCanvasElement {
10
+ getCursorPosition(event: MouseEvent): DG.Point;
11
+ }
12
+ }
13
+ export declare class PositionMonomerInfo {
14
+ /** Sequences count with monomer in position
15
+ */
16
+ count: number;
17
+ /** Remember screen coords rect
18
+ */
19
+ bounds: DG.Rect;
20
+ constructor();
21
+ }
22
+ export declare class PositionInfo {
23
+ readonly name: string;
24
+ freq: {
25
+ [m: string]: PositionMonomerInfo;
26
+ };
27
+ rowCount: number;
28
+ /** freq = {}, rowCount = 0
29
+ * @param {string} name Name of position ('111A', '111.1', etc)
30
+ */
31
+ constructor(name: string);
32
+ }
33
+ export declare class WebLogo extends DG.JsViewer {
34
+ static residuesSet: string;
35
+ protected cp: StringDictionary | null;
36
+ private canvas?;
37
+ private slider?;
38
+ private textBaseline;
39
+ private axisHeight;
40
+ private positionWidth;
41
+ private seqCol;
42
+ private positions;
43
+ private rowsMasked;
44
+ private rowsNull;
45
+ minHeight: number;
46
+ maxHeight: number;
47
+ considerNullSequences: boolean;
48
+ sequenceColumnName: string;
49
+ startPositionName: string;
50
+ endPositionName: string;
51
+ private positionNames;
52
+ private startPosition;
53
+ private endPosition;
54
+ private get Length();
55
+ constructor();
56
+ init(): Promise<void>;
57
+ rootOnSizeChanged(args: any): void;
58
+ /** Assigns {@link seqCol} and {@link cp} based on {@link sequenceColumnName} and calls {@link render}().
59
+ */
60
+ updateSeqCol(): void;
61
+ onPropertyChanged(property: DG.Property): void;
62
+ onTableAttached(): void;
63
+ protected _nullSequence(fillerResidue?: string): string;
64
+ protected _calculate(): void;
65
+ render(recalc?: boolean): void;
66
+ }
67
+ //# sourceMappingURL=web-logo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-logo.d.ts","sourceRoot":"","sources":["web-logo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAC,gBAAgB,EAAC,MAAM,iDAAiD,CAAC;AAOjF,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,IAAI;QACZ,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACzC;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;KAChD;CACF;AAWD,qBAAa,mBAAmB;IAC9B;OACG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;OACG;IACH,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;;CAMjB;AAED,qBAAa,YAAY;IACvB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;gBACS,IAAI,EAAE,MAAM;CAKzB;AAED,qBAAa,OAAQ,SAAQ,EAAE,CAAC,QAAQ;IACtC,OAAc,WAAW,SAAiB;IAG1C,SAAS,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAG7C,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,MAAM,CAA0B;IAExC,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAGtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,KAAK,MAAM,GAAgE;;IAiB5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmF3B,iBAAiB,CAAC,IAAI,EAAE,GAAG;IAmB3B;OACG;IACH,YAAY,IAAI,IAAI;IAuCpB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAyB9C,eAAe;IAiBf,SAAS,CAAC,aAAa,CAAC,aAAa,SAAM,GAAG,MAAM;IAOpD,SAAS,CAAC,UAAU;IAoFpB,MAAM,CAAC,MAAM,UAAO;CA8DrB"}