@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.
- package/.eslintrc.json +51 -29
- package/detectors.js +47 -0
- package/package.json +42 -42
- package/src/aminoacids.d.ts +31 -0
- package/src/aminoacids.d.ts.map +1 -0
- package/src/aminoacids.js +226 -0
- package/src/index.d.ts +7 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +6 -0
- package/src/index.ts +8 -0
- package/src/nucleotides.d.ts +12 -0
- package/src/nucleotides.d.ts.map +1 -0
- package/src/nucleotides.js +27 -0
- package/src/package.d.ts +1 -0
- package/src/package.d.ts.map +1 -0
- package/src/package.js +2 -0
- package/src/seq-palettes.d.ts +16 -0
- package/src/seq-palettes.d.ts.map +1 -0
- package/src/seq-palettes.js +38 -0
- package/src/sequence-encoder.d.ts +61 -61
- package/src/sequence-encoder.js +155 -155
- package/src/viewers/web-logo.d.ts +67 -0
- package/src/viewers/web-logo.d.ts.map +1 -0
- package/src/viewers/web-logo.js +345 -0
- package/tsconfig.json +71 -71
|
@@ -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
|
package/src/sequence-encoder.js
CHANGED
|
@@ -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"}
|