@datagrok/bio 2.25.16 → 2.26.0
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/detectors.js +1 -7
- package/dist/242.js +1 -1
- package/dist/242.js.map +1 -1
- package/dist/282.js +2 -0
- package/dist/282.js.map +1 -0
- package/dist/284.js.map +1 -1
- package/dist/287.js +2 -0
- package/dist/287.js.map +1 -0
- package/dist/288.js +2 -0
- package/dist/288.js.map +1 -0
- package/dist/422.js +2 -0
- package/dist/422.js.map +1 -0
- package/dist/455.js +1 -1
- package/dist/455.js.map +1 -1
- package/dist/705.js +1 -1
- package/dist/705.js.map +1 -1
- package/dist/767.js +2 -0
- package/dist/767.js.map +1 -0
- package/dist/980.js.map +1 -1
- package/dist/package-test.js +5 -5
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/files/samples/antibodies.csv +494 -0
- package/package.json +3 -2
- package/projects/seq_space_demo.zip +0 -0
- package/src/package-api.ts +25 -0
- package/src/package.g.ts +22 -1
- package/src/package.ts +30 -1
- package/src/tests/detectors-tests.ts +7 -7
- package/src/utils/annotations/annotation-actions.ts +130 -0
- package/src/utils/annotations/annotation-manager-ui.ts +118 -0
- package/src/utils/annotations/annotation-manager.ts +163 -0
- package/src/utils/annotations/liability-scanner-ui.ts +88 -0
- package/src/utils/annotations/liability-scanner.ts +147 -0
- package/src/utils/annotations/numbering-ui.ts +450 -0
- package/src/utils/antibody-numbering (WIP)/alignment.ts +578 -0
- package/src/utils/antibody-numbering (WIP)/annotator.ts +120 -0
- package/src/utils/antibody-numbering (WIP)/data/blosum62.ts +55 -0
- package/src/utils/antibody-numbering (WIP)/data/consensus-aho.ts +155 -0
- package/src/utils/antibody-numbering (WIP)/data/consensus-imgt.ts +162 -0
- package/src/utils/antibody-numbering (WIP)/data/consensus-kabat.ts +157 -0
- package/src/utils/antibody-numbering (WIP)/data/consensus-martin.ts +152 -0
- package/src/utils/antibody-numbering (WIP)/data/consensus.ts +36 -0
- package/src/utils/antibody-numbering (WIP)/data/regions.ts +63 -0
- package/src/utils/antibody-numbering (WIP)/index.ts +31 -0
- package/src/utils/antibody-numbering (WIP)/testdata.ts +5356 -0
- package/src/utils/antibody-numbering (WIP)/types.ts +69 -0
- package/src/utils/context-menu.ts +42 -2
- package/src/utils/get-region-func-editor.ts +18 -2
- package/src/utils/get-region.ts +65 -1
- package/src/widgets/representations.ts +53 -2
- package/src/widgets/sequence-scrolling-widget.ts +28 -18
- package/test-console-output-1.log +505 -501
- package/test-record-1.mp4 +0 -0
- package/webpack.config.js +1 -22
package/dist/287.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkbio=self.webpackChunkbio||[]).push([[287],{9287(e,o,t){t.d(o,{showAnnotationManagerDialog:()=>d});var n=t(4328),i=t(7389),l=t(6082),a=t(4517),r=t(3736);const s={[a.eI.Structure]:"Structure (FR/CDR)",[a.eI.Liability]:"Liability",[a.eI.PTM]:"Post-translational Modification",[a.eI.Custom]:"Custom"},c={[a.Hq.High]:"High",[a.Hq.Medium]:"Medium",[a.Hq.Low]:"Low",[a.Hq.Info]:"Info"};function d(){const e=n.shell.tv?.dataFrame;if(!e)return void n.shell.warning("No table open");const o=e.columns.bySemTypeAll(l.SEMTYPE.MACROMOLECULE);if(0===o.length)return void n.shell.warning("No macromolecule columns found");let t=o[0];const a=i.input.column("Sequence Column",{table:e,value:t,filter:e=>e.semType===l.SEMTYPE.MACROMOLECULE,onValueChanged:e=>{t=e,u()}}),d=i.divV([],{style:{maxHeight:"380px",overflowY:"auto",paddingRight:"8px"}});function u(){d.innerHTML="";const o=(0,r.Ln)(t);if(0!==o.length)for(const n of o){const o=s[n.category]??n.category,a=n.severity?` [${c[n.severity]??n.severity}]`:"",p=n.start&&n.end?` (${n.start}-${n.end})`:"",g=n.sourceScheme?` ${n.sourceScheme}`:"",h=i.iconFA("trash",()=>{const o=(0,r.Ln)(t).filter(e=>e.id!==n.id);(0,r.fh)(t,o),e.fireValuesChanged(),u()});h.style.cursor="pointer",h.style.color="#999",h.style.marginLeft="8px";const f=n.color??"#ccc";let m=f;const y=i.div([],{style:{width:"12px",height:"12px",borderRadius:"2px",backgroundColor:m,display:"inline-block",marginRight:"6px",flexShrink:"0",cursor:"pointer"}});i.colorPicker(l.Color.fromHtml(n.color??"#ccc"),e=>{m=l.Color.toHtml(e)},y,()=>{const o=(0,r.Ln)(t).map(e=>e.id===n.id?{...e,color:m}:e);(0,r.fh)(t,o),e.fireValuesChanged(),u()},()=>{m=f,y.style.backgroundColor=m});const x=i.divH([y,i.divText(`${n.name}${p}${g}${a}`,{style:{flex:"1",fontSize:"12px",padding:"4px"}}),i.divText(o,{style:{color:"#888",fontSize:"11px",marginRight:"8px"}}),h],{style:{alignItems:"center",padding:"4px 0",borderBottom:"1px solid #eee"}});d.append(x)}else d.append(i.divText("No annotations on this column.",{style:{color:"#888",padding:"8px"}}))}u();const p=i.button("Clear All",()=>{(0,r.OW)(e,t),e.fireValuesChanged(),u(),n.shell.info("All annotations cleared")});i.dialog({title:"Manage Annotations"}).add(i.inputs([a])).add(i.h3("Annotations")).add(d).add(i.divH([p],{style:{marginTop:"8px"}})).onOK(()=>{}).show()}}}]);
|
|
2
|
+
//# sourceMappingURL=287.js.map
|
package/dist/287.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"287.js","mappings":"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","sources":["webpack://bio/./src/utils/annotations/annotation-manager-ui.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {\n SeqAnnotation, AnnotationCategory, LiabilitySeverity,\n} from '@datagrok-libraries/bio/src/utils/macromolecule/annotations';\nimport {getColumnAnnotations, setColumnAnnotations, clearAnnotations} from './annotation-manager';\n\nconst categoryLabels: Record<string, string> = {\n [AnnotationCategory.Structure]: 'Structure (FR/CDR)',\n [AnnotationCategory.Liability]: 'Liability',\n [AnnotationCategory.PTM]: 'Post-translational Modification',\n [AnnotationCategory.Custom]: 'Custom',\n};\n\nconst severityLabels: Record<string, string> = {\n [LiabilitySeverity.High]: 'High',\n [LiabilitySeverity.Medium]: 'Medium',\n [LiabilitySeverity.Low]: 'Low',\n [LiabilitySeverity.Info]: 'Info',\n};\n\nexport function showAnnotationManagerDialog(): void {\n const df = grok.shell.tv?.dataFrame;\n if (!df) {\n grok.shell.warning('No table open');\n return;\n }\n\n const seqCols = df.columns.bySemTypeAll(DG.SEMTYPE.MACROMOLECULE);\n if (seqCols.length === 0) {\n grok.shell.warning('No macromolecule columns found');\n return;\n }\n\n let selectedCol = seqCols[0];\n const colInput = ui.input.column('Sequence Column', {\n table: df, value: selectedCol,\n filter: (col: DG.Column) => col.semType === DG.SEMTYPE.MACROMOLECULE,\n onValueChanged: (col) => { selectedCol = col!; refreshList(); },\n });\n\n const listDiv = ui.divV([], {style: {maxHeight: '380px', overflowY: 'auto', paddingRight: '8px'}});\n\n function refreshList(): void {\n listDiv.innerHTML = '';\n const annotations = getColumnAnnotations(selectedCol);\n if (annotations.length === 0) {\n listDiv.append(ui.divText('No annotations on this column.', {style: {color: '#888', padding: '8px'}}));\n return;\n }\n\n for (const annot of annotations) {\n const catLabel = categoryLabels[annot.category] ?? annot.category;\n const sevLabel = annot.severity ? ` [${severityLabels[annot.severity] ?? annot.severity}]` : '';\n const rangeLabel = annot.start && annot.end ? ` (${annot.start}-${annot.end})` : '';\n const schemeLabel = annot.sourceScheme ? ` ${annot.sourceScheme}` : '';\n\n const removeBtn = ui.iconFA('trash', () => {\n const updated = getColumnAnnotations(selectedCol).filter((a) => a.id !== annot.id);\n setColumnAnnotations(selectedCol, updated);\n df.fireValuesChanged();\n refreshList();\n });\n removeBtn.style.cursor = 'pointer';\n removeBtn.style.color = '#999';\n removeBtn.style.marginLeft = '8px';\n const originalColor = annot.color ?? '#ccc';\n let currentColor = originalColor;\n const colorSwatch = ui.div([], {style: {\n width: '12px', height: '12px', borderRadius: '2px',\n backgroundColor: currentColor, display: 'inline-block', marginRight: '6px',\n flexShrink: '0', cursor: 'pointer',\n }});\n\n ui.colorPicker(DG.Color.fromHtml(annot.color ?? '#ccc'), (newColor) => {\n currentColor = DG.Color.toHtml(newColor);\n }, colorSwatch, () => {\n const updated = getColumnAnnotations(selectedCol).map((a) => a.id === annot.id ? {...a, color: currentColor} : a);\n setColumnAnnotations(selectedCol, updated);\n df.fireValuesChanged();\n refreshList();\n }, () => {\n currentColor = originalColor;\n colorSwatch.style.backgroundColor = currentColor;\n });\n\n const row = ui.divH([\n colorSwatch,\n ui.divText(`${annot.name}${rangeLabel}${schemeLabel}${sevLabel}`, {style: {flex: '1', fontSize: '12px', padding: '4px'}}),\n ui.divText(catLabel, {style: {color: '#888', fontSize: '11px', marginRight: '8px'}}),\n removeBtn,\n ], {style: {alignItems: 'center', padding: '4px 0', borderBottom: '1px solid #eee'}});\n\n listDiv.append(row);\n }\n }\n\n refreshList();\n\n const clearBtn = ui.button('Clear All', () => {\n clearAnnotations(df, selectedCol);\n df.fireValuesChanged();\n refreshList();\n grok.shell.info('All annotations cleared');\n });\n\n const dialog = ui.dialog({title: 'Manage Annotations'})\n .add(ui.inputs([colInput]))\n .add(ui.h3('Annotations'))\n .add(listDiv)\n .add(ui.divH([clearBtn], {style: {marginTop: '8px'}}))\n .onOK(() => {});\n\n dialog.show();\n}\n"],"names":["categoryLabels","Structure","Liability","PTM","Custom","severityLabels","High","Medium","Low","Info","showAnnotationManagerDialog","df","tv","dataFrame","warning","seqCols","columns","bySemTypeAll","MACROMOLECULE","length","selectedCol","colInput","column","table","value","filter","col","semType","onValueChanged","refreshList","listDiv","style","maxHeight","overflowY","paddingRight","innerHTML","annotations","annot","catLabel","category","sevLabel","severity","rangeLabel","start","end","schemeLabel","sourceScheme","removeBtn","updated","a","id","fireValuesChanged","cursor","color","marginLeft","originalColor","currentColor","colorSwatch","width","height","borderRadius","backgroundColor","display","marginRight","flexShrink","fromHtml","newColor","toHtml","map","row","name","flex","fontSize","padding","alignItems","borderBottom","append","clearBtn","info","title","add","marginTop","onOK","show"],"sourceRoot":""}
|
package/dist/288.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkbio=self.webpackChunkbio||[]).push([[288],{9288(n,t,e){e.d(t,{extractAnnotatedRegion:()=>r,filterByLiabilityHits:()=>a});var o=e(4328),i=e(6082),l=e(4517),s=e(3736);function a(n,t){const e=(0,s.VT)(t.name);let l=null;try{l=n.columns.byName(e)}catch{}if(!l)return void o.shell.warning("No annotation data found. Run liability scanning first.");const a=(0,s.wi)(l),r=i.BitSet.create(n.rowCount);for(let t=0;t<n.rowCount;t++)a[t]&&a[t].length>0&&r.set(t,!0);n.filter.copyFrom(r),o.shell.info(`Filtered to ${r.trueCount} rows with liability hits`)}function r(n,t,e,a){const r=(0,s.Ln)(t).find(n=>n.name===e&&n.category===l.eI.Structure);if(!r)return o.shell.warning(`Region annotation "${e}" not found.`),null;const u=a.getSeqHandler(t),d=`${t.name}(${e})`,c=(0,s.VT)(t.name);let f=null;try{f=n.columns.byName(c)}catch{}if(f){const t=(0,s.wi)(f);if(t.some(n=>n?.some(n=>n.annotationId===r.id&&null!=n.endPositionIndex))){const l=i.Column.fromType(i.COLUMN_TYPE.STRING,d,n.rowCount);for(let e=0;e<n.rowCount;e++){const n=t[e],o=n?.find(n=>n.annotationId===r.id&&null!=n.endPositionIndex);if(o){const n=u.getSplitted(e),t=[];for(let e=o.positionIndex;e<=o.endPositionIndex;e++)e<n.length&&t.push(n.getOriginal(e));l.set(e,t.join(u.separator||""))}else l.set(e,"")}return n.columns.add(l),o.data.detectSemanticTypes(n),o.shell.info(`Extracted region ${e} as column "${d}"`),l}}if(null==r.start||null==r.end)return o.shell.warning(`Region annotation "${e}" has no position range.`),null;const g=u.posList.indexOf(r.start),m=u.posList.indexOf(r.end);if(g<0||m<0)return o.shell.warning(`Position names "${r.start}" or "${r.end}" not found in position list.`),null;const h=u.getRegion(g,m,d);return n.columns.add(h),o.data.detectSemanticTypes(n),o.shell.info(`Extracted region ${e} as column "${d}"`),h}}}]);
|
|
2
|
+
//# sourceMappingURL=288.js.map
|
package/dist/288.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"288.js","mappings":"oMAQO,SAASA,EAAsBC,EAAkBC,GACtD,MAAMC,GAAe,QAAwBD,EAAOE,MACpD,IAAIC,EAAqC,KACzC,IACEA,EAAWJ,EAAGK,QAAQC,OAAOJ,EAC/B,CAAE,MAAwB,CAE1B,IAAKE,EAEH,YADA,QAAWG,QAAQ,2DAIrB,MAAMC,GAAU,QAAuBJ,GACjCK,EAAK,SAAUC,OAAOV,EAAGW,UAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIZ,EAAGW,SAAUC,IAC3BJ,EAAQI,IAAMJ,EAAQI,GAAIC,OAAS,GACrCJ,EAAGK,IAAIF,GAAG,GAGdZ,EAAGe,OAAOC,SAASP,GACnB,QAAWQ,KAAK,eAAeR,EAAGS,qCACpC,CA6BO,SAASC,EACdnB,EACAC,EACAmB,EACAC,GAEA,MACMC,GADc,QAAqBrB,GACfsB,KAAMC,GAC9BA,EAAErB,OAASiB,GAAkBI,EAAEC,WAAa,KAAmBC,WAEjE,IAAKJ,EAEH,OADA,QAAWf,QAAQ,sBAAsBa,iBAClC,KAGT,MAAMO,EAAKN,EAAUO,cAAc3B,GAC7B4B,EAAU,GAAG5B,EAAOE,QAAQiB,KAG5BlB,GAAe,QAAwBD,EAAOE,MACpD,IAAIC,EAAqC,KACzC,IAAMA,EAAWJ,EAAGK,QAAQC,OAAOJ,EAAoC,CAAE,MAAwB,CAEjG,GAAIE,EAAU,CACZ,MAAM0B,GAAa,QAAuB1B,GAI1C,GAHyB0B,EAAWC,KAAMC,GACxCA,GAAID,KAAME,GAAwBA,EAAEC,eAAiBZ,EAAMa,IAA4B,MAAtBF,EAAEG,mBAE/C,CACpB,MAAMC,EAAS,SAAUC,SAAS,cAAeC,OAAQV,EAAS7B,EAAGW,UACrE,IAAK,IAAIC,EAAI,EAAGA,EAAIZ,EAAGW,SAAUC,IAAK,CACpC,MAAM4B,EAAUV,EAAWlB,GACrB6B,EAAYD,GAASjB,KAAMU,GAC/BA,EAAEC,eAAiBZ,EAAMa,IAA4B,MAAtBF,EAAEG,kBACnC,GAAIK,EAAW,CACb,MAAMC,EAAWf,EAAGgB,YAAY/B,GAC1BgC,EAAkB,GACxB,IAAK,IAAIC,EAAIJ,EAAUK,cAAeD,GAAKJ,EAAUL,iBAAmBS,IAClEA,EAAIH,EAAS7B,QACf+B,EAAMG,KAAKL,EAASM,YAAYH,IAEpCR,EAAOvB,IAAIF,EAAGgC,EAAMK,KAAKtB,EAAGuB,WAAa,IAC3C,MACEb,EAAOvB,IAAIF,EAAG,GAClB,CAIA,OAHAZ,EAAGK,QAAQ8C,IAAId,GACf,OAAUe,oBAAoBpD,GAC9B,QAAWiB,KAAK,oBAAoBG,gBAA6BS,MAC1DQ,CACT,CACF,CAGA,GAAmB,MAAff,EAAM+B,OAA8B,MAAb/B,EAAMgC,IAE/B,OADA,QAAW/C,QAAQ,sBAAsBa,6BAClC,KAGT,MAAMmC,EAAW5B,EAAG6B,QAAQC,QAAQnC,EAAM+B,OACpCK,EAAS/B,EAAG6B,QAAQC,QAAQnC,EAAMgC,KAExC,GAAIC,EAAW,GAAKG,EAAS,EAE3B,OADA,QAAWnD,QAAQ,mBAAmBe,EAAM+B,cAAc/B,EAAMgC,oCACzD,KAGT,MAAMjB,EAASV,EAAGgC,UAAUJ,EAAUG,EAAQ7B,GAI9C,OAHA7B,EAAGK,QAAQ8C,IAAId,GACf,OAAUe,oBAAoBpD,GAC9B,QAAWiB,KAAK,oBAAoBG,gBAA6BS,MAC1DQ,CACT,C","sources":["webpack://bio/./src/utils/annotations/annotation-actions.ts"],"sourcesContent":["import * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\nimport {AnnotationCategory, SeqAnnotationHit} from '@datagrok-libraries/bio/src/utils/macromolecule/annotations';\nimport {ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';\nimport {getAnnotationColumnName, getColumnAnnotations, cacheAllRowAnnotations} from './annotation-manager';\n\n/** Filters the DataFrame to show only rows that have at least one liability hit. */\nexport function filterByLiabilityHits(df: DG.DataFrame, seqCol: DG.Column<string>): void {\n const annotColName = getAnnotationColumnName(seqCol.name);\n let annotCol: DG.Column<string> | null = null;\n try {\n annotCol = df.columns.byName(annotColName) as DG.Column<string>;\n } catch { /* not found */ }\n\n if (!annotCol) {\n grok.shell.warning('No annotation data found. Run liability scanning first.');\n return;\n }\n\n const rowData = cacheAllRowAnnotations(annotCol);\n const bs = DG.BitSet.create(df.rowCount);\n for (let i = 0; i < df.rowCount; i++) {\n if (rowData[i] && rowData[i]!.length > 0)\n bs.set(i, true);\n }\n\n df.filter.copyFrom(bs);\n grok.shell.info(`Filtered to ${bs.trueCount} rows with liability hits`);\n}\n\n/** Selects all rows that contain a specific annotation hit. */\nexport function selectRowsWithAnnotation(df: DG.DataFrame, seqCol: DG.Column<string>, annotationId: string): void {\n const annotColName = getAnnotationColumnName(seqCol.name);\n let annotCol: DG.Column<string> | null = null;\n try {\n annotCol = df.columns.byName(annotColName) as DG.Column<string>;\n } catch { /* not found */ }\n\n if (!annotCol) {\n grok.shell.warning('No annotation data found.');\n return;\n }\n\n const rowData = cacheAllRowAnnotations(annotCol);\n const bs = DG.BitSet.create(df.rowCount);\n for (let i = 0; i < df.rowCount; i++) {\n if (rowData[i]?.some((h) => h.annotationId === annotationId))\n bs.set(i, true);\n }\n\n df.selection.copyFrom(bs);\n grok.shell.info(`Selected ${bs.trueCount} rows with ${annotationId} hits`);\n}\n\n/** Extracts a named region annotation as a new column.\n * Uses per-row region spans from the companion column when available (unaligned data),\n * falls back to column-level position names (aligned/MSA data). */\nexport function extractAnnotatedRegion(\n df: DG.DataFrame,\n seqCol: DG.Column<string>,\n annotationName: string,\n seqHelper: ISeqHelper,\n): DG.Column<string> | null {\n const annotations = getColumnAnnotations(seqCol);\n const annot = annotations.find((a) =>\n a.name === annotationName && a.category === AnnotationCategory.Structure);\n\n if (!annot) {\n grok.shell.warning(`Region annotation \"${annotationName}\" not found.`);\n return null;\n }\n\n const sh = seqHelper.getSeqHandler(seqCol);\n const colName = `${seqCol.name}(${annotationName})`;\n\n // Try per-row extraction using companion column region spans\n const annotColName = getAnnotationColumnName(seqCol.name);\n let annotCol: DG.Column<string> | null = null;\n try { annotCol = df.columns.byName(annotColName) as DG.Column<string>; } catch { /* not found */ }\n\n if (annotCol) {\n const allRowData = cacheAllRowAnnotations(annotCol);\n const hasPerRowRegions = allRowData.some((rd) =>\n rd?.some((h: SeqAnnotationHit) => h.annotationId === annot.id && h.endPositionIndex != null));\n\n if (hasPerRowRegions) {\n const regCol = DG.Column.fromType(DG.COLUMN_TYPE.STRING, colName, df.rowCount);\n for (let i = 0; i < df.rowCount; i++) {\n const rowHits = allRowData[i];\n const regionHit = rowHits?.find((h: SeqAnnotationHit) =>\n h.annotationId === annot.id && h.endPositionIndex != null);\n if (regionHit) {\n const splitted = sh.getSplitted(i);\n const parts: string[] = [];\n for (let p = regionHit.positionIndex; p <= regionHit.endPositionIndex!; p++) {\n if (p < splitted.length)\n parts.push(splitted.getOriginal(p));\n }\n regCol.set(i, parts.join(sh.separator || ''));\n } else\n regCol.set(i, '');\n }\n df.columns.add(regCol);\n grok.data.detectSemanticTypes(df);\n grok.shell.info(`Extracted region ${annotationName} as column \"${colName}\"`);\n return regCol;\n }\n }\n\n // Fall back to column-level position names (aligned/MSA data)\n if (annot.start == null || annot.end == null) {\n grok.shell.warning(`Region annotation \"${annotationName}\" has no position range.`);\n return null;\n }\n\n const startIdx = sh.posList.indexOf(annot.start);\n const endIdx = sh.posList.indexOf(annot.end);\n\n if (startIdx < 0 || endIdx < 0) {\n grok.shell.warning(`Position names \"${annot.start}\" or \"${annot.end}\" not found in position list.`);\n return null;\n }\n\n const regCol = sh.getRegion(startIdx, endIdx, colName);\n df.columns.add(regCol);\n grok.data.detectSemanticTypes(df);\n grok.shell.info(`Extracted region ${annotationName} as column \"${colName}\"`);\n return regCol;\n}\n"],"names":["filterByLiabilityHits","df","seqCol","annotColName","name","annotCol","columns","byName","warning","rowData","bs","create","rowCount","i","length","set","filter","copyFrom","info","trueCount","extractAnnotatedRegion","annotationName","seqHelper","annot","find","a","category","Structure","sh","getSeqHandler","colName","allRowData","some","rd","h","annotationId","id","endPositionIndex","regCol","fromType","STRING","rowHits","regionHit","splitted","getSplitted","parts","p","positionIndex","push","getOriginal","join","separator","add","detectSemanticTypes","start","end","startIdx","posList","indexOf","endIdx","getRegion"],"sourceRoot":""}
|
package/dist/422.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkbio=self.webpackChunkbio||[]).push([[422],{9422(e,t,i){i.d(t,{showLiabilityScannerDialog:()=>g});var n=i(4328),a=i(7389),o=i(6082),l=i(4958),r=i(4517),d=i(3736);const s=[{id:"deamid-ng",name:"Deamidation (NG)",pattern:/NG/g,length:2,severity:r.Hq.High,ruleCategory:"deamidation",color:r.D5.liability.deamidation,enabled:!0},{id:"deamid-ns",name:"Deamidation (NS)",pattern:/NS/g,length:2,severity:r.Hq.Medium,ruleCategory:"deamidation",color:r.D5.liability.deamidation,enabled:!0},{id:"deamid-na",name:"Deamidation (NA)",pattern:/NA/g,length:2,severity:r.Hq.Low,ruleCategory:"deamidation",color:r.D5.liability.deamidation,enabled:!0},{id:"deamid-nd",name:"Deamidation (ND)",pattern:/ND/g,length:2,severity:r.Hq.Low,ruleCategory:"deamidation",color:r.D5.liability.deamidation,enabled:!0},{id:"deamid-nt",name:"Deamidation (NT)",pattern:/NT/g,length:2,severity:r.Hq.Low,ruleCategory:"deamidation",color:r.D5.liability.deamidation,enabled:!0},{id:"isom-dg",name:"Isomerization (DG)",pattern:/DG/g,length:2,severity:r.Hq.High,ruleCategory:"isomerization",color:r.D5.liability.isomerization,enabled:!0},{id:"isom-ds",name:"Isomerization (DS)",pattern:/DS/g,length:2,severity:r.Hq.Medium,ruleCategory:"isomerization",color:r.D5.liability.isomerization,enabled:!0},{id:"oxid-m",name:"Oxidation (Met)",pattern:/M/g,length:1,severity:r.Hq.Medium,ruleCategory:"oxidation",color:r.D5.liability.oxidation,enabled:!0},{id:"oxid-w",name:"Oxidation (Trp)",pattern:/W/g,length:1,severity:r.Hq.Low,ruleCategory:"oxidation",color:r.D5.liability.oxidation,enabled:!0},{id:"glyco-nxst",name:"N-glycosylation",pattern:/N[^P][ST]/g,length:3,severity:r.Hq.High,ruleCategory:"glycosylation",color:r.D5.liability.glycosylation,enabled:!0},{id:"free-cys",name:"Free Cysteine",pattern:/C/g,length:1,severity:r.Hq.Info,ruleCategory:"freeCysteine",color:r.D5.liability.freeCysteine,enabled:!1}];function u(e,t){const i=e.getSplitted(t),n=new Array(i.length);for(let e=0;e<i.length;e++)n[e]=i.getCanonical(e);return n.join("")}const c={[r.Hq.High]:"High",[r.Hq.Medium]:"Medium",[r.Hq.Low]:"Low",[r.Hq.Info]:"Info"};function g(){const e=n.shell.tv?.dataFrame;if(!e)return void n.shell.warning("No table open");const t=e.columns.bySemTypeAll(o.SEMTYPE.MACROMOLECULE);if(0===t.length)return void n.shell.warning("No macromolecule columns found");const i=s.map(e=>({...e,pattern:new RegExp(e.pattern.source,"g")})),g=a.input.table("Table",{value:e}),m=a.input.column("Sequence",{table:e,value:t[0],filter:e=>e.semType===o.SEMTYPE.MACROMOLECULE}),y=[],p=a.divV([]);for(const e of i){const t=a.input.bool(e.name,{value:e.enabled,tooltipText:`Severity: ${c[e.severity]??e.severity}`});y.push({rule:e,input:t}),p.append(t.root)}const h=a.input.bool("Highlight in cell renderer",{value:!0}),b=a.input.bool("Create annotation column",{value:!0}),f=a.input.bool("Create summary count column",{value:!1}),v=a.dialog({title:"Scan Sequence Liabilities"}).add(a.inputs([g,m])).add(a.h3("Rules")).add(p).add(a.h3("Output")).add(a.inputs([h,b,f])).onOK(()=>{try{const t=m.value,a=l._package.seqHelper.getSeqHandler(t);for(const{rule:e,input:t}of y)e.enabled=t.value;const o=function(e,t,i){const n=i.filter(e=>e.enabled),a=t.posList,o=new Map,l=new Array(e.length);let d=0;for(let i=0;i<e.length;i++){const e=u(t,i),r=[];for(const t of n){let i;for(t.pattern.lastIndex=0;null!==(i=t.pattern.exec(e));)r.push({annotationId:t.id,positionIndex:i.index,positionName:i.index<a.length?a[i.index]:void 0,matchedMonomers:i[0]}),o.set(t.id,(o.get(t.id)??0)+1),d++}l[i]=r}return{annotations:n.filter(e=>o.has(e.id)).map(e=>({id:e.id,name:e.name,description:`${e.ruleCategory} liability pattern (${o.get(e.id)} hits)`,start:null,end:null,visualType:1===e.length?r.ao.Point:r.ao.Motif,category:r.eI.Liability,color:e.color,severity:e.severity,motifPattern:e.pattern.source,autoGenerated:!0})),rowData:l,totalHits:d}}(t,a,i);(b.value||h.value)&&function(e,t,i){const n=(0,d.Ln)(t).filter(e=>e.category!==r.eI.Liability);(0,d.fh)(t,[...n,...i.annotations]);const a=(0,d.Lz)(e,t);for(let e=0;e<i.rowData.length;e++){const t=(0,d.JG)(a,e)??[];(0,d.z5)(a,e,(0,d.bq)(t,i.rowData[e],!1,!0))}}(e,t,o),f.value&&function(e,t,i){const n=`${t.name}_liability_count`,a=i.rowData.map(e=>e.length),o=e.columns.addNewInt(n);for(let e=0;e<a.length;e++)o.set(e,a[e])}(e,t,o),n.shell.info(`Liability scan: ${o.totalHits} hits found across ${o.annotations.length} rules`),e.fireValuesChanged()}catch(e){n.shell.error(`Liability scan failed: ${e.message??e}`),console.error(e)}});v.show()}}}]);
|
|
2
|
+
//# sourceMappingURL=422.js.map
|
package/dist/422.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"422.js","mappings":"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","sources":["webpack://bio/./src/utils/annotations/liability-scanner.ts","webpack://bio/./src/utils/annotations/liability-scanner-ui.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport * as DG from 'datagrok-api/dg';\n\nimport {ISeqHandler} from '@datagrok-libraries/bio/src/utils/macromolecule/seq-handler';\nimport {\n SeqAnnotation, SeqAnnotationHit, RowAnnotationData,\n AnnotationVisualType, AnnotationCategory, LiabilitySeverity,\n ANNOTATION_COLORS,\n} from '@datagrok-libraries/bio/src/utils/macromolecule/annotations';\nimport {\n getOrCreateAnnotationColumn, setColumnAnnotations, setRowAnnotations,\n getColumnAnnotations, getRowAnnotations, mergeRowHits,\n} from './annotation-manager';\n\n/** A single liability scanning rule. */\nexport interface LiabilityRule {\n id: string;\n name: string;\n pattern: RegExp;\n length: number;\n severity: LiabilitySeverity;\n /** Sub-category for grouping (e.g. \"deamidation\", \"oxidation\") */\n ruleCategory: string;\n color: string;\n enabled: boolean;\n}\n\n/** Built-in liability rules for antibody engineering. */\nexport const BUILTIN_LIABILITY_RULES: LiabilityRule[] = [\n {id: 'deamid-ng', name: 'Deamidation (NG)', pattern: /NG/g, length: 2, severity: LiabilitySeverity.High, ruleCategory: 'deamidation', color: ANNOTATION_COLORS.liability.deamidation, enabled: true},\n {id: 'deamid-ns', name: 'Deamidation (NS)', pattern: /NS/g, length: 2, severity: LiabilitySeverity.Medium, ruleCategory: 'deamidation', color: ANNOTATION_COLORS.liability.deamidation, enabled: true},\n {id: 'deamid-na', name: 'Deamidation (NA)', pattern: /NA/g, length: 2, severity: LiabilitySeverity.Low, ruleCategory: 'deamidation', color: ANNOTATION_COLORS.liability.deamidation, enabled: true},\n {id: 'deamid-nd', name: 'Deamidation (ND)', pattern: /ND/g, length: 2, severity: LiabilitySeverity.Low, ruleCategory: 'deamidation', color: ANNOTATION_COLORS.liability.deamidation, enabled: true},\n {id: 'deamid-nt', name: 'Deamidation (NT)', pattern: /NT/g, length: 2, severity: LiabilitySeverity.Low, ruleCategory: 'deamidation', color: ANNOTATION_COLORS.liability.deamidation, enabled: true},\n {id: 'isom-dg', name: 'Isomerization (DG)', pattern: /DG/g, length: 2, severity: LiabilitySeverity.High, ruleCategory: 'isomerization', color: ANNOTATION_COLORS.liability.isomerization, enabled: true},\n {id: 'isom-ds', name: 'Isomerization (DS)', pattern: /DS/g, length: 2, severity: LiabilitySeverity.Medium, ruleCategory: 'isomerization', color: ANNOTATION_COLORS.liability.isomerization, enabled: true},\n {id: 'oxid-m', name: 'Oxidation (Met)', pattern: /M/g, length: 1, severity: LiabilitySeverity.Medium, ruleCategory: 'oxidation', color: ANNOTATION_COLORS.liability.oxidation, enabled: true},\n {id: 'oxid-w', name: 'Oxidation (Trp)', pattern: /W/g, length: 1, severity: LiabilitySeverity.Low, ruleCategory: 'oxidation', color: ANNOTATION_COLORS.liability.oxidation, enabled: true},\n {id: 'glyco-nxst', name: 'N-glycosylation', pattern: /N[^P][ST]/g, length: 3, severity: LiabilitySeverity.High, ruleCategory: 'glycosylation', color: ANNOTATION_COLORS.liability.glycosylation, enabled: true},\n {id: 'free-cys', name: 'Free Cysteine', pattern: /C/g, length: 1, severity: LiabilitySeverity.Info, ruleCategory: 'freeCysteine', color: ANNOTATION_COLORS.liability.freeCysteine, enabled: false},\n];\n\n/** Extracts a canonical single-letter string from a sequence handler for a given row. */\nfunction getCanonicalString(sh: ISeqHandler, rowIdx: number): string {\n const splitted = sh.getSplitted(rowIdx);\n const chars: string[] = new Array(splitted.length);\n for (let i = 0; i < splitted.length; i++)\n chars[i] = splitted.getCanonical(i);\n return chars.join('');\n}\n\nexport interface ScanLiabilitiesResult {\n annotations: SeqAnnotation[];\n rowData: RowAnnotationData[];\n totalHits: number;\n}\n\n/** Scans all rows of a macromolecule column for liability motifs.\n * Returns column-level SeqAnnotation entries + per-row SeqAnnotationHit arrays. */\nexport function scanLiabilities(\n col: DG.Column<string>,\n sh: ISeqHandler,\n rules: LiabilityRule[],\n): ScanLiabilitiesResult {\n const enabledRules = rules.filter((r) => r.enabled);\n const posList = sh.posList;\n\n // Track which rules had hits\n const ruleHitCounts = new Map<string, number>();\n\n const rowData: RowAnnotationData[] = new Array(col.length);\n let totalHits = 0;\n\n for (let rowIdx = 0; rowIdx < col.length; rowIdx++) {\n const seq = getCanonicalString(sh, rowIdx);\n const hits: SeqAnnotationHit[] = [];\n\n for (const rule of enabledRules) {\n // Reset regex lastIndex for global patterns\n rule.pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = rule.pattern.exec(seq)) !== null) {\n hits.push({\n annotationId: rule.id,\n positionIndex: match.index,\n positionName: match.index < posList.length ? posList[match.index] : undefined,\n matchedMonomers: match[0],\n });\n ruleHitCounts.set(rule.id, (ruleHitCounts.get(rule.id) ?? 0) + 1);\n totalHits++;\n }\n }\n rowData[rowIdx] = hits;\n }\n\n // Build column-level annotations only for rules that had hits\n const annotations: SeqAnnotation[] = enabledRules\n .filter((r) => ruleHitCounts.has(r.id))\n .map((r) => ({\n id: r.id,\n name: r.name,\n description: `${r.ruleCategory} liability pattern (${ruleHitCounts.get(r.id)} hits)`,\n start: null,\n end: null,\n visualType: r.length === 1 ? AnnotationVisualType.Point : AnnotationVisualType.Motif,\n category: AnnotationCategory.Liability,\n color: r.color,\n severity: r.severity,\n motifPattern: r.pattern.source,\n autoGenerated: true,\n }));\n\n return {annotations, rowData, totalHits};\n}\n\n/** Applies liability scan results to the DataFrame (writes tags + companion column). */\nexport function applyLiabilityScanResults(\n df: DG.DataFrame,\n seqCol: DG.Column<string>,\n result: ScanLiabilitiesResult,\n): void {\n // Merge with existing annotations, removing old liability entries\n const existing = getColumnAnnotations(seqCol)\n .filter((a) => a.category !== AnnotationCategory.Liability);\n setColumnAnnotations(seqCol, [...existing, ...result.annotations]);\n\n // Write per-row data to hidden companion column, preserving region hits from numbering\n const annotCol = getOrCreateAnnotationColumn(df, seqCol);\n for (let i = 0; i < result.rowData.length; i++) {\n const existingHits = getRowAnnotations(annotCol, i) ?? [];\n setRowAnnotations(annotCol, i, mergeRowHits(existingHits, result.rowData[i], false, true));\n }\n}\n\n/** Creates a liability summary count column (total hits per row). */\nexport function createLiabilitySummaryColumn(\n df: DG.DataFrame,\n seqCol: DG.Column<string>,\n result: ScanLiabilitiesResult,\n): DG.Column<number> {\n const colName = `${seqCol.name}_liability_count`;\n const counts = result.rowData.map((hits) => hits.length);\n const col = df.columns.addNewInt(colName);\n for (let i = 0; i < counts.length; i++)\n col.set(i, counts[i]);\n return col;\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 {\n BUILTIN_LIABILITY_RULES, LiabilityRule, scanLiabilities,\n applyLiabilityScanResults, createLiabilitySummaryColumn,\n} from './liability-scanner';\nimport {LiabilitySeverity} from '@datagrok-libraries/bio/src/utils/macromolecule/annotations';\n\nconst severityLabels: Record<string, string> = {\n [LiabilitySeverity.High]: 'High',\n [LiabilitySeverity.Medium]: 'Medium',\n [LiabilitySeverity.Low]: 'Low',\n [LiabilitySeverity.Info]: 'Info',\n};\n\nexport function showLiabilityScannerDialog(): void {\n const df = grok.shell.tv?.dataFrame;\n if (!df) {\n grok.shell.warning('No table open');\n return;\n }\n\n const seqCols = df.columns.bySemTypeAll(DG.SEMTYPE.MACROMOLECULE);\n if (seqCols.length === 0) {\n grok.shell.warning('No macromolecule columns found');\n return;\n }\n\n const rules = BUILTIN_LIABILITY_RULES.map((r) => ({...r, pattern: new RegExp(r.pattern.source, 'g')}));\n\n const tableInput = ui.input.table('Table', {value: df});\n const seqInput = ui.input.column('Sequence', {\n table: df, value: seqCols[0],\n filter: (col: DG.Column) => col.semType === DG.SEMTYPE.MACROMOLECULE,\n });\n\n // Rule checkboxes\n const ruleChecks: {rule: LiabilityRule; input: DG.InputBase<boolean>}[] = [];\n const rulesDiv = ui.divV([]);\n for (const rule of rules) {\n const check = ui.input.bool(rule.name, {\n value: rule.enabled,\n tooltipText: `Severity: ${severityLabels[rule.severity] ?? rule.severity}`,\n });\n ruleChecks.push({rule, input: check});\n rulesDiv.append(check.root);\n }\n\n const highlightInput = ui.input.bool('Highlight in cell renderer', {value: true});\n const annotColInput = ui.input.bool('Create annotation column', {value: true});\n const summaryInput = ui.input.bool('Create summary count column', {value: false});\n\n const dialog = ui.dialog({title: 'Scan Sequence Liabilities'})\n .add(ui.inputs([tableInput, seqInput]))\n .add(ui.h3('Rules'))\n .add(rulesDiv)\n .add(ui.h3('Output'))\n .add(ui.inputs([highlightInput, annotColInput, summaryInput]))\n .onOK(() => {\n try {\n const seqCol = seqInput.value!;\n const sh = _package.seqHelper.getSeqHandler(seqCol);\n\n // Apply checkbox state\n for (const {rule, input} of ruleChecks)\n rule.enabled = input.value;\n\n const result = scanLiabilities(seqCol, sh, rules);\n\n if (annotColInput.value || highlightInput.value)\n applyLiabilityScanResults(df, seqCol, result);\n\n if (summaryInput.value)\n createLiabilitySummaryColumn(df, seqCol, result);\n\n grok.shell.info(`Liability scan: ${result.totalHits} hits found across ${result.annotations.length} rules`);\n df.fireValuesChanged();\n } catch (err: any) {\n grok.shell.error(`Liability scan failed: ${err.message ?? err}`);\n console.error(err);\n }\n });\n\n dialog.show();\n}\n"],"names":["BUILTIN_LIABILITY_RULES","id","name","pattern","length","severity","High","ruleCategory","color","liability","deamidation","enabled","Medium","Low","isomerization","oxidation","glycosylation","Info","freeCysteine","getCanonicalString","sh","rowIdx","splitted","getSplitted","chars","Array","i","getCanonical","join","severityLabels","showLiabilityScannerDialog","df","tv","dataFrame","warning","seqCols","columns","bySemTypeAll","MACROMOLECULE","rules","map","r","RegExp","source","tableInput","table","value","seqInput","column","filter","col","semType","ruleChecks","rulesDiv","rule","check","bool","tooltipText","push","input","append","root","highlightInput","annotColInput","summaryInput","dialog","title","add","onOK","seqCol","_package","seqHelper","getSeqHandler","result","enabledRules","posList","ruleHitCounts","Map","rowData","totalHits","seq","hits","match","lastIndex","exec","annotationId","positionIndex","index","positionName","undefined","matchedMonomers","set","get","annotations","has","description","start","end","visualType","Point","Motif","category","Liability","motifPattern","autoGenerated","scanLiabilities","existing","a","annotCol","existingHits","applyLiabilityScanResults","colName","counts","addNewInt","createLiabilitySummaryColumn","info","fireValuesChanged","err","error","message","console","show"],"sourceRoot":""}
|
package/dist/455.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";const t={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:{polymerType:"RNA",symbol:"d"},RIBOSE:{polymerType:"RNA",symbol:"r"},PHOSPHATE:{polymerType:"RNA",symbol:"p"},OXYGEN:"O",HYDROGEN:"H"};function o(t,o){return t[o.polymerType]?.[o.symbol]}class n extends Map{constructor(t){super(t)}}class e{constructor(t,o){this.molfile=t,this.monomers=o}static createEmpty(){return new e("",new n(null))}}var a,s,i;new RegExp("[rd]\\((\\w)\\)p?","g");class r{constructor(t,o,n){this.name=t,this.alphabet=o,this.cutoff=n}}!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm",t.CUSTOM="custom",t.BILN="biln"}(a||(a={})),function(t){t.DNA="DNA",t.RNA="RNA",t.PT="PT",t.UN="UN"}(s||(s={})),function(t){t.aligned="aligned",t.alphabet="alphabet",t.alphabetSize=".alphabetSize",t.alphabetIsMultichar=".alphabetIsMultichar",t.separator="separator",t.isHelmCompatible=".isHelmCompatible",t.positionNames=".positionNames",t.positionLabels=".positionLabels",t.regions=".regions",t.positionShift=".positionShift",t.selectedPosition=".selectedPosition",t.polymerTypeColumnName=".polymerTypeColumnName"}(i||(i={}));const l=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}};var c;function
|
|
1
|
+
var bio;(()=>{"use strict";const t={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:{polymerType:"RNA",symbol:"d"},RIBOSE:{polymerType:"RNA",symbol:"r"},PHOSPHATE:{polymerType:"RNA",symbol:"p"},OXYGEN:"O",HYDROGEN:"H"};function o(t,o){return t[o.polymerType]?.[o.symbol]}class n extends Map{constructor(t){super(t)}}class e{constructor(t,o){this.molfile=t,this.monomers=o}static createEmpty(){return new e("",new n(null))}}var a,s,i;new RegExp("[rd]\\((\\w)\\)p?","g");class r{constructor(t,o,n){this.name=t,this.alphabet=o,this.cutoff=n}}!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm",t.CUSTOM="custom",t.BILN="biln"}(a||(a={})),function(t){t.DNA="DNA",t.RNA="RNA",t.PT="PT",t.UN="UN"}(s||(s={})),function(t){t.aligned="aligned",t.alphabet="alphabet",t.alphabetSize=".alphabetSize",t.alphabetIsMultichar=".alphabetIsMultichar",t.separator="separator",t.isHelmCompatible=".isHelmCompatible",t.positionNames=".positionNames",t.positionLabels=".positionLabels",t.regions=".regions",t.positionShift=".positionShift",t.selectedPosition=".selectedPosition",t.polymerTypeColumnName=".polymerTypeColumnName",t.annotations=".annotations",t.numberingScheme=".numberingScheme",t.annotationColumnName=".annotationColumnName"}(i||(i={}));const l=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}};var c;function h(t){let o;switch(t){case c.BASE:case c.SUGAR:case c.LINKER:case c.NUCLEOTIDE:case"nucleotide":o="RNA";break;case c.AA:o="PEPTIDE";break;case c.CHEM:o="CHEM";break;case c.BLOB:o="BLOB";break;default:o="PEPTIDE",console.warn(`Unexpected HelmType '${t}'`)}return o}function E(a,i,r,l){if(0===a.length)return e.createEmpty();const c=_,{atomCount:E,bondCount:f,needsCapping:m}=c(a,i,r,l),S=new Array(E),d=new Array(f);let p,T=null,I=null;"PEPTIDE"===l?p=N:(p=b,T=r===s.DNA?o(i,t.DEOXYRIBOSE):o(i,t.RIBOSE),I=o(i,t.PHOSPHATE));const u={i:0,nodeShift:0,bondShift:0,backbonePositionShift:new Array(2).fill(0),branchPositionShift:new Array(2).fill(0),backboneAttachNode:0,branchAttachNode:0,flipFactor:1},O={sugar:T,phosphate:I,seqLength:a.length,atomCount:E,bondCount:f},C=new n,B=[];let L,y=0;for(u.i=0;u.i<O.seqLength;++u.i){const t=a[u.i];if(""===t.symbol)continue;const n=o(i,{symbol:t.symbol,polymerType:h(t.biotype)});L=n.terminalR2Atom;const e=u.nodeShift,s=u.bondShift;p(n,S,d,u,O),n.stereoAtoms?.forEach(t=>B.push(t+y)),y+=n.atoms.x.length;const r=u.nodeShift-e,l=new Array(r);for(let t=0;t<r;++t)l[t]=e+t;const c=u.bondShift-s,E=new Array(c);for(let t=0;t<c;++t)E[t]=s+t;C.set(u.i,{biotype:t.biotype,symbol:t.symbol,atoms:l,bonds:E})}m&&function(o,n,e,a,s=t.OXYGEN){const i=e.nodeShift+1;o[a.atomCount]=t.V3K_BEGIN_DATA_LINE+i+" "+(s??t.OXYGEN)+" "+A(e.backbonePositionShift[0])+" "+e.flipFactor*A(e.backbonePositionShift[1])+" 0.000000 0\n";const r=e.backboneAttachNode,l=i;n[a.bondCount]=t.V3K_BEGIN_DATA_LINE+e.bondShift+" 1 "+r+" "+l+"\n"}(S,d,u,O,L??t.OXYGEN);const D=t.V3K_BEGIN_COUNTS_LINE+E+" "+f+t.V3K_COUNTS_LINE_ENDING;let g="";return g+=t.V3K_HEADER_FIRST_LINE,g+=t.V3K_HEADER_SECOND_LINE,g+=t.V3K_BEGIN_CTAB_BLOCK,g+=D,g+=t.V3K_BEGIN_ATOM_BLOCK,g+=S.join(""),g+=t.V3K_END_ATOM_BLOCK,g+=t.V3K_BEGIN_BOND_BLOCK,g+=d.join(""),g+=t.V3K_END_BOND_BLOCK,B.length>0&&(g+=function(t){const o=[];let n=`M V30 MDLV30/STEABS ATOMS=(${t.length}`;for(let e=0;e<t.length;e++){const a=`${n} ${t[e]}`;a.length>76?(o.push(`${n} -\n`),n=`M V30 ${t[e]}`):n=a,e===t.length-1&&o.push(`${n})\n`)}return`M V30 BEGIN COLLECTION\n${o.join("")}M V30 END COLLECTION\n`}(B)),g+=t.V3K_END_CTAB_BLOCK,g+=t.V3K_END,{molfile:g,monomers:C}}function N(t,o,n,e){e.flipFactor=(-1)**(e.i%2),f(t,o,n,e)}function f(o,n,e,a){!function(o,n,e){for(let a=0;a<o.atoms.atomTypes.length;++a){const s=e.nodeShift+a+1;n[e.nodeShift+a]=t.V3K_BEGIN_DATA_LINE+s+" "+o.atoms.atomTypes[a]+" "+A(e.backbonePositionShift[0]+o.atoms.x[a])+" "+A(e.backbonePositionShift[1]+e.flipFactor*o.atoms.y[a])+" "+o.atoms.kwargs[a]}}(o,n,a),m(o,e,a),function(o,n,e){if(0!==e.backboneAttachNode){const a=e.bondShift,s=e.backboneAttachNode,i=o.meta.terminalNodes[0]+e.nodeShift;n[e.bondShift-1]=t.V3K_BEGIN_DATA_LINE+a+" 1 "+s+" "+i+"\n"}}(o,e,a),null!==o.meta.branchShift&&o.meta.terminalNodes.length>2&&function(t,o){o.branchAttachNode=o.nodeShift+t.meta.terminalNodes[2];for(let n=0;n<2;++n)o.branchPositionShift[n]=o.backbonePositionShift[n]+t.meta.branchShift[n]}(o,a),function(t,o){o.backboneAttachNode=o.nodeShift+t.meta.terminalNodes[1],o.bondShift+=t.bonds.atomPairs.length+1,o.nodeShift+=t.atoms.atomTypes.length,o.backbonePositionShift[0]+=t.meta.backboneShift?.[0]??0,o.backbonePositionShift[1]+=o.flipFactor*(t.meta.backboneShift?.[1]??0)}(o,a)}function b(o,n,e,a,s){if(0===a.i)f(s.sugar,n,e,a);else for(const t of[s.phosphate,s.sugar])f(t,n,e,a);!function(o,n,e,a){(function(o,n,e){for(let a=0;a<o.atoms.atomTypes.length;++a){const s=e.nodeShift+a+1;n[e.nodeShift+a]=t.V3K_BEGIN_DATA_LINE+s+" "+o.atoms.atomTypes[a]+" "+A(e.branchPositionShift[0]+o.atoms.x[a])+" "+A(e.branchPositionShift[1]+e.flipFactor*o.atoms.y[a])+" "+o.atoms.kwargs[a]}})(o,n,a),m(o,e,a),function(o,n,e){const a=e.bondShift,s=e.branchAttachNode,i=o.meta.terminalNodes[0]+e.nodeShift;n[a-1]=t.V3K_BEGIN_DATA_LINE+a+" 1 "+s+" "+i+"\n"}(o,e,a);const s=a.bondShift,i=a.branchAttachNode,r=o.meta.terminalNodes[0]+a.nodeShift;e[s-1]=t.V3K_BEGIN_DATA_LINE+s+" 1 "+i+" "+r+"\n",a.bondShift+=o.bonds.atomPairs.length+1,a.nodeShift+=o.atoms.atomTypes.length}(o,n,e,a)}function m(o,n,e){for(let a=0;a<o.bonds.atomPairs.length;++a){const s=e.bondShift+a+1,i=o.bonds.atomPairs[a][0]+e.nodeShift,r=o.bonds.atomPairs[a][1]+e.nodeShift;let l="";if(o.bonds.bondConfiguration.has(a)){let t=o.bonds.bondConfiguration.get(a);e.flipFactor<0&&(t=1===t?3:1),l=" CFG="+t}const c=o.bonds.kwargs.has(a)?" "+o.bonds.kwargs.get(a):"";n[e.bondShift+a]=t.V3K_BEGIN_DATA_LINE+s+" "+o.bonds.bondTypes[a]+" "+i+" "+r+l+c+"\n"}}function _(n,e,a,i){let r=0,l=0,c=0,E=!0,N=null;for(const t of n)if(""!==t.symbol){if("*"==t.symbol)throw new Error("Gap canonical symbol is '', not '*");N=o(e,{symbol:t.symbol,polymerType:h(t.biotype)}),r+=N.atoms.x.length,l+=N.bonds.bondTypes.length,c++}if("PEPTIDE"===i)r+=1,l+=c,c>0&&((N?.meta?.rNodes?.length??0)<2||N?.terminalR2Atom?.toLowerCase()===t.HYDROGEN.toLowerCase())&&(E=!1,r-=1,l-=1);else{const i=a===s.DNA?o(e,t.DEOXYRIBOSE):o(e,t.RIBOSE),c=o(e,t.PHOSPHATE);r+=(n.length-1)*c.atoms.x.length,r+=n.length*i.atoms.x.length,r+=1,l+=(n.length-1)*c.bonds.bondTypes.length,l+=n.length*i.bonds.bondTypes.length,l-=1,l+=3*n.length}return{atomCount:r,bondCount:l,needsCapping:E}}function A(o){return Math.round(t.PRECISION_FACTOR*o)/t.PRECISION_FACTOR}new r(s.PT,l.fasta.peptide,.5),new r(s.DNA,l.fasta.dna,.55),new r(s.RNA,l.fasta.rna,.55),a.FASTA,a.SEPARATOR,a.HELM,a.BILN,function(t){t.BASE="HELM_BASE",t.SUGAR="HELM_SUGAR",t.LINKER="HELM_LINKER",t.AA="HELM_AA",t.CHEM="HELM_CHEM",t.BLOB="HELM_BLOB",t.NUCLEOTIDE="HELM_NUCLETIDE"}(c||(c={})),onmessage=t=>{const{seqList:o,monomersDict:n,alphabet:e,polymerType:a,start:s,end:i}=t.data,r=new Array(i-s),l=new Array(0);for(let t=s;t<i;++t)try{const i=o[t];r[t-s]=E(i,n,e,a)}catch(o){const n=`Cannot get molfile of row #${t}: ${o instanceof Error?o.message:o.toString()}.`;l.push(n)}postMessage({molfiles:r,warnings:l})},bio={}})();
|
|
2
2
|
//# sourceMappingURL=455.js.map
|
package/dist/455.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"455.js","mappings":"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","sources":["webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/consts.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/types.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/macromolecule/consts.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/const.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/macromolecule/types.js","webpack://bio/./node_modules/@datagrok-libraries/js-draw-lite/src/types/org.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/monomer-works.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/to-atomic-level-utils.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/seq-to-molfile-worker.js"],"sourcesContent":["export const monomerWorksConsts = {\n // constants for parsing molfile V2000\n V2K_RGP_SHIFT: 8,\n V2K_RGP_LINE: 'M RGP',\n V2K_A_LINE: 'A ',\n // constants for parsing/reconstruction of molfile V3000\n V3K_COUNTS_SHIFT: 14,\n V3K_IDX_SHIFT: 7,\n V3K_HEADER_FIRST_LINE: '\\nDatagrok macromolecule handler\\n\\n',\n V3K_HEADER_SECOND_LINE: ' 0 0 0 0 0 0 999 V3000\\n',\n V3K_BEGIN_CTAB_BLOCK: 'M V30 BEGIN CTAB\\n',\n V3K_END_CTAB_BLOCK: 'M V30 END CTAB\\n',\n V3K_BEGIN_COUNTS_LINE: 'M V30 COUNTS ',\n V3K_COUNTS_LINE_ENDING: ' 0 0 0\\n',\n V3K_BEGIN_ATOM_BLOCK: 'M V30 BEGIN ATOM\\n',\n V3K_END_ATOM_BLOCK: 'M V30 END ATOM\\n',\n V3K_BEGIN_BOND_BLOCK: 'M V30 BEGIN BOND\\n',\n V3K_END_BOND_BLOCK: 'M V30 END BOND\\n',\n V3K_BOND_CONFIG: ' CFG=',\n V3K_BEGIN_DATA_LINE: 'M V30 ',\n V3K_END: 'M END',\n PRECISION_FACTOR: 10000, // HELMCoreLibrary has 4 significant digits after decimal point in atom coordinates\n // symbols for the corresponding monomers in HELM library\n DEOXYRIBOSE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'd' },\n RIBOSE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'r' },\n PHOSPHATE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'p' },\n OXYGEN: 'O',\n HYDROGEN: 'H',\n};\n//# sourceMappingURL=consts.js.map","export function getMolGraph(dict, libKey) {\n return dict[libKey.polymerType]?.[libKey.symbol];\n}\nexport function hasMolGraph(dict, libKey) {\n return !!dict[libKey.polymerType]?.[libKey.symbol];\n}\nexport function setMolGraph(dict, libKey, value) {\n let pt = dict[libKey.polymerType];\n if (!pt)\n pt = dict[libKey.polymerType] = {};\n pt[libKey.symbol] = value;\n}\nexport class MonomerMap extends Map {\n constructor(entries) {\n super(entries);\n }\n}\n/** @property monomers key - helm seq position, */\nexport class MolfileWithMap {\n constructor(molfile, monomers) {\n this.molfile = molfile;\n this.monomers = monomers;\n }\n static createEmpty() { return new MolfileWithMap('', new MonomerMap(null)); }\n}\n//# sourceMappingURL=types.js.map","import { CandidateType } from './types';\n/** enum type to simplify setting \"user-friendly\" notation if necessary */\nexport var NOTATION;\n(function (NOTATION) {\n NOTATION[\"FASTA\"] = \"fasta\";\n NOTATION[\"SEPARATOR\"] = \"separator\";\n NOTATION[\"HELM\"] = \"helm\";\n /* Requires notation handler */ NOTATION[\"CUSTOM\"] = \"custom\";\n /* Requires notation handler */ NOTATION[\"BILN\"] = \"biln\";\n})(NOTATION || (NOTATION = {}));\nexport var ALPHABET;\n(function (ALPHABET) {\n ALPHABET[\"DNA\"] = \"DNA\";\n ALPHABET[\"RNA\"] = \"RNA\";\n ALPHABET[\"PT\"] = \"PT\";\n /** Unknown */\n ALPHABET[\"UN\"] = \"UN\";\n})(ALPHABET || (ALPHABET = {}));\nexport var TAGS;\n(function (TAGS) {\n TAGS[\"aligned\"] = \"aligned\";\n TAGS[\"alphabet\"] = \"alphabet\";\n TAGS[\"alphabetSize\"] = \".alphabetSize\";\n TAGS[\"alphabetIsMultichar\"] = \".alphabetIsMultichar\";\n TAGS[\"separator\"] = \"separator\";\n TAGS[\"isHelmCompatible\"] = \".isHelmCompatible\";\n TAGS[\"positionNames\"] = \".positionNames\";\n TAGS[\"positionLabels\"] = \".positionLabels\";\n TAGS[\"regions\"] = \".regions\";\n TAGS[\"positionShift\"] = \".positionShift\";\n TAGS[\"selectedPosition\"] = \".selectedPosition\";\n TAGS[\"polymerTypeColumnName\"] = \".polymerTypeColumnName\";\n})(TAGS || (TAGS = {}));\nexport { TAGS as BioTags };\nexport const positionSeparator = ', ';\nexport const monomerRe = /(?:\\[([A-Za-z0-9_\\-,()]+)\\])|([A-Za-z\\-])/g;\nexport const helmRe = /(PEPTIDE1|DNA1|RNA1)\\{([^}]+)}/g;\nexport const helmPp1Re = /\\[([^\\[\\]]+)]/g;\nexport const Alphabets = new class {\n constructor() {\n this.fasta = {\n peptide: new Set([\n 'G', 'L', 'Y', 'S', 'E', 'Q', 'D', 'N', 'F', 'A',\n 'K', 'R', 'H', 'C', 'V', 'P', 'W', 'I', 'M', 'T',\n ]),\n dna: new Set(['A', 'C', 'G', 'T']),\n rna: new Set(['A', 'C', 'G', 'U']),\n };\n }\n}();\nexport const candidateAlphabets = [\n new CandidateType(ALPHABET.PT, Alphabets.fasta.peptide, 0.50),\n new CandidateType(ALPHABET.DNA, Alphabets.fasta.dna, 0.55),\n new CandidateType(ALPHABET.RNA, Alphabets.fasta.rna, 0.55),\n];\n/** Canonical gap symbol */\nexport const GAP_SYMBOL = '';\nexport const GapOriginals = {\n [NOTATION.FASTA]: '-',\n [NOTATION.SEPARATOR]: '',\n [NOTATION.HELM]: '*',\n [NOTATION.BILN]: '',\n};\nexport const MONOMER_MOTIF_SPLITTER = ' , ';\nexport const NOTATION_PROVIDER_CONSTRUCTOR_ROLE = 'notationProviderConstructor';\n//# sourceMappingURL=consts.js.map","// core fields of HELM library object used in toAtomicLevel function\nexport const HELM_CORE_FIELDS = [\n \"symbol\" /* HELM_FIELDS.SYMBOL */,\n \"molfile\" /* HELM_FIELDS.MOLFILE */,\n \"rgroups\" /* HELM_FIELDS.RGROUPS */,\n \"name\" /* HELM_FIELDS.NAME */,\n // HELM_FIELDS.MONOMER_TYPE, // add if terminal monomers for PEPTIDEs to be\n // supported\n];\nexport const SDF_MONOMER_NAME = 'MonomerName';\n// todo: ideally, keys should be expressed via constants\nexport const jsonSdfMonomerLibDict = {\n 'monomerType': null, // -> Backbone\n 'smiles': null,\n 'name': 'Name',\n 'author': null,\n 'molfile': 'molecule',\n 'naturalAnalog': 'MonomerNaturalAnalogCode',\n 'rgroups': 'MonomerCaps',\n 'createDate': null,\n 'id': null,\n 'polymerType': 'MonomerType',\n 'symbol': 'MonomerName'\n};\nexport const DUMMY_MONOMER = {\n 'monomerType': 'Backbone',\n 'smiles': '',\n 'name': '',\n 'author': 'Datagrok',\n 'molfile': '',\n 'naturalAnalog': '',\n 'rgroups': [],\n 'createDate': null,\n 'id': 0,\n 'polymerType': 'PEPTIDE',\n 'symbol': ''\n};\n// range of hex nubers used in PepSea library to endode monomers\nexport const MONOMER_ENCODE_MIN = 0x100;\nexport const MONOMER_ENCODE_MAX = 0x40A;\nexport const RIBOSE_SYMBOL = 'r';\nexport const DEOXYRIBOSE_SYMBOL = 'd';\nexport const PHOSPHATE_SYMBOL = 'p';\nexport const HELM_WRAPPERS_REGEXP = new RegExp(`[${RIBOSE_SYMBOL}${DEOXYRIBOSE_SYMBOL}]\\\\((\\\\w)\\\\)${PHOSPHATE_SYMBOL}?`, 'g');\n//# sourceMappingURL=const.js.map","import { NOTATION_PROVIDER_CONSTRUCTOR_ROLE } from './consts';\nexport class NotationProviderBase {\n /** Name of the custom notation */\n static get notationName() {\n return 'Custom';\n }\n ;\n /** flag to let bio know if this provider implements method for converting helm to it */\n static get implementsFromHelm() {\n return false;\n }\n ;\n /** Method for converting HELM to this notation */\n static convertFromHelm(helm, options) {\n throw new Error(`Method convertFromHelm not implemented for this notation provider`);\n }\n ;\n static async getProviderConstructors() {\n // this is terrible, I know, but otherwise this gets put in webworkers and fails due to DG resolution)))\n // @ts-ignore\n if (window?.DG) {\n // @ts-ignore\n const constFuncs = window.DG.Func.find({ meta: { role: NOTATION_PROVIDER_CONSTRUCTOR_ROLE } });\n return Promise.all(constFuncs.map((f) => f.apply({})));\n }\n return [];\n }\n}\n/** Alphabet candidate type */\nexport class CandidateType {\n constructor(name, alphabet, cutoff) {\n this.name = name;\n this.alphabet = alphabet;\n this.cutoff = cutoff;\n }\n}\n/** Alphabet candidate similarity type */\nexport class CandidateSimType extends CandidateType {\n constructor(candidate, freq, similarity) {\n super(candidate.name, candidate.alphabet, candidate.cutoff);\n this.freq = freq;\n this.similarity = similarity;\n }\n}\n//# sourceMappingURL=types.js.map","export var HelmTypes;\n(function (HelmTypes) {\n HelmTypes[\"BASE\"] = \"HELM_BASE\";\n HelmTypes[\"SUGAR\"] = \"HELM_SUGAR\";\n HelmTypes[\"LINKER\"] = \"HELM_LINKER\";\n HelmTypes[\"AA\"] = \"HELM_AA\";\n HelmTypes[\"CHEM\"] = \"HELM_CHEM\";\n HelmTypes[\"BLOB\"] = \"HELM_BLOB\";\n HelmTypes[\"NUCLEOTIDE\"] = \"HELM_NUCLETIDE\";\n})(HelmTypes || (HelmTypes = {}));\n//# sourceMappingURL=org.js.map","import { HelmTypes } from '../helm/consts';\nexport class MonomerWorks {\n //private molfileConverter: IMolfileConverter;\n constructor(monomerLib /*, molfileConverter: IMolfileConverter*/) {\n this.monomerLib = monomerLib;\n //this.molfileConverter = molfileConverter;\n }\n //types according to Monomer possible\n getCappedRotatedMonomer(monomerType, monomerName) {\n // TODO: Check type of monomerType arg\n const monomer = this.monomerLib.getMonomer(monomerType, monomerName);\n if (monomer)\n return monomer.molfile; //TODO cap\n return null;\n }\n}\nexport function helmTypeToPolymerType(helmType) {\n let polymerType = undefined;\n switch (helmType) {\n case HelmTypes.BASE:\n case HelmTypes.SUGAR: // r - ribose, d - deoxyribose\n case HelmTypes.LINKER: // p - phosphate\n case HelmTypes.NUCLEOTIDE:\n // @ts-ignore\n case 'nucleotide':\n polymerType = \"RNA\" /* PolymerTypes.RNA */;\n break;\n case HelmTypes.AA:\n polymerType = \"PEPTIDE\" /* PolymerTypes.PEPTIDE */;\n break;\n case HelmTypes.CHEM:\n polymerType = \"CHEM\" /* PolymerTypes.CHEM */;\n break;\n case HelmTypes.BLOB:\n polymerType = \"BLOB\" /* PolymerTypes.BLOB */;\n break;\n default:\n polymerType = \"PEPTIDE\" /* PolymerTypes.PEPTIDE */;\n console.warn(`Unexpected HelmType '${helmType}'`);\n }\n return polymerType;\n}\n//# sourceMappingURL=monomer-works.js.map","/* eslint-disable max-len */\nimport { monomerWorksConsts as C } from './consts';\nimport { getMolGraph, MolfileWithMap, MonomerMap } from './types';\nimport { HELM_CORE_FIELDS, } from '../utils/const';\nimport { ALPHABET, GAP_SYMBOL } from '../utils/macromolecule/consts';\nimport { helmTypeToPolymerType } from './monomer-works';\n/** Get a mapping of peptide symbols to HELM monomer library objects with selected fields.\n * @param {IMonomerLib} monomerLib - Monomer library\n * @param {HELM_POLYMER_TYPE} polymerType - Polymer type\n * @param {ALPHABET} alphabet - Alphabet of the column\n * @return {Map<string, any>} - Mapping of peptide symbols to HELM monomer library objects with selected fields*/\nexport function getFormattedMonomerLib(monomerLib, polymerType, alphabet) {\n const map = new Map();\n for (const monomerSymbol of monomerLib.getMonomerSymbolsByType(polymerType)) {\n const it = monomerLib.getMonomer(polymerType, monomerSymbol);\n if (polymerType === \"RNA\" /* HELM_POLYMER_TYPE.RNA */ &&\n (it[\"monomerType\" /* HELM_FIELDS.MONOMER_TYPE */] === \"Branch\" /* HELM_MONOMER_TYPE.BRANCH */ ||\n alphabet === ALPHABET.DNA && it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.DEOXYRIBOSE.symbol ||\n alphabet === ALPHABET.RNA && it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.RIBOSE.symbol ||\n it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.PHOSPHATE.symbol) ||\n polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */ &&\n it[\"monomerType\" /* HELM_FIELDS.MONOMER_TYPE */] !== \"Branch\" /* HELM_MONOMER_TYPE.BRANCH */) {\n const monomerObject = {};\n HELM_CORE_FIELDS.forEach((field) => {\n //@ts-ignore\n monomerObject[field] = it[field];\n });\n map.set(monomerSymbol, monomerObject);\n }\n }\n return map;\n}\n/** Translate a sequence of monomer symbols into Molfile V3000\n * @param {string[]} monomerSeq - Sequence of monomer symbols (canonical)\n * @param {Map<string, MolGraph>} monomersDict - Mapping of monomer symbols to MolGraph objects\n * @param {ALPHABET} alphabet - Alphabet of the column\n * @param {PolymerType} polymerType - Polymer type\n * @return {string} - Molfile V3000*/\nexport function monomerSeqToMolfile(monomerSeq, monomersDict, alphabet, polymerType) {\n if (monomerSeq.length === 0) {\n // throw new Error('monomerSeq is empty');\n return MolfileWithMap.createEmpty();\n }\n // define atom and bond counts, taking into account the bond type\n const getAtomAndBondCounts = getResultingAtomBondCounts;\n const { atomCount, bondCount, needsCapping } = getAtomAndBondCounts(monomerSeq, monomersDict, alphabet, polymerType);\n // create arrays to store lines of the resulting molfile\n const molfileAtomBlock = new Array(atomCount);\n const molfileBondBlock = new Array(bondCount);\n let addMonomerToMolblock;\n let sugar = null;\n let phosphate = null;\n if (polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */)\n addMonomerToMolblock = addAminoAcidToMolblock;\n else { // nucleotides\n addMonomerToMolblock = addNucleotideToMolblock;\n sugar = (alphabet === ALPHABET.DNA) ? getMolGraph(monomersDict, C.DEOXYRIBOSE) : getMolGraph(monomersDict, C.RIBOSE);\n phosphate = getMolGraph(monomersDict, C.PHOSPHATE);\n }\n const v = {\n i: 0,\n nodeShift: 0,\n bondShift: 0,\n backbonePositionShift: new Array(2).fill(0),\n branchPositionShift: new Array(2).fill(0),\n backboneAttachNode: 0,\n branchAttachNode: 0,\n flipFactor: 1,\n };\n const LC = {\n sugar: sugar,\n phosphate: phosphate,\n seqLength: monomerSeq.length,\n atomCount: atomCount,\n bondCount: bondCount,\n };\n const monomers = new MonomerMap();\n const steabsCollection = [];\n let nAtoms = 0;\n let lastMonomerCappingAtom = undefined;\n for (v.i = 0; v.i < LC.seqLength; ++v.i) {\n const seqMonomer = monomerSeq[v.i];\n if (seqMonomer.symbol === GAP_SYMBOL)\n continue;\n const monomer = getMolGraph(monomersDict, { symbol: seqMonomer.symbol, polymerType: helmTypeToPolymerType(seqMonomer.biotype) });\n lastMonomerCappingAtom = monomer.terminalR2Atom;\n const mAtomFirst = v.nodeShift;\n const mBondFirst = v.bondShift;\n addMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v, LC);\n //adding stereo atoms to array for further STEABS block generation\n monomer.stereoAtoms?.forEach((i) => steabsCollection.push(i + nAtoms));\n nAtoms += monomer.atoms.x.length;\n const mAtomCount = v.nodeShift - mAtomFirst;\n const mAtomList = new Array(mAtomCount);\n for (let maI = 0; maI < mAtomCount; ++maI)\n mAtomList[maI] = mAtomFirst + maI;\n const mBondCount = v.bondShift - mBondFirst;\n const mBondList = new Array(mBondCount);\n for (let mbI = 0; mbI < mBondCount; ++mbI)\n mBondList[mbI] = mBondFirst + mbI;\n monomers.set(v.i, {\n biotype: seqMonomer.biotype,\n symbol: seqMonomer.symbol,\n atoms: mAtomList, bonds: mBondList\n });\n }\n // if the last monomer needs to be capped, add the terminal OH to the resulting molfile\n if (needsCapping)\n capResultingMolblock(molfileAtomBlock, molfileBondBlock, v, LC, lastMonomerCappingAtom ?? C.OXYGEN);\n const molfileCountsLine = C.V3K_BEGIN_COUNTS_LINE + atomCount + ' ' + bondCount + C.V3K_COUNTS_LINE_ENDING;\n // todo: possible optimization may be achieved by replacing .join('') with +=\n // since counterintuitively joining an array into a new string is reportedly\n // slower than using += as below\n let result = '';\n result += C.V3K_HEADER_FIRST_LINE;\n result += C.V3K_HEADER_SECOND_LINE;\n result += C.V3K_BEGIN_CTAB_BLOCK;\n result += molfileCountsLine;\n result += C.V3K_BEGIN_ATOM_BLOCK;\n result += molfileAtomBlock.join('');\n result += C.V3K_END_ATOM_BLOCK;\n result += C.V3K_BEGIN_BOND_BLOCK;\n result += molfileBondBlock.join('');\n result += C.V3K_END_BOND_BLOCK;\n if (steabsCollection.length > 0)\n result += getCollectionBlock(steabsCollection);\n result += C.V3K_END_CTAB_BLOCK;\n result += C.V3K_END;\n // return molfileParts.join('');\n return { molfile: result, monomers: monomers };\n}\nfunction getCollectionBlock(collection) {\n //one row in STEABS block can be no longer than 80 symbols\n //maxSymbols = 80 symbols minus ' -\\n' (4 symbols)\n const maxSymbols = 76;\n const rowsArray = [];\n let newCollectionRow = `M V30 MDLV30/STEABS ATOMS=(${collection.length}`;\n for (let i = 0; i < collection.length; i++) {\n const updatedRow = `${newCollectionRow} ${collection[i]}`;\n if (updatedRow.length > maxSymbols) {\n rowsArray.push(`${newCollectionRow} -\\n`);\n newCollectionRow = `M V30 ${collection[i]}`;\n }\n else\n newCollectionRow = updatedRow;\n //in case last atom was added - close the block\n if (i === collection.length - 1)\n rowsArray.push(`${newCollectionRow})\\n`);\n }\n return `M V30 BEGIN COLLECTION\\n${rowsArray.join('')}M V30 END COLLECTION\\n`;\n}\n/** Cap the resulting (after sewing up all the monomers) molfile with 'O'\n * @param {string[]} molfileAtomBlock - Array of lines of the resulting molfile atom block\n * @param {string[]} molfileBondBlock - Array of lines of the resulting molfile bond block\n * @param {LoopVariables} v - Loop variables\n * @param {LoopConstants} LC - Loop constants*/\nfunction capResultingMolblock(molfileAtomBlock, molfileBondBlock, v, LC, cappingAtomType = C.OXYGEN) {\n // add terminal oxygen\n const atomIdx = v.nodeShift + 1;\n molfileAtomBlock[LC.atomCount] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n (cappingAtomType ?? C.OXYGEN) + ' ' + keepPrecision(v.backbonePositionShift[0]) + ' ' +\n v.flipFactor * keepPrecision(v.backbonePositionShift[1]) + ' ' + '0.000000 0' + '\\n';\n // add terminal bond\n const firstAtom = v.backboneAttachNode;\n const secondAtom = atomIdx;\n molfileBondBlock[LC.bondCount] = C.V3K_BEGIN_DATA_LINE + v.bondShift + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n}\nfunction addAminoAcidToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n v.flipFactor = (-1) ** (v.i % 2); // to flip every even monomer over OX\n addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v);\n}\nfunction addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n // todo: remove these comments to the docstrings of the corr. functions\n // construnct the lines of V3K molfile atom block\n fillAtomLines(monomer, molfileAtomBlock, v);\n // construct the lines of V3K molfile bond block\n fillBondLines(monomer, molfileBondBlock, v);\n // peptide bond\n fillChainExtendingBond(monomer, molfileBondBlock, v);\n // update branch variables if necessary\n if (monomer.meta.branchShift !== null && monomer.meta.terminalNodes.length > 2)\n updateBranchVariables(monomer, v);\n // update loop variables\n updateChainExtendingVariables(monomer, v);\n}\nfunction addNucleotideToMolblock(nucleobase, molfileAtomBlock, molfileBondBlock, v, LC) {\n // construnct the lines of V3K molfile atom block corresponding to phosphate\n // and sugar\n if (v.i === 0)\n addBackboneMonomerToMolblock(LC.sugar, molfileAtomBlock, molfileBondBlock, v);\n else {\n for (const monomer of [LC.phosphate, LC.sugar])\n addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v);\n }\n addBranchMonomerToMolblock(nucleobase, molfileAtomBlock, molfileBondBlock, v);\n}\nfunction addBranchMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n fillBranchAtomLines(monomer, molfileAtomBlock, v);\n fillBondLines(monomer, molfileBondBlock, v);\n fillBackboneToBranchBond(monomer, molfileBondBlock, v);\n // C-N bond\n const bondIdx = v.bondShift;\n const firstAtom = v.branchAttachNode;\n const secondAtom = monomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[bondIdx - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n // update loop variables\n v.bondShift += monomer.bonds.atomPairs.length + 1;\n v.nodeShift += monomer.atoms.atomTypes.length;\n}\nfunction updateChainExtendingVariables(monomer, v) {\n v.backboneAttachNode = v.nodeShift + monomer.meta.terminalNodes[1];\n v.bondShift += monomer.bonds.atomPairs.length + 1;\n v.nodeShift += monomer.atoms.atomTypes.length;\n v.backbonePositionShift[0] += monomer.meta.backboneShift?.[0] ?? 0; // todo: non-null check\n v.backbonePositionShift[1] += v.flipFactor * (monomer.meta.backboneShift?.[1] ?? 0);\n}\nfunction updateBranchVariables(monomer, v) {\n v.branchAttachNode = v.nodeShift + monomer.meta.terminalNodes[2];\n for (let i = 0; i < 2; ++i)\n v.branchPositionShift[i] = v.backbonePositionShift[i] + monomer.meta.branchShift[i];\n}\nfunction fillAtomLines(monomer, molfileAtomBlock, v) {\n for (let j = 0; j < monomer.atoms.atomTypes.length; ++j) {\n const atomIdx = v.nodeShift + j + 1;\n molfileAtomBlock[v.nodeShift + j] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n monomer.atoms.atomTypes[j] + ' ' +\n keepPrecision(v.backbonePositionShift[0] + monomer.atoms.x[j]) + ' ' +\n keepPrecision(v.backbonePositionShift[1] + v.flipFactor * monomer.atoms.y[j]) +\n ' ' + monomer.atoms.kwargs[j];\n }\n}\n// todo: remove as quickfix\nfunction fillBranchAtomLines(monomer, molfileAtomBlock, v) {\n for (let j = 0; j < monomer.atoms.atomTypes.length; ++j) {\n const atomIdx = v.nodeShift + j + 1;\n molfileAtomBlock[v.nodeShift + j] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n monomer.atoms.atomTypes[j] + ' ' +\n keepPrecision(v.branchPositionShift[0] + monomer.atoms.x[j]) + ' ' +\n keepPrecision(v.branchPositionShift[1] + v.flipFactor * monomer.atoms.y[j]) +\n ' ' + monomer.atoms.kwargs[j];\n }\n}\nfunction fillBondLines(monomer, molfileBondBlock, v) {\n // construct the lines of V3K molfile bond block\n for (let j = 0; j < monomer.bonds.atomPairs.length; ++j) {\n const bondIdx = v.bondShift + j + 1;\n const firstAtom = monomer.bonds.atomPairs[j][0] + v.nodeShift;\n const secondAtom = monomer.bonds.atomPairs[j][1] + v.nodeShift;\n let bondCfg = '';\n if (monomer.bonds.bondConfiguration.has(j)) {\n // flip orientation when necessary\n let orientation = monomer.bonds.bondConfiguration.get(j);\n if (v.flipFactor < 0)\n orientation = (orientation === 1) ? 3 : 1;\n bondCfg = ' CFG=' + orientation;\n }\n const kwargs = monomer.bonds.kwargs.has(j) ?\n ' ' + monomer.bonds.kwargs.get(j) : '';\n molfileBondBlock[v.bondShift + j] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n monomer.bonds.bondTypes[j] + ' ' +\n firstAtom + ' ' + secondAtom + bondCfg + kwargs + '\\n';\n }\n}\nfunction fillChainExtendingBond(monomer, molfileBondBlock, v) {\n if (v.backboneAttachNode !== 0) {\n const bondIdx = v.bondShift;\n const firstAtom = v.backboneAttachNode;\n const secondAtom = monomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[v.bondShift - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n }\n}\n// todo: remove\nfunction fillBackboneToBranchBond(branchMonomer, molfileBondBlock, v) {\n const bondIdx = v.bondShift;\n const firstAtom = v.branchAttachNode;\n const secondAtom = branchMonomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[bondIdx - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n}\n/** Compute the atom/bond counts for the resulting molfile, depending on the\n * type of polymer (peptide/nucleotide)\n * @param {string[]}monomerSeq - the sequence of monomers\n * @param {Map<string, MolGraph>}monomersDict - the dictionary of monomers\n * @param {ALPHABET}alphabet - the alphabet of the monomers\n * @param {HELM_POLYMER_TYPE}polymerType - the type of polymer\n * @return {{atomCount: number, bondCount: number}} - the atom/bond counts*/\nfunction getResultingAtomBondCounts(monomerSeq, monomersDict, alphabet, polymerType) {\n let atomCount = 0;\n let bondCount = 0;\n let monomerCount = 0;\n let needsCapping = true;\n let lastMonomerGraph = null;\n // sum up all the atoms/nodes provided by the sequence\n for (const seqMonomer of monomerSeq) {\n if (seqMonomer.symbol === GAP_SYMBOL)\n continue; // Skip for gap/empty monomer in MSA\n if (seqMonomer.symbol == '*')\n throw new Error(`Gap canonical symbol is '', not '*`);\n lastMonomerGraph = getMolGraph(monomersDict, { symbol: seqMonomer.symbol, polymerType: helmTypeToPolymerType(seqMonomer.biotype) });\n atomCount += lastMonomerGraph.atoms.x.length;\n bondCount += lastMonomerGraph.bonds.bondTypes.length;\n monomerCount++;\n }\n // add extra values depending on the polymer type\n if (polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */) {\n // add the rightmost/terminating cap group 'OH' (i.e. 'O')\n atomCount += 1;\n // add chain-extending bonds (C-NH per each monomer pair and terminal C-OH)\n bondCount += monomerCount;\n // if the last monomer is something like NH2, which only has R1, there is no need to cap it\n // although, this should never happen, but hey... in other bits of code, there is a chunk that adds pseudo-R2 as hydrogen\n // we should also check, if the R2 of the last monomer is not hydrogen, that case should also be omitted\n if (monomerCount > 0) {\n if ((lastMonomerGraph?.meta?.rNodes?.length ?? 0) < 2 || lastMonomerGraph?.terminalR2Atom?.toLowerCase() === C.HYDROGEN.toLowerCase()) {\n needsCapping = false;\n atomCount -= 1; // remove the last atom (the terminal 'O')\n bondCount -= 1; // remove the last bond (the terminal C-OH)\n }\n }\n }\n else { // nucleotides\n const sugar = (alphabet === ALPHABET.DNA) ?\n getMolGraph(monomersDict, C.DEOXYRIBOSE) : getMolGraph(monomersDict, C.RIBOSE);\n const phosphate = getMolGraph(monomersDict, C.PHOSPHATE);\n // add phosphate per each pair of nucleobase symbols\n atomCount += (monomerSeq.length - 1) * phosphate.atoms.x.length;\n // add sugar per each nucleobase symbol\n atomCount += monomerSeq.length * sugar.atoms.x.length;\n // add the leftmost cap group 'OH' (i.e. 'O')\n atomCount += 1;\n // add bonds from phosphate monomers\n bondCount += (monomerSeq.length - 1) * phosphate.bonds.bondTypes.length;\n // add bonds from sugar monomers\n bondCount += monomerSeq.length * sugar.bonds.bondTypes.length;\n // exclude the first chain-extending bond O-P (absent, no 'leftmost' phosphate)\n bondCount -= 1;\n // add chain-extending and branch bonds (O-P, C-O and C-N per each nucleotide)\n bondCount += monomerSeq.length * 3;\n }\n return { atomCount, bondCount, needsCapping };\n}\n/** Keep precision upon floating point operations over atom coordinates\n * @param {number}x - the floating point number\n * @return {number} - the floating point number with the same precision\n */\nexport function keepPrecision(x) {\n return Math.round(C.PRECISION_FACTOR * x) / C.PRECISION_FACTOR;\n}\n//# sourceMappingURL=to-atomic-level-utils.js.map","import { monomerSeqToMolfile } from './to-atomic-level-utils';\nonmessage = (event) => {\n const { seqList, monomersDict, alphabet, polymerType, start, end } = event.data;\n const resMolList = new Array(end - start);\n const molfileWarningList = new Array(0);\n for (let rowI = start; rowI < end; ++rowI) {\n try {\n const seq = seqList[rowI];\n resMolList[rowI - start] = monomerSeqToMolfile(seq, monomersDict, alphabet, polymerType);\n }\n catch (err) {\n const errMsg = err instanceof Error ? err.message : err.toString();\n const msg = `Cannot get molfile of row #${rowI}: ${errMsg}.`;\n molfileWarningList.push(msg);\n }\n }\n postMessage({ molfiles: resMolList, warnings: molfileWarningList });\n};\n//# sourceMappingURL=seq-to-molfile-worker.js.map"],"names":["monomerWorksConsts","V2K_RGP_SHIFT","V2K_RGP_LINE","V2K_A_LINE","V3K_COUNTS_SHIFT","V3K_IDX_SHIFT","V3K_HEADER_FIRST_LINE","V3K_HEADER_SECOND_LINE","V3K_BEGIN_CTAB_BLOCK","V3K_END_CTAB_BLOCK","V3K_BEGIN_COUNTS_LINE","V3K_COUNTS_LINE_ENDING","V3K_BEGIN_ATOM_BLOCK","V3K_END_ATOM_BLOCK","V3K_BEGIN_BOND_BLOCK","V3K_END_BOND_BLOCK","V3K_BOND_CONFIG","V3K_BEGIN_DATA_LINE","V3K_END","PRECISION_FACTOR","DEOXYRIBOSE","polymerType","symbol","RIBOSE","PHOSPHATE","OXYGEN","HYDROGEN","getMolGraph","dict","libKey","MonomerMap","Map","constructor","entries","super","MolfileWithMap","molfile","monomers","this","createEmpty","NOTATION","ALPHABET","TAGS","RegExp","CandidateType","name","alphabet","cutoff","Alphabets","fasta","peptide","Set","dna","rna","HelmTypes","helmTypeToPolymerType","helmType","BASE","SUGAR","LINKER","NUCLEOTIDE","AA","CHEM","BLOB","console","warn","monomerSeqToMolfile","monomerSeq","monomersDict","length","getAtomAndBondCounts","getResultingAtomBondCounts","atomCount","bondCount","needsCapping","molfileAtomBlock","Array","molfileBondBlock","addMonomerToMolblock","sugar","phosphate","addAminoAcidToMolblock","addNucleotideToMolblock","DNA","v","i","nodeShift","bondShift","backbonePositionShift","fill","branchPositionShift","backboneAttachNode","branchAttachNode","flipFactor","LC","seqLength","steabsCollection","lastMonomerCappingAtom","nAtoms","seqMonomer","monomer","biotype","terminalR2Atom","mAtomFirst","mBondFirst","stereoAtoms","forEach","push","atoms","x","mAtomCount","mAtomList","maI","mBondCount","mBondList","mbI","set","bonds","cappingAtomType","atomIdx","keepPrecision","firstAtom","secondAtom","capResultingMolblock","molfileCountsLine","result","join","collection","rowsArray","newCollectionRow","updatedRow","getCollectionBlock","addBackboneMonomerToMolblock","j","atomTypes","y","kwargs","fillAtomLines","fillBondLines","bondIdx","meta","terminalNodes","fillChainExtendingBond","branchShift","updateBranchVariables","atomPairs","backboneShift","updateChainExtendingVariables","nucleobase","fillBranchAtomLines","branchMonomer","fillBackboneToBranchBond","addBranchMonomerToMolblock","bondCfg","bondConfiguration","has","orientation","get","bondTypes","monomerCount","lastMonomerGraph","Error","rNodes","toLowerCase","Math","round","PT","RNA","FASTA","SEPARATOR","HELM","BILN","onmessage","event","seqList","start","end","data","resMolList","molfileWarningList","rowI","seq","err","msg","message","toString","postMessage","molfiles","warnings"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"455.js","mappings":"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","sources":["webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/consts.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/types.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/macromolecule/consts.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/const.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/utils/macromolecule/types.js","webpack://bio/./node_modules/@datagrok-libraries/js-draw-lite/src/types/org.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/monomer-works.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/to-atomic-level-utils.js","webpack://bio/./node_modules/@datagrok-libraries/bio/src/monomer-works/seq-to-molfile-worker.js"],"sourcesContent":["export const monomerWorksConsts = {\n // constants for parsing molfile V2000\n V2K_RGP_SHIFT: 8,\n V2K_RGP_LINE: 'M RGP',\n V2K_A_LINE: 'A ',\n // constants for parsing/reconstruction of molfile V3000\n V3K_COUNTS_SHIFT: 14,\n V3K_IDX_SHIFT: 7,\n V3K_HEADER_FIRST_LINE: '\\nDatagrok macromolecule handler\\n\\n',\n V3K_HEADER_SECOND_LINE: ' 0 0 0 0 0 0 999 V3000\\n',\n V3K_BEGIN_CTAB_BLOCK: 'M V30 BEGIN CTAB\\n',\n V3K_END_CTAB_BLOCK: 'M V30 END CTAB\\n',\n V3K_BEGIN_COUNTS_LINE: 'M V30 COUNTS ',\n V3K_COUNTS_LINE_ENDING: ' 0 0 0\\n',\n V3K_BEGIN_ATOM_BLOCK: 'M V30 BEGIN ATOM\\n',\n V3K_END_ATOM_BLOCK: 'M V30 END ATOM\\n',\n V3K_BEGIN_BOND_BLOCK: 'M V30 BEGIN BOND\\n',\n V3K_END_BOND_BLOCK: 'M V30 END BOND\\n',\n V3K_BOND_CONFIG: ' CFG=',\n V3K_BEGIN_DATA_LINE: 'M V30 ',\n V3K_END: 'M END',\n PRECISION_FACTOR: 10000, // HELMCoreLibrary has 4 significant digits after decimal point in atom coordinates\n // symbols for the corresponding monomers in HELM library\n DEOXYRIBOSE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'd' },\n RIBOSE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'r' },\n PHOSPHATE: { polymerType: \"RNA\" /* PolymerTypes.RNA */, symbol: 'p' },\n OXYGEN: 'O',\n HYDROGEN: 'H',\n};\n//# sourceMappingURL=consts.js.map","export function getMolGraph(dict, libKey) {\n return dict[libKey.polymerType]?.[libKey.symbol];\n}\nexport function hasMolGraph(dict, libKey) {\n return !!dict[libKey.polymerType]?.[libKey.symbol];\n}\nexport function setMolGraph(dict, libKey, value) {\n let pt = dict[libKey.polymerType];\n if (!pt)\n pt = dict[libKey.polymerType] = {};\n pt[libKey.symbol] = value;\n}\nexport class MonomerMap extends Map {\n constructor(entries) {\n super(entries);\n }\n}\n/** @property monomers key - helm seq position, */\nexport class MolfileWithMap {\n constructor(molfile, monomers) {\n this.molfile = molfile;\n this.monomers = monomers;\n }\n static createEmpty() { return new MolfileWithMap('', new MonomerMap(null)); }\n}\n//# sourceMappingURL=types.js.map","import { CandidateType } from './types';\n/** enum type to simplify setting \"user-friendly\" notation if necessary */\nexport var NOTATION;\n(function (NOTATION) {\n NOTATION[\"FASTA\"] = \"fasta\";\n NOTATION[\"SEPARATOR\"] = \"separator\";\n NOTATION[\"HELM\"] = \"helm\";\n /* Requires notation handler */ NOTATION[\"CUSTOM\"] = \"custom\";\n /* Requires notation handler */ NOTATION[\"BILN\"] = \"biln\";\n})(NOTATION || (NOTATION = {}));\nexport var ALPHABET;\n(function (ALPHABET) {\n ALPHABET[\"DNA\"] = \"DNA\";\n ALPHABET[\"RNA\"] = \"RNA\";\n ALPHABET[\"PT\"] = \"PT\";\n /** Unknown */\n ALPHABET[\"UN\"] = \"UN\";\n})(ALPHABET || (ALPHABET = {}));\nexport var TAGS;\n(function (TAGS) {\n TAGS[\"aligned\"] = \"aligned\";\n TAGS[\"alphabet\"] = \"alphabet\";\n TAGS[\"alphabetSize\"] = \".alphabetSize\";\n TAGS[\"alphabetIsMultichar\"] = \".alphabetIsMultichar\";\n TAGS[\"separator\"] = \"separator\";\n TAGS[\"isHelmCompatible\"] = \".isHelmCompatible\";\n TAGS[\"positionNames\"] = \".positionNames\";\n TAGS[\"positionLabels\"] = \".positionLabels\";\n TAGS[\"regions\"] = \".regions\";\n TAGS[\"positionShift\"] = \".positionShift\";\n TAGS[\"selectedPosition\"] = \".selectedPosition\";\n TAGS[\"polymerTypeColumnName\"] = \".polymerTypeColumnName\";\n TAGS[\"annotations\"] = \".annotations\";\n TAGS[\"numberingScheme\"] = \".numberingScheme\";\n TAGS[\"annotationColumnName\"] = \".annotationColumnName\";\n})(TAGS || (TAGS = {}));\nexport { TAGS as BioTags };\nexport const positionSeparator = ', ';\nexport const monomerRe = /(?:\\[([A-Za-z0-9_\\-,()]+)\\])|([A-Za-z\\-])/g;\nexport const helmRe = /(PEPTIDE1|DNA1|RNA1)\\{([^}]+)}/g;\nexport const helmPp1Re = /\\[([^\\[\\]]+)]/g;\nexport const Alphabets = new class {\n constructor() {\n this.fasta = {\n peptide: new Set([\n 'G', 'L', 'Y', 'S', 'E', 'Q', 'D', 'N', 'F', 'A',\n 'K', 'R', 'H', 'C', 'V', 'P', 'W', 'I', 'M', 'T',\n ]),\n dna: new Set(['A', 'C', 'G', 'T']),\n rna: new Set(['A', 'C', 'G', 'U']),\n };\n }\n}();\nexport const candidateAlphabets = [\n new CandidateType(ALPHABET.PT, Alphabets.fasta.peptide, 0.50),\n new CandidateType(ALPHABET.DNA, Alphabets.fasta.dna, 0.55),\n new CandidateType(ALPHABET.RNA, Alphabets.fasta.rna, 0.55),\n];\n/** Canonical gap symbol */\nexport const GAP_SYMBOL = '';\nexport const GapOriginals = {\n [NOTATION.FASTA]: '-',\n [NOTATION.SEPARATOR]: '',\n [NOTATION.HELM]: '*',\n [NOTATION.BILN]: '',\n};\nexport const MONOMER_MOTIF_SPLITTER = ' , ';\nexport const NOTATION_PROVIDER_CONSTRUCTOR_ROLE = 'notationProviderConstructor';\n//# sourceMappingURL=consts.js.map","// core fields of HELM library object used in toAtomicLevel function\nexport const HELM_CORE_FIELDS = [\n \"symbol\" /* HELM_FIELDS.SYMBOL */,\n \"molfile\" /* HELM_FIELDS.MOLFILE */,\n \"rgroups\" /* HELM_FIELDS.RGROUPS */,\n \"name\" /* HELM_FIELDS.NAME */,\n // HELM_FIELDS.MONOMER_TYPE, // add if terminal monomers for PEPTIDEs to be\n // supported\n];\nexport const SDF_MONOMER_NAME = 'MonomerName';\n// todo: ideally, keys should be expressed via constants\nexport const jsonSdfMonomerLibDict = {\n 'monomerType': null, // -> Backbone\n 'smiles': null,\n 'name': 'Name',\n 'author': null,\n 'molfile': 'molecule',\n 'naturalAnalog': 'MonomerNaturalAnalogCode',\n 'rgroups': 'MonomerCaps',\n 'createDate': null,\n 'id': null,\n 'polymerType': 'MonomerType',\n 'symbol': 'MonomerName'\n};\nexport const DUMMY_MONOMER = {\n 'monomerType': 'Backbone',\n 'smiles': '',\n 'name': '',\n 'author': 'Datagrok',\n 'molfile': '',\n 'naturalAnalog': '',\n 'rgroups': [],\n 'createDate': null,\n 'id': 0,\n 'polymerType': 'PEPTIDE',\n 'symbol': ''\n};\n// range of hex nubers used in PepSea library to endode monomers\nexport const MONOMER_ENCODE_MIN = 0x100;\nexport const MONOMER_ENCODE_MAX = 0x40A;\nexport const RIBOSE_SYMBOL = 'r';\nexport const DEOXYRIBOSE_SYMBOL = 'd';\nexport const PHOSPHATE_SYMBOL = 'p';\nexport const HELM_WRAPPERS_REGEXP = new RegExp(`[${RIBOSE_SYMBOL}${DEOXYRIBOSE_SYMBOL}]\\\\((\\\\w)\\\\)${PHOSPHATE_SYMBOL}?`, 'g');\n//# sourceMappingURL=const.js.map","import { NOTATION_PROVIDER_CONSTRUCTOR_ROLE } from './consts';\nexport class NotationProviderBase {\n /** Name of the custom notation */\n static get notationName() {\n return 'Custom';\n }\n ;\n /** flag to let bio know if this provider implements method for converting helm to it */\n static get implementsFromHelm() {\n return false;\n }\n ;\n /** Method for converting HELM to this notation */\n static convertFromHelm(helm, options) {\n throw new Error(`Method convertFromHelm not implemented for this notation provider`);\n }\n ;\n static async getProviderConstructors() {\n // this is terrible, I know, but otherwise this gets put in webworkers and fails due to DG resolution)))\n // @ts-ignore\n if (window?.DG) {\n // @ts-ignore\n const constFuncs = window.DG.Func.find({ meta: { role: NOTATION_PROVIDER_CONSTRUCTOR_ROLE } });\n return Promise.all(constFuncs.map((f) => f.apply({})));\n }\n return [];\n }\n}\n/** Alphabet candidate type */\nexport class CandidateType {\n constructor(name, alphabet, cutoff) {\n this.name = name;\n this.alphabet = alphabet;\n this.cutoff = cutoff;\n }\n}\n/** Alphabet candidate similarity type */\nexport class CandidateSimType extends CandidateType {\n constructor(candidate, freq, similarity) {\n super(candidate.name, candidate.alphabet, candidate.cutoff);\n this.freq = freq;\n this.similarity = similarity;\n }\n}\n//# sourceMappingURL=types.js.map","export var HelmTypes;\n(function (HelmTypes) {\n HelmTypes[\"BASE\"] = \"HELM_BASE\";\n HelmTypes[\"SUGAR\"] = \"HELM_SUGAR\";\n HelmTypes[\"LINKER\"] = \"HELM_LINKER\";\n HelmTypes[\"AA\"] = \"HELM_AA\";\n HelmTypes[\"CHEM\"] = \"HELM_CHEM\";\n HelmTypes[\"BLOB\"] = \"HELM_BLOB\";\n HelmTypes[\"NUCLEOTIDE\"] = \"HELM_NUCLETIDE\";\n})(HelmTypes || (HelmTypes = {}));\n//# sourceMappingURL=org.js.map","import { HelmTypes } from '../helm/consts';\nexport class MonomerWorks {\n //private molfileConverter: IMolfileConverter;\n constructor(monomerLib /*, molfileConverter: IMolfileConverter*/) {\n this.monomerLib = monomerLib;\n //this.molfileConverter = molfileConverter;\n }\n //types according to Monomer possible\n getCappedRotatedMonomer(monomerType, monomerName) {\n // TODO: Check type of monomerType arg\n const monomer = this.monomerLib.getMonomer(monomerType, monomerName);\n if (monomer)\n return monomer.molfile; //TODO cap\n return null;\n }\n}\nexport function helmTypeToPolymerType(helmType) {\n let polymerType = undefined;\n switch (helmType) {\n case HelmTypes.BASE:\n case HelmTypes.SUGAR: // r - ribose, d - deoxyribose\n case HelmTypes.LINKER: // p - phosphate\n case HelmTypes.NUCLEOTIDE:\n // @ts-ignore\n case 'nucleotide':\n polymerType = \"RNA\" /* PolymerTypes.RNA */;\n break;\n case HelmTypes.AA:\n polymerType = \"PEPTIDE\" /* PolymerTypes.PEPTIDE */;\n break;\n case HelmTypes.CHEM:\n polymerType = \"CHEM\" /* PolymerTypes.CHEM */;\n break;\n case HelmTypes.BLOB:\n polymerType = \"BLOB\" /* PolymerTypes.BLOB */;\n break;\n default:\n polymerType = \"PEPTIDE\" /* PolymerTypes.PEPTIDE */;\n console.warn(`Unexpected HelmType '${helmType}'`);\n }\n return polymerType;\n}\n//# sourceMappingURL=monomer-works.js.map","/* eslint-disable max-len */\nimport { monomerWorksConsts as C } from './consts';\nimport { getMolGraph, MolfileWithMap, MonomerMap } from './types';\nimport { HELM_CORE_FIELDS, } from '../utils/const';\nimport { ALPHABET, GAP_SYMBOL } from '../utils/macromolecule/consts';\nimport { helmTypeToPolymerType } from './monomer-works';\n/** Get a mapping of peptide symbols to HELM monomer library objects with selected fields.\n * @param {IMonomerLib} monomerLib - Monomer library\n * @param {HELM_POLYMER_TYPE} polymerType - Polymer type\n * @param {ALPHABET} alphabet - Alphabet of the column\n * @return {Map<string, any>} - Mapping of peptide symbols to HELM monomer library objects with selected fields*/\nexport function getFormattedMonomerLib(monomerLib, polymerType, alphabet) {\n const map = new Map();\n for (const monomerSymbol of monomerLib.getMonomerSymbolsByType(polymerType)) {\n const it = monomerLib.getMonomer(polymerType, monomerSymbol);\n if (polymerType === \"RNA\" /* HELM_POLYMER_TYPE.RNA */ &&\n (it[\"monomerType\" /* HELM_FIELDS.MONOMER_TYPE */] === \"Branch\" /* HELM_MONOMER_TYPE.BRANCH */ ||\n alphabet === ALPHABET.DNA && it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.DEOXYRIBOSE.symbol ||\n alphabet === ALPHABET.RNA && it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.RIBOSE.symbol ||\n it[\"symbol\" /* HELM_FIELDS.SYMBOL */] === C.PHOSPHATE.symbol) ||\n polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */ &&\n it[\"monomerType\" /* HELM_FIELDS.MONOMER_TYPE */] !== \"Branch\" /* HELM_MONOMER_TYPE.BRANCH */) {\n const monomerObject = {};\n HELM_CORE_FIELDS.forEach((field) => {\n //@ts-ignore\n monomerObject[field] = it[field];\n });\n map.set(monomerSymbol, monomerObject);\n }\n }\n return map;\n}\n/** Translate a sequence of monomer symbols into Molfile V3000\n * @param {string[]} monomerSeq - Sequence of monomer symbols (canonical)\n * @param {Map<string, MolGraph>} monomersDict - Mapping of monomer symbols to MolGraph objects\n * @param {ALPHABET} alphabet - Alphabet of the column\n * @param {PolymerType} polymerType - Polymer type\n * @return {string} - Molfile V3000*/\nexport function monomerSeqToMolfile(monomerSeq, monomersDict, alphabet, polymerType) {\n if (monomerSeq.length === 0) {\n // throw new Error('monomerSeq is empty');\n return MolfileWithMap.createEmpty();\n }\n // define atom and bond counts, taking into account the bond type\n const getAtomAndBondCounts = getResultingAtomBondCounts;\n const { atomCount, bondCount, needsCapping } = getAtomAndBondCounts(monomerSeq, monomersDict, alphabet, polymerType);\n // create arrays to store lines of the resulting molfile\n const molfileAtomBlock = new Array(atomCount);\n const molfileBondBlock = new Array(bondCount);\n let addMonomerToMolblock;\n let sugar = null;\n let phosphate = null;\n if (polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */)\n addMonomerToMolblock = addAminoAcidToMolblock;\n else { // nucleotides\n addMonomerToMolblock = addNucleotideToMolblock;\n sugar = (alphabet === ALPHABET.DNA) ? getMolGraph(monomersDict, C.DEOXYRIBOSE) : getMolGraph(monomersDict, C.RIBOSE);\n phosphate = getMolGraph(monomersDict, C.PHOSPHATE);\n }\n const v = {\n i: 0,\n nodeShift: 0,\n bondShift: 0,\n backbonePositionShift: new Array(2).fill(0),\n branchPositionShift: new Array(2).fill(0),\n backboneAttachNode: 0,\n branchAttachNode: 0,\n flipFactor: 1,\n };\n const LC = {\n sugar: sugar,\n phosphate: phosphate,\n seqLength: monomerSeq.length,\n atomCount: atomCount,\n bondCount: bondCount,\n };\n const monomers = new MonomerMap();\n const steabsCollection = [];\n let nAtoms = 0;\n let lastMonomerCappingAtom = undefined;\n for (v.i = 0; v.i < LC.seqLength; ++v.i) {\n const seqMonomer = monomerSeq[v.i];\n if (seqMonomer.symbol === GAP_SYMBOL)\n continue;\n const monomer = getMolGraph(monomersDict, { symbol: seqMonomer.symbol, polymerType: helmTypeToPolymerType(seqMonomer.biotype) });\n lastMonomerCappingAtom = monomer.terminalR2Atom;\n const mAtomFirst = v.nodeShift;\n const mBondFirst = v.bondShift;\n addMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v, LC);\n //adding stereo atoms to array for further STEABS block generation\n monomer.stereoAtoms?.forEach((i) => steabsCollection.push(i + nAtoms));\n nAtoms += monomer.atoms.x.length;\n const mAtomCount = v.nodeShift - mAtomFirst;\n const mAtomList = new Array(mAtomCount);\n for (let maI = 0; maI < mAtomCount; ++maI)\n mAtomList[maI] = mAtomFirst + maI;\n const mBondCount = v.bondShift - mBondFirst;\n const mBondList = new Array(mBondCount);\n for (let mbI = 0; mbI < mBondCount; ++mbI)\n mBondList[mbI] = mBondFirst + mbI;\n monomers.set(v.i, {\n biotype: seqMonomer.biotype,\n symbol: seqMonomer.symbol,\n atoms: mAtomList, bonds: mBondList\n });\n }\n // if the last monomer needs to be capped, add the terminal OH to the resulting molfile\n if (needsCapping)\n capResultingMolblock(molfileAtomBlock, molfileBondBlock, v, LC, lastMonomerCappingAtom ?? C.OXYGEN);\n const molfileCountsLine = C.V3K_BEGIN_COUNTS_LINE + atomCount + ' ' + bondCount + C.V3K_COUNTS_LINE_ENDING;\n // todo: possible optimization may be achieved by replacing .join('') with +=\n // since counterintuitively joining an array into a new string is reportedly\n // slower than using += as below\n let result = '';\n result += C.V3K_HEADER_FIRST_LINE;\n result += C.V3K_HEADER_SECOND_LINE;\n result += C.V3K_BEGIN_CTAB_BLOCK;\n result += molfileCountsLine;\n result += C.V3K_BEGIN_ATOM_BLOCK;\n result += molfileAtomBlock.join('');\n result += C.V3K_END_ATOM_BLOCK;\n result += C.V3K_BEGIN_BOND_BLOCK;\n result += molfileBondBlock.join('');\n result += C.V3K_END_BOND_BLOCK;\n if (steabsCollection.length > 0)\n result += getCollectionBlock(steabsCollection);\n result += C.V3K_END_CTAB_BLOCK;\n result += C.V3K_END;\n // return molfileParts.join('');\n return { molfile: result, monomers: monomers };\n}\nfunction getCollectionBlock(collection) {\n //one row in STEABS block can be no longer than 80 symbols\n //maxSymbols = 80 symbols minus ' -\\n' (4 symbols)\n const maxSymbols = 76;\n const rowsArray = [];\n let newCollectionRow = `M V30 MDLV30/STEABS ATOMS=(${collection.length}`;\n for (let i = 0; i < collection.length; i++) {\n const updatedRow = `${newCollectionRow} ${collection[i]}`;\n if (updatedRow.length > maxSymbols) {\n rowsArray.push(`${newCollectionRow} -\\n`);\n newCollectionRow = `M V30 ${collection[i]}`;\n }\n else\n newCollectionRow = updatedRow;\n //in case last atom was added - close the block\n if (i === collection.length - 1)\n rowsArray.push(`${newCollectionRow})\\n`);\n }\n return `M V30 BEGIN COLLECTION\\n${rowsArray.join('')}M V30 END COLLECTION\\n`;\n}\n/** Cap the resulting (after sewing up all the monomers) molfile with 'O'\n * @param {string[]} molfileAtomBlock - Array of lines of the resulting molfile atom block\n * @param {string[]} molfileBondBlock - Array of lines of the resulting molfile bond block\n * @param {LoopVariables} v - Loop variables\n * @param {LoopConstants} LC - Loop constants*/\nfunction capResultingMolblock(molfileAtomBlock, molfileBondBlock, v, LC, cappingAtomType = C.OXYGEN) {\n // add terminal oxygen\n const atomIdx = v.nodeShift + 1;\n molfileAtomBlock[LC.atomCount] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n (cappingAtomType ?? C.OXYGEN) + ' ' + keepPrecision(v.backbonePositionShift[0]) + ' ' +\n v.flipFactor * keepPrecision(v.backbonePositionShift[1]) + ' ' + '0.000000 0' + '\\n';\n // add terminal bond\n const firstAtom = v.backboneAttachNode;\n const secondAtom = atomIdx;\n molfileBondBlock[LC.bondCount] = C.V3K_BEGIN_DATA_LINE + v.bondShift + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n}\nfunction addAminoAcidToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n v.flipFactor = (-1) ** (v.i % 2); // to flip every even monomer over OX\n addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v);\n}\nfunction addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n // todo: remove these comments to the docstrings of the corr. functions\n // construnct the lines of V3K molfile atom block\n fillAtomLines(monomer, molfileAtomBlock, v);\n // construct the lines of V3K molfile bond block\n fillBondLines(monomer, molfileBondBlock, v);\n // peptide bond\n fillChainExtendingBond(monomer, molfileBondBlock, v);\n // update branch variables if necessary\n if (monomer.meta.branchShift !== null && monomer.meta.terminalNodes.length > 2)\n updateBranchVariables(monomer, v);\n // update loop variables\n updateChainExtendingVariables(monomer, v);\n}\nfunction addNucleotideToMolblock(nucleobase, molfileAtomBlock, molfileBondBlock, v, LC) {\n // construnct the lines of V3K molfile atom block corresponding to phosphate\n // and sugar\n if (v.i === 0)\n addBackboneMonomerToMolblock(LC.sugar, molfileAtomBlock, molfileBondBlock, v);\n else {\n for (const monomer of [LC.phosphate, LC.sugar])\n addBackboneMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v);\n }\n addBranchMonomerToMolblock(nucleobase, molfileAtomBlock, molfileBondBlock, v);\n}\nfunction addBranchMonomerToMolblock(monomer, molfileAtomBlock, molfileBondBlock, v) {\n fillBranchAtomLines(monomer, molfileAtomBlock, v);\n fillBondLines(monomer, molfileBondBlock, v);\n fillBackboneToBranchBond(monomer, molfileBondBlock, v);\n // C-N bond\n const bondIdx = v.bondShift;\n const firstAtom = v.branchAttachNode;\n const secondAtom = monomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[bondIdx - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n // update loop variables\n v.bondShift += monomer.bonds.atomPairs.length + 1;\n v.nodeShift += monomer.atoms.atomTypes.length;\n}\nfunction updateChainExtendingVariables(monomer, v) {\n v.backboneAttachNode = v.nodeShift + monomer.meta.terminalNodes[1];\n v.bondShift += monomer.bonds.atomPairs.length + 1;\n v.nodeShift += monomer.atoms.atomTypes.length;\n v.backbonePositionShift[0] += monomer.meta.backboneShift?.[0] ?? 0; // todo: non-null check\n v.backbonePositionShift[1] += v.flipFactor * (monomer.meta.backboneShift?.[1] ?? 0);\n}\nfunction updateBranchVariables(monomer, v) {\n v.branchAttachNode = v.nodeShift + monomer.meta.terminalNodes[2];\n for (let i = 0; i < 2; ++i)\n v.branchPositionShift[i] = v.backbonePositionShift[i] + monomer.meta.branchShift[i];\n}\nfunction fillAtomLines(monomer, molfileAtomBlock, v) {\n for (let j = 0; j < monomer.atoms.atomTypes.length; ++j) {\n const atomIdx = v.nodeShift + j + 1;\n molfileAtomBlock[v.nodeShift + j] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n monomer.atoms.atomTypes[j] + ' ' +\n keepPrecision(v.backbonePositionShift[0] + monomer.atoms.x[j]) + ' ' +\n keepPrecision(v.backbonePositionShift[1] + v.flipFactor * monomer.atoms.y[j]) +\n ' ' + monomer.atoms.kwargs[j];\n }\n}\n// todo: remove as quickfix\nfunction fillBranchAtomLines(monomer, molfileAtomBlock, v) {\n for (let j = 0; j < monomer.atoms.atomTypes.length; ++j) {\n const atomIdx = v.nodeShift + j + 1;\n molfileAtomBlock[v.nodeShift + j] = C.V3K_BEGIN_DATA_LINE + atomIdx + ' ' +\n monomer.atoms.atomTypes[j] + ' ' +\n keepPrecision(v.branchPositionShift[0] + monomer.atoms.x[j]) + ' ' +\n keepPrecision(v.branchPositionShift[1] + v.flipFactor * monomer.atoms.y[j]) +\n ' ' + monomer.atoms.kwargs[j];\n }\n}\nfunction fillBondLines(monomer, molfileBondBlock, v) {\n // construct the lines of V3K molfile bond block\n for (let j = 0; j < monomer.bonds.atomPairs.length; ++j) {\n const bondIdx = v.bondShift + j + 1;\n const firstAtom = monomer.bonds.atomPairs[j][0] + v.nodeShift;\n const secondAtom = monomer.bonds.atomPairs[j][1] + v.nodeShift;\n let bondCfg = '';\n if (monomer.bonds.bondConfiguration.has(j)) {\n // flip orientation when necessary\n let orientation = monomer.bonds.bondConfiguration.get(j);\n if (v.flipFactor < 0)\n orientation = (orientation === 1) ? 3 : 1;\n bondCfg = ' CFG=' + orientation;\n }\n const kwargs = monomer.bonds.kwargs.has(j) ?\n ' ' + monomer.bonds.kwargs.get(j) : '';\n molfileBondBlock[v.bondShift + j] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n monomer.bonds.bondTypes[j] + ' ' +\n firstAtom + ' ' + secondAtom + bondCfg + kwargs + '\\n';\n }\n}\nfunction fillChainExtendingBond(monomer, molfileBondBlock, v) {\n if (v.backboneAttachNode !== 0) {\n const bondIdx = v.bondShift;\n const firstAtom = v.backboneAttachNode;\n const secondAtom = monomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[v.bondShift - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n }\n}\n// todo: remove\nfunction fillBackboneToBranchBond(branchMonomer, molfileBondBlock, v) {\n const bondIdx = v.bondShift;\n const firstAtom = v.branchAttachNode;\n const secondAtom = branchMonomer.meta.terminalNodes[0] + v.nodeShift;\n molfileBondBlock[bondIdx - 1] = C.V3K_BEGIN_DATA_LINE + bondIdx + ' ' +\n 1 + ' ' + firstAtom + ' ' + secondAtom + '\\n';\n}\n/** Compute the atom/bond counts for the resulting molfile, depending on the\n * type of polymer (peptide/nucleotide)\n * @param {string[]}monomerSeq - the sequence of monomers\n * @param {Map<string, MolGraph>}monomersDict - the dictionary of monomers\n * @param {ALPHABET}alphabet - the alphabet of the monomers\n * @param {HELM_POLYMER_TYPE}polymerType - the type of polymer\n * @return {{atomCount: number, bondCount: number}} - the atom/bond counts*/\nfunction getResultingAtomBondCounts(monomerSeq, monomersDict, alphabet, polymerType) {\n let atomCount = 0;\n let bondCount = 0;\n let monomerCount = 0;\n let needsCapping = true;\n let lastMonomerGraph = null;\n // sum up all the atoms/nodes provided by the sequence\n for (const seqMonomer of monomerSeq) {\n if (seqMonomer.symbol === GAP_SYMBOL)\n continue; // Skip for gap/empty monomer in MSA\n if (seqMonomer.symbol == '*')\n throw new Error(`Gap canonical symbol is '', not '*`);\n lastMonomerGraph = getMolGraph(monomersDict, { symbol: seqMonomer.symbol, polymerType: helmTypeToPolymerType(seqMonomer.biotype) });\n atomCount += lastMonomerGraph.atoms.x.length;\n bondCount += lastMonomerGraph.bonds.bondTypes.length;\n monomerCount++;\n }\n // add extra values depending on the polymer type\n if (polymerType === \"PEPTIDE\" /* HELM_POLYMER_TYPE.PEPTIDE */) {\n // add the rightmost/terminating cap group 'OH' (i.e. 'O')\n atomCount += 1;\n // add chain-extending bonds (C-NH per each monomer pair and terminal C-OH)\n bondCount += monomerCount;\n // if the last monomer is something like NH2, which only has R1, there is no need to cap it\n // although, this should never happen, but hey... in other bits of code, there is a chunk that adds pseudo-R2 as hydrogen\n // we should also check, if the R2 of the last monomer is not hydrogen, that case should also be omitted\n if (monomerCount > 0) {\n if ((lastMonomerGraph?.meta?.rNodes?.length ?? 0) < 2 || lastMonomerGraph?.terminalR2Atom?.toLowerCase() === C.HYDROGEN.toLowerCase()) {\n needsCapping = false;\n atomCount -= 1; // remove the last atom (the terminal 'O')\n bondCount -= 1; // remove the last bond (the terminal C-OH)\n }\n }\n }\n else { // nucleotides\n const sugar = (alphabet === ALPHABET.DNA) ?\n getMolGraph(monomersDict, C.DEOXYRIBOSE) : getMolGraph(monomersDict, C.RIBOSE);\n const phosphate = getMolGraph(monomersDict, C.PHOSPHATE);\n // add phosphate per each pair of nucleobase symbols\n atomCount += (monomerSeq.length - 1) * phosphate.atoms.x.length;\n // add sugar per each nucleobase symbol\n atomCount += monomerSeq.length * sugar.atoms.x.length;\n // add the leftmost cap group 'OH' (i.e. 'O')\n atomCount += 1;\n // add bonds from phosphate monomers\n bondCount += (monomerSeq.length - 1) * phosphate.bonds.bondTypes.length;\n // add bonds from sugar monomers\n bondCount += monomerSeq.length * sugar.bonds.bondTypes.length;\n // exclude the first chain-extending bond O-P (absent, no 'leftmost' phosphate)\n bondCount -= 1;\n // add chain-extending and branch bonds (O-P, C-O and C-N per each nucleotide)\n bondCount += monomerSeq.length * 3;\n }\n return { atomCount, bondCount, needsCapping };\n}\n/** Keep precision upon floating point operations over atom coordinates\n * @param {number}x - the floating point number\n * @return {number} - the floating point number with the same precision\n */\nexport function keepPrecision(x) {\n return Math.round(C.PRECISION_FACTOR * x) / C.PRECISION_FACTOR;\n}\n//# sourceMappingURL=to-atomic-level-utils.js.map","import { monomerSeqToMolfile } from './to-atomic-level-utils';\nonmessage = (event) => {\n const { seqList, monomersDict, alphabet, polymerType, start, end } = event.data;\n const resMolList = new Array(end - start);\n const molfileWarningList = new Array(0);\n for (let rowI = start; rowI < end; ++rowI) {\n try {\n const seq = seqList[rowI];\n resMolList[rowI - start] = monomerSeqToMolfile(seq, monomersDict, alphabet, polymerType);\n }\n catch (err) {\n const errMsg = err instanceof Error ? err.message : err.toString();\n const msg = `Cannot get molfile of row #${rowI}: ${errMsg}.`;\n molfileWarningList.push(msg);\n }\n }\n postMessage({ molfiles: resMolList, warnings: molfileWarningList });\n};\n//# sourceMappingURL=seq-to-molfile-worker.js.map"],"names":["monomerWorksConsts","V2K_RGP_SHIFT","V2K_RGP_LINE","V2K_A_LINE","V3K_COUNTS_SHIFT","V3K_IDX_SHIFT","V3K_HEADER_FIRST_LINE","V3K_HEADER_SECOND_LINE","V3K_BEGIN_CTAB_BLOCK","V3K_END_CTAB_BLOCK","V3K_BEGIN_COUNTS_LINE","V3K_COUNTS_LINE_ENDING","V3K_BEGIN_ATOM_BLOCK","V3K_END_ATOM_BLOCK","V3K_BEGIN_BOND_BLOCK","V3K_END_BOND_BLOCK","V3K_BOND_CONFIG","V3K_BEGIN_DATA_LINE","V3K_END","PRECISION_FACTOR","DEOXYRIBOSE","polymerType","symbol","RIBOSE","PHOSPHATE","OXYGEN","HYDROGEN","getMolGraph","dict","libKey","MonomerMap","Map","constructor","entries","super","MolfileWithMap","molfile","monomers","this","createEmpty","NOTATION","ALPHABET","TAGS","RegExp","CandidateType","name","alphabet","cutoff","Alphabets","fasta","peptide","Set","dna","rna","HelmTypes","helmTypeToPolymerType","helmType","BASE","SUGAR","LINKER","NUCLEOTIDE","AA","CHEM","BLOB","console","warn","monomerSeqToMolfile","monomerSeq","monomersDict","length","getAtomAndBondCounts","getResultingAtomBondCounts","atomCount","bondCount","needsCapping","molfileAtomBlock","Array","molfileBondBlock","addMonomerToMolblock","sugar","phosphate","addAminoAcidToMolblock","addNucleotideToMolblock","DNA","v","i","nodeShift","bondShift","backbonePositionShift","fill","branchPositionShift","backboneAttachNode","branchAttachNode","flipFactor","LC","seqLength","steabsCollection","lastMonomerCappingAtom","nAtoms","seqMonomer","monomer","biotype","terminalR2Atom","mAtomFirst","mBondFirst","stereoAtoms","forEach","push","atoms","x","mAtomCount","mAtomList","maI","mBondCount","mBondList","mbI","set","bonds","cappingAtomType","atomIdx","keepPrecision","firstAtom","secondAtom","capResultingMolblock","molfileCountsLine","result","join","collection","rowsArray","newCollectionRow","updatedRow","getCollectionBlock","addBackboneMonomerToMolblock","j","atomTypes","y","kwargs","fillAtomLines","fillBondLines","bondIdx","meta","terminalNodes","fillChainExtendingBond","branchShift","updateBranchVariables","atomPairs","backboneShift","updateChainExtendingVariables","nucleobase","fillBranchAtomLines","branchMonomer","fillBackboneToBranchBond","addBranchMonomerToMolblock","bondCfg","bondConfiguration","has","orientation","get","bondTypes","monomerCount","lastMonomerGraph","Error","rNodes","toLowerCase","Math","round","PT","RNA","FASTA","SEPARATOR","HELM","BILN","onmessage","event","seqList","start","end","data","resMolList","molfileWarningList","rowI","seq","err","msg","message","toString","postMessage","molfiles","warnings"],"sourceRoot":""}
|
package/dist/705.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";var t={1096(t,e,r){r.d(e,{R:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise(function(t,n){e=t,r=n});var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&j("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[];function A(t){g.unshift(t)}function _(t){v.unshift(t)}var E,R,x=0,S=null,P=null;function j(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}function U(t){return t.startsWith("data:application/octet-stream;base64,")}function I(t){try{if(t==E&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){j(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then(function(){return I(t)}):fetch(t,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()}).catch(function(){return I(t)})}(t).then(function(t){return WebAssembly.instantiate(t,e)}).then(function(t){return t}).then(r,function(t){p("failed to asynchronously prepare wasm: "+t),j(t)})}function C(t){for(;t.length>0;)t.shift()(i)}function T(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(q(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function M(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function F(t){return i["_"+t]}U(E="wasmCluster.wasm")||(R=E,E=i.locateFile?i.locateFile(R,c):c+R);var H="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=N(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=N(t.length);return e=t,r=n,h.set(e,r),n}},a=F(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=k()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&L(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&H)return H.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var W,D={d:function(t,e,r){throw new T(t).init(e,r),t},a:function(){j("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e=d.length,r=2147483648;if((t>>>=0)>r)return!1;let n=(t,e)=>t+(e-t%e)%e;for(var i=1;i<=4;i*=2){var o=e*(1+.2/i);if(o=Math.min(o,t+100663296),M(Math.min(r,n(Math.max(t,o),65536))))return!0}return!1}},k=(function(){var t,e,n,o,a={a:D};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(){if(x--,i.monitorRunDependencies&&i.monitorRunDependencies(x),0==x&&(null!==S&&(clearInterval(S),S=null),P)){var t=P;P=null,t()}}(),n}if(x++,i.monitorRunDependencies&&i.monitorRunDependencies(x),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=E,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||U(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,n).then(o,function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)})})).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(k=i.asm.k).apply(null,arguments)}),L=function(){return(L=i.asm.l).apply(null,arguments)},N=function(){return(N=i.asm.m).apply(null,arguments)},q=function(){return(q=i.asm.n).apply(null,arguments)};function Y(){function t(){W||(W=!0,i.calledRun=!0,y||(C(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)_(i.postRun.shift());C(v)}()))}x>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)A(i.preRun.shift());C(g)}(),x>0||(i.setStatus?(i.setStatus("Running..."),setTimeout(function(){setTimeout(function(){i.setStatus("")},1),t()},1)):t()))}if(i.ccall=B,i.cwrap=function(t,e,r,n){var i=!r||r.every(t=>"number"===t||"boolean"===t);return"string"!==e&&i&&!n?F(t):function(){return B(t,e,r,arguments)}},P=function t(){W||Y(),W||(P=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return Y(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],function(){return i}):"object"==typeof exports&&(exports.exportCppLib=i)},5024(t,e,r){t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n](o,o.exports,r),o.loaded=!0,o.exports}r.m=t,r.amdO={},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&(!t||!/^http(s?):/.test(t));)t=n[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.b=self.location+"";var n=r(1096);onmessage=t=>{const{distMatArray:e,n:i,methodCode:o}=t.data,a={};try{(async function(t,e,i){const o=new URL(r(5024),r.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,n.R)({locateFile:()=>a,printErr:t=>{}})}catch(t){try{s=await(0,n.R)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*t.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(t.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(e-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(e-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,e,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(e-1)),w=new Float32Array(b.buffer,b.byteOffset,e-1).slice(0,e-1),v=g.slice(0,e-1),A=g.slice(e-1,2*e-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(e,i,o).then(t=>{a.clusterMatrix=t,postMessage(a)})
|
|
1
|
+
var bio;(()=>{"use strict";var t={1096(t,e,r){r.d(e,{R:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise(function(t,n){e=t,r=n});var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&j("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[];function A(t){g.unshift(t)}function _(t){v.unshift(t)}var E,R,x=0,S=null,P=null;function j(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}function U(t){return t.startsWith("data:application/octet-stream;base64,")}function I(t){try{if(t==E&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){j(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then(function(){return I(t)}):fetch(t,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()}).catch(function(){return I(t)})}(t).then(function(t){return WebAssembly.instantiate(t,e)}).then(function(t){return t}).then(r,function(t){p("failed to asynchronously prepare wasm: "+t),j(t)})}function C(t){for(;t.length>0;)t.shift()(i)}function T(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(q(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function M(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function F(t){return i["_"+t]}U(E="wasmCluster.wasm")||(R=E,E=i.locateFile?i.locateFile(R,c):c+R);var H="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=N(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=N(t.length);return e=t,r=n,h.set(e,r),n}},a=F(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=k()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&L(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&H)return H.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var W,D={d:function(t,e,r){throw new T(t).init(e,r),t},a:function(){j("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e=d.length,r=2147483648;if((t>>>=0)>r)return!1;let n=(t,e)=>t+(e-t%e)%e;for(var i=1;i<=4;i*=2){var o=e*(1+.2/i);if(o=Math.min(o,t+100663296),M(Math.min(r,n(Math.max(t,o),65536))))return!0}return!1}},k=(function(){var t,e,n,o,a={a:D};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(){if(x--,i.monitorRunDependencies&&i.monitorRunDependencies(x),0==x&&(null!==S&&(clearInterval(S),S=null),P)){var t=P;P=null,t()}}(),n}if(x++,i.monitorRunDependencies&&i.monitorRunDependencies(x),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=E,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||U(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,n).then(o,function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)})})).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(k=i.asm.k).apply(null,arguments)}),L=function(){return(L=i.asm.l).apply(null,arguments)},N=function(){return(N=i.asm.m).apply(null,arguments)},q=function(){return(q=i.asm.n).apply(null,arguments)};function Y(){function t(){W||(W=!0,i.calledRun=!0,y||(C(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)_(i.postRun.shift());C(v)}()))}x>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)A(i.preRun.shift());C(g)}(),x>0||(i.setStatus?(i.setStatus("Running..."),setTimeout(function(){setTimeout(function(){i.setStatus("")},1),t()},1)):t()))}if(i.ccall=B,i.cwrap=function(t,e,r,n){var i=!r||r.every(t=>"number"===t||"boolean"===t);return"string"!==e&&i&&!n?F(t):function(){return B(t,e,r,arguments)}},P=function t(){W||Y(),W||(P=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return Y(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],function(){return i}):"object"==typeof exports&&(exports.exportCppLib=i)},5024(t,e,r){t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n](o,o.exports,r),o.loaded=!0,o.exports}r.m=t,r.amdO={},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&(!t||!/^http(s?):/.test(t));)t=n[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.b=self.location+"";var n=r(1096);onmessage=t=>{const{distMatArray:e,n:i,methodCode:o}=t.data,a={};try{(async function(t,e,i){const o=new URL(r(5024),r.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,n.R)({locateFile:()=>a,printErr:t=>{}})}catch(t){try{s=await(0,n.R)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*t.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(t.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(e-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(e-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,e,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(e-1)),w=new Float32Array(b.buffer,b.byteOffset,e-1).slice(0,e-1),v=g.slice(0,e-1),A=g.slice(e-1,2*e-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(e,i,o).then(t=>{a.clusterMatrix=t,postMessage(a)})}catch(t){a.error=t,postMessage(a)}},bio={}})();
|
|
2
2
|
//# sourceMappingURL=705.js.map
|