@datagrok/helm 2.1.12 → 2.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/package.json +2 -2
- package/src/cell-renderer.ts +59 -50
- package/src/helm-monomer-placer.ts +78 -0
- package/src/package.ts +11 -4
- package/src/tests/findMonomers-tests.ts +3 -2
- package/src/tests/helm-tests.ts +1 -1
- package/src/utils.ts +12 -12
package/dist/package.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.js","mappings":"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","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"grok\"","webpack://helm/external var \"ui\"","webpack://helm/external var \"DG\"","webpack://helm/./src/helm-web-editor.ts","webpack://helm/./src/utils.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/monomer-utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/cell-renderer.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/to-console.ts","webpack://helm/./src/cell-renderer.ts","webpack://helm/notation-converter.ts","webpack://helm/./src/package.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","const __WEBPACK_NAMESPACE_OBJECT__ = ui;","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nexport class HelmWebEditor {\n host: any;\n editor: any;\n w = 200;\n h = 100;\n constructor() {\n this.host = ui.div([], {style: {width: `${this.w}px`, height: `${this.h}px`}});\n this.editor = new JSDraw2.Editor(this.host, {width: this.w, height: this.h, viewonly: true});\n }\n\n resizeEditor(w: number, h: number) {\n this.editor.setSize(w, h);\n }\n\n createWebEditor(value: string) {\n const editorView = ui.div();\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const webEditor = new scil.helm.App(editorView, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = webEditor.calculateSizes();\n webEditor.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(webEditor.sequence.style, s);\n //@ts-ignore\n scil.apply(webEditor.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + webEditor.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(webEditor.properties.parent.style, s);\n webEditor.structureview.resize(sizes.rightwidth, sizes.bottomheight + webEditor.toolbarheight);\n webEditor.mex.resize(sizes.topheight - 80);\n setTimeout(function() {\n webEditor.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n return {editorDiv: editorView, webEditor: webEditor};\n }\n}\n\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements =[firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\nexport function findMonomers(helmString: string) {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n const splitString = parseHelm(helmString);\n return new Set(splitString.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n",null,"/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as ui from 'datagrok-api/ui';\nimport * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n\nexport function errorToConsole(err: any): string {\n if (typeof err === 'string' || err instanceof String) {\n return err as string;\n } else if ((typeof err == 'object' || err instanceof Object) && '$thrownJsError' in err) {\n return errorToConsole(err['$thrownJsError']);\n } else if (err instanceof Error) {\n return (err as Error).stack ?? (err as Error).message;\n } else {\n return err.toString();\n }\n}\n\nexport function rectToConsole(rect: DG.Rect): string {\n return `(x=${rect.x}, y=${rect.y}, w=${rect.width}, h=${rect.height})`;\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from './package';\nimport {findMonomers, parseHelm, getParts} from './utils';\nimport {printLeftOrCentered} from '@datagrok-libraries/bio/src/utils/cell-renderer';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\n\nconst enum tempTAGS {\n helmSumMaxLengthWords = 'helm-sum-maxLengthWords',\n helmMaxLengthWords = 'helm-maxLengthWords',\n}\n// Global flag is for replaceAll\nconst helmGapStartRe = /\\{(\\*\\.)+/g;\nconst helmGapIntRe = /\\.(\\*\\.)+/g;\nconst helmGapEndRe = /(\\.\\*)+\\}/g;\n\ntype TempType = { [tagName: string]: any };\n\n/** Helm cell renderer in case of no missed monomer draws with JSDraw2.Editor (webeditor),\n * in case of missed monomers presented, draws linear sequences aligned in width per monomer.\n */\nexport class HelmCellRenderer extends DG.GridCellRenderer {\n get name() { return 'helm'; }\n\n get cellType() { return 'helm'; }\n\n get defaultWidth(): number | null { return 400; }\n\n get defaultHeight(): number | null { return 100; }\n\n onMouseMove(gridCell: DG.GridCell, e: MouseEvent): void {\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const colTemp: TempType[] = tableCol.temp ?? new Array<TempType>(tableCol.length);\n // Exit if no missed monomers (tags are not presented in colTemp)\n if (!colTemp || Object.keys(colTemp).length == 0) return;\n\n const maxLengthWordsSum: { [pos: number]: number } = colTemp[tempTAGS.helmSumMaxLengthWords];\n const maxLengthWords: { [pos: number]: number } = colTemp[tempTAGS.helmMaxLengthWords];\n\n const maxIndex = Object.values(maxLengthWords).length - 1;\n const argsX = e.offsetX - gridCell.gridColumn.left + (gridCell.gridColumn.left - gridCell.bounds.x);\n let left = 0;\n let right = maxIndex;\n let found = false;\n maxLengthWordsSum[maxIndex + 1] = argsX + 1;\n let mid = 0;\n if (argsX > maxLengthWordsSum[0]) {\n while (!found) {\n mid = Math.floor((right + left) / 2);\n if (argsX >= maxLengthWordsSum[mid] && argsX <= maxLengthWordsSum[mid + 1]) {\n left = mid;\n found = true;\n } else if (argsX < maxLengthWordsSum[mid]) {\n right = mid - 1;\n } else if (argsX > maxLengthWordsSum[mid + 1]) {\n left = mid + 1;\n }\n if (left == right)\n found = true;\n }\n }\n left = (argsX >= maxLengthWordsSum[left]) ? left + 1 : left;\n const monomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n const allParts: string[] = getParts(subParts, s);\n const tooltipMessage: HTMLElement[] = [];\n for (let partI = 0; partI < allParts.length; ++partI) {\n if (monomers.has(allParts[partI])) {\n tooltipMessage[partI] = ui.divV([\n ui.divText(`Monomer ${allParts[partI]} not found.`),\n ui.divText('Open the Context Panel, then expand Manage Libraries')\n ]);\n }\n }\n\n (((tooltipMessage[left]?.childNodes.length ?? 0) > 0)) ?\n ui.tooltip.show(ui.div(tooltipMessage[left]), e.x + 16, e.y + 16) :\n ui.tooltip.hide();\n } catch (err: any) {\n const errMsg: string = errorToConsole(err);\n console.error('Helm: HelmCellRenderer.onMouseMove() error:\\n' + errMsg);\n }\n }\n\n render(g: CanvasRenderingContext2D, x: number, y: number, w: number, h: number,\n gridCell: DG.GridCell, cellStyle: DG.GridCellStyle\n ) {\n g.save();\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const grid = gridCell.gridRow !== -1 ? gridCell.grid : undefined;\n const undefinedColor = 'rgb(100,100,100)';\n const grayColor = '#808080';\n\n const missedMonomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n\n if (missedMonomers.size == 0) {\n const host = ui.div([], {style: {width: `${w}px`, height: `${h}px`}});\n host.setAttribute('dataformat', 'helm');\n host.setAttribute('data', gridCell.cell.value);\n gridCell.element = host;\n //@ts-ignore\n const canvas = new JSDraw2.Editor(host, {width: w, height: h, skin: 'w8', viewonly: true});\n return;\n }\n\n if (missedMonomers.size > 0) {\n if (!grid) {\n const r = window.devicePixelRatio;\n h = 28;\n g.canvas.height = h*r;\n g.canvas.style.height = `${h}px`;\n }\n const maxLengthWords: number[] = tableCol.temp[tempTAGS.helmMaxLengthWords] ?? [];\n if (subParts.length > maxLengthWords.length)\n maxLengthWords.push(...(new Array<number>(subParts.length - maxLengthWords.length).fill(-1)));\n\n w = grid ? Math.min(grid.canvas.width - x, w) : g.canvas.width - x;\n g.save();\n g.beginPath();\n g.rect(x, y, w, h);\n g.clip();\n g.font = '12px monospace';\n g.textBaseline = 'top';\n let x1 = x;\n const allParts: string[] = getParts(subParts, s);\n for (let i = 0; i < allParts.length; ++i) {\n maxLengthWords[i] = Math.max(maxLengthWords[i], allParts[i].length * 7); /* What is 7, width of char ? */\n const color = missedMonomers.has(allParts[i]) ? 'red' : grayColor;\n g.fillStyle = undefinedColor;\n x1 = printLeftOrCentered(x1, y, w, h, g, allParts[i], color, 0, true, 1.0);\n }\n\n const maxLengthWordSum: number[] = new Array<number>(maxLengthWords.length);\n maxLengthWordSum[0] = maxLengthWords[0];\n for (let partI = 1; partI < allParts.length; partI++)\n maxLengthWordSum[partI] = maxLengthWordSum[partI - 1] + maxLengthWords[partI];\n\n tableCol.temp = {\n [tempTAGS.helmSumMaxLengthWords]: maxLengthWordSum,\n [tempTAGS.helmMaxLengthWords]: maxLengthWords\n };\n return;\n }\n } finally {\n g.restore();\n }\n }\n}\n",null,"/* Do not change these import lines to match external modules in webpack configuration */\nimport * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {WebEditorMonomer, RGROUP_CAP_GROUP_NAME, RGROUP_LABEL, SMILES} from './constants';\nimport {HelmWebEditor} from './helm-web-editor';\nimport {HelmCellRenderer} from './cell-renderer';\nimport {IMonomerLib, Monomer} from '@datagrok-libraries/bio/src/types';\nimport {NotationConverter} from '@datagrok-libraries/bio/src/utils/notation-converter';\nimport {findMonomers} from './utils';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\nimport {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';\n\nexport const _package = new DG.Package();\nlet monomerLib: IMonomerLib | null = null;\n\n//tags: init\nexport async function initHelm(): Promise<void> {\n return Promise.all([new Promise((resolve, reject) => {\n // @ts-ignore\n dojo.ready(function() { resolve(null); });\n }), grok.functions.call('Bio:getBioLib')])\n .then(([_, lib]: [void, IMonomerLib]) => {\n monomerLib = lib;\n rewriteLibraries(); // initHelm()\n monomerLib.onChanged.subscribe((_) => {\n try {\n rewriteLibraries(); // initHelm()\n\n const monTypeList: string[] = monomerLib.getPolymerTypes();\n const msgStr: string = 'Monomer lib updated:<br />' + (\n monTypeList.length == 0 ? 'empty' : monTypeList.map((monType) => {\n return `${monType} ${monomerLib.getMonomerSymbolsByType(monType).length}`;\n }).join('<br />'));\n\n grok.shell.info(msgStr);\n } catch (err: any) {\n const errMsg = errorToConsole(err);\n console.error('Helm: initHelm monomerLib.onChanged() error:\\n' + errMsg);\n // throw err; // Prevent disabling event handler\n }\n });\n })\n .catch((err: any) => {\n const errMsg: string = err instanceof Error ? err.message : !!err ? err.toString() : 'Exception \\'undefined\\'';\n grok.shell.error(`Package \\'Helm\\' init initHelm() error: ${errMsg}`);\n const errRes = new Error(errMsg);\n errRes.stack = err.stack;\n throw errRes;\n });\n}\n\nfunction rewriteLibraries() {\n org.helm.webeditor.Monomers.clear();\n monomerLib.getPolymerTypes().forEach((polymerType) => {\n const monomerSymbols = monomerLib.getMonomerSymbolsByType(polymerType);\n monomerSymbols.forEach((monomerSymbol) => {\n let isBroken = false;\n const monomer: Monomer = monomerLib.getMonomer(polymerType, monomerSymbol);\n const webEditorMonomer: WebEditorMonomer = {\n id: monomerSymbol,\n m: monomer.molfile,\n n: monomer.name,\n na: monomer.naturalAnalog,\n rs: monomer.rgroups.length,\n type: monomer.polymerType,\n mt: monomer.monomerType,\n at: {}\n };\n\n if (monomer.rgroups.length > 0) {\n webEditorMonomer.rs = monomer.rgroups.length;\n const at = {};\n monomer.rgroups.forEach((it) => {\n at[it[RGROUP_LABEL]] = it[RGROUP_CAP_GROUP_NAME];\n });\n webEditorMonomer.at = at;\n } else if (monomer[SMILES] != null) {\n webEditorMonomer.rs = Object.keys(getRS(monomer[SMILES].toString())).length;\n webEditorMonomer.at = getRS(monomer[SMILES].toString());\n } else {\n isBroken = true;\n }\n\n if (!isBroken)\n org.helm.webeditor.Monomers.addOneMonomer(webEditorMonomer);\n });\n });\n\n // Obsolete\n const grid: DG.Grid = grok.shell.tv.grid;\n if (grid) grid.invalidate();\n}\n\n//name: helmCellRenderer\n//tags: cellRenderer\n//meta.cellType: helm\n//meta.columnTags: units=helm\n//output: grid_cell_renderer result\nexport function helmCellRenderer(): HelmCellRenderer {\n return new HelmCellRenderer();\n}\n\nfunction checkMonomersAndOpenWebEditor(cell?: DG.Cell, value?: string, units?: string) {\n const cellValue = typeof units === 'undefined' ? cell.value : value;\n const monomers = findMonomers(cellValue);\n if (monomers.size == 0) { webEditor(cell, value, units); } else {\n grok.shell.warning(`Monomers ${Array.from(monomers).join(', ')} are absent! <br/>` +\n `Please, upload the monomer library! <br/>` +\n `<a href=\"https://datagrok.ai/help/domains/bio/macromolecules\" target=\"_blank\">Learn more</a>`);\n }\n}\n\n//tags: cellEditor\n//description: Macromolecule\n//input: grid_cell cell\n//meta.columnTags: quality=Macromolecule, units=helm\nexport function editMoleculeCell(cell: DG.GridCell): void {\n checkMonomersAndOpenWebEditor(cell.cell, undefined, undefined);\n}\n\n//name: Open Helm Web Editor\n//description: Adds editor\n//meta.action: Open Helm Web Editor\n//input: string mol { semType: Macromolecule }\nexport function openEditor(mol: string): void {\n const df = grok.shell.tv.grid.dataFrame;\n const col = df.columns.bySemType('Macromolecule');\n const colUnits = col.getTag(DG.TAGS.UNITS);\n if (colUnits === NOTATION.HELM)\n checkMonomersAndOpenWebEditor(df.currentCell, undefined, undefined);\n const converter = new NotationConverter(col);\n const resStr = converter.convertStringToHelm(mol, '/');\n checkMonomersAndOpenWebEditor(df.currentCell, resStr, col.getTag(DG.TAGS.UNITS));\n}\n\n//name: Properties\n//tags: panel, widgets\n//input: string helmString {semType: Macromolecule}\n//output: widget result\nexport async function propertiesPanel(helmString: string) {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n editor.setHelm(helmString);\n const formula = editor.getFormula(true);\n const molWeight = Math.round(editor.getMolWeight() * 100) / 100;\n const coef = Math.round(editor.getExtinctionCoefficient(true) * 100) / 100;\n parent.lastChild.remove();\n return new DG.Widget(\n ui.tableFromMap({\n 'formula': formula.replace(/<sub>/g, '').replace(/<\\/sub>/g, ''),\n 'molecular weight': molWeight,\n 'extinction coefficient': coef,\n })\n );\n}\n\nfunction webEditor(cell?: DG.Cell, value?: string, units?: string) {\n const view = ui.div();\n const df = grok.shell.tv.grid.dataFrame;\n const converter = new NotationConverter(df.columns.bySemType('Macromolecule'));\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const app = new scil.helm.App(view, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = app.calculateSizes();\n app.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(app.sequence.style, s);\n //@ts-ignore\n scil.apply(app.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + app.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(app.properties.parent.style, s);\n app.structureview.resize(sizes.rightwidth, sizes.bottomheight + app.toolbarheight);\n app.mex.resize(sizes.topheight - 80);\n setTimeout(() => {\n if (typeof units === 'undefined')\n app.canvas.helm.setSequence(cell.value, 'HELM');\n else\n app.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n //@ts-ignore\n ui.dialog({showHeader: false, showFooter: true})\n .add(view)\n .onOK(() => {\n const helmValue = app.canvas.getHelm(true).replace(/<\\/span>/g, '')\n .replace(/<span style='background:#bbf;'>/g, '');\n if (typeof units === 'undefined') {\n cell.value = helmValue;\n } else {\n const convertedRes = converter.convertHelmToFastaSeparator(helmValue, units);\n cell.value = convertedRes;\n }\n }).show({modal: true, fullScreen: true});\n}\n\nfunction getRS(smiles: string) {\n const newS = smiles.match(/(?<=\\[)[^\\][]*(?=])/gm);\n const res = {};\n let el = '';\n let digit;\n for (let i = 0; i < newS.length; i++) {\n if (newS[i] != null) {\n if (/\\d/.test(newS[i])) {\n digit = newS[i][newS[i].length - 1];\n newS[i] = newS[i].replace(/[0-9]/g, '');\n for (let j = 0; j < newS[i].length; j++) {\n if (newS[i][j] != ':')\n el += newS[i][j];\n }\n res['R' + digit] = el;\n el = '';\n }\n }\n }\n return res;\n}\n\n//name: getMolfiles\n//input: column col {semType: Macromolecule}\n//output: column res\nexport function getMolfiles(col: DG.Column): DG.Column {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const res = DG.Column.string('mols', col.length);\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n res.init((i) => {\n editor.setHelm(col.get(i));\n const mol = editor.getMolfile();\n return mol;\n });\n parent.lastChild.remove();\n return res;\n}\n\n//name: helmWebEditor\n//output: object\nexport function helmWebEditor(): HelmWebEditor {\n return new HelmWebEditor();\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","grok","ui","DG","HelmWebEditor","constructor","w","h","this","host","style","width","height","editor","JSDraw2","Editor","viewonly","resizeEditor","setSize","createWebEditor","editorView","org","helm","webeditor","MolViewer","molscale","webEditor","scil","App","showabout","mexfontsize","mexrnapinontab","topmargin","mexmonomerstab","sequenceviewonly","mexfavoritefirst","mexfilter","sizes","calculateSizes","canvas","resize","rightwidth","topheight","s","bottomheight","apply","sequence","notation","toolbarheight","properties","parent","structureview","mex","setTimeout","setSequence","editorDiv","getParts","subParts","allParts","k","length","indexOfMonomer","indexOf","helmBeforeMonomer","slice","push","substring","parseHelm","split","monomers","Utils","isNullOrEmpty","seqs","i","p","detachAnnotation","str","ss","monomer","startsWith","includes","element","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","findMonomers","helmString","types","keys","monomerTypeList","monomerNames","Monomers","getMonomerSet","forEach","id","splitString","Set","filter","val","sep","ret","frag","parentheses","bracket","braces","quote","c","c2","_detachAppendix","tag","r","repeat","endswith","replace","RegExp","m","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","Math","abs","result","min","max","LEVENSHTEIN","a","b","tmp","n","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","start","vlen","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","Array","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","map","reduce","perfectMatchSeq2","maxScore","v1","v2","Error","prod","Float32Array","vectorLength","v","sqrSum","sqrt","errorToConsole","err","String","stack","message","toString","HelmCellRenderer","name","cellType","defaultWidth","defaultHeight","onMouseMove","gridCell","e","tableCol","tableColumn","colTemp","temp","maxLengthWordsSum","maxLengthWords","maxIndex","values","argsX","offsetX","gridColumn","bounds","x","right","found","mid","floor","cell","tooltipMessage","partI","has","childNodes","y","errMsg","console","error","render","g","cellStyle","save","grid","gridRow","undefined","undefinedColor","grayColor","missedMonomers","size","setAttribute","skin","window","devicePixelRatio","beginPath","rect","clip","font","textBaseline","x1","color","fillStyle","printLeftOrCentered","maxLengthWordSum","restore","_package","monomerLib","initHelm","Promise","all","resolve","reject","dojo","ready","then","_","lib","rewriteLibraries","onChanged","subscribe","monTypeList","getPolymerTypes","msgStr","monType","getMonomerSymbolsByType","join","catch","errRes","clear","polymerType","monomerSymbol","isBroken","getMonomer","webEditorMonomer","molfile","na","naturalAnalog","rs","rgroups","type","mt","monomerType","at","it","getRS","addOneMonomer","invalidate","helmCellRenderer","checkMonomersAndOpenWebEditor","units","view","df","converter","NotationConverter","columns","bySemType","app","showHeader","showFooter","add","onOK","helmValue","getHelm","convertedRes","convertHelmToFastaSeparator","show","modal","fullScreen","from","editMoleculeCell","openEditor","mol","col","getTag","currentCell","resStr","convertStringToHelm","propertiesPanel","root","parentElement","appendChild","setHelm","formula","getFormula","molWeight","round","getMolWeight","coef","getExtinctionCoefficient","lastChild","remove","smiles","newS","match","res","digit","test","getMolfiles","init","getMolfile","helmWebEditor"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"package.js","mappings":"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","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/compat get default export","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"grok\"","webpack://helm/external var \"ui\"","webpack://helm/external var \"DG\"","webpack://helm/./src/helm-web-editor.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/monomer-utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/cell-renderer.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/to-console.ts","webpack://helm/./src/utils.ts","webpack://helm/./src/helm-monomer-placer.ts","webpack://helm/./src/cell-renderer.ts","webpack://helm/notation-converter.ts","webpack://helm/./src/package.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","const __WEBPACK_NAMESPACE_OBJECT__ = ui;","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nexport class HelmWebEditor {\n host: any;\n editor: any;\n w = 200;\n h = 100;\n constructor() {\n this.host = ui.div([], {style: {width: `${this.w}px`, height: `${this.h}px`}});\n this.editor = new JSDraw2.Editor(this.host, {width: this.w, height: this.h, viewonly: true});\n }\n\n resizeEditor(w: number, h: number) {\n this.editor.setSize(w, h);\n }\n\n createWebEditor(value: string) {\n const editorView = ui.div();\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const webEditor = new scil.helm.App(editorView, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = webEditor.calculateSizes();\n webEditor.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(webEditor.sequence.style, s);\n //@ts-ignore\n scil.apply(webEditor.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + webEditor.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(webEditor.properties.parent.style, s);\n webEditor.structureview.resize(sizes.rightwidth, sizes.bottomheight + webEditor.toolbarheight);\n webEditor.mex.resize(sizes.topheight - 80);\n setTimeout(function() {\n webEditor.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n return {editorDiv: editorView, webEditor: webEditor};\n }\n}\n\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n",null,"/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as ui from 'datagrok-api/ui';\nimport * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n\nexport function errorToConsole(err: any): string {\n if (typeof err === 'string' || err instanceof String) {\n return err as string;\n } else if ((typeof err == 'object' || err instanceof Object) && '$thrownJsError' in err) {\n return errorToConsole(err['$thrownJsError']);\n } else if (err instanceof Error) {\n return (err as Error).stack ?? (err as Error).message;\n } else {\n return err.toString();\n }\n}\n\nexport function rectToConsole(rect: DG.Rect): string {\n return `(x=${rect.x}, y=${rect.y}, w=${rect.width}, h=${rect.height})`;\n}\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements = [firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\n/** Searches monomers of {@link helmString} for missed. */\nexport function findMonomers(monomerSymbolList: string[]): Set<string> {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n return new Set(monomerSymbolList.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport wu from 'wu';\n\nimport {IMonomerLib, Monomer} from '@datagrok-libraries/bio/src/types/index';\n\nimport {getParts, parseHelm} from './utils';\nimport {getMonomerLib} from './package';\n\nexport const enum Temps {\n helmMonomerPlacer = 'bio-helmMonomerPlacer',\n}\n\nexport class HelmMonomerPlacer {\n private _allPartsList: string[][] = null;\n private _lengthsList: number[][] = null;\n\n private monomerLib: IMonomerLib;\n\n public monomerCharWidth: number = 7;\n public leftPadding: number = 5;\n\n constructor(public readonly col: DG.Column<string>) {\n this.col.dataFrame.onDataChanged.subscribe();\n this.monomerLib = getMonomerLib();\n }\n\n /** @param rowIdx Row index of the table {@link DG.DataFrame}, HelmMonomerPlacer is {@link DG.Column} based */\n public getCellAllPartsLengths(rowIdx: number): [string[], number[], number[]] {\n if (this._allPartsList === null)\n this._allPartsList = new Array<string[]>(this.col.length).fill(null);\n\n if (this._lengthsList === null)\n this._lengthsList = new Array<number[]>(this.col.length).fill(null);\n\n const [allParts, lengths] = this.getCellMonomerLengthsForSeq(rowIdx);\n\n const sumLengths: number[] = new Array<number>(lengths.length + 1);\n sumLengths[0] = this.leftPadding; // padding\n for (let pos: number = 1; pos < sumLengths.length; pos++)\n sumLengths[pos] = sumLengths[pos - 1] + lengths[pos - 1];\n return [allParts, lengths, sumLengths];\n }\n\n private getCellMonomerLengthsForSeq(rowIdx: number): [string[], number[]] {\n const allParts: string[] = this._allPartsList[rowIdx] = this.getAllParts(rowIdx);\n const lengths: number[] = this._lengthsList[rowIdx] = new Array<number>(allParts.length);\n\n for (const [part, partI] of wu.enumerate(allParts)) {\n const partWidth: number = part.length * this.monomerCharWidth;\n lengths[partI] = partWidth;\n }\n\n return [allParts, lengths];\n }\n\n getAllParts(rowIdx: number): string[] {\n const seq: string | null = this.col.get(rowIdx);\n const subParts: string[] = parseHelm(seq);\n return seq ? getParts(subParts, seq) : [];\n }\n\n getMonomer(monomerSymbol: any): Monomer | null {\n let res: Monomer = null;\n for (const polymerType of this.monomerLib.getPolymerTypes()) {\n res = this.monomerLib.getMonomer(polymerType, monomerSymbol);\n if (res) break;\n }\n return res ?? null;\n }\n\n public static getOrCreate(col: DG.Column<string>): HelmMonomerPlacer {\n if (!(Temps.helmMonomerPlacer in col.temp)) col.temp[Temps.helmMonomerPlacer] = new HelmMonomerPlacer(col);\n return col.temp[Temps.helmMonomerPlacer];\n }\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport wu from 'wu';\n\nimport {printLeftOrCentered} from '@datagrok-libraries/bio/src/utils/cell-renderer';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\n\nimport {findMonomers, parseHelm} from './utils';\nimport {HelmMonomerPlacer} from './helm-monomer-placer';\n\nconst enum tempTAGS {\n helmSumMaxLengthWords = 'helm-sum-maxLengthWords',\n helmMaxLengthWords = 'helm-maxLengthWords',\n\n helmPlacer = 'bio-helmPlacer',\n}\n\n// Global flag is for replaceAll\nconst helmGapStartRe = /\\{(\\*\\.)+/g;\nconst helmGapIntRe = /\\.(\\*\\.)+/g;\nconst helmGapEndRe = /(\\.\\*)+\\}/g;\n\ntype TempType = { [tagName: string]: any };\n\n/** Helm cell renderer in case of no missed monomer draws with JSDraw2.Editor (webeditor),\n * in case of missed monomers presented, draws linear sequences aligned in width per monomer.\n */\nexport class HelmCellRenderer extends DG.GridCellRenderer {\n get name() { return 'helm'; }\n\n get cellType() { return 'helm'; }\n\n get defaultWidth(): number | null { return 400; }\n\n get defaultHeight(): number | null { return 100; }\n\n onMouseMove(gridCell: DG.GridCell, e: MouseEvent): void {\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const helmPlacer = HelmMonomerPlacer.getOrCreate(tableCol);\n const [allParts, lengths, sumLengths] = helmPlacer.getCellAllPartsLengths(gridCell.tableRowIndex);\n\n const maxIndex = Object.values(lengths).length - 1;\n const argsX = e.offsetX - gridCell.bounds.x;\n let left = 0;\n let right = maxIndex;\n let found = false;\n let iterCount: number = 0;\n\n let mid = 0;\n if (argsX > sumLengths[0]) {\n while (!found && iterCount < sumLengths.length) {\n mid = Math.floor((right + left) / 2);\n if (argsX >= sumLengths[mid] && argsX <= sumLengths[mid + 1]) {\n left = mid;\n found = true;\n } else if (argsX < sumLengths[mid]) {\n right = mid - 1;\n } else if (argsX > sumLengths[mid + 1]) {\n left = mid + 1;\n }\n if (left == right)\n found = true;\n\n iterCount++;\n }\n }\n left = (argsX >= sumLengths[left]) ? left : left - 1; // correct left to between sumLengths\n\n const seq: string = gridCell.cell.value;\n const monomerList = parseHelm(seq);\n const monomers = new Set<string>(monomerList);\n const missedMonomers = findMonomers(monomerList);\n\n const tooltipMessage: HTMLElement[] = [];\n for (const [part, partI] of wu.enumerate(allParts)) {\n if (missedMonomers.has(part)) {\n tooltipMessage[partI] = ui.divV([\n ui.divText(`Monomer ${allParts[partI]} not found.`),\n ui.divText('Open the Context Panel, then expand Manage Libraries')\n ]);\n } else if (monomers.has(part)) {\n const elList = [ui.div(part)];\n const monomer = helmPlacer.getMonomer(part);\n if (monomer) {\n const options = {autoCrop: true, autoCropMargin: 0, suppressChiralText: true};\n const monomerSvg = grok.chem.svgMol(monomer.smiles, undefined, undefined, options);\n elList.push(monomerSvg);\n }\n tooltipMessage[partI] = ui.divV(elList);\n }\n }\n\n (((tooltipMessage[left]?.childNodes.length ?? 0) > 0)) ?\n ui.tooltip.show(tooltipMessage[left], e.x + 16, e.y + 16) :\n ui.tooltip.hide();\n } catch (err: any) {\n const errMsg: string = errorToConsole(err);\n console.error('Helm: HelmCellRenderer.onMouseMove() error:\\n' + errMsg);\n }\n }\n\n render(g: CanvasRenderingContext2D, x: number, y: number, w: number, h: number,\n gridCell: DG.GridCell, cellStyle: DG.GridCellStyle\n ) {\n g.save();\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const grid = gridCell.gridRow !== -1 ? gridCell.grid : undefined;\n const missedColor = 'red';\n const monomerColor: string = '#404040';\n const frameColor: string = '#C0C0C0';\n\n const seq = gridCell.cell.value;\n const monomers: Set<string> = new Set<string>(parseHelm(seq));\n const missedMonomers: Set<string> = findMonomers(seq);\n\n if (missedMonomers.size == 0) {\n const host = ui.div([], {style: {width: `${w}px`, height: `${h}px`}});\n host.setAttribute('dataformat', 'helm');\n host.setAttribute('data', gridCell.cell.value);\n gridCell.element = host;\n //@ts-ignore\n const canvas = new JSDraw2.Editor(host, {width: w, height: h, skin: 'w8', viewonly: true});\n return;\n }\n\n if (missedMonomers.size > 0) {\n if (!grid) {\n const r = window.devicePixelRatio;\n h = 28;\n g.canvas.height = h * r;\n g.canvas.style.height = `${h}px`;\n }\n\n w = grid ? Math.min(grid.canvas.width - x, w) : g.canvas.width - x;\n g.save();\n g.beginPath();\n g.rect(x, y, w, h);\n g.clip();\n g.transform(1, 0, 0, 1, x, y);\n g.font = '12px monospace';\n g.textBaseline = 'top';\n const helmPlacer = HelmMonomerPlacer.getOrCreate(tableCol);\n const [allParts, lengths, sumLengths] = helmPlacer.getCellAllPartsLengths(gridCell.tableRow.idx);\n\n for (let i = 0; i < allParts.length; ++i) {\n const part: string = allParts[i];\n const color: string =\n part === '.' || part.endsWith('{') || part.startsWith('}') ? frameColor :\n missedMonomers.has(part) ? missedColor :\n monomers.has(part) ? monomerColor :\n frameColor;\n g.fillStyle = color;\n printLeftOrCentered(sumLengths[i], 0, w, h, g, allParts[i], color, 0, true, 1.0);\n }\n }\n } finally {\n g.restore();\n }\n }\n}\n",null,"/* Do not change these import lines to match external modules in webpack configuration */\nimport * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {WebEditorMonomer, RGROUP_CAP_GROUP_NAME, RGROUP_LABEL, SMILES} from './constants';\nimport {HelmWebEditor} from './helm-web-editor';\nimport {HelmCellRenderer} from './cell-renderer';\nimport {IMonomerLib, Monomer} from '@datagrok-libraries/bio/src/types';\nimport {NotationConverter} from '@datagrok-libraries/bio/src/utils/notation-converter';\nimport {findMonomers} from './utils';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\nimport {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';\n\nexport const _package = new DG.Package();\nlet monomerLib: IMonomerLib | null = null;\n\n//tags: init\nexport async function initHelm(): Promise<void> {\n return Promise.all([\n new Promise((resolve, reject) => {\n // @ts-ignore\n dojo.ready(function() { resolve(null); });\n }),\n grok.functions.call('Bio:getBioLib'),\n ])\n .then(([_, lib]: [void, IMonomerLib]) => {\n monomerLib = lib;\n rewriteLibraries(); // initHelm()\n monomerLib.onChanged.subscribe((_) => {\n try {\n rewriteLibraries(); // initHelm()\n\n const monTypeList: string[] = monomerLib.getPolymerTypes();\n const msgStr: string = 'Monomer lib updated:<br />' + (\n monTypeList.length == 0 ? 'empty' : monTypeList.map((monType) => {\n return `${monType} ${monomerLib.getMonomerSymbolsByType(monType).length}`;\n }).join('<br />'));\n\n grok.shell.info(msgStr);\n } catch (err: any) {\n const errMsg = errorToConsole(err);\n console.error('Helm: initHelm monomerLib.onChanged() error:\\n' + errMsg);\n // throw err; // Prevent disabling event handler\n }\n });\n })\n .catch((err: any) => {\n const errMsg: string = err instanceof Error ? err.message : !!err ? err.toString() : 'Exception \\'undefined\\'';\n grok.shell.error(`Package \\'Helm\\' init initHelm() error: ${errMsg}`);\n const errRes = new Error(errMsg);\n errRes.stack = err.stack;\n throw errRes;\n });\n}\n\nexport function getMonomerLib(): IMonomerLib {\n return monomerLib;\n}\n\nfunction rewriteLibraries() {\n org.helm.webeditor.Monomers.clear();\n monomerLib.getPolymerTypes().forEach((polymerType) => {\n const monomerSymbols = monomerLib.getMonomerSymbolsByType(polymerType);\n monomerSymbols.forEach((monomerSymbol) => {\n let isBroken = false;\n const monomer: Monomer = monomerLib.getMonomer(polymerType, monomerSymbol);\n const webEditorMonomer: WebEditorMonomer = {\n id: monomerSymbol,\n m: monomer.molfile,\n n: monomer.name,\n na: monomer.naturalAnalog,\n rs: monomer.rgroups.length,\n type: monomer.polymerType,\n mt: monomer.monomerType,\n at: {}\n };\n\n if (monomer.rgroups.length > 0) {\n webEditorMonomer.rs = monomer.rgroups.length;\n const at = {};\n monomer.rgroups.forEach((it) => {\n at[it[RGROUP_LABEL]] = it[RGROUP_CAP_GROUP_NAME];\n });\n webEditorMonomer.at = at;\n } else if (monomer[SMILES] != null) {\n webEditorMonomer.rs = Object.keys(getRS(monomer[SMILES].toString())).length;\n webEditorMonomer.at = getRS(monomer[SMILES].toString());\n } else {\n isBroken = true;\n }\n\n if (!isBroken)\n org.helm.webeditor.Monomers.addOneMonomer(webEditorMonomer);\n });\n });\n\n // Obsolete\n const grid: DG.Grid = grok.shell.tv.grid;\n if (grid) grid.invalidate();\n}\n\n//name: helmCellRenderer\n//tags: cellRenderer\n//meta.cellType: helm\n//meta.columnTags: units=helm\n//output: grid_cell_renderer result\nexport function helmCellRenderer(): HelmCellRenderer {\n return new HelmCellRenderer();\n}\n\nfunction checkMonomersAndOpenWebEditor(cell?: DG.Cell, value?: string, units?: string) {\n const cellValue = typeof units === 'undefined' ? cell.value : value;\n const monomers = findMonomers(cellValue);\n if (monomers.size == 0) { webEditor(cell, value, units); } else {\n grok.shell.warning(`Monomers ${Array.from(monomers).join(', ')} are absent! <br/>` +\n `Please, upload the monomer library! <br/>` +\n `<a href=\"https://datagrok.ai/help/domains/bio/macromolecules\" target=\"_blank\">Learn more</a>`);\n }\n}\n\n//tags: cellEditor\n//description: Macromolecule\n//input: grid_cell cell\n//meta.columnTags: quality=Macromolecule, units=helm\nexport function editMoleculeCell(cell: DG.GridCell): void {\n checkMonomersAndOpenWebEditor(cell.cell, undefined, undefined);\n}\n\n//name: Open Helm Web Editor\n//description: Adds editor\n//meta.action: Open Helm Web Editor\n//input: string mol { semType: Macromolecule }\nexport function openEditor(mol: string): void {\n const df = grok.shell.tv.grid.dataFrame;\n const col = df.columns.bySemType('Macromolecule');\n const colUnits = col.getTag(DG.TAGS.UNITS);\n if (colUnits === NOTATION.HELM)\n checkMonomersAndOpenWebEditor(df.currentCell, undefined, undefined);\n const converter = new NotationConverter(col);\n const resStr = converter.convertStringToHelm(mol, '/');\n checkMonomersAndOpenWebEditor(df.currentCell, resStr, col.getTag(DG.TAGS.UNITS));\n}\n\n//name: Properties\n//tags: panel, widgets\n//input: string helmString {semType: Macromolecule}\n//output: widget result\nexport async function propertiesPanel(helmString: string) {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n editor.setHelm(helmString);\n const formula = editor.getFormula(true);\n const molWeight = Math.round(editor.getMolWeight() * 100) / 100;\n const coef = Math.round(editor.getExtinctionCoefficient(true) * 100) / 100;\n parent.lastChild.remove();\n return new DG.Widget(\n ui.tableFromMap({\n 'formula': formula.replace(/<sub>/g, '').replace(/<\\/sub>/g, ''),\n 'molecular weight': molWeight,\n 'extinction coefficient': coef,\n })\n );\n}\n\nfunction webEditor(cell?: DG.Cell, value?: string, units?: string) {\n const view = ui.div();\n const df = grok.shell.tv.grid.dataFrame;\n const converter = new NotationConverter(df.columns.bySemType('Macromolecule'));\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const app = new scil.helm.App(view, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = app.calculateSizes();\n app.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(app.sequence.style, s);\n //@ts-ignore\n scil.apply(app.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + app.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(app.properties.parent.style, s);\n app.structureview.resize(sizes.rightwidth, sizes.bottomheight + app.toolbarheight);\n app.mex.resize(sizes.topheight - 80);\n setTimeout(() => {\n if (typeof units === 'undefined')\n app.canvas.helm.setSequence(cell.value, 'HELM');\n else\n app.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n //@ts-ignore\n ui.dialog({showHeader: false, showFooter: true})\n .add(view)\n .onOK(() => {\n const helmValue = app.canvas.getHelm(true).replace(/<\\/span>/g, '')\n .replace(/<span style='background:#bbf;'>/g, '');\n if (typeof units === 'undefined') {\n cell.value = helmValue;\n } else {\n const convertedRes = converter.convertHelmToFastaSeparator(helmValue, units);\n cell.value = convertedRes;\n }\n }).show({modal: true, fullScreen: true});\n}\n\nfunction getRS(smiles: string) {\n const newS = smiles.match(/(?<=\\[)[^\\][]*(?=])/gm);\n const res = {};\n let el = '';\n let digit;\n for (let i = 0; i < newS.length; i++) {\n if (newS[i] != null) {\n if (/\\d/.test(newS[i])) {\n digit = newS[i][newS[i].length - 1];\n newS[i] = newS[i].replace(/[0-9]/g, '');\n for (let j = 0; j < newS[i].length; j++) {\n if (newS[i][j] != ':')\n el += newS[i][j];\n }\n res['R' + digit] = el;\n el = '';\n }\n }\n }\n return res;\n}\n\n//name: getMolfiles\n//input: column col {semType: Macromolecule}\n//output: column res\nexport function getMolfiles(col: DG.Column): DG.Column {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const res = DG.Column.string('mols', col.length);\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n res.init((i) => {\n editor.setHelm(col.get(i));\n const mol = editor.getMolfile();\n return mol;\n });\n parent.lastChild.remove();\n return res;\n}\n\n//name: helmWebEditor\n//output: object\nexport function helmWebEditor(): HelmWebEditor {\n return new HelmWebEditor();\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","grok","ui","DG","HelmWebEditor","constructor","w","h","this","host","style","width","height","editor","JSDraw2","Editor","viewonly","resizeEditor","setSize","createWebEditor","editorView","org","helm","webeditor","MolViewer","molscale","webEditor","scil","App","showabout","mexfontsize","mexrnapinontab","topmargin","mexmonomerstab","sequenceviewonly","mexfavoritefirst","mexfilter","sizes","calculateSizes","canvas","resize","rightwidth","topheight","s","bottomheight","apply","sequence","notation","toolbarheight","properties","parent","structureview","mex","setTimeout","setSequence","editorDiv","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","length","Math","abs","result","i","min","max","LEVENSHTEIN","b","tmp","n","m","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","start","vlen","k","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","Array","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","split","map","c","reduce","perfectMatchSeq2","maxScore","v1","v2","Error","prod","Float32Array","vectorLength","v","sqrSum","sqrt","errorToConsole","err","String","stack","message","toString","parseHelm","monomers","Utils","isNullOrEmpty","seqs","p","detachAnnotation","str","indexOf","substring","ss","monomer","startsWith","includes","element","push","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","findMonomers","monomerSymbolList","types","keys","monomerTypeList","monomerNames","Monomers","getMonomerSet","forEach","id","Set","filter","val","sep","ret","frag","parentheses","bracket","braces","quote","c2","_detachAppendix","tag","r","repeat","endswith","replace","RegExp","HelmMonomerPlacer","col","_allPartsList","_lengthsList","monomerCharWidth","leftPadding","dataFrame","onDataChanged","subscribe","monomerLib","getMonomerLib","getCellAllPartsLengths","rowIdx","allParts","lengths","getCellMonomerLengthsForSeq","sumLengths","pos","getAllParts","part","partI","partWidth","seq","subParts","indexOfMonomer","helmBeforeMonomer","slice","getParts","getMonomer","monomerSymbol","res","polymerType","getPolymerTypes","static","temp","HelmCellRenderer","name","cellType","defaultWidth","defaultHeight","onMouseMove","gridCell","e","tableCol","tableColumn","helmPlacer","getOrCreate","tableRowIndex","maxIndex","values","argsX","offsetX","bounds","x","right","found","iterCount","mid","floor","monomerList","cell","missedMonomers","tooltipMessage","has","elList","options","autoCrop","autoCropMargin","suppressChiralText","monomerSvg","smiles","undefined","childNodes","y","errMsg","console","error","render","g","cellStyle","save","grid","gridRow","missedColor","monomerColor","frameColor","size","setAttribute","skin","window","devicePixelRatio","beginPath","rect","clip","transform","font","textBaseline","tableRow","idx","color","fillStyle","printLeftOrCentered","restore","_package","initHelm","Promise","all","resolve","reject","dojo","ready","then","_","lib","rewriteLibraries","onChanged","monTypeList","msgStr","monType","getMonomerSymbolsByType","join","catch","errRes","clear","isBroken","webEditorMonomer","molfile","na","naturalAnalog","rs","rgroups","type","mt","monomerType","at","it","getRS","addOneMonomer","invalidate","helmCellRenderer","checkMonomersAndOpenWebEditor","units","view","df","converter","NotationConverter","columns","bySemType","app","showHeader","showFooter","add","onOK","helmValue","getHelm","convertedRes","convertHelmToFastaSeparator","show","modal","fullScreen","from","editMoleculeCell","openEditor","mol","getTag","currentCell","resStr","convertStringToHelm","propertiesPanel","helmString","root","parentElement","appendChild","setHelm","formula","getFormula","molWeight","round","getMolWeight","coef","getExtinctionCoefficient","lastChild","remove","newS","match","digit","test","getMolfiles","init","getMolfile","helmWebEditor"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datagrok/helm",
|
|
3
3
|
"friendlyName": "Helm",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.14",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Oleksandra Serhiienko",
|
|
7
7
|
"email": "oserhiienko@datagrok.ai"
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"helm/JSDraw/Pistoia.HELM-uncompressed.js"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@datagrok-libraries/bio": "^5.
|
|
18
|
+
"@datagrok-libraries/bio": "^5.33.2",
|
|
19
19
|
"@datagrok-libraries/utils": "^2.5.0",
|
|
20
20
|
"cash-dom": "^8.1.1",
|
|
21
21
|
"datagrok-api": "^1.10.2",
|