@sjcrh/proteinpaint-client 2.77.0 → 2.78.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/dist/{2dmaf-acb8cfdd.js → 2dmaf-7dddba15.js} +1 -1
- package/dist/{AppHeader-315dbd3a.js → AppHeader-67cea623.js} +1 -1
- package/dist/{ColorScale-4b4ea8a2.js → ColorScale-7a36cc17.js} +1 -1
- package/dist/{DEanalysis-28ddd620.js → DEanalysis-417e1f88.js} +1 -1
- package/dist/{Disco-3c427131.js → Disco-30abd4cb.js} +1 -1
- package/dist/{Disco.UI-b071cf7a.js → Disco.UI-ea58ee03.js} +1 -1
- package/dist/{DragControls-7961799c.js → DragControls-a5072cfd.js} +1 -1
- package/dist/{DziViewer-aa5b5706.js → DziViewer-af3c5a76.js} +1 -1
- package/dist/FilterRxComp-cb149666.js +1 -0
- package/dist/FilterStateless-bdd1416d.js +1 -0
- package/dist/{HicApp-674a148d.js → HicApp-fe8682af.js} +1 -1
- package/dist/{OrbitControls-58ca2292.js → OrbitControls-0d20d46b.js} +1 -1
- package/dist/{WSIViewer-afe97e2e.js → WSIViewer-64e55fb8.js} +1 -1
- package/dist/{adSandbox-791d704e.js → adSandbox-5753745b.js} +1 -1
- package/dist/app-488d9fd6.js +1 -0
- package/dist/{app-bd9f016b.js → app-5aa892cb.js} +1 -1
- package/dist/app-d9433820.js +1 -0
- package/dist/app.js +1 -1
- package/dist/bam-4e0df8b6.js +1 -0
- package/dist/{barchart-e3dcfc5f.js → barchart-687ae584.js} +1 -1
- package/dist/{barchart.events-cecb7bf5.js → barchart.events-9e2c1acf.js} +1 -1
- package/dist/{bars.renderer-58e38632.js → bars.renderer-95f7250f.js} +1 -1
- package/dist/{block-944afb9f.js → block-2f22e7fd.js} +1 -1
- package/dist/block.lazyload-143ae987.js +1 -0
- package/dist/{block.legend-3dbc41a8.js → block.legend-aa831169.js} +1 -1
- package/dist/{block.mds-b3967ce5.js → block.mds-64d95cf9.js} +1 -1
- package/dist/{block.mds.cnv-6de3115e.js → block.mds.cnv-2520897d.js} +1 -1
- package/dist/{block.mds.expressionrank-553613e8.js → block.mds.expressionrank-582ed7bc.js} +1 -1
- package/dist/{block.mds.expressionstat-2c396bb9.js → block.mds.expressionstat-483c9bc9.js} +1 -1
- package/dist/{block.mds.geneboxplot-552fe571.js → block.mds.geneboxplot-c1276cba.js} +1 -1
- package/dist/{block.mds.junction-1e25c13d.js → block.mds.junction-4a132819.js} +1 -1
- package/dist/{block.mds.svcnv-462d762d.js → block.mds.svcnv-a532eca7.js} +1 -1
- package/dist/{block.mds.svcnv.share-766e4b22.js → block.mds.svcnv.share-6575b7cf.js} +1 -1
- package/dist/{block.mds2-6e04432d.js → block.mds2-9ce41a23.js} +1 -1
- package/dist/{block.svg-40b47da8.js → block.svg-adb13c76.js} +1 -1
- package/dist/{block.tk.aicheck-cc42cbaf.js → block.tk.aicheck-ef6b634b.js} +1 -1
- package/dist/{block.tk.ase-da848c5f.js → block.tk.ase-1b119031.js} +1 -1
- package/dist/{block.tk.bam-8053c97e.js → block.tk.bam-2aa824aa.js} +1 -1
- package/dist/{block.tk.bedgraphdot-79cb0faf.js → block.tk.bedgraphdot-983fe4b3.js} +1 -1
- package/dist/{block.tk.bigwig.ui-a8decec7.js → block.tk.bigwig.ui-fb6401ee.js} +1 -1
- package/dist/{block.tk.hicstraw-3d1e9d41.js → block.tk.hicstraw-c6732591.js} +1 -1
- package/dist/{block.tk.junction-81eae755.js → block.tk.junction-429b654c.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-4c45b69a.js → block.tk.junction.textmatrixui-15bd752c.js} +1 -1
- package/dist/{block.tk.ld-997fca31.js → block.tk.ld-fba14536.js} +1 -1
- package/dist/{block.tk.menu-d3e7ccbb.js → block.tk.menu-1299ae5e.js} +1 -1
- package/dist/{block.tk.pgv-ae1d1f59.js → block.tk.pgv-c946527f.js} +1 -1
- package/dist/{boxplot-fed0a86b.js → boxplot-dbf30a19.js} +1 -1
- package/dist/{brainImaging-b455fd0c.js → brainImaging-b2865ba3.js} +1 -1
- package/dist/{brush-06989a5e.js → brush-1a123226.js} +1 -1
- package/dist/{categorical-82722704.js → categorical-f67752ed.js} +1 -1
- package/dist/{condition-f68cc8d1.js → condition-dcc70001.js} +1 -1
- package/dist/{controls-1d99916a.js → controls-f4648f7f.js} +1 -1
- package/dist/controls.btns-26bb6ef1.js +1 -0
- package/dist/{controls.config-00ce9f0b.js → controls.config-9870bdea.js} +1 -1
- package/dist/{cuminc-879690b0.js → cuminc-2273cdd3.js} +1 -1
- package/dist/{customdata.inputui-c563c695.js → customdata.inputui-fb1b24dc.js} +1 -1
- package/dist/{dataDownload-087ac205.js → dataDownload-b94871d0.js} +1 -1
- package/dist/{databrowser.ui-9f98f6b3.js → databrowser.ui-8ace51c3.js} +1 -1
- package/dist/{density-e0aff1d0.js → density-e023c28f.js} +1 -1
- package/dist/{dictionary-fe0ea1d6.js → dictionary-321e19f9.js} +1 -1
- package/dist/{drag-e11d6644.js → drag-1b98e43e.js} +1 -1
- package/dist/{e2pca-b3250d5c.js → e2pca-00e78fdc.js} +1 -1
- package/dist/{ep-9ca01df0.js → ep-b0d6177c.js} +1 -1
- package/dist/{facet-397afad5.js → facet-26292a3d.js} +1 -1
- package/dist/{filter-b3d3964e.js → filter-67d51c09.js} +1 -1
- package/dist/{fusion.parse-e5312047.js → fusion.parse-7e3a6071.js} +1 -1
- package/dist/{geneExpClustering-4383ff2c.js → geneExpClustering-a2cf1bb9.js} +1 -1
- package/dist/{geneExpression-52678025.js → geneExpression-d1d5a7ca.js} +1 -1
- package/dist/{geneExpression-cfb86b5d.js → geneExpression-dc10af2c.js} +1 -1
- package/dist/{geneExpression-2422f66b.js → geneExpression-e4a5a2cd.js} +1 -1
- package/dist/{geneORA-81220ec0.js → geneORA-248baba7.js} +1 -1
- package/dist/{geneVariant-18f9591a.js → geneVariant-447d6af9.js} +1 -1
- package/dist/{geneVariant-4d22b146.js → geneVariant-7366f3d1.js} +1 -1
- package/dist/{genefusion.ui-e38778dd.js → genefusion.ui-e219424a.js} +1 -1
- package/dist/{genesearch-0587c713.js → genesearch-d8780180.js} +1 -1
- package/dist/{geneset-604d0529.js → geneset-1f67d4c9.js} +1 -1
- package/dist/genomeBrowser-52c639b4.js +1 -0
- package/dist/{genomeBrowser.controls-204f007e.js → genomeBrowser.controls-3a7a1c94.js} +1 -1
- package/dist/{groupsetting-53dfd5e5.js → groupsetting-697a1503.js} +1 -1
- package/dist/{gsea-a1b04406.js → gsea-d3286c53.js} +1 -1
- package/dist/hierCluster-00268175.js +1 -0
- package/dist/{html.legend-6807e9ad.js → html.legend-0abd27ff.js} +1 -1
- package/dist/{imagePlot-f96cdc61.js → imagePlot-f6398b6e.js} +1 -1
- package/dist/{lasso-845446b8.js → lasso-48317f42.js} +1 -1
- package/dist/launch.adhoc-98dc0421.js +1 -0
- package/dist/{leftlabel.sample-3a6037c2.js → leftlabel.sample-591bc38d.js} +1 -1
- package/dist/legacyDataset-354f1a29.js +1 -0
- package/dist/{log-0ea548ec.js → log-1001ca83.js} +1 -1
- package/dist/{lollipop-75e11e9a.js → lollipop-40c4c5cb.js} +1 -1
- package/dist/{maf-e4af10d7.js → maf-10526648.js} +1 -1
- package/dist/{maftimeline-cc2e866c.js → maftimeline-a77349ad.js} +1 -1
- package/dist/matrix-1190d4b3.js +1 -0
- package/dist/matrix-bc0ccf83.js +1 -0
- package/dist/{mavb-b2dd74f6.js → mavb-0d28dd97.js} +1 -1
- package/dist/{mds.fimo-f19840cd.js → mds.fimo-929b9e65.js} +1 -1
- package/dist/{mds.samplescatterplot-254f1de6.js → mds.samplescatterplot-5a4ee6b6.js} +1 -1
- package/dist/{mds.survivalplot-f440db10.js → mds.survivalplot-b04947ee.js} +1 -1
- package/dist/metaboliteIntensity-f407ad0c.js +1 -0
- package/dist/niceNumLabels-621ef5c3.js +1 -0
- package/dist/{nodrag-f6c0801c.js → nodrag-b2866dd8.js} +1 -1
- package/dist/{notify-da3afe99.js → notify-91f0bc5d.js} +1 -1
- package/dist/{numeric-1d0318e8.js → numeric-eb1d29b3.js} +1 -1
- package/dist/{numeric.binary-88bf9e0d.js → numeric.binary-da92d665.js} +1 -1
- package/dist/numeric.continuous-92d1dea8.js +1 -0
- package/dist/numeric.discrete-cd8f09b1.js +1 -0
- package/dist/{numeric.spline-b3968b77.js → numeric.spline-9a9987b6.js} +1 -1
- package/dist/{numeric.toggle-ab8b79be.js → numeric.toggle-8f68f077.js} +1 -1
- package/dist/{oncomatrix-5f4326a8.js → oncomatrix-c29e6de9.js} +1 -1
- package/dist/{parseData-62083461.js → parseData-3bf0ef9f.js} +1 -1
- package/dist/{plot.2dvaf-eccd8ef3.js → plot.2dvaf-9e59c7d1.js} +1 -1
- package/dist/plot.app-fc3608a9.js +1 -0
- package/dist/plot.barplot-122296f7.js +1 -0
- package/dist/{plot.boxplot-0c538ebe.js → plot.boxplot-99c5aac5.js} +1 -1
- package/dist/{plot.brainImaging-ee3a0272.js → plot.brainImaging-a7bb79d6.js} +1 -1
- package/dist/{plot.disco-c9249cbd.js → plot.disco-ccdf741c.js} +1 -1
- package/dist/{plot.dzi-dfd72ddf.js → plot.dzi-aafdf56b.js} +1 -1
- package/dist/plot.ssgq-146075f5.js +1 -0
- package/dist/{plot.vaf2cov-4081decd.js → plot.vaf2cov-41e13dd9.js} +1 -1
- package/dist/{plot.wsi-f6325d95.js → plot.wsi-2327ad63.js} +1 -1
- package/dist/{profileBarchart-f4da0483.js → profileBarchart-46616916.js} +1 -1
- package/dist/profileHome-121aaddb.js +1 -0
- package/dist/profilePlot-a2591a28.js +1 -0
- package/dist/{profilePolar-996784ad.js → profilePolar-006a56b1.js} +1 -1
- package/dist/{profileRadar-79299186.js → profileRadar-3320d932.js} +1 -1
- package/dist/{profileRadarFacility-00e31213.js → profileRadarFacility-7a9cea80.js} +1 -1
- package/dist/{profileSummary-df75e6ff.js → profileSummary-7a747b4e.js} +1 -1
- package/dist/recover-edcdde38.js +1 -0
- package/dist/{regression.inputs-e647b716.js → regression.inputs-d5d44e49.js} +1 -1
- package/dist/{regression.inputs.values.table-b283619d.js → regression.inputs.values.table-daf7bcda.js} +1 -1
- package/dist/regression.results-31a8884d.js +1 -0
- package/dist/{renderPvalueTable-0ed37e90.js → renderPvalueTable-05c29ccf.js} +1 -1
- package/dist/sampleScatter-f6c04130.js +1 -0
- package/dist/{sampleScatter.rendererThree-aa51e3c8.js → sampleScatter.rendererThree-448689c6.js} +2 -2
- package/dist/{sampleView-e4819da2.js → sampleView-0931e571.js} +1 -1
- package/dist/{samplelst-9d9ff205.js → samplelst-27115b0e.js} +1 -1
- package/dist/{samplematrix-3556e5c0.js → samplematrix-2bb2480b.js} +1 -1
- package/dist/{scatter-ff17f653.js → scatter-a8d7c2a0.js} +1 -1
- package/dist/select2Terms-480025f5.js +1 -0
- package/dist/{selectGenomeWithTklst-84f4ff79.js → selectGenomeWithTklst-71344af2.js} +1 -1
- package/dist/{singleCellCellType-a2ce9bfa.js → singleCellCellType-b4061c59.js} +1 -1
- package/dist/{singleCellGeneExpression-a2b45c7a.js → singleCellGeneExpression-547149f2.js} +1 -1
- package/dist/singleCellPlot-2f5ad46a.js +1 -0
- package/dist/{singlecell-a5b8a39b.js → singlecell-1c3bee25.js} +1 -1
- package/dist/{singlecell-63cb06d8.js → singlecell-281a74a6.js} +1 -1
- package/dist/snp-32b8cbd8.js +1 -0
- package/dist/{snp-6e312b4c.js → snp-6bbefa83.js} +1 -1
- package/dist/snplocus-84450f3d.js +1 -0
- package/dist/{spliceevent.a53ss.diagram-aa2df5d7.js → spliceevent.a53ss.diagram-c04f46f1.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-0b792984.js → spliceevent.exonskip.diagram-a514c12e.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-a9a45dfc.js +1 -0
- package/dist/{spliceevent.noeventdiagram-e6e29a6e.js → spliceevent.noeventdiagram-b1be922c.js} +1 -1
- package/dist/{spliceevent.phrase-5f65a5f4.js → spliceevent.phrase-57659f7c.js} +1 -1
- package/dist/{stattable-775a5af5.js → stattable-7fa50fd2.js} +1 -1
- package/dist/{style.gdc-519a42d8.js → style.gdc-6b6a2e0c.js} +1 -1
- package/dist/{summary-5866c75f.js → summary-54587ccf.js} +1 -1
- package/dist/{sunburst-f928bfd2.js → sunburst-c24faf27.js} +1 -1
- package/dist/{survival-405514f6.js → survival-21e6637b.js} +1 -1
- package/dist/survival-538cddc2.js +1 -0
- package/dist/{svg.download-cd895635.js → svg.download-0dd56dfd.js} +1 -1
- package/dist/{svg.legend-812ea603.js → svg.legend-21629769.js} +1 -1
- package/dist/{svgraph-037fd7b6.js → svgraph-76e34d5e.js} +1 -1
- package/dist/{svmr-3bd143c3.js → svmr-89b80ea2.js} +1 -1
- package/dist/table-10183501.js +1 -0
- package/dist/{table-e013d8fc.js → table-bb97b5c9.js} +1 -1
- package/dist/{termInfo-e16f90f2.js → termInfo-4d954045.js} +1 -1
- package/dist/termdb.bins-06fd21c1.js +1 -0
- package/dist/termsetting-c12f1c69.js +1 -0
- package/dist/{tk-25ae65c4.js → tk-b96367f7.js} +1 -1
- package/dist/{toggleButtons-2144daab.js → toggleButtons-bb9aca2f.js} +1 -1
- package/dist/{tp.ui-38bc5890.js → tp.ui-f01b186b.js} +1 -1
- package/dist/tvs.density-064e5767.js +1 -0
- package/dist/{tvs.geneVariant-f99fe353.js → tvs.geneVariant-3fac6bed.js} +1 -1
- package/dist/{tvs.numeric-d9108473.js → tvs.numeric-86aacc82.js} +1 -1
- package/dist/{tvs.samplelst-3b8ee998.js → tvs.samplelst-1b00d7b6.js} +1 -1
- package/dist/{uiUtils-57f4b1ba.js → uiUtils-5aad7e13.js} +1 -1
- package/dist/{variantBrowser-56ebc7e1.js → variantBrowser-2c465d02.js} +1 -1
- package/dist/{vcf-e43b533a.js → vcf-55bf2c83.js} +1 -1
- package/dist/{violin-1352dab2.js → violin-edbe9a63.js} +1 -1
- package/dist/violin.interactivity-57637244.js +1 -0
- package/dist/{violin.renderer-4273257d.js → violin.renderer-4cab7448.js} +1 -1
- package/dist/{violinRenderer-7f46e468.js → violinRenderer-24abe5fd.js} +1 -1
- package/dist/{viridis-87a8b605.js → viridis-8a8f3e12.js} +1 -1
- package/dist/{y-cac91178.js → y-6fe1bb7b.js} +1 -1
- package/dist/{zoom-001c2f01.js → zoom-6a36fb2b.js} +1 -1
- package/package.json +6 -5
- package/dist/FilterRxComp-e8de560c.js +0 -1
- package/dist/FilterStateless-75514d37.js +0 -1
- package/dist/app-3d14cbe4.js +0 -1
- package/dist/app-8b5b982a.js +0 -1
- package/dist/bam-fa90bae8.js +0 -1
- package/dist/block.lazyload-4c4e81ff.js +0 -1
- package/dist/controls.btns-237b3154.js +0 -1
- package/dist/genomeBrowser-9f0e8a60.js +0 -1
- package/dist/hierCluster-edaaacc5.js +0 -1
- package/dist/hierCluster.config-a84f69a3.js +0 -1
- package/dist/hierCluster.interactivity-dd917fd3.js +0 -1
- package/dist/hierCluster.renderers-4d33e96a.js +0 -1
- package/dist/launch.adhoc-cb00917b.js +0 -1
- package/dist/legacyDataset-c9bab1e6.js +0 -1
- package/dist/matrix-8b3341c4.js +0 -1
- package/dist/matrix.cells-4dd055e7.js +0 -1
- package/dist/matrix.cluster-7ab94fb5.js +0 -1
- package/dist/matrix.config-b3b56456.js +0 -1
- package/dist/matrix.controls-6e0e9692.js +0 -1
- package/dist/matrix.data-baabaf57.js +0 -1
- package/dist/matrix.dom-cb1f4872.js +0 -1
- package/dist/matrix.groups-9990aade.js +0 -1
- package/dist/matrix.interactivity-3f3cf44d.js +0 -1
- package/dist/matrix.layout-50bc2ea5.js +0 -1
- package/dist/matrix.legend-024e2d50.js +0 -1
- package/dist/matrix.renderers-1aed44e5.js +0 -1
- package/dist/matrix.serieses-dc18fcc2.js +0 -1
- package/dist/matrix.sort-89b98e83.js +0 -1
- package/dist/matrix.sorterUi-0ad98ef0.js +0 -1
- package/dist/metaboliteIntensity-4d905d93.js +0 -1
- package/dist/niceNumLabels-ef07b7ad.js +0 -1
- package/dist/numeric.continuous-d27197cf.js +0 -1
- package/dist/numeric.discrete-b826f33b.js +0 -1
- package/dist/plot.app-4dc30ebc.js +0 -1
- package/dist/plot.barplot-331715f6.js +0 -1
- package/dist/plot.ssgq-b5f68395.js +0 -1
- package/dist/profileHome-11b7d146.js +0 -1
- package/dist/profilePlot-5dd1fe71.js +0 -1
- package/dist/recover-4888c2a9.js +0 -1
- package/dist/regression.results-f61b4a25.js +0 -1
- package/dist/sampleScatter-b96546e9.js +0 -1
- package/dist/select2Terms-eb437c2a.js +0 -1
- package/dist/singleCellPlot-e7e57b0f.js +0 -1
- package/dist/snp-41aa88d1.js +0 -1
- package/dist/snplocus-0653ba82.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-af1943e3.js +0 -1
- package/dist/survival-10dd3d28.js +0 -1
- package/dist/table-be2a9975.js +0 -1
- package/dist/termdb.bins-a60aaa77.js +0 -1
- package/dist/termsetting-7467350f.js +0 -1
- package/dist/tvs.density-060d3006.js +0 -1
- package/dist/violin.interactivity-2502dcd8.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./axisstyle-fac7f76b.js";import{b as e,I as a,M as i,a9 as s,u as r,d as l,y as n}from"./app-3d14cbe4.js";import{m as o}from"./radiobutton-09bff425.js";import{m as d}from"./checkbox-96437f4d.js";import{d as p}from"./axis-747c801e.js";import{p as c}from"./pointer-c7475677.js";const g=60;const h="#eee";const f="#c7edc5";const m="#9ed19b";const u="#36a32f";const _=15;const x=7;async function y(t,e){e.tkcloakon(t);e.block_setheight();if(t.uninitialized){B(t,e)}const a=[];let i=0;for(let t=e.startidx;t<=e.stopidx;t++){const s=e.rglst[t];a.push({chr:s.chr,start:s.start,stop:s.stop,width:s.width,x:i});i+=s.width+e.regionspace}for(const[t,s]of e.subpanels.entries()){i+=s.leftpad;a.push({chr:s.chr,start:s.start,stop:s.stop,width:s.width,exonsf:s.exonsf,subpanelidx:t,x:i});i+=s.width}t.regions=a;try{if(t.groups){for(const e of t.groups){delete e.partstack;delete e.dom.rightg.vslider.boxy}}const a=await v(t,e);if(a.error)throw a.error;if(a.colorscale){t.colorscale=a.colorscale}if(t.variants){for(let e=0;e<t.variants.length;e++){if(t.variants[e].pos!=a.allele_positions[e]){t.variants[e].pos=a.allele_positions[e];t.variants[e].ref=a.ref_alleles[e];t.variants[e].alt=a.alt_alleles[e]}}}b(a,t,e);e.tkcloakoff(t,{})}catch(a){if(a.stack)console.log(a.stack);if(t.pileup_shown){t.dom.pileup_axis.selectAll("*").remove();t.dom.pileup_img.attr("width",0)}if(t.groups){for(const e of t.groups){e.dom.img_fullstack.attr("width",0).attr("height",0);e.dom.img_partstack.attr("width",0).attr("height",0);e.dom.img_cover.attr("width",0).attr("height",0)}}t.height_main=t.height=100;if(typeof a=="string"&&a.startsWith("No reads in view range")){t.leftlabel_count.text("");t.leftlabel_skip.text("")}e.tkcloakoff(t,{error:a.message||a})}w(t,e);e.block_setheight()}async function v(t,a,i={}){const s={genome:a.genome.name,regions:t.regions,nucleotide_length:a.exonsf,pileupheight:t.pileupheight,...i};if(t.gdcFile){s.gdcFileUUID=t.gdcFile.uuid;s.gdcFilePosition=t.gdcFile.position}if(t.variants){s.variant=t.variants.map((t=>t.chr+"."+t.pos+"."+t.ref+"."+t.alt)).join(".");s.strictness=t.strictness;s.diff_score_plotwidth=t.dom.diff_score_plotwidth;if(Number.isFinite(t.max_diff_score)){s.max_diff_score=t.max_diff_score;s.min_diff_score=t.min_diff_score}}else if(t.sv){if(t.sv[0].strandA=="+"){t.sv[0].strandA="positive"}else if(t.sv[0].strandA=="-"){t.sv[0].strandA="negative"}if(t.sv[0].strandB=="+"){t.sv[0].strandB="positive"}else if(t.sv[0].strandB=="-"){t.sv[0].strandB="negative"}s.sv=t.sv.map((t=>t.chrA+"."+t.startA+"."+t.strandA+"."+t.chrB+"."+t.startB+"."+t.strandB)).join(".")}if(t.variants&&t.alleleAlreadyUpdated){s.alleleAlreadyUpdated=1;s.refseqs=t.variants.refseqs;s.altseqs=t.variants.altseqs;s.leftflankseqs=t.variants.leftflankseqs;s.rightflankseqs=t.variants.rightflankseqs;s.ref_positions=t.variants.ref_positions;s.refalleles=t.variants.refalleles;s.altalleles=t.variants.altalleles}if(t.uninitialized){s.getcolorscale=1;delete t.uninitialized}if(t.asPaired)s.asPaired=1;if("nochr"in t)s.nochr=t.nochr;if(t.file)s.file=t.file;if(t.url)s.url=t.url;if(t.indexURL)s.indexURL=t.indexURL;if(t.drop_pcrduplicates)s.drop_pcrduplicates=1;if(t.drop_supplementary_alignments)s.drop_supplementary_alignments=1;if(window.devicePixelRatio>1)s.devicePixelRatio=window.devicePixelRatio;const r=await e("tkbam",{headers:C(t),body:s});if(t.variants&&!t.alleleAlreadyUpdated){t.variants.refseqs=r.refseqs;t.variants.altseqs=r.altseqs;t.variants.refalleles=r.refalleles;t.variants.altalleles=r.altalleles;t.variants.leftflankseqs=r.leftflankseqs;t.variants.rightflankseqs=r.rightflankseqs;t.variants.ref_positions=r.ref_positions;t.alleleAlreadyUpdated=true}if(r.error)throw r.error;return r}function b(e,i,s){if("nochr"in e)i.nochr=e.nochr;if(e.pileup_data){i.pileup_shown=true;i.dom.pileup_img.attr("xlink:href",e.pileup_data.src).attr("width",e.pileup_data.width).attr("height",i.pileupheight);i.dom.pileup_axis.selectAll("*").remove();const s=a().domain([0,e.pileup_data.maxValue]).range([i.pileupheight,0]);t({axis:i.dom.pileup_axis.call(p().scale(s).ticks(5)),color:"black",showline:true})}else{i.pileup_shown=false;i.dom.pileup_axis.selectAll("*").remove();i.dom.pileup_img.attr("width",0)}if(e.count.read_limit_reached){i.toomanyreads=true;i.dom.read_limit_text.text(`Downsampled to ${e.groups.reduce(((t,e)=>t+e.count.r),0)} from ${e.count.read_limit_reached} reads. Try zooming into a smaller region.`).attr("x",e.pileup_data.width/2).attr("transform","scale(1)")}else{i.toomanyreads=false;i.dom.read_limit_text.attr("transform","scale(0)")}if(!i.groups){i.groups=[];for(const t of e.groups){const a=D(t,i,s,e);i.groups.push(a)}}else{q(e,i,s)}k(e,i,s);for(const t of i.groups){t.dom.message_rowg.selectAll("*").remove();let e=0;for(const a of t.data.messages){const r=t.dom.message_rowg.append("text").attr("x",s.width/2).attr("y",e+_-1).attr("font-size",_).attr("text-anchor","middle").text(a.t);if(a.isheader&&!i.gdcFile){r.attr("class","sja_clbtext2").on("click",(()=>{T(i,t,s)}))}e+=_}}A(i);let r=0,l=0;for(const t of i.groups){r+=t.data.count.r;if(i.asPaired){l+=t.data.count.t}}i.leftlabel_count.text((r?r+" read"+(r>1?"s":""):"")+(l?", "+l+" template"+(l>1?"s":""):""));if(e.count.skipped){i.leftlabel_skip.text(`${e.count.skipped} read${e.count.skipped>1?"s":""} skipped`)}else{i.leftlabel_skip.text("")}i.read_alignment_diff_scores_asc=e.read_alignment_diff_scores_asc}function w(t,e){const a=[t.tklabel.node().getBBox().width,t.leftlabel_count.node().getBBox().width,t.leftlabel_skip.node().getBBox().width,t.leftlabel_about?t.leftlabel_about.node().getBBox().width:0];if(t.show_readnames){for(const e of t.groups)a.push(e.ReadNameMaxwidth)}t.leftLabelMaxwidth=Math.max(...a);e.setllabel()}function k(t,e,a){if(!e.dom.variantg||e.sv)return;let i=0;for(const s of e.groups){if(s.data.type.includes("support_alt")){if(s.variantg){s.variantg.selectAll("*").remove()}else{s.variantg=e.glider.append("g")}let r,l;{const t=a.seekcoord(e.variants[0].chr,e.variants[i].pos);if(t[0]){r=t[0].x-a.exonsf/2}}{const t=a.seekcoord(e.variants[0].chr,e.variants[i].pos+e.variants[i].ref.length);if(t[0]){l=t[0].x-a.exonsf/2}}if(r===undefined||l===undefined||r>=a.width||l<=0)return;let n=l-r;if(l>t.pileup_data.width){n=t.pileup_data.width-r}else if(r<0){n=l}if(e.variants.length==1){s.variantg.append("rect").attr("x",Math.max(0,r)).attr("width",n).attr("height",e.dom.variantrowheight).attr("fill","grey")}else{s.variantg.append("rect").attr("x",Math.max(0,r)).attr("width",n).attr("height",e.dom.variantrowheight).attr("fill",s.data.group_color)}const o=e.variants[0].chr+"."+(t.allele_positions[i]+1).toString()+"."+t.ref_alleles[i]+"."+t.alt_alleles[i];let d=0;const p=10;const c=s.variantg.append("text").attr("y",e.dom.variantrowheight-2).attr("font-size",e.dom.variantrowheight).text(o);const g=c.node().getBBox();if(g.width+p<r){d=r-g.width-p}else if(g.width<n){d=Math.max(0,r)+(n-g.width)/2}else if(l+g.width<t.pileup_data.width){d=l+p}c.attr("x",d);if(t.refalleleerror==true){let a=0;const i=s.variantg.append("text").attr("x",a).attr("y",e.dom.variantrowheight).style("fill","red").attr("font-size",e.dom.variantrowheight).text("Incorrect reference allele");const o=i.node().getBBox();if(d==0&&o.width+p<r-g.width-p){a=g.width+p}else if(d==0&&o.width+p>r-g.width-p){a=l+p}else if(g.width+p<r&&l+o.width+p<t.pileup_data.width){a=l+p}else if(g.width+p<r&&l+o.width+p>=t.pileup_data.width&&o.width+p<n){a=Math.max(0,r)}else if(g.width+p<r&&l+o.width+p>=t.pileup_data.width){a=r-g.width-p*2-o.width}else if(g.width<n&&o.width+p<r){a=r-o.width-p}else if(g.width<n&&o.width+p>=r){a=l+p}else if(l+g.width<t.pileup_data.width&&o.width+p<r){a=r-o.width-p}else if(l+g.width<t.pileup_data.width&&o.width+p>=r){a=l+g.width+2*p}else if(l+g.width<t.pileup_data.width&&o.width<n){a=Math.max(0,r)}i.attr("x",a)}i+=1}}if(e.variants.length==1){e.fs_string.text("FS = "+t.strand_probability);if(t.strand_significance){e.fs_string.style("fill","red")}else{e.fs_string.style("fill","black")}e.fs_string.on("click",(a=>{e.tktip.clear().showunder(a.target);e.tktip.d.append("div").style("width","350px").html(`Fisher strand (FS) analysis score containing p-values in phred scale (-10*log(p-value)). If <a href='https://gatk.broadinstitute.org/hc/en-us/articles/360035890471' target='_blank'>FS>60</a>, the variant maybe a sequencing artifact and highlighted in red.\n\t\t\t\t\t</br></br>\n\t\t\t\t\tTo compute the p-value, Fisher's exact test is used for variants with a sequencing depth <= 300. If depth > 300 and each individual category > 150, chi-squared test is used. Following table displays read counts in each category.`);const i=e.tktip.d.append("table").style("margin-top","20px").style("border-spacing","5px");{const t=i.append("tr").style("font-weight","bold");t.append("td");t.append("td").text("Alternative");t.append("td").text("Reference")}{const e=i.append("tr");e.append("td").text("Forward").style("font-weight","bold");e.append("td").text(t.alternate_forward_count);e.append("td").text(t.reference_forward_count)}{const e=i.append("tr");e.append("td").text("Reverse").style("font-weight","bold");e.append("td").text(t.alternate_reverse_count);e.append("td").text(t.reference_reverse_count)}}))}if(Number.isFinite(t.max_diff_score)&&!e.dom.alleleSimilarityHeaderLabel){e.dom.alleleSimilarityHeaderLabel=e.dom.alleleSimilarityHeaderG.append("text").attr("y",2*e.dom.variantrowheight).attr("font-size",e.dom.variantrowheight).attr("class","sja_clbtext2").text("Allele similarity");const t=["Allele similarity: This chart shows the allele to which the read has maximum sequence similarity. In case of alternative and reference alleles, all reads in the same group have same color. In case of none category, color representing allele with maximum sequence color is displayed. In case of ambiguous category, for each read colors representing each alleles having equal similarity to each other are displayed."];let a=0;t.push("<br>Allele color codes:");let i=e.variants[0].pos;let s=e.variants[0].ref.length;e.is_same_ref=true;let r;for(const l of e.groups){if(l.data.type.includes("support_alt")){let r='<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+l.data.group_color+';" /> </svg> '+e.variants[a].alt;t.push(r);if(e.variants[a].pos!=i||e.variants[a].ref.length!=s){e.is_same_ref=false}a+=1}else if(l.data.type=="support_ref"){r=l.data.group_color}}if(!r){r="#47C8FF"}if(e.is_same_ref==true){t.push('<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+r+';" /> </svg> '+e.variants[0].ref)}else{t.push('<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+r+';" /> </svg> Combined reference allele')}if(!e.gdcFile){t.push("<br><a href='https://proteinpaint.stjude.org/bam' target='_blank'>Click here to view details of this method</a>.")}e.dom.alleleSimilarityHeaderLabel.on("click",(a=>{const i=a.target.getBoundingClientRect();e.tktip.clear().show(i.x-250,i.y);e.tktip.d.append("div").style("width","300px").html(t.join("<br>"))}))}}function A(t){let e=0;if(t.pileup_shown)e+=t.pileupheight+t.pileupbottompad;if(t.toomanyreads){e+=t.dom.read_limit_height;t.dom.read_limit_text.attr("y",e);e+=t.dom.read_limit_bottompad}if(t.dom.variantg){t.dom.variantg.attr("transform","translate(0,"+e+")")}if(t.dom.alleleSimilarityHeaderG){t.dom.alleleSimilarityHeaderG.attr("transform","translate(0,"+(t.pileupheight-t.pileupbottompad*2)+")")}let a=0;for(const i of t.groups){if(i.data.type.includes("support_alt")){i.variantg.attr("transform","translate(0,"+e+")");e+=t.dom.variantrowheight+t.dom.variantrowbottompad;a+=1}i.dom.groupg.transition().attr("transform","translate(0,"+e+")");i.dom.rightg.transition().attr("transform","translate(0,"+e+")");i.msgheight=_*i.data.messages.length;i.dom.leftg.transition().attr("transform","translate(0,"+(e+i.msgheight)+")");i.dom.imgg.transition().attr("transform","translate(0,"+i.msgheight+")");if(t.variants){i.dom.diff_score_barplot_fullstack.transition().attr("transform","translate(0,"+i.msgheight+")")}if(i.partstack){if(t.variants){i.dom.diff_score_barplot_partstack.transition().attr("transform","translate(0,"+i.msgheight+")");i.dom.rightg.vslider.g.transition().attr("transform","translate("+t.dom.diff_score_plotwidth*1.1+","+i.msgheight+") scale(1)")}else{i.dom.rightg.vslider.g.transition().attr("transform","translate(0,0) scale(1)")}}e+=i.data.height+i.msgheight;if(i.data.type.includes("support_alt")&&a<t.variants.length){e+=t.dom.variantrowheight}}t.height_main=t.height=e;t.height_main+=t.toppad+t.bottompad}function q(t,e,a){for(let a=0;a<e.groups.length;a++){const i=t.groups.find((t=>t.type==e.groups[a].data.type));if(!i){S(e.groups[a]);e.groups.splice(a,1)}}for(const i of t.groups){const s=e.groups.find((t=>t.data.type==i.type));if(!s){const s=D(i,e,a,t);e.groups.push(s)}else{s.data=i;R(s,e,a);s.dom.img_fullstack.attr("xlink:href",s.data.src).attr("width",s.data.width).attr("height",s.data.height);if(e.variants){s.ReadNameMaxwidth=0;if(e.show_readnames){if(s.data.templatebox){s.dom.read_names_g.selectAll("*").remove();let t=1;for(const e of s.data.templatebox){const a=s.dom.read_names_g.append("text").attr("x",0).attr("y",s.data.height*t/s.data.templatebox.length).attr("text-anchor","end").style("fill","black").attr("font-size",s.data.height/s.data.templatebox.length).text(e.qname);s.ReadNameMaxwidth=Math.max(s.ReadNameMaxwidth,a.node().getBBox().width);t+=1}}}else{s.dom.read_names_g.selectAll("*").remove();s.ReadNameMaxwidth=0}if(s.my_partstack){if(s.data.allowpartstack){Y(s,e,a,s.my_partstack)}}else{s.dom.diff_score_barplot_fullstack.attr("xlink:href",i.diff_scores_img.src).attr("width",i.diff_scores_img.width).attr("height",i.diff_scores_img.height)}}s.dom.img_partstack.attr("width",0).attr("height",0);if(e.variants){s.dom.diff_score_barplot_partstack.attr("width",0).attr("height",0)}s.dom.rightg.vslider.g.transition().attr("transform","scale(0)");s.dom.img_cover.attr("width",s.data.width).attr("height",s.data.height)}}}function R(t,e,a){t.dom.box_move.attr("width",0);M(t,e,a)}function M(t,e,a){if(!t.data.templatebox){t.dom.box_stay.attr("width",0);return}if(!t.clickedtemplate){t.dom.box_stay.attr("width",0);return}for(const i of t.data.templatebox){if(i.qname==t.clickedtemplate.qname){if(e.asPaired||i.isfirst&&t.clickedtemplate.isfirst||i.islast&&t.clickedtemplate.islast){const e=Math.max(0,i.x1);const s=Math.min(a.width,i.x2);t.dom.box_stay.attr("width",s-e).attr("height",i.y2-i.y1).attr("transform","translate("+e+","+i.y1+")");return}}}t.dom.box_stay.attr("width",0)}function S(t){t.dom.message_rowg.remove();t.dom.img_fullstack.remove();t.dom.img_partstack.remove();t.dom.diff_score_barplot_fullstack?.remove();t.dom.diff_score_barplot_partstack?.remove();t.dom.read_names_g?.remove();t.dom.leftg.remove();t.dom.box_stay?.remove();t.dom.box_move?.remove();t.dom.rightg.remove()}function B(t,e){if(t.gdcFile){e.gdcBamSliceDownloadBtn.style("display","inline-block")}N(t);if(t.drop_pcrduplicates==undefined){t.drop_pcrduplicates=true}t.drop_supplementary_alignments=false;if(t.show_readnames==undefined){t.show_readnames=false}t.config_handle=e.maketkconfighandle(t).attr("y",10+e.labelfontsize).on("click",(()=>{F(t,e)}));t.readMenu=new i;t.readMenu.d.style("max-width","90vw").style("max-height","65vh").attr("class","sjpp_show_scrollbar");t.multiAlignMenu=new i;t.multiAlignMenu.d.style("max-width","90vw").style("max-height","65vh").attr("class","sjpp_show_scrollbar");t.pileupheight=100;t.pileupbottompad=6;t.dom={pileup_g:t.glider.append("g"),pileup_axis:t.glider.append("g"),read_limit_height:15,read_limit_bottompad:6,read_limit_g:t.glider.append("g")};t.dom.pileup_img=t.dom.pileup_g.append("image");t.dom.read_limit_text=t.dom.read_limit_g.append("text").style("fill","red").attr("text-anchor","middle").attr("font-size",t.dom.read_limit_height).attr("transform","scale(0)");if(t.variants){t.dom.variantg=t.glider.append("g");t.dom.alleleSimilarityHeaderG=t.gright.append("g");t.dom.variantrowheight=15;t.dom.variantrowbottompad=5;t.dom.diff_score_plotwidth=20;t.fs_string=e.maketklefthandle(t,t.pileupheight+t.dom.variantrowheight/2)}else if(t.sv){t.dom.variantg=t.glider.append("g");t.dom.variantrowheight=15;t.dom.variantrowbottompad=5}t.asPaired=false;let a=e.labelfontsize+5;t.leftlabel_count=e.maketklefthandle(t,a);a+=e.labelfontsize;t.leftlabel_skip=e.maketklefthandle(t,a).text("");if(t.aboutThisFile){a+=e.labelfontsize;t.leftlabel_about=e.maketklefthandle(t,a).text("About the BAM file").on("mouseover",(e=>{t.tktip.showunder(e.target).clear();s(t.tktip.d,t.aboutThisFile)})).on("mouseout",(()=>{t.tktip.hide()}))}delete t.alleleAlreadyUpdated;if(t.groups){for(const e of t.groups)S(e);delete t.groups}}function N(t,e){const a=r();if(a.has("variant")){t.variants=[];if(typeof a.get("variant")=="string"){const e=a.get("variant").split(".");if(e.length==4){const a=Number(e[1]);if(!Number.isInteger(a))throw"urlparam variant pos is not integer";if(!e[2])throw"ref allele missing";if(!e[3])throw"alt allele missing";t.variants.push({chr:e[0],pos:a-1,ref:e[2],alt:e[3],strictness:1})}}else{const e=a.get("variant");for(const a of e.variants){if(!Number.isInteger(a.pos))throw"urlparam variant pos is not integer";if(!a.ref)throw"ref allele missing";if(!a.alt)throw"alt allele missing";t.variants.push({chr:e.chr,pos:Number(a.pos)-1,ref:a.ref,alt:a.alt})}}if(a.has("strictness")){const e=a.get("strictness");if(!Number.isInteger(Number(e)))throw"strictness must be an integer";t.strictness=Number(e);if(t.strictness!=1&&t.strictness!=0){throw"strictness must be 0 or 1"}}else{t.strictness=1}}else if(a.has("sv")){const e=a.get("sv").split(".");t.sv=[];if(e.length==7){t.sv.push({chrA:e[0],startA:e[1],strandA:e[2],chrB:e[3],startB:e[4],strandB:e[5],contig:e[6]})}else if(e.length==6){t.sv.push({chrA:e[0],startA:e[1],strandA:e[2],chrB:e[3],startB:e[4],strandB:e[5]})}}}function D(t,e,a,i){const s={data:t,dom:{groupg:e.glider.append("g"),rightg:e.gright.append("g"),leftg:e.gleft.append("g")}};s.dom.message_rowg=s.dom.groupg.append("g");s.dom.imgg=s.dom.groupg.append("g");s.dom.rightg.vslider=s.dom.rightg.append("g");s.dom.rightg.vslider.g=s.dom.rightg.vslider.append("g").attr("transform","scale(0)");if(e.variants){s.dom.diff_score_g=s.dom.rightg.append("g");s.dom.read_names_g=s.dom.leftg.append("g");s.dom.diff_score_barplot_fullstack=s.dom.diff_score_g.append("image").attr("xlink:href",t.diff_scores_img.src).attr("width",t.diff_scores_img.width).attr("height",t.diff_scores_img.height);s.dom.diff_score_barplot_partstack=s.dom.diff_score_g.append("image").attr("xlink:href",t.diff_scores_img.src).attr("width",0).attr("height",0);if(!s.allowpartstack&&!Number.isFinite(e.max_diff_score)&&e.variants){e.max_diff_score=i.max_diff_score;e.min_diff_score=i.min_diff_score}e.pileupheight+e.dom.variantrowheight*2;if(e.toomanyreads){e.pileupheight+e.dom.variantrowheight*3}}s.dom.img_fullstack=s.dom.imgg.append("image").attr("xlink:href",s.data.src).attr("width",s.data.width).attr("height",s.data.height);s.dom.img_partstack=s.dom.imgg.append("image").attr("width",0).attr("height",0);s.dom.box_move=s.dom.imgg.append("rect").attr("stroke","black").attr("fill","none");s.dom.box_stay=s.dom.imgg.append("rect").attr("stroke","magenta").attr("fill","none");let r;const n=e.regions[0].x;const o=e.regions[e.regions.length-1].x+e.regions[e.regions.length-1].width;s.dom.img_cover=s.dom.imgg.append("rect").attr("fill","white").attr("fill-opacity",0).attr("width",s.data.width).attr("height",s.data.height).on("mousedown",(t=>{r=t.clientX})).on("mousemove",(t=>{if(s.data.allowpartstack){return}if(!s.data.templatebox)return;const[a,i]=c(t,s.dom.img_cover.node());let r=0;for(const t of s.data.templatebox){r+=1;const l=Math.max(t.x1,n);const d=Math.min(t.x2,o);if(a>l&&a<d&&i>t.y1&&i<t.y2){s.dom.box_move.attr("width",d-l).attr("height",t.y2-t.y1).attr("transform","translate("+l+","+t.y1+")");if(e.readAlignmentTable&&e.readAlignmentTableGroup==s.data.type){z(e,r)}else if(e.readAlignmentTable&&e.readAlignmentTableGroup!=s.data.type){z(e,s.data.templatebox.length+10)}return}}})).on("click",(t=>{if(r!=t.clientX)return;const[i,l]=c(t,s.dom.img_cover.node());s.my_partstack=l;if(s.data.allowpartstack){Y(s,e,a,l);return}if(!s.data.templatebox)return;e.readMenu.clear().show(50,t.clientY);let d=true;for(let t=0;t<e.regions.length;t+=1){for(const r of s.data.templatebox){const p=Math.max(r.x1,n);const c=Math.min(r.x2,o);const g=Math.max(e.regions[t].x,r.x1);const h=Math.min(e.regions[t].x+e.regions[t].width,r.x2);if(i>g&&i<h&&l>r.y1&&l<r.y2){if(s.clickedtemplate&&s.clickedtemplate.qname==r.qname){if(e.asPaired||r.isfirst&&s.clickedtemplate.isfirst||r.islast&&s.clickedtemplate.islast){delete s.clickedtemplate;s.dom.box_stay.attr("width",0);break}}s.clickedtemplate={qname:r.qname};if(e.asPaired){s.clickedtemplate.isfirst=true}else{if(r.isfirst)s.clickedtemplate.isfirst=true;if(r.islast)s.clickedtemplate.islast=true}s.dom.box_stay.attr("width",c-p).attr("height",r.y2-r.y1).attr("transform","translate("+p+","+r.y1+")");I(e,a,r,t);d=false}}}if(d)e.readMenu.hide()}));s.dom.rightg.vslider.bar=s.dom.rightg.vslider.g.append("rect").attr("fill",h).attr("x",10).attr("width",20).on("mouseover",(()=>s.dom.rightg.vslider.bar.attr("fill","#fae8e8"))).on("mouseout",(()=>s.dom.rightg.vslider.bar.attr("fill",h))).on("click",(()=>{delete s.dom.rightg.vslider.boxy;delete s.partstack;if(s.my_partstack){delete s.my_partstack}s.ReadNameMaxwidth=0;s.data=s.data_fullstack;Q(s,e,a);A(e);a.block_setheight()}));s.dom.rightg.vslider.boxg=s.dom.rightg.vslider.g.append("g");s.dom.rightg.vslider.box=s.dom.rightg.vslider.boxg.append("rect").attr("fill",f).attr("width",40).on("mousedown",(t=>{t.preventDefault();s.dom.rightg.vslider.box.attr("fill",m);const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const a=t.clientY;const l=a-r;if(l<0){if(s.dom.rightg.vslider.boxy+l<=0)return}else{if(s.dom.rightg.vslider.boxy+l>=i-s.dom.rightg.vslider.boxh)return}n=l;if(e.variants){s.dom.diff_score_barplot_partstack.attr("transform","translate(0,"+(-1*n*s.data_fullstack.stackcount*s.data.stackheight/i+s.msgheight)+")");s.dom.read_names_g.attr("transform","translate(0,"+-1*n*s.data_fullstack.stackcount*s.data.stackheight/i+")")}s.dom.rightg.vslider.boxg.attr("transform","translate(0,"+(s.dom.rightg.vslider.boxy+n)+")");s.dom.img_partstack.attr("y",-(n*s.data_fullstack.stackcount*s.data.stackheight/i));s.dom.box_move.attr("width",0);s.dom.box_stay.attr("width",0)}));o.on("mouseup",(async()=>{s.dom.rightg.vslider.box.attr("fill",f);o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxy+=n;const t=Math.ceil(s.data_fullstack.stackcount*n/i);s.partstack.start+=t;s.partstack.stop+=t;a.tkcloakon(e);const r=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=r.groups[0];Q(s,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}))}));s.dom.rightg.vslider.boxtopline=s.dom.rightg.vslider.boxg.append("line").attr("stroke",m).attr("stroke-width",3).attr("x2",40).on("mouseover",(()=>s.dom.rightg.vslider.boxtopline.attr("stroke",u))).on("mouseout",(()=>s.dom.rightg.vslider.boxtopline.attr("stroke",m))).on("mousedown",(t=>{t.preventDefault();const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const e=t.clientY;const a=e-r;if(a<0){if(s.dom.rightg.vslider.boxy+a<=0)return}else{if(s.dom.rightg.vslider.boxh-a<=g*i/s.data_fullstack.stackcount)return}n=a;s.dom.rightg.vslider.boxg.attr("transform","translate(0,"+(s.dom.rightg.vslider.boxy+n)+")");s.dom.rightg.vslider.box.attr("height",s.dom.rightg.vslider.boxh-n);s.dom.rightg.vslider.boxbotline.attr("y1",s.dom.rightg.vslider.boxh-n).attr("y2",s.dom.rightg.vslider.boxh-n)}));o.on("mouseup",(async()=>{o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxy+=n;s.partstack.start+=Math.ceil(s.data_fullstack.stackcount*n/i);a.tkcloakon(e);const t=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=t.groups[0];Q(s,e,a);a.tkcloakoff(e,{});A(e);a.block_setheight()}))}));s.dom.rightg.vslider.boxbotline=s.dom.rightg.vslider.boxg.append("line").attr("stroke",m).attr("stroke-width",3).attr("x2",40).on("mouseover",(()=>s.dom.rightg.vslider.boxbotline.attr("stroke",u))).on("mouseout",(()=>s.dom.rightg.vslider.boxbotline.attr("stroke",m))).on("mousedown",(t=>{t.preventDefault();const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const e=t.clientY;const a=e-r;if(a<0){if(s.dom.rightg.vslider.boxh+a<=g*i/s.data_fullstack.stackcount)return}else{if(s.dom.rightg.vslider.boxy+a>=i-s.dom.rightg.vslider.boxh)return}n=a;s.dom.rightg.vslider.box.attr("height",s.dom.rightg.vslider.boxh+n);s.dom.rightg.vslider.boxbotline.attr("y1",s.dom.rightg.vslider.boxh+n).attr("y2",s.dom.rightg.vslider.boxh+n)}));o.on("mouseup",(async()=>{o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxh+=n;s.partstack.stop+=Math.ceil(s.data_fullstack.stackcount*n/i);a.tkcloakon(e);const t=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=t.groups[0];Q(s,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}))}));return s}async function P(t,a,i){const s={alignOneGroup:a.data.type,genome:i.genome.name,regions:t.regions,variant:t.variants.map((t=>t.chr+"."+t.pos+"."+t.ref+"."+t.alt)).join(".")};if(t.file)s.file=t.file;if(t.url)s.url=t.url;if(t.indexURL)s.indexURL=t.indexURL;if(t.gdcFile){s.gdcFileUUID=t.gdcFile.uuid;s.gdcFilePosition=t.gdcFile.position}if(t.alleleAlreadyUpdated){s.alleleAlreadyUpdated=1;s.refseqs=t.variants.refseqs;s.altseqs=t.variants.altseqs;s.refalleles=t.variants.refalleles;s.altalleles=t.variants.altalleles;s.leftflankseqs=t.variants.leftflankseqs;s.rightflankseqs=t.variants.rightflankseqs;s.ref_positions=t.variants.ref_positions;s.strictness=t.strictness}if(t.asPaired)s.asPaired=1;if("nochr"in t)s.nochr=t.nochr;if(t.drop_pcrduplicates)s.drop_pcrduplicates=1;if(t.drop_supplementary_alignments)s.drop_supplementary_alignments=1;if(a.partstack){s.stackstart=a.partstack.start;s.stackstop=a.partstack.stop;s.grouptype=a.data.type}return await e("tkbam",{headers:C(t),body:s})}function C(t){const e={"Content-Type":"application/json",Accept:"application/json"};if(t.gdcToken)e["X-Auth-Token"]=t.gdcToken;return e}function F(t,e){{const e=t.config_handle.node().getBoundingClientRect();t.tkconfigtip.clear().show(e.x-300,e.y)}const a=t.tkconfigtip.d.append("div").style("max-width","50vw");{const i=a.append("div");i.append("span").html("Show reads as: ").style("opacity",.5).style("margin","10px 5px");o({holder:i,options:[{label:"Single",value:false,checked:!t.asPaired},{label:"Paired",value:true,checked:t.asPaired}],styles:{display:"inline-block",margin:"10px 5px"},callback:a=>{t.asPaired=a;y(t,e)}})}{d({holder:a.append("div"),labeltext:"Drop PCR or optical duplicates",checked:t.drop_pcrduplicates,divstyle:{display:"block",margin:"10px 5px",height:"10px","margin-left":"6.5px"},callback:()=>{t.drop_pcrduplicates=!t.drop_pcrduplicates;y(t,e)}})}if(t.variants){d({holder:a.append("div"),labeltext:"Show read names",checked:t.show_readnames,divstyle:{display:"block",margin:"10px 5px",height:"10px","margin-left":"6.5px"},callback:()=>{t.show_readnames=!t.show_readnames;y(t,e)}});if(t.variants[0].strictness==0);else if(!t.variants[0].strictness){t.variants[0].strictness=1}const i=a.append("div");i.append("span").html("Strictness: ").style("display","block").style("height","10px").style("opacity",.5).style("margin","10px 5px").style("margin-top","20px");o({holder:i,options:[{label:'Lenient: "None group" is not generated.',value:0,checked:t.strictness==0},{label:'Strict: "None group" is generated for reads with imperfect match to both reference and alternative alleles.',value:1,checked:t.strictness==1}],styles:{display:"block",margin:"10px 5px",height:"10px","margin-left":"30px"},callback:a=>{t.strictness=a;y(t,e)}})}a.append("div").style("display","inline-block").style("height","10px").style("margin-top","20px").style("font-size",".8em").html(`\n\t<ul style="padding-left:15px">\n\t <li><b>Matches</b> are rendered as gray boxes aligned to the reference.</li>\n\t <li><b>Mismatches</b> will be checked when 1 bp is wider than 1 pixel, and are rendered as red boxes aligned to the reference.</li>\n\t <li><b>Softclips</b> are rendered as blue boxes not aligned to the reference.</li>\n\t <li><b>Base qualities</b> are rendered when 1 bp is wider than 2 pixels. See color scale below. When base quality is not used or is unavailable, full colors are used.</li>\n\t <li><b>Sequences</b> from mismatch and softclip will be printed when 1 bp is wider than 7 pixels.</li>\n\t <li>An <b>insertion</b> with on-screen size wider than 1 pixel will be rendered as cyan text between aligned bases, in either a letter or the number of inserted bp. Text color scales by average base quality when that is in use.</li>\n\t <li><b>Deletions</b> are gaps joined by black horizontal lines.</li>\n\t <li><b>Split reads</b> and splice junctions are indicated by solid gray lines.</li>\n\t <li><b>Read pairs</b> are joined by dashed gray lines.</li>\n <li><b>Discordant reads</b> Discordant reads are colored based on their respective features as described below:<ul style="list-style-type:none;"> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#3B7A57;" /> </svg> Read pair has wrong insert size </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#6B4423;" /> </svg> Mate is unmapped </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#fc6df3;" /> </svg> Wrong orientation </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#d48b37;" /> </svg> Mate mapped to different chromosome </li> </ul>\n </li> \n\t</ul>`);a.append("div").style("margin-top","10px").append("img").attr("width",t.colorscale.width).attr("height",t.colorscale.height).attr("src",t.colorscale.src);a.append("div").style("font-size",".8em").html(`\n`)}function T(t,e,a){if(t.variants){U(t,e,a)}}function z(t,e){const a=t.readAlignmentTable._groups[0][0].querySelectorAll("tr");a.forEach((a=>{if(a.rowIndex==e+1&&!t.is_align_gene){a.style.setProperty("font-weight","bold");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="rgb(255, 255, 255)"){t.style.setProperty("background-color","yellow")}}))}else if(a.rowIndex==e+2&&t.is_align_gene){a.style.setProperty("font-weight","bold");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="rgb(255, 255, 255)"){t.style.setProperty("background-color","yellow")}}))}else{a.style.setProperty("font-weight","normal");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="yellow"){t.style.setProperty("background-color","rgb(255, 255, 255)")}}))}}))}async function j(t,e,a,i,s){const r=[];const l=[];const n=[];let o=a.alignmentData.final_read_align[0];let d=t.variants[0].pos-t.variants.leftflankseqs[0].length;t.variants[0].pos+t.variants.rightflankseqs[0].length;if(i.data.type=="support_alt"+s.toString()){d=t.variants[s].pos-t.variants.leftflankseqs[s].length;t.variants[s].pos+t.variants.rightflankseqs[s].length}let p=d;let c=d;let g=0;let h=t.readAlignmentTable.node().children[0];let f=0;let m=false;let u=0;for(const a of o){if(a=="-"){if(m==true){l.push(1);n.push("break");p+=1;c+=1}else{const a=await H(e,t,p,c-1,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model");f=0;p=d+u+1;c=d+u+1;g=0;m=true;l.push(1);n.push("break")}f+=1;g+=h.children[u].getBoundingClientRect().width}else if(i.data.type=="support_alt"+s.toString()&&t.variants[s].alt.length>t.variants[s].ref.length&&t.variants[s].pos<d+u&&t.variants[s].pos+t.variants[s].alt.length-1>=d+u);else if(t.variants[0].pos==d+u&&i.data.type=="support_alt"+s.toString()){if(t.variants[s].ref.length==1&&t.variants[s].alt.length==1){continue}if(t.variants[s].ref.length>=t.variants[s].alt.length){c+=1;f+=1;g+=h.children[u+1].getBoundingClientRect().width}const a=await H(e,t,p,c,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model");f=0;p=d+u+t.variants[s].ref.length;c=d+u+t.variants[s].ref.length;if(t.variants[s].ref.length<t.variants[s].alt.length){l.push(t.variants[0].alt.length);n.push("break")}g=0;m=false}else if(u==o.length-1){c+=1;f+=1;g+=h.children[u].getBoundingClientRect().width;const a=await H(e,t,p,c,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model")}else{c+=1;f+=1;g+=h.children[u].getBoundingClientRect().width;m=false}u+=1}let _=0;let x=0;const y=t.readAlignmentTable.node().insertRow();if(t.readAlignmentTable.node().children.length>=3){const e=t.readAlignmentTable.node().children[2];t.readAlignmentTable.node().insertBefore(y,e)}else{console.log("Possible problem in placing gene model in table. Please check")}for(let t=0;t<n.length;t++){const e=y.insertCell();if(n[t]=="gene_model"){const t=document.createElement("img");t.src=r[x].src;t.width=r[x].width;t.height=r[x].height;e.appendChild(t);e.colSpan=r[x].colspan;x+=1}else if(n[t]=="break"){e.colSpan=l[_];_+=1}}}async function U(t,e,a){t.multiAlignMenu.clear().show(50,100);const i=t.multiAlignMenu.d.append("div").text("Loading...");try{const s=await P(t,e,a);if(s.error){i.remove();n(t.multiAlignMenu.d,"Realignment of reads in ambiguous group is not currently implemented.");setTimeout((()=>t.multiAlignMenu.d.remove()),3e3);return}i.remove();let r=0;let l=[];let o=[];if(e.data.type.includes("support_alt")){for(let a=0;a<t.variants.length;a++){if(e.data.type=="support_alt"+a.toString()){r=a}}}else if(e.data.type=="support_ref"){for(let e=0;e<t.variants.length;e++){l.push({start:t.variants[e].pos,stop:t.variants[e].pos+t.variants[e].ref.length})}l.sort(((t,e)=>t.start-e.start));let e={start:l[0].start,stop:l[0].stop};o.push(l[0].start);let a=false;for(let t=1;t<l.length;t++){if(l[t].start<=e.stop&&e.stop<=l[t].stop){e=l[t]}else if(e.stop>l[t].stop){continue}else{o.push(e.stop);o.push(l[t].start)}}o.push(Math.max(e.stop,l[l.length-1].stop))}if(s.alignmentData.final_read_align.length>0&&(e.data.type.includes("support_alt")||e.data.type=="support_ref")){const i=t.multiAlignMenu.d.append("button").style("margin-left","10px").text("Show gene model").on("click",(async()=>{t.is_align_gene=true;i.property("disabled",true);await j(t,a,s,e,r)}))}L(t,s,e,r,o)}catch(e){i.remove();n(t.multiAlignMenu.d,e)}}function L(t,e,a,i,s){if(!e.alignmentData.read_count){e.alignmentData.read_count=0}if(a.data.type=="support_ref"){t.multiAlignMenu.d.append("div").text("Number of reads aligned to reference allele = "+e.alignmentData.read_count).style("text-align","center")}else if(a.data.type=="support_no"||a.data.type=="support_amb"){t.multiAlignMenu.d.append("div").text("Number of reads aligned = "+e.alignmentData.read_count).style("text-align","center")}else if(a.data.type.includes("support_alt")){let s=0;for(let r=0;r<t.variants.length;r++){if(a.data.type=="support_alt"+r.toString()){s=1;i=r;t.multiAlignMenu.d.append("div").text("Number of reads aligned to alternative allele "+t.variants[r].alt+" = "+e.alignmentData.read_count).style("text-align","center")}}if(s==0){console.log("group.data.type:",a.data.type);console.log("Alternate allele not found")}}if(e.alignmentData.partstack_start){t.multiAlignMenu.d.append("div").text("Reads aligned from "+e.alignmentData.partstack_start+" to "+e.alignmentData.partstack_stop).style("text-align","center")}const r=t.multiAlignMenu.d.append("div").style("margin","20px");t.readAlignmentTable=r.append("table").style("font-family","Courier").style("font-size","0.8em").style("color","#303030").style("margin","5px 5px 20px 5px").style("border-spacing",0).style("border-collapse","separate").style("text-align","center").style("empty-cells","show");let l=t.readAlignmentTable.append("tr").style("color","white").style("background-color","white");l.attr("id","RefAltBar");let n;let o=0;let d=0;let p=0;let c=1;if(a.data.type=="support_alt"+i.toString()){if(t.variants.length==1){n="Alternative allele";if(n.length<t.variants[i].alt.length){c=0}else{n=" Alternative allele"}}else{if(a.data.type=="support_alt"+i.toString()){n="Alternative allele = "+t.variants[i].alt;if(n.length<t.variants[i].alt.length){c=0}else{n=" Alternative allele = "+t.variants[i].alt}}}}else if(a.data.type=="support_ref"){if(t.is_same_ref==false){n="Combined reference allele"}else{n="Reference allele"}if(n.length<s[1]-s[0]){c=0}else{if(t.is_same_ref==false){n=" Combined reference allele"}else{n=" Reference allele"}}}t.readAlignmentTableGroup=a.data.type;if(e.alignmentData.final_read_align.length>0){for(const r of e.alignmentData.final_read_align[0]){o+=1;const r=l.append("td");if(a.data.type=="support_alt"+i.toString()&&o>t.variants.leftflankseqs[i].length+e.alignmentData.gaps_before_variant&&o<=t.variants.leftflankseqs[i].length+t.variants[i].alt.length+e.alignmentData.gaps_before_variant){if(c==1){d=1;r.text(" ").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}else{if(p<n.length){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","black");p+=1}else{r.text(" ").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}}}else if(a.data.type=="support_ref"&&o>t.variants.leftflankseqs[0].length+e.alignmentData.gaps_before_variant&&o<=t.variants.leftflankseqs[0].length+s[1]-s[0]+e.alignmentData.gaps_before_variant){if(c==1){d=1;r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}else{if(p<n.length){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","black");p+=1}else{r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}}}else if(d==1&&c==1){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","white");p+=1;if(p==n.length){d=0}}else{r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","white")}}let r=0;for(const l of e.alignmentData.final_read_align){let n=0;const o=t.readAlignmentTable.append("tr").style("color","white").style("background-color","white");if(r==0&&(a.data.type=="support_ref"||a.data.type=="support_alt")){o.attr("id","RefAltSeq")}else{o.attr("id",r.toString())}const d=e.alignmentData.qual_r[r].split(",");const p=e.alignmentData.qual_g[r].split(",");const c=e.alignmentData.qual_b[r].split(",");for(const g of l){n+=1;let l;if(r==0&&(a.data.type=="support_ref"||a.data.type.includes("support_alt"))){l=o.append("td").text(g).style("background-color","white").style("color","black").style("font-weight","550")}else{l=o.append("td").text(g).style("background-color","rgb("+d[n-1]+","+p[n-1]+","+c[n-1]+")");if(g!="-"){l.style("color","white")}else{l.style("color","black")}}if(a.data.type=="support_alt"+i.toString()&&n>t.variants.leftflankseqs[i].length+e.alignmentData.gaps_before_variant&&n<=t.variants.leftflankseqs[i].length+t.variants[i].alt.length+e.alignmentData.gaps_before_variant){l.style("color","black")}else if(a.data.type=="support_ref"&&n>t.variants.leftflankseqs[0].length+e.alignmentData.gaps_before_variant&&n<=t.variants.leftflankseqs[0].length+s[1]-s[0]+e.alignmentData.gaps_before_variant){l.style("color","black")}}r+=1}}}async function I(t,a,i,s){const r=t.readMenu.d.append("div").text("Loading...");const o=p(t.variants?{refseqs:t.variants.refseqs,altseqs:t.variants.altseqs,chrom:t.variants[0].chr,ref_positions:t.variants.ref_positions,refalleles:t.variants.refalleles,altalleles:t.variants.altalleles,start:i.start,stop:i.stop,paired:t.asPaired}:{start:i.start,stop:i.stop,paired:t.asPaired});const d=await e("tkbam",o);if(d.error){n(r,d.error);return}r.remove();for(const i of d.lst){const r=t.readMenu.d.append("div").style("margin","10px");const o=r.append("div").html(i.alignment);const g=r.append("div").style("margin-top","10px");g.append("button").text("Copy read sequence").on("click",(function(){navigator.clipboard.writeText(i.seq).then((()=>{}),console.warn);l(this).html("Copy read sequence ✓")}));if(d.lst[0].alignments){l(this).append("span").html(" ");const e=g.append("button").style("margin-left","10px").text("Align read to variant alleles");let a=true;e.on("click",(()=>{if(a){a=false;for(let e=0;e<t.variants.length;e++){c(f,"Ref",t,d.lst[0].start_readpos-1,e);c(f,"Alt",t,d.lst[0].start_readpos-1,e)}}if(f.style("display")=="none"){f.style("display","block")}else{f.style("display","none")}}))}if(i.unmapped_mate&&!t.asPaired){const i=g.append("button").style("margin-left","10px").text("Show unmapped mate").on("click",(async()=>{i.property("disabled",true);const s=t.readMenu.d.append("div").text("Loading...");const o=await e("tkbam",p({show_unmapped:1}));if(o.error){s.text("");n(s,o.error);i.property("disabled",false);return}s.remove();i.remove();const d=o.lst[0];r.append("div").html(d.alignment);const c=r.append("div").style("margin-top","10px");c.append("button").text("Copy read sequence").on("click",(function(){navigator.clipboard.writeText(d.seq).then((()=>{}),console.warn);l(this).html("Copy read sequence ✓")}));E(d,c,t,a);r.append("div").html(d.info)}))}const h=g.append("button").style("margin-left","10px").text("Show gene model").property("disabled",!i.seq||i.seq=="*").on("click",(async()=>{h.property("disabled",true);let t=0;let e=0;let i=0;let r=d.lst[0].boxes[0].start;let l;let n=0;const p=o.node().children[0].getElementsByTagName("tbody")[0];const c=p.insertRow();const g=c.insertCell();const f=document.createTextNode("");g.appendChild(f);const m=[];const u=[];let _=0;const x=o.node().children[0].children[0].children[0];for(const o of d.lst[0].boxes){if(o.opr=="H"){continue}else if(o.opr=="M"||o.opr=="S"||o.opr=="N"&&o.len<d.lst[0].readpanel_DN_maxlength||o.opr=="D"&&o.len<d.lst[0].readpanel_DN_maxlength){for(let t=0;t<o.len;t++){n+=x.children[e+1].getBoundingClientRect().width;e+=1}i+=o.len}else if(o.opr=="I"||o.opr=="N"&&o.len>=d.lst[0].readpanel_DN_maxlength||o.opr=="D"&&o.len>=d.lst[0].readpanel_DN_maxlength){l=o.start;const t=await G(a,s,r,l,n);const e={src:t.src,width:n,height:t.height,colspan:i};m.push(e);if(o.opr=="I"){u.push(o.len)}else if(o.opr=="N"||o.opr=="D"){u.push(1)}if(o.opr=="D"||o.opr=="N"){r=o.start+o.len}else if(o.opr=="I"){r=o.start}n=0;i=0;_+=1}if(t==d.lst[0].boxes.length-1){l=o.start+o.len;const t=await G(a,s,r,l,n);const e={src:t.src,width:n,height:t.height,colspan:i};m.push(e)}t+=1}const y=_+m.length;let v=0;let b=0;for(let t=0;t<y;t++){const e=c.insertCell();if(t%2==0){const t=document.createElement("img");t.src=m[b].src;t.width=m[b].width;t.height=m[b].height;e.appendChild(t);e.colSpan=m[b].colspan;b+=1}else{e.colSpan=u[v];v+=1}}}));E(i,g,t,a);r.append("div").html(i.info);const f=r.append("div").style("display","none")}function p(e={}){const r=t.regions[s];const l={getread:1,qname:encodeURIComponent(i.qname),genome:a.genome.name,chr:r.chr,start:r.start,stop:r.stop,...e};if(t.gdcFile){l.gdcFileUUID=t.gdcFile.uuid;l.gdcFilePosition=t.gdcFile.position}if(t.nochr)l.nochr=1;if(t.file)l.file=t.file;if(t.url)l.url=t.url;if(t.indexURL)l.indexURL=t.indexURL;if(t.asPaired){l.getpair=1}else{if(i.isfirst){l.getfirst=1}else if(i.islast){l.getlast=1}else{l.unknownorder=1;l.readstart=i.start;l.readstop=i.stop}}return{headers:C(t),body:l}}function c(t,e,a,i,s){let r,l,n;if(e=="Ref"){r=d.lst[0].alignments[s].q_seq_ref;l=d.lst[0].alignments[s].align_ref;n=d.lst[0].alignments[s].r_seq_ref}if(e=="Alt"){r=d.lst[0].alignments[s].q_seq_alt;l=d.lst[0].alignments[s].align_alt;n=d.lst[0].alignments[s].r_seq_alt}if(d.lst[0].alignments.length==1){t.append("span").text(e+" alignment").style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else{if(e=="Alt"){t.append("span").text("Alignment with Alt allele: "+a.variants[s].alt).style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else if(e=="Ref"){t.append("span").text("Alignment with Ref allele: "+a.variants[s].ref).style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else{console.log("Unknown allele, please check")}}const o=t.append("table").style("font-family","Courier").style("font-size","0.8em").style("color","#303030").style("margin","5px 5px 20px 5px");let p=0;const c=o.append("tr");c.append("td").text(e+" allele").style("text-align","right").style("font-weight","550").style("white-space","nowrap");for(const t of n){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){c.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){c.append("td").text(t).style("color","red")}else{c.append("td").text(t)}}const g=o.append("tr");g.append("td");p=0;for(const t of l){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){g.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){g.append("td").text(t).style("color","red")}else{g.append("td").text(t)}}const h=o.append("tr");h.append("td").text("Read").style("text-align","right").style("font-weight","550");p=0;for(const t of r){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){h.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){h.append("td").text(t).style("color","red")}else{h.append("td").text(t)}}}}async function H(t,a,i,s,r){const l=t.genome.tracks.find((t=>t.__isgene));const n={name:l.name,genome:t.genome.name,rglst:[{chr:a.variants[0].chr,start:i,stop:s,width:r}],width:r,stackheight:16,stackspace:1,regionspace:0,file:l.file,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1,color:l.color,translatecoding:1,__isgene:true,noNameHover:true};{const e=t.tklst.find((t=>t.name==n.name&&t.type=="bedj"));if(e&&e.filterByName){n.filterByName=e.filterByName}}return await e("tkbedj",{method:"POST",body:JSON.stringify(n)})}async function G(t,a,i,s,r){const l=t.genome.tracks.find((t=>t.__isgene));const n={name:l.name,genome:t.genome.name,rglst:[{chr:t.rglst[a].chr,start:i,stop:s,width:r}],width:r,stackheight:16,stackspace:1,regionspace:0,file:l.file,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1,color:l.color,translatecoding:1,__isgene:true,noNameHover:true};{const e=t.tklst.find((t=>t.name==n.name&&t.type=="bedj"));if(e&&e.filterByName){n.filterByName=e.filterByName}}return await e("tkbedj",{method:"POST",body:JSON.stringify(n)})}function E(t,a,i,s){if(!s.genome.blat){return}const r=a.append("button").style("margin-left","10px").text("BLAT").on("click",(async()=>{r.property("disabled",true);l.selectAll("*").remove();const a=l.append("div").text("Loading...");try{const r=await e("blat",{body:{genome:s.genome.name,seq:t.seq,soft_starts:t.soft_starts,soft_stops:t.soft_stops}});if(r.error)throw r.error;if(r.nohit)throw"No hit";if(!r.hits)throw".hits[] missing";a.remove();O(r.hits,l,i,s)}catch(t){a.text(t.message||t);if(t.stack)console.log(t.stack)}r.property("disabled",false)}));const l=a.append("div")}async function Y(t,e,a,i,s){t.data_fullstack=t.data;const r=(t.partstack?t.partstack.start:0)+Math.floor(i/t.data.stackheight);if(r<g/2){t.partstack={start:0,stop:g}}else if(r>t.data_fullstack.stackcount-g/2){t.partstack={start:t.data_fullstack.stackcount-g,stop:t.data_fullstack.stackcount}}else{t.partstack={start:r-g/2,stop:r+g/2}}a.tkcloakon(e);const l=await v(e,a,{stackstart:t.partstack.start,stackstop:t.partstack.stop,grouptype:t.data.type});t.data=l.groups[0];Q(t,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}function O(t,e,a,i){const s=e.append("table");const r=s.append("tr").style("opacity",.5).style("font-size",".8em");r.append("td").text("QScore");r.append("td").text("QStart");r.append("td").text("QStop");r.append("td").text("QStrand");r.append("td").text("QAlignLen");r.append("td").text("RChr");r.append("td").text("RStart");r.append("td").text("RStop");r.append("td").text("RAlignLen");for(const e of t){let t=s.append("tr").style("font-size",".8em");t.append("td").text(e.query_match);t.append("td").text(e.query_startpos);t.append("td").text(e.query_stoppos);t.append("td").text(e.query_strand);t.append("td").text(e.query_alignlen);t.append("td").text(e.ref_chr);t.append("td").text(e.ref_startpos);t.append("td").text(e.ref_stoppos);t.append("td").text(e.ref_alignlen)}}function Q(t,e,a){R(t,e,a);if(t.partstack){if(e.variants){t.dom.diff_score_barplot_partstack.attr("xlink:href",t.data.diff_scores_img.src).attr("width",t.data.diff_scores_img.width).attr("height",t.data.diff_scores_img.height);t.ReadNameMaxwidth=0;if(e.show_readnames){t.dom.read_names_g.attr("transform","translate(0,0)");t.dom.read_names_g.selectAll("*").remove();if(t.data.templatebox&&t.data.stackheight>=x){let e=1;for(const a of t.data.templatebox){const i=t.dom.read_names_g.append("text").attr("x",0).attr("y",t.data.height*e/t.data.templatebox.length).attr("text-anchor","end").style("fill","black").attr("font-size",t.data.height/t.data.templatebox.length).text(a.qname);t.ReadNameMaxwidth=Math.max(t.ReadNameMaxwidth,i.node().getBBox().width);e+=1}}}else{t.dom.read_names_g.selectAll("*").remove();t.ReadNameMaxwidth=0}}t.dom.img_partstack.attr("xlink:href",t.data.src).attr("width",t.data.width).attr("height",t.data.height).attr("y",0);t.dom.img_fullstack.attr("width",0).attr("height",0);if(e.variants){t.dom.diff_score_barplot_fullstack.attr("width",0).attr("height",0)}const a=t.data.height;t.dom.rightg.vslider.bar.transition().attr("height",a);t.dom.rightg.vslider.boxy=a*t.partstack.start/t.data_fullstack.stackcount;t.dom.rightg.vslider.boxh=a*(t.partstack.stop-t.partstack.start)/t.data_fullstack.stackcount;t.dom.rightg.vslider.box.transition().attr("height",t.dom.rightg.vslider.boxh);t.dom.rightg.vslider.boxbotline.transition().attr("y1",t.dom.rightg.vslider.boxh).attr("y2",t.dom.rightg.vslider.boxh);t.dom.rightg.vslider.boxg.transition().attr("transform","translate(0,"+t.dom.rightg.vslider.boxy+")")}else{t.dom.img_fullstack.attr("xlink:href",t.data.src).attr("width",t.data.width).attr("height",t.data.height);t.dom.img_partstack.attr("width",0).attr("height",0);if(e.variants){if(t.dom.diff_score_barplot_partstack){t.dom.diff_score_barplot_partstack.attr("width",0).attr("height",0)}t.dom.diff_score_barplot_fullstack.attr("width",t.data.diff_scores_img.width).attr("height",t.data.diff_scores_img.height);if(e.show_readnames){t.dom.read_names_g.selectAll("*").remove()}}t.dom.rightg.vslider.g.transition().attr("transform","scale(0)")}t.dom.img_cover.attr("width",t.data.width).attr("height",t.data.height)}export{y as loadTk};
|
|
1
|
+
import{a as t}from"./axisstyle-fac7f76b.js";import{b as e,I as a,M as i,a9 as s,u as r,d as l,y as n}from"./app-488d9fd6.js";import{m as o}from"./radiobutton-09bff425.js";import{m as d}from"./checkbox-96437f4d.js";import{d as p}from"./axis-747c801e.js";import{p as c}from"./pointer-c7475677.js";const g=60;const h="#eee";const f="#c7edc5";const m="#9ed19b";const u="#36a32f";const _=15;const x=7;async function y(t,e){e.tkcloakon(t);e.block_setheight();if(t.uninitialized){B(t,e)}const a=[];let i=0;for(let t=e.startidx;t<=e.stopidx;t++){const s=e.rglst[t];a.push({chr:s.chr,start:s.start,stop:s.stop,width:s.width,x:i});i+=s.width+e.regionspace}for(const[t,s]of e.subpanels.entries()){i+=s.leftpad;a.push({chr:s.chr,start:s.start,stop:s.stop,width:s.width,exonsf:s.exonsf,subpanelidx:t,x:i});i+=s.width}t.regions=a;try{if(t.groups){for(const e of t.groups){delete e.partstack;delete e.dom.rightg.vslider.boxy}}const a=await v(t,e);if(a.error)throw a.error;if(a.colorscale){t.colorscale=a.colorscale}if(t.variants){for(let e=0;e<t.variants.length;e++){if(t.variants[e].pos!=a.allele_positions[e]){t.variants[e].pos=a.allele_positions[e];t.variants[e].ref=a.ref_alleles[e];t.variants[e].alt=a.alt_alleles[e]}}}b(a,t,e);e.tkcloakoff(t,{})}catch(a){if(a.stack)console.log(a.stack);if(t.pileup_shown){t.dom.pileup_axis.selectAll("*").remove();t.dom.pileup_img.attr("width",0)}if(t.groups){for(const e of t.groups){e.dom.img_fullstack.attr("width",0).attr("height",0);e.dom.img_partstack.attr("width",0).attr("height",0);e.dom.img_cover.attr("width",0).attr("height",0)}}t.height_main=t.height=100;if(typeof a=="string"&&a.startsWith("No reads in view range")){t.leftlabel_count.text("");t.leftlabel_skip.text("")}e.tkcloakoff(t,{error:a.message||a})}w(t,e);e.block_setheight()}async function v(t,a,i={}){const s={genome:a.genome.name,regions:t.regions,nucleotide_length:a.exonsf,pileupheight:t.pileupheight,...i};if(t.gdcFile){s.gdcFileUUID=t.gdcFile.uuid;s.gdcFilePosition=t.gdcFile.position}if(t.variants){s.variant=t.variants.map((t=>t.chr+"."+t.pos+"."+t.ref+"."+t.alt)).join(".");s.strictness=t.strictness;s.diff_score_plotwidth=t.dom.diff_score_plotwidth;if(Number.isFinite(t.max_diff_score)){s.max_diff_score=t.max_diff_score;s.min_diff_score=t.min_diff_score}}else if(t.sv){if(t.sv[0].strandA=="+"){t.sv[0].strandA="positive"}else if(t.sv[0].strandA=="-"){t.sv[0].strandA="negative"}if(t.sv[0].strandB=="+"){t.sv[0].strandB="positive"}else if(t.sv[0].strandB=="-"){t.sv[0].strandB="negative"}s.sv=t.sv.map((t=>t.chrA+"."+t.startA+"."+t.strandA+"."+t.chrB+"."+t.startB+"."+t.strandB)).join(".")}if(t.variants&&t.alleleAlreadyUpdated){s.alleleAlreadyUpdated=1;s.refseqs=t.variants.refseqs;s.altseqs=t.variants.altseqs;s.leftflankseqs=t.variants.leftflankseqs;s.rightflankseqs=t.variants.rightflankseqs;s.ref_positions=t.variants.ref_positions;s.refalleles=t.variants.refalleles;s.altalleles=t.variants.altalleles}if(t.uninitialized){s.getcolorscale=1;delete t.uninitialized}if(t.asPaired)s.asPaired=1;if("nochr"in t)s.nochr=t.nochr;if(t.file)s.file=t.file;if(t.url)s.url=t.url;if(t.indexURL)s.indexURL=t.indexURL;if(t.drop_pcrduplicates)s.drop_pcrduplicates=1;if(t.drop_supplementary_alignments)s.drop_supplementary_alignments=1;if(window.devicePixelRatio>1)s.devicePixelRatio=window.devicePixelRatio;const r=await e("tkbam",{headers:C(t),body:s});if(t.variants&&!t.alleleAlreadyUpdated){t.variants.refseqs=r.refseqs;t.variants.altseqs=r.altseqs;t.variants.refalleles=r.refalleles;t.variants.altalleles=r.altalleles;t.variants.leftflankseqs=r.leftflankseqs;t.variants.rightflankseqs=r.rightflankseqs;t.variants.ref_positions=r.ref_positions;t.alleleAlreadyUpdated=true}if(r.error)throw r.error;return r}function b(e,i,s){if("nochr"in e)i.nochr=e.nochr;if(e.pileup_data){i.pileup_shown=true;i.dom.pileup_img.attr("xlink:href",e.pileup_data.src).attr("width",e.pileup_data.width).attr("height",i.pileupheight);i.dom.pileup_axis.selectAll("*").remove();const s=a().domain([0,e.pileup_data.maxValue]).range([i.pileupheight,0]);t({axis:i.dom.pileup_axis.call(p().scale(s).ticks(5)),color:"black",showline:true})}else{i.pileup_shown=false;i.dom.pileup_axis.selectAll("*").remove();i.dom.pileup_img.attr("width",0)}if(e.count.read_limit_reached){i.toomanyreads=true;i.dom.read_limit_text.text(`Downsampled to ${e.groups.reduce(((t,e)=>t+e.count.r),0)} from ${e.count.read_limit_reached} reads. Try zooming into a smaller region.`).attr("x",e.pileup_data.width/2).attr("transform","scale(1)")}else{i.toomanyreads=false;i.dom.read_limit_text.attr("transform","scale(0)")}if(!i.groups){i.groups=[];for(const t of e.groups){const a=D(t,i,s,e);i.groups.push(a)}}else{q(e,i,s)}k(e,i,s);for(const t of i.groups){t.dom.message_rowg.selectAll("*").remove();let e=0;for(const a of t.data.messages){const r=t.dom.message_rowg.append("text").attr("x",s.width/2).attr("y",e+_-1).attr("font-size",_).attr("text-anchor","middle").text(a.t);if(a.isheader&&!i.gdcFile){r.attr("class","sja_clbtext2").on("click",(()=>{T(i,t,s)}))}e+=_}}A(i);let r=0,l=0;for(const t of i.groups){r+=t.data.count.r;if(i.asPaired){l+=t.data.count.t}}i.leftlabel_count.text((r?r+" read"+(r>1?"s":""):"")+(l?", "+l+" template"+(l>1?"s":""):""));if(e.count.skipped){i.leftlabel_skip.text(`${e.count.skipped} read${e.count.skipped>1?"s":""} skipped`)}else{i.leftlabel_skip.text("")}i.read_alignment_diff_scores_asc=e.read_alignment_diff_scores_asc}function w(t,e){const a=[t.tklabel.node().getBBox().width,t.leftlabel_count.node().getBBox().width,t.leftlabel_skip.node().getBBox().width,t.leftlabel_about?t.leftlabel_about.node().getBBox().width:0];if(t.show_readnames){for(const e of t.groups)a.push(e.ReadNameMaxwidth)}t.leftLabelMaxwidth=Math.max(...a);e.setllabel()}function k(t,e,a){if(!e.dom.variantg||e.sv)return;let i=0;for(const s of e.groups){if(s.data.type.includes("support_alt")){if(s.variantg){s.variantg.selectAll("*").remove()}else{s.variantg=e.glider.append("g")}let r,l;{const t=a.seekcoord(e.variants[0].chr,e.variants[i].pos);if(t[0]){r=t[0].x-a.exonsf/2}}{const t=a.seekcoord(e.variants[0].chr,e.variants[i].pos+e.variants[i].ref.length);if(t[0]){l=t[0].x-a.exonsf/2}}if(r===undefined||l===undefined||r>=a.width||l<=0)return;let n=l-r;if(l>t.pileup_data.width){n=t.pileup_data.width-r}else if(r<0){n=l}if(e.variants.length==1){s.variantg.append("rect").attr("x",Math.max(0,r)).attr("width",n).attr("height",e.dom.variantrowheight).attr("fill","grey")}else{s.variantg.append("rect").attr("x",Math.max(0,r)).attr("width",n).attr("height",e.dom.variantrowheight).attr("fill",s.data.group_color)}const o=e.variants[0].chr+"."+(t.allele_positions[i]+1).toString()+"."+t.ref_alleles[i]+"."+t.alt_alleles[i];let d=0;const p=10;const c=s.variantg.append("text").attr("y",e.dom.variantrowheight-2).attr("font-size",e.dom.variantrowheight).text(o);const g=c.node().getBBox();if(g.width+p<r){d=r-g.width-p}else if(g.width<n){d=Math.max(0,r)+(n-g.width)/2}else if(l+g.width<t.pileup_data.width){d=l+p}c.attr("x",d);if(t.refalleleerror==true){let a=0;const i=s.variantg.append("text").attr("x",a).attr("y",e.dom.variantrowheight).style("fill","red").attr("font-size",e.dom.variantrowheight).text("Incorrect reference allele");const o=i.node().getBBox();if(d==0&&o.width+p<r-g.width-p){a=g.width+p}else if(d==0&&o.width+p>r-g.width-p){a=l+p}else if(g.width+p<r&&l+o.width+p<t.pileup_data.width){a=l+p}else if(g.width+p<r&&l+o.width+p>=t.pileup_data.width&&o.width+p<n){a=Math.max(0,r)}else if(g.width+p<r&&l+o.width+p>=t.pileup_data.width){a=r-g.width-p*2-o.width}else if(g.width<n&&o.width+p<r){a=r-o.width-p}else if(g.width<n&&o.width+p>=r){a=l+p}else if(l+g.width<t.pileup_data.width&&o.width+p<r){a=r-o.width-p}else if(l+g.width<t.pileup_data.width&&o.width+p>=r){a=l+g.width+2*p}else if(l+g.width<t.pileup_data.width&&o.width<n){a=Math.max(0,r)}i.attr("x",a)}i+=1}}if(e.variants.length==1){e.fs_string.text("FS = "+t.strand_probability);if(t.strand_significance){e.fs_string.style("fill","red")}else{e.fs_string.style("fill","black")}e.fs_string.on("click",(a=>{e.tktip.clear().showunder(a.target);e.tktip.d.append("div").style("width","350px").html(`Fisher strand (FS) analysis score containing p-values in phred scale (-10*log(p-value)). If <a href='https://gatk.broadinstitute.org/hc/en-us/articles/360035890471' target='_blank'>FS>60</a>, the variant maybe a sequencing artifact and highlighted in red.\n\t\t\t\t\t</br></br>\n\t\t\t\t\tTo compute the p-value, Fisher's exact test is used for variants with a sequencing depth <= 300. If depth > 300 and each individual category > 150, chi-squared test is used. Following table displays read counts in each category.`);const i=e.tktip.d.append("table").style("margin-top","20px").style("border-spacing","5px");{const t=i.append("tr").style("font-weight","bold");t.append("td");t.append("td").text("Alternative");t.append("td").text("Reference")}{const e=i.append("tr");e.append("td").text("Forward").style("font-weight","bold");e.append("td").text(t.alternate_forward_count);e.append("td").text(t.reference_forward_count)}{const e=i.append("tr");e.append("td").text("Reverse").style("font-weight","bold");e.append("td").text(t.alternate_reverse_count);e.append("td").text(t.reference_reverse_count)}}))}if(Number.isFinite(t.max_diff_score)&&!e.dom.alleleSimilarityHeaderLabel){e.dom.alleleSimilarityHeaderLabel=e.dom.alleleSimilarityHeaderG.append("text").attr("y",2*e.dom.variantrowheight).attr("font-size",e.dom.variantrowheight).attr("class","sja_clbtext2").text("Allele similarity");const t=["Allele similarity: This chart shows the allele to which the read has maximum sequence similarity. In case of alternative and reference alleles, all reads in the same group have same color. In case of none category, color representing allele with maximum sequence color is displayed. In case of ambiguous category, for each read colors representing each alleles having equal similarity to each other are displayed."];let a=0;t.push("<br>Allele color codes:");let i=e.variants[0].pos;let s=e.variants[0].ref.length;e.is_same_ref=true;let r;for(const l of e.groups){if(l.data.type.includes("support_alt")){let r='<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+l.data.group_color+';" /> </svg> '+e.variants[a].alt;t.push(r);if(e.variants[a].pos!=i||e.variants[a].ref.length!=s){e.is_same_ref=false}a+=1}else if(l.data.type=="support_ref"){r=l.data.group_color}}if(!r){r="#47C8FF"}if(e.is_same_ref==true){t.push('<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+r+';" /> </svg> '+e.variants[0].ref)}else{t.push('<svg width="10" height="10" style = "display:inline-block;"><rect width="10" height="10" style="fill:'+r+';" /> </svg> Combined reference allele')}if(!e.gdcFile){t.push("<br><a href='https://proteinpaint.stjude.org/bam' target='_blank'>Click here to view details of this method</a>.")}e.dom.alleleSimilarityHeaderLabel.on("click",(a=>{const i=a.target.getBoundingClientRect();e.tktip.clear().show(i.x-250,i.y);e.tktip.d.append("div").style("width","300px").html(t.join("<br>"))}))}}function A(t){let e=0;if(t.pileup_shown)e+=t.pileupheight+t.pileupbottompad;if(t.toomanyreads){e+=t.dom.read_limit_height;t.dom.read_limit_text.attr("y",e);e+=t.dom.read_limit_bottompad}if(t.dom.variantg){t.dom.variantg.attr("transform","translate(0,"+e+")")}if(t.dom.alleleSimilarityHeaderG){t.dom.alleleSimilarityHeaderG.attr("transform","translate(0,"+(t.pileupheight-t.pileupbottompad*2)+")")}let a=0;for(const i of t.groups){if(i.data.type.includes("support_alt")){i.variantg.attr("transform","translate(0,"+e+")");e+=t.dom.variantrowheight+t.dom.variantrowbottompad;a+=1}i.dom.groupg.transition().attr("transform","translate(0,"+e+")");i.dom.rightg.transition().attr("transform","translate(0,"+e+")");i.msgheight=_*i.data.messages.length;i.dom.leftg.transition().attr("transform","translate(0,"+(e+i.msgheight)+")");i.dom.imgg.transition().attr("transform","translate(0,"+i.msgheight+")");if(t.variants){i.dom.diff_score_barplot_fullstack.transition().attr("transform","translate(0,"+i.msgheight+")")}if(i.partstack){if(t.variants){i.dom.diff_score_barplot_partstack.transition().attr("transform","translate(0,"+i.msgheight+")");i.dom.rightg.vslider.g.transition().attr("transform","translate("+t.dom.diff_score_plotwidth*1.1+","+i.msgheight+") scale(1)")}else{i.dom.rightg.vslider.g.transition().attr("transform","translate(0,0) scale(1)")}}e+=i.data.height+i.msgheight;if(i.data.type.includes("support_alt")&&a<t.variants.length){e+=t.dom.variantrowheight}}t.height_main=t.height=e;t.height_main+=t.toppad+t.bottompad}function q(t,e,a){for(let a=0;a<e.groups.length;a++){const i=t.groups.find((t=>t.type==e.groups[a].data.type));if(!i){S(e.groups[a]);e.groups.splice(a,1)}}for(const i of t.groups){const s=e.groups.find((t=>t.data.type==i.type));if(!s){const s=D(i,e,a,t);e.groups.push(s)}else{s.data=i;R(s,e,a);s.dom.img_fullstack.attr("xlink:href",s.data.src).attr("width",s.data.width).attr("height",s.data.height);if(e.variants){s.ReadNameMaxwidth=0;if(e.show_readnames){if(s.data.templatebox){s.dom.read_names_g.selectAll("*").remove();let t=1;for(const e of s.data.templatebox){const a=s.dom.read_names_g.append("text").attr("x",0).attr("y",s.data.height*t/s.data.templatebox.length).attr("text-anchor","end").style("fill","black").attr("font-size",s.data.height/s.data.templatebox.length).text(e.qname);s.ReadNameMaxwidth=Math.max(s.ReadNameMaxwidth,a.node().getBBox().width);t+=1}}}else{s.dom.read_names_g.selectAll("*").remove();s.ReadNameMaxwidth=0}if(s.my_partstack){if(s.data.allowpartstack){Y(s,e,a,s.my_partstack)}}else{s.dom.diff_score_barplot_fullstack.attr("xlink:href",i.diff_scores_img.src).attr("width",i.diff_scores_img.width).attr("height",i.diff_scores_img.height)}}s.dom.img_partstack.attr("width",0).attr("height",0);if(e.variants){s.dom.diff_score_barplot_partstack.attr("width",0).attr("height",0)}s.dom.rightg.vslider.g.transition().attr("transform","scale(0)");s.dom.img_cover.attr("width",s.data.width).attr("height",s.data.height)}}}function R(t,e,a){t.dom.box_move.attr("width",0);M(t,e,a)}function M(t,e,a){if(!t.data.templatebox){t.dom.box_stay.attr("width",0);return}if(!t.clickedtemplate){t.dom.box_stay.attr("width",0);return}for(const i of t.data.templatebox){if(i.qname==t.clickedtemplate.qname){if(e.asPaired||i.isfirst&&t.clickedtemplate.isfirst||i.islast&&t.clickedtemplate.islast){const e=Math.max(0,i.x1);const s=Math.min(a.width,i.x2);t.dom.box_stay.attr("width",s-e).attr("height",i.y2-i.y1).attr("transform","translate("+e+","+i.y1+")");return}}}t.dom.box_stay.attr("width",0)}function S(t){t.dom.message_rowg.remove();t.dom.img_fullstack.remove();t.dom.img_partstack.remove();t.dom.diff_score_barplot_fullstack?.remove();t.dom.diff_score_barplot_partstack?.remove();t.dom.read_names_g?.remove();t.dom.leftg.remove();t.dom.box_stay?.remove();t.dom.box_move?.remove();t.dom.rightg.remove()}function B(t,e){if(t.gdcFile){e.gdcBamSliceDownloadBtn.style("display","inline-block")}N(t);if(t.drop_pcrduplicates==undefined){t.drop_pcrduplicates=true}t.drop_supplementary_alignments=false;if(t.show_readnames==undefined){t.show_readnames=false}t.config_handle=e.maketkconfighandle(t).attr("y",10+e.labelfontsize).on("click",(()=>{F(t,e)}));t.readMenu=new i;t.readMenu.d.style("max-width","90vw").style("max-height","65vh").attr("class","sjpp_show_scrollbar");t.multiAlignMenu=new i;t.multiAlignMenu.d.style("max-width","90vw").style("max-height","65vh").attr("class","sjpp_show_scrollbar");t.pileupheight=100;t.pileupbottompad=6;t.dom={pileup_g:t.glider.append("g"),pileup_axis:t.glider.append("g"),read_limit_height:15,read_limit_bottompad:6,read_limit_g:t.glider.append("g")};t.dom.pileup_img=t.dom.pileup_g.append("image");t.dom.read_limit_text=t.dom.read_limit_g.append("text").style("fill","red").attr("text-anchor","middle").attr("font-size",t.dom.read_limit_height).attr("transform","scale(0)");if(t.variants){t.dom.variantg=t.glider.append("g");t.dom.alleleSimilarityHeaderG=t.gright.append("g");t.dom.variantrowheight=15;t.dom.variantrowbottompad=5;t.dom.diff_score_plotwidth=20;t.fs_string=e.maketklefthandle(t,t.pileupheight+t.dom.variantrowheight/2)}else if(t.sv){t.dom.variantg=t.glider.append("g");t.dom.variantrowheight=15;t.dom.variantrowbottompad=5}t.asPaired=false;let a=e.labelfontsize+5;t.leftlabel_count=e.maketklefthandle(t,a);a+=e.labelfontsize;t.leftlabel_skip=e.maketklefthandle(t,a).text("");if(t.aboutThisFile){a+=e.labelfontsize;t.leftlabel_about=e.maketklefthandle(t,a).text("About the BAM file").on("mouseover",(e=>{t.tktip.showunder(e.target).clear();s(t.tktip.d,t.aboutThisFile)})).on("mouseout",(()=>{t.tktip.hide()}))}delete t.alleleAlreadyUpdated;if(t.groups){for(const e of t.groups)S(e);delete t.groups}}function N(t,e){const a=r();if(a.has("variant")){t.variants=[];if(typeof a.get("variant")=="string"){const e=a.get("variant").split(".");if(e.length==4){const a=Number(e[1]);if(!Number.isInteger(a))throw"urlparam variant pos is not integer";if(!e[2])throw"ref allele missing";if(!e[3])throw"alt allele missing";t.variants.push({chr:e[0],pos:a-1,ref:e[2],alt:e[3],strictness:1})}}else{const e=a.get("variant");for(const a of e.variants){if(!Number.isInteger(a.pos))throw"urlparam variant pos is not integer";if(!a.ref)throw"ref allele missing";if(!a.alt)throw"alt allele missing";t.variants.push({chr:e.chr,pos:Number(a.pos)-1,ref:a.ref,alt:a.alt})}}if(a.has("strictness")){const e=a.get("strictness");if(!Number.isInteger(Number(e)))throw"strictness must be an integer";t.strictness=Number(e);if(t.strictness!=1&&t.strictness!=0){throw"strictness must be 0 or 1"}}else{t.strictness=1}}else if(a.has("sv")){const e=a.get("sv").split(".");t.sv=[];if(e.length==7){t.sv.push({chrA:e[0],startA:e[1],strandA:e[2],chrB:e[3],startB:e[4],strandB:e[5],contig:e[6]})}else if(e.length==6){t.sv.push({chrA:e[0],startA:e[1],strandA:e[2],chrB:e[3],startB:e[4],strandB:e[5]})}}}function D(t,e,a,i){const s={data:t,dom:{groupg:e.glider.append("g"),rightg:e.gright.append("g"),leftg:e.gleft.append("g")}};s.dom.message_rowg=s.dom.groupg.append("g");s.dom.imgg=s.dom.groupg.append("g");s.dom.rightg.vslider=s.dom.rightg.append("g");s.dom.rightg.vslider.g=s.dom.rightg.vslider.append("g").attr("transform","scale(0)");if(e.variants){s.dom.diff_score_g=s.dom.rightg.append("g");s.dom.read_names_g=s.dom.leftg.append("g");s.dom.diff_score_barplot_fullstack=s.dom.diff_score_g.append("image").attr("xlink:href",t.diff_scores_img.src).attr("width",t.diff_scores_img.width).attr("height",t.diff_scores_img.height);s.dom.diff_score_barplot_partstack=s.dom.diff_score_g.append("image").attr("xlink:href",t.diff_scores_img.src).attr("width",0).attr("height",0);if(!s.allowpartstack&&!Number.isFinite(e.max_diff_score)&&e.variants){e.max_diff_score=i.max_diff_score;e.min_diff_score=i.min_diff_score}e.pileupheight+e.dom.variantrowheight*2;if(e.toomanyreads){e.pileupheight+e.dom.variantrowheight*3}}s.dom.img_fullstack=s.dom.imgg.append("image").attr("xlink:href",s.data.src).attr("width",s.data.width).attr("height",s.data.height);s.dom.img_partstack=s.dom.imgg.append("image").attr("width",0).attr("height",0);s.dom.box_move=s.dom.imgg.append("rect").attr("stroke","black").attr("fill","none");s.dom.box_stay=s.dom.imgg.append("rect").attr("stroke","magenta").attr("fill","none");let r;const n=e.regions[0].x;const o=e.regions[e.regions.length-1].x+e.regions[e.regions.length-1].width;s.dom.img_cover=s.dom.imgg.append("rect").attr("fill","white").attr("fill-opacity",0).attr("width",s.data.width).attr("height",s.data.height).on("mousedown",(t=>{r=t.clientX})).on("mousemove",(t=>{if(s.data.allowpartstack){return}if(!s.data.templatebox)return;const[a,i]=c(t,s.dom.img_cover.node());let r=0;for(const t of s.data.templatebox){r+=1;const l=Math.max(t.x1,n);const d=Math.min(t.x2,o);if(a>l&&a<d&&i>t.y1&&i<t.y2){s.dom.box_move.attr("width",d-l).attr("height",t.y2-t.y1).attr("transform","translate("+l+","+t.y1+")");if(e.readAlignmentTable&&e.readAlignmentTableGroup==s.data.type){z(e,r)}else if(e.readAlignmentTable&&e.readAlignmentTableGroup!=s.data.type){z(e,s.data.templatebox.length+10)}return}}})).on("click",(t=>{if(r!=t.clientX)return;const[i,l]=c(t,s.dom.img_cover.node());s.my_partstack=l;if(s.data.allowpartstack){Y(s,e,a,l);return}if(!s.data.templatebox)return;e.readMenu.clear().show(50,t.clientY);let d=true;for(let t=0;t<e.regions.length;t+=1){for(const r of s.data.templatebox){const p=Math.max(r.x1,n);const c=Math.min(r.x2,o);const g=Math.max(e.regions[t].x,r.x1);const h=Math.min(e.regions[t].x+e.regions[t].width,r.x2);if(i>g&&i<h&&l>r.y1&&l<r.y2){if(s.clickedtemplate&&s.clickedtemplate.qname==r.qname){if(e.asPaired||r.isfirst&&s.clickedtemplate.isfirst||r.islast&&s.clickedtemplate.islast){delete s.clickedtemplate;s.dom.box_stay.attr("width",0);break}}s.clickedtemplate={qname:r.qname};if(e.asPaired){s.clickedtemplate.isfirst=true}else{if(r.isfirst)s.clickedtemplate.isfirst=true;if(r.islast)s.clickedtemplate.islast=true}s.dom.box_stay.attr("width",c-p).attr("height",r.y2-r.y1).attr("transform","translate("+p+","+r.y1+")");I(e,a,r,t);d=false}}}if(d)e.readMenu.hide()}));s.dom.rightg.vslider.bar=s.dom.rightg.vslider.g.append("rect").attr("fill",h).attr("x",10).attr("width",20).on("mouseover",(()=>s.dom.rightg.vslider.bar.attr("fill","#fae8e8"))).on("mouseout",(()=>s.dom.rightg.vslider.bar.attr("fill",h))).on("click",(()=>{delete s.dom.rightg.vslider.boxy;delete s.partstack;if(s.my_partstack){delete s.my_partstack}s.ReadNameMaxwidth=0;s.data=s.data_fullstack;Q(s,e,a);A(e);a.block_setheight()}));s.dom.rightg.vslider.boxg=s.dom.rightg.vslider.g.append("g");s.dom.rightg.vslider.box=s.dom.rightg.vslider.boxg.append("rect").attr("fill",f).attr("width",40).on("mousedown",(t=>{t.preventDefault();s.dom.rightg.vslider.box.attr("fill",m);const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const a=t.clientY;const l=a-r;if(l<0){if(s.dom.rightg.vslider.boxy+l<=0)return}else{if(s.dom.rightg.vslider.boxy+l>=i-s.dom.rightg.vslider.boxh)return}n=l;if(e.variants){s.dom.diff_score_barplot_partstack.attr("transform","translate(0,"+(-1*n*s.data_fullstack.stackcount*s.data.stackheight/i+s.msgheight)+")");s.dom.read_names_g.attr("transform","translate(0,"+-1*n*s.data_fullstack.stackcount*s.data.stackheight/i+")")}s.dom.rightg.vslider.boxg.attr("transform","translate(0,"+(s.dom.rightg.vslider.boxy+n)+")");s.dom.img_partstack.attr("y",-(n*s.data_fullstack.stackcount*s.data.stackheight/i));s.dom.box_move.attr("width",0);s.dom.box_stay.attr("width",0)}));o.on("mouseup",(async()=>{s.dom.rightg.vslider.box.attr("fill",f);o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxy+=n;const t=Math.ceil(s.data_fullstack.stackcount*n/i);s.partstack.start+=t;s.partstack.stop+=t;a.tkcloakon(e);const r=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=r.groups[0];Q(s,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}))}));s.dom.rightg.vslider.boxtopline=s.dom.rightg.vslider.boxg.append("line").attr("stroke",m).attr("stroke-width",3).attr("x2",40).on("mouseover",(()=>s.dom.rightg.vslider.boxtopline.attr("stroke",u))).on("mouseout",(()=>s.dom.rightg.vslider.boxtopline.attr("stroke",m))).on("mousedown",(t=>{t.preventDefault();const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const e=t.clientY;const a=e-r;if(a<0){if(s.dom.rightg.vslider.boxy+a<=0)return}else{if(s.dom.rightg.vslider.boxh-a<=g*i/s.data_fullstack.stackcount)return}n=a;s.dom.rightg.vslider.boxg.attr("transform","translate(0,"+(s.dom.rightg.vslider.boxy+n)+")");s.dom.rightg.vslider.box.attr("height",s.dom.rightg.vslider.boxh-n);s.dom.rightg.vslider.boxbotline.attr("y1",s.dom.rightg.vslider.boxh-n).attr("y2",s.dom.rightg.vslider.boxh-n)}));o.on("mouseup",(async()=>{o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxy+=n;s.partstack.start+=Math.ceil(s.data_fullstack.stackcount*n/i);a.tkcloakon(e);const t=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=t.groups[0];Q(s,e,a);a.tkcloakoff(e,{});A(e);a.block_setheight()}))}));s.dom.rightg.vslider.boxbotline=s.dom.rightg.vslider.boxg.append("line").attr("stroke",m).attr("stroke-width",3).attr("x2",40).on("mouseover",(()=>s.dom.rightg.vslider.boxbotline.attr("stroke",u))).on("mouseout",(()=>s.dom.rightg.vslider.boxbotline.attr("stroke",m))).on("mousedown",(t=>{t.preventDefault();const i=s.data.height;const r=t.clientY;let n=0;const o=l(document.body);o.on("mousemove",(t=>{const e=t.clientY;const a=e-r;if(a<0){if(s.dom.rightg.vslider.boxh+a<=g*i/s.data_fullstack.stackcount)return}else{if(s.dom.rightg.vslider.boxy+a>=i-s.dom.rightg.vslider.boxh)return}n=a;s.dom.rightg.vslider.box.attr("height",s.dom.rightg.vslider.boxh+n);s.dom.rightg.vslider.boxbotline.attr("y1",s.dom.rightg.vslider.boxh+n).attr("y2",s.dom.rightg.vslider.boxh+n)}));o.on("mouseup",(async()=>{o.on("mousemove",null).on("mouseup",null);if(n==0)return;s.dom.rightg.vslider.boxh+=n;s.partstack.stop+=Math.ceil(s.data_fullstack.stackcount*n/i);a.tkcloakon(e);const t=await v(e,a,{stackstart:s.partstack.start,stackstop:s.partstack.stop,grouptype:s.data.type});s.data=t.groups[0];Q(s,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}))}));return s}async function P(t,a,i){const s={alignOneGroup:a.data.type,genome:i.genome.name,regions:t.regions,variant:t.variants.map((t=>t.chr+"."+t.pos+"."+t.ref+"."+t.alt)).join(".")};if(t.file)s.file=t.file;if(t.url)s.url=t.url;if(t.indexURL)s.indexURL=t.indexURL;if(t.gdcFile){s.gdcFileUUID=t.gdcFile.uuid;s.gdcFilePosition=t.gdcFile.position}if(t.alleleAlreadyUpdated){s.alleleAlreadyUpdated=1;s.refseqs=t.variants.refseqs;s.altseqs=t.variants.altseqs;s.refalleles=t.variants.refalleles;s.altalleles=t.variants.altalleles;s.leftflankseqs=t.variants.leftflankseqs;s.rightflankseqs=t.variants.rightflankseqs;s.ref_positions=t.variants.ref_positions;s.strictness=t.strictness}if(t.asPaired)s.asPaired=1;if("nochr"in t)s.nochr=t.nochr;if(t.drop_pcrduplicates)s.drop_pcrduplicates=1;if(t.drop_supplementary_alignments)s.drop_supplementary_alignments=1;if(a.partstack){s.stackstart=a.partstack.start;s.stackstop=a.partstack.stop;s.grouptype=a.data.type}return await e("tkbam",{headers:C(t),body:s})}function C(t){const e={"Content-Type":"application/json",Accept:"application/json"};if(t.gdcToken)e["X-Auth-Token"]=t.gdcToken;return e}function F(t,e){{const e=t.config_handle.node().getBoundingClientRect();t.tkconfigtip.clear().show(e.x-300,e.y)}const a=t.tkconfigtip.d.append("div").style("max-width","50vw");{const i=a.append("div");i.append("span").html("Show reads as: ").style("opacity",.5).style("margin","10px 5px");o({holder:i,options:[{label:"Single",value:false,checked:!t.asPaired},{label:"Paired",value:true,checked:t.asPaired}],styles:{display:"inline-block",margin:"10px 5px"},callback:a=>{t.asPaired=a;y(t,e)}})}{d({holder:a.append("div"),labeltext:"Drop PCR or optical duplicates",checked:t.drop_pcrduplicates,divstyle:{display:"block",margin:"10px 5px",height:"10px","margin-left":"6.5px"},callback:()=>{t.drop_pcrduplicates=!t.drop_pcrduplicates;y(t,e)}})}if(t.variants){d({holder:a.append("div"),labeltext:"Show read names",checked:t.show_readnames,divstyle:{display:"block",margin:"10px 5px",height:"10px","margin-left":"6.5px"},callback:()=>{t.show_readnames=!t.show_readnames;y(t,e)}});if(t.variants[0].strictness==0);else if(!t.variants[0].strictness){t.variants[0].strictness=1}const i=a.append("div");i.append("span").html("Strictness: ").style("display","block").style("height","10px").style("opacity",.5).style("margin","10px 5px").style("margin-top","20px");o({holder:i,options:[{label:'Lenient: "None group" is not generated.',value:0,checked:t.strictness==0},{label:'Strict: "None group" is generated for reads with imperfect match to both reference and alternative alleles.',value:1,checked:t.strictness==1}],styles:{display:"block",margin:"10px 5px",height:"10px","margin-left":"30px"},callback:a=>{t.strictness=a;y(t,e)}})}a.append("div").style("display","inline-block").style("height","10px").style("margin-top","20px").style("font-size",".8em").html(`\n\t<ul style="padding-left:15px">\n\t <li><b>Matches</b> are rendered as gray boxes aligned to the reference.</li>\n\t <li><b>Mismatches</b> will be checked when 1 bp is wider than 1 pixel, and are rendered as red boxes aligned to the reference.</li>\n\t <li><b>Softclips</b> are rendered as blue boxes not aligned to the reference.</li>\n\t <li><b>Base qualities</b> are rendered when 1 bp is wider than 2 pixels. See color scale below. When base quality is not used or is unavailable, full colors are used.</li>\n\t <li><b>Sequences</b> from mismatch and softclip will be printed when 1 bp is wider than 7 pixels.</li>\n\t <li>An <b>insertion</b> with on-screen size wider than 1 pixel will be rendered as cyan text between aligned bases, in either a letter or the number of inserted bp. Text color scales by average base quality when that is in use.</li>\n\t <li><b>Deletions</b> are gaps joined by black horizontal lines.</li>\n\t <li><b>Split reads</b> and splice junctions are indicated by solid gray lines.</li>\n\t <li><b>Read pairs</b> are joined by dashed gray lines.</li>\n <li><b>Discordant reads</b> Discordant reads are colored based on their respective features as described below:<ul style="list-style-type:none;"> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#3B7A57;" /> </svg> Read pair has wrong insert size </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#6B4423;" /> </svg> Mate is unmapped </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#fc6df3;" /> </svg> Wrong orientation </li> <li> <svg width="10" height="10" style = "display:inline-block;"> <rect width="10" height="10" style="fill:#d48b37;" /> </svg> Mate mapped to different chromosome </li> </ul>\n </li> \n\t</ul>`);a.append("div").style("margin-top","10px").append("img").attr("width",t.colorscale.width).attr("height",t.colorscale.height).attr("src",t.colorscale.src);a.append("div").style("font-size",".8em").html(`\n`)}function T(t,e,a){if(t.variants){U(t,e,a)}}function z(t,e){const a=t.readAlignmentTable._groups[0][0].querySelectorAll("tr");a.forEach((a=>{if(a.rowIndex==e+1&&!t.is_align_gene){a.style.setProperty("font-weight","bold");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="rgb(255, 255, 255)"){t.style.setProperty("background-color","yellow")}}))}else if(a.rowIndex==e+2&&t.is_align_gene){a.style.setProperty("font-weight","bold");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="rgb(255, 255, 255)"){t.style.setProperty("background-color","yellow")}}))}else{a.style.setProperty("font-weight","normal");const t=a.querySelectorAll("td");t.forEach((t=>{if(t.style.backgroundColor.toString()=="yellow"){t.style.setProperty("background-color","rgb(255, 255, 255)")}}))}}))}async function j(t,e,a,i,s){const r=[];const l=[];const n=[];let o=a.alignmentData.final_read_align[0];let d=t.variants[0].pos-t.variants.leftflankseqs[0].length;t.variants[0].pos+t.variants.rightflankseqs[0].length;if(i.data.type=="support_alt"+s.toString()){d=t.variants[s].pos-t.variants.leftflankseqs[s].length;t.variants[s].pos+t.variants.rightflankseqs[s].length}let p=d;let c=d;let g=0;let h=t.readAlignmentTable.node().children[0];let f=0;let m=false;let u=0;for(const a of o){if(a=="-"){if(m==true){l.push(1);n.push("break");p+=1;c+=1}else{const a=await H(e,t,p,c-1,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model");f=0;p=d+u+1;c=d+u+1;g=0;m=true;l.push(1);n.push("break")}f+=1;g+=h.children[u].getBoundingClientRect().width}else if(i.data.type=="support_alt"+s.toString()&&t.variants[s].alt.length>t.variants[s].ref.length&&t.variants[s].pos<d+u&&t.variants[s].pos+t.variants[s].alt.length-1>=d+u);else if(t.variants[0].pos==d+u&&i.data.type=="support_alt"+s.toString()){if(t.variants[s].ref.length==1&&t.variants[s].alt.length==1){continue}if(t.variants[s].ref.length>=t.variants[s].alt.length){c+=1;f+=1;g+=h.children[u+1].getBoundingClientRect().width}const a=await H(e,t,p,c,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model");f=0;p=d+u+t.variants[s].ref.length;c=d+u+t.variants[s].ref.length;if(t.variants[s].ref.length<t.variants[s].alt.length){l.push(t.variants[0].alt.length);n.push("break")}g=0;m=false}else if(u==o.length-1){c+=1;f+=1;g+=h.children[u].getBoundingClientRect().width;const a=await H(e,t,p,c,g);const i={src:a.src,width:g,height:a.height,colspan:f};r.push(i);n.push("gene_model")}else{c+=1;f+=1;g+=h.children[u].getBoundingClientRect().width;m=false}u+=1}let _=0;let x=0;const y=t.readAlignmentTable.node().insertRow();if(t.readAlignmentTable.node().children.length>=3){const e=t.readAlignmentTable.node().children[2];t.readAlignmentTable.node().insertBefore(y,e)}else{console.log("Possible problem in placing gene model in table. Please check")}for(let t=0;t<n.length;t++){const e=y.insertCell();if(n[t]=="gene_model"){const t=document.createElement("img");t.src=r[x].src;t.width=r[x].width;t.height=r[x].height;e.appendChild(t);e.colSpan=r[x].colspan;x+=1}else if(n[t]=="break"){e.colSpan=l[_];_+=1}}}async function U(t,e,a){t.multiAlignMenu.clear().show(50,100);const i=t.multiAlignMenu.d.append("div").text("Loading...");try{const s=await P(t,e,a);if(s.error){i.remove();n(t.multiAlignMenu.d,"Realignment of reads in ambiguous group is not currently implemented.");setTimeout((()=>t.multiAlignMenu.d.remove()),3e3);return}i.remove();let r=0;let l=[];let o=[];if(e.data.type.includes("support_alt")){for(let a=0;a<t.variants.length;a++){if(e.data.type=="support_alt"+a.toString()){r=a}}}else if(e.data.type=="support_ref"){for(let e=0;e<t.variants.length;e++){l.push({start:t.variants[e].pos,stop:t.variants[e].pos+t.variants[e].ref.length})}l.sort(((t,e)=>t.start-e.start));let e={start:l[0].start,stop:l[0].stop};o.push(l[0].start);let a=false;for(let t=1;t<l.length;t++){if(l[t].start<=e.stop&&e.stop<=l[t].stop){e=l[t]}else if(e.stop>l[t].stop){continue}else{o.push(e.stop);o.push(l[t].start)}}o.push(Math.max(e.stop,l[l.length-1].stop))}if(s.alignmentData.final_read_align.length>0&&(e.data.type.includes("support_alt")||e.data.type=="support_ref")){const i=t.multiAlignMenu.d.append("button").style("margin-left","10px").text("Show gene model").on("click",(async()=>{t.is_align_gene=true;i.property("disabled",true);await j(t,a,s,e,r)}))}L(t,s,e,r,o)}catch(e){i.remove();n(t.multiAlignMenu.d,e)}}function L(t,e,a,i,s){if(!e.alignmentData.read_count){e.alignmentData.read_count=0}if(a.data.type=="support_ref"){t.multiAlignMenu.d.append("div").text("Number of reads aligned to reference allele = "+e.alignmentData.read_count).style("text-align","center")}else if(a.data.type=="support_no"||a.data.type=="support_amb"){t.multiAlignMenu.d.append("div").text("Number of reads aligned = "+e.alignmentData.read_count).style("text-align","center")}else if(a.data.type.includes("support_alt")){let s=0;for(let r=0;r<t.variants.length;r++){if(a.data.type=="support_alt"+r.toString()){s=1;i=r;t.multiAlignMenu.d.append("div").text("Number of reads aligned to alternative allele "+t.variants[r].alt+" = "+e.alignmentData.read_count).style("text-align","center")}}if(s==0){console.log("group.data.type:",a.data.type);console.log("Alternate allele not found")}}if(e.alignmentData.partstack_start){t.multiAlignMenu.d.append("div").text("Reads aligned from "+e.alignmentData.partstack_start+" to "+e.alignmentData.partstack_stop).style("text-align","center")}const r=t.multiAlignMenu.d.append("div").style("margin","20px");t.readAlignmentTable=r.append("table").style("font-family","Courier").style("font-size","0.8em").style("color","#303030").style("margin","5px 5px 20px 5px").style("border-spacing",0).style("border-collapse","separate").style("text-align","center").style("empty-cells","show");let l=t.readAlignmentTable.append("tr").style("color","white").style("background-color","white");l.attr("id","RefAltBar");let n;let o=0;let d=0;let p=0;let c=1;if(a.data.type=="support_alt"+i.toString()){if(t.variants.length==1){n="Alternative allele";if(n.length<t.variants[i].alt.length){c=0}else{n=" Alternative allele"}}else{if(a.data.type=="support_alt"+i.toString()){n="Alternative allele = "+t.variants[i].alt;if(n.length<t.variants[i].alt.length){c=0}else{n=" Alternative allele = "+t.variants[i].alt}}}}else if(a.data.type=="support_ref"){if(t.is_same_ref==false){n="Combined reference allele"}else{n="Reference allele"}if(n.length<s[1]-s[0]){c=0}else{if(t.is_same_ref==false){n=" Combined reference allele"}else{n=" Reference allele"}}}t.readAlignmentTableGroup=a.data.type;if(e.alignmentData.final_read_align.length>0){for(const r of e.alignmentData.final_read_align[0]){o+=1;const r=l.append("td");if(a.data.type=="support_alt"+i.toString()&&o>t.variants.leftflankseqs[i].length+e.alignmentData.gaps_before_variant&&o<=t.variants.leftflankseqs[i].length+t.variants[i].alt.length+e.alignmentData.gaps_before_variant){if(c==1){d=1;r.text(" ").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}else{if(p<n.length){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","black");p+=1}else{r.text(" ").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}}}else if(a.data.type=="support_ref"&&o>t.variants.leftflankseqs[0].length+e.alignmentData.gaps_before_variant&&o<=t.variants.leftflankseqs[0].length+s[1]-s[0]+e.alignmentData.gaps_before_variant){if(c==1){d=1;r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}else{if(p<n.length){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","black");p+=1}else{r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","black")}}}else if(d==1&&c==1){r.text(n[p]).style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","black").style("background-color","white");p+=1;if(p==n.length){d=0}}else{r.text("").style("text-align","right").style("font-weight","550").style("margin","5px 5px 10px 5px").style("color","white").style("background-color","white")}}let r=0;for(const l of e.alignmentData.final_read_align){let n=0;const o=t.readAlignmentTable.append("tr").style("color","white").style("background-color","white");if(r==0&&(a.data.type=="support_ref"||a.data.type=="support_alt")){o.attr("id","RefAltSeq")}else{o.attr("id",r.toString())}const d=e.alignmentData.qual_r[r].split(",");const p=e.alignmentData.qual_g[r].split(",");const c=e.alignmentData.qual_b[r].split(",");for(const g of l){n+=1;let l;if(r==0&&(a.data.type=="support_ref"||a.data.type.includes("support_alt"))){l=o.append("td").text(g).style("background-color","white").style("color","black").style("font-weight","550")}else{l=o.append("td").text(g).style("background-color","rgb("+d[n-1]+","+p[n-1]+","+c[n-1]+")");if(g!="-"){l.style("color","white")}else{l.style("color","black")}}if(a.data.type=="support_alt"+i.toString()&&n>t.variants.leftflankseqs[i].length+e.alignmentData.gaps_before_variant&&n<=t.variants.leftflankseqs[i].length+t.variants[i].alt.length+e.alignmentData.gaps_before_variant){l.style("color","black")}else if(a.data.type=="support_ref"&&n>t.variants.leftflankseqs[0].length+e.alignmentData.gaps_before_variant&&n<=t.variants.leftflankseqs[0].length+s[1]-s[0]+e.alignmentData.gaps_before_variant){l.style("color","black")}}r+=1}}}async function I(t,a,i,s){const r=t.readMenu.d.append("div").text("Loading...");const o=p(t.variants?{refseqs:t.variants.refseqs,altseqs:t.variants.altseqs,chrom:t.variants[0].chr,ref_positions:t.variants.ref_positions,refalleles:t.variants.refalleles,altalleles:t.variants.altalleles,start:i.start,stop:i.stop,paired:t.asPaired}:{start:i.start,stop:i.stop,paired:t.asPaired});const d=await e("tkbam",o);if(d.error){n(r,d.error);return}r.remove();for(const i of d.lst){const r=t.readMenu.d.append("div").style("margin","10px");const o=r.append("div").html(i.alignment);const g=r.append("div").style("margin-top","10px");g.append("button").text("Copy read sequence").on("click",(function(){navigator.clipboard.writeText(i.seq).then((()=>{}),console.warn);l(this).html("Copy read sequence ✓")}));if(d.lst[0].alignments){l(this).append("span").html(" ");const e=g.append("button").style("margin-left","10px").text("Align read to variant alleles");let a=true;e.on("click",(()=>{if(a){a=false;for(let e=0;e<t.variants.length;e++){c(f,"Ref",t,d.lst[0].start_readpos-1,e);c(f,"Alt",t,d.lst[0].start_readpos-1,e)}}if(f.style("display")=="none"){f.style("display","block")}else{f.style("display","none")}}))}if(i.unmapped_mate&&!t.asPaired){const i=g.append("button").style("margin-left","10px").text("Show unmapped mate").on("click",(async()=>{i.property("disabled",true);const s=t.readMenu.d.append("div").text("Loading...");const o=await e("tkbam",p({show_unmapped:1}));if(o.error){s.text("");n(s,o.error);i.property("disabled",false);return}s.remove();i.remove();const d=o.lst[0];r.append("div").html(d.alignment);const c=r.append("div").style("margin-top","10px");c.append("button").text("Copy read sequence").on("click",(function(){navigator.clipboard.writeText(d.seq).then((()=>{}),console.warn);l(this).html("Copy read sequence ✓")}));E(d,c,t,a);r.append("div").html(d.info)}))}const h=g.append("button").style("margin-left","10px").text("Show gene model").property("disabled",!i.seq||i.seq=="*").on("click",(async()=>{h.property("disabled",true);let t=0;let e=0;let i=0;let r=d.lst[0].boxes[0].start;let l;let n=0;const p=o.node().children[0].getElementsByTagName("tbody")[0];const c=p.insertRow();const g=c.insertCell();const f=document.createTextNode("");g.appendChild(f);const m=[];const u=[];let _=0;const x=o.node().children[0].children[0].children[0];for(const o of d.lst[0].boxes){if(o.opr=="H"){continue}else if(o.opr=="M"||o.opr=="S"||o.opr=="N"&&o.len<d.lst[0].readpanel_DN_maxlength||o.opr=="D"&&o.len<d.lst[0].readpanel_DN_maxlength){for(let t=0;t<o.len;t++){n+=x.children[e+1].getBoundingClientRect().width;e+=1}i+=o.len}else if(o.opr=="I"||o.opr=="N"&&o.len>=d.lst[0].readpanel_DN_maxlength||o.opr=="D"&&o.len>=d.lst[0].readpanel_DN_maxlength){l=o.start;const t=await G(a,s,r,l,n);const e={src:t.src,width:n,height:t.height,colspan:i};m.push(e);if(o.opr=="I"){u.push(o.len)}else if(o.opr=="N"||o.opr=="D"){u.push(1)}if(o.opr=="D"||o.opr=="N"){r=o.start+o.len}else if(o.opr=="I"){r=o.start}n=0;i=0;_+=1}if(t==d.lst[0].boxes.length-1){l=o.start+o.len;const t=await G(a,s,r,l,n);const e={src:t.src,width:n,height:t.height,colspan:i};m.push(e)}t+=1}const y=_+m.length;let v=0;let b=0;for(let t=0;t<y;t++){const e=c.insertCell();if(t%2==0){const t=document.createElement("img");t.src=m[b].src;t.width=m[b].width;t.height=m[b].height;e.appendChild(t);e.colSpan=m[b].colspan;b+=1}else{e.colSpan=u[v];v+=1}}}));E(i,g,t,a);r.append("div").html(i.info);const f=r.append("div").style("display","none")}function p(e={}){const r=t.regions[s];const l={getread:1,qname:encodeURIComponent(i.qname),genome:a.genome.name,chr:r.chr,start:r.start,stop:r.stop,...e};if(t.gdcFile){l.gdcFileUUID=t.gdcFile.uuid;l.gdcFilePosition=t.gdcFile.position}if(t.nochr)l.nochr=1;if(t.file)l.file=t.file;if(t.url)l.url=t.url;if(t.indexURL)l.indexURL=t.indexURL;if(t.asPaired){l.getpair=1}else{if(i.isfirst){l.getfirst=1}else if(i.islast){l.getlast=1}else{l.unknownorder=1;l.readstart=i.start;l.readstop=i.stop}}return{headers:C(t),body:l}}function c(t,e,a,i,s){let r,l,n;if(e=="Ref"){r=d.lst[0].alignments[s].q_seq_ref;l=d.lst[0].alignments[s].align_ref;n=d.lst[0].alignments[s].r_seq_ref}if(e=="Alt"){r=d.lst[0].alignments[s].q_seq_alt;l=d.lst[0].alignments[s].align_alt;n=d.lst[0].alignments[s].r_seq_alt}if(d.lst[0].alignments.length==1){t.append("span").text(e+" alignment").style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else{if(e=="Alt"){t.append("span").text("Alignment with Alt allele: "+a.variants[s].alt).style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else if(e=="Ref"){t.append("span").text("Alignment with Ref allele: "+a.variants[s].ref).style("font-family","Courier").style("font-size","15px").style("color","#303030").style("margin","5px 5px 10px 5px")}else{console.log("Unknown allele, please check")}}const o=t.append("table").style("font-family","Courier").style("font-size","0.8em").style("color","#303030").style("margin","5px 5px 20px 5px");let p=0;const c=o.append("tr");c.append("td").text(e+" allele").style("text-align","right").style("font-weight","550").style("white-space","nowrap");for(const t of n){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){c.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){c.append("td").text(t).style("color","red")}else{c.append("td").text(t)}}const g=o.append("tr");g.append("td");p=0;for(const t of l){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){g.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){g.append("td").text(t).style("color","red")}else{g.append("td").text(t)}}const h=o.append("tr");h.append("td").text("Read").style("text-align","right").style("font-weight","550");p=0;for(const t of r){p+=1;if(e=="Ref"&&p>d.lst[0].alignments[s].red_region_start_ref&&p<=d.lst[0].alignments[s].red_region_stop_ref){h.append("td").text(t).style("color","red")}else if(e=="Alt"&&p>d.lst[0].alignments[s].red_region_start_alt&&p<=d.lst[0].alignments[s].red_region_stop_alt){h.append("td").text(t).style("color","red")}else{h.append("td").text(t)}}}}async function H(t,a,i,s,r){const l=t.genome.tracks.find((t=>t.__isgene));const n={name:l.name,genome:t.genome.name,rglst:[{chr:a.variants[0].chr,start:i,stop:s,width:r}],width:r,stackheight:16,stackspace:1,regionspace:0,file:l.file,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1,color:l.color,translatecoding:1,__isgene:true,noNameHover:true};{const e=t.tklst.find((t=>t.name==n.name&&t.type=="bedj"));if(e&&e.filterByName){n.filterByName=e.filterByName}}return await e("tkbedj",{method:"POST",body:JSON.stringify(n)})}async function G(t,a,i,s,r){const l=t.genome.tracks.find((t=>t.__isgene));const n={name:l.name,genome:t.genome.name,rglst:[{chr:t.rglst[a].chr,start:i,stop:s,width:r}],width:r,stackheight:16,stackspace:1,regionspace:0,file:l.file,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1,color:l.color,translatecoding:1,__isgene:true,noNameHover:true};{const e=t.tklst.find((t=>t.name==n.name&&t.type=="bedj"));if(e&&e.filterByName){n.filterByName=e.filterByName}}return await e("tkbedj",{method:"POST",body:JSON.stringify(n)})}function E(t,a,i,s){if(!s.genome.blat){return}const r=a.append("button").style("margin-left","10px").text("BLAT").on("click",(async()=>{r.property("disabled",true);l.selectAll("*").remove();const a=l.append("div").text("Loading...");try{const r=await e("blat",{body:{genome:s.genome.name,seq:t.seq,soft_starts:t.soft_starts,soft_stops:t.soft_stops}});if(r.error)throw r.error;if(r.nohit)throw"No hit";if(!r.hits)throw".hits[] missing";a.remove();O(r.hits,l,i,s)}catch(t){a.text(t.message||t);if(t.stack)console.log(t.stack)}r.property("disabled",false)}));const l=a.append("div")}async function Y(t,e,a,i,s){t.data_fullstack=t.data;const r=(t.partstack?t.partstack.start:0)+Math.floor(i/t.data.stackheight);if(r<g/2){t.partstack={start:0,stop:g}}else if(r>t.data_fullstack.stackcount-g/2){t.partstack={start:t.data_fullstack.stackcount-g,stop:t.data_fullstack.stackcount}}else{t.partstack={start:r-g/2,stop:r+g/2}}a.tkcloakon(e);const l=await v(e,a,{stackstart:t.partstack.start,stackstop:t.partstack.stop,grouptype:t.data.type});t.data=l.groups[0];Q(t,e,a);A(e);a.tkcloakoff(e,{});a.block_setheight()}function O(t,e,a,i){const s=e.append("table");const r=s.append("tr").style("opacity",.5).style("font-size",".8em");r.append("td").text("QScore");r.append("td").text("QStart");r.append("td").text("QStop");r.append("td").text("QStrand");r.append("td").text("QAlignLen");r.append("td").text("RChr");r.append("td").text("RStart");r.append("td").text("RStop");r.append("td").text("RAlignLen");for(const e of t){let t=s.append("tr").style("font-size",".8em");t.append("td").text(e.query_match);t.append("td").text(e.query_startpos);t.append("td").text(e.query_stoppos);t.append("td").text(e.query_strand);t.append("td").text(e.query_alignlen);t.append("td").text(e.ref_chr);t.append("td").text(e.ref_startpos);t.append("td").text(e.ref_stoppos);t.append("td").text(e.ref_alignlen)}}function Q(t,e,a){R(t,e,a);if(t.partstack){if(e.variants){t.dom.diff_score_barplot_partstack.attr("xlink:href",t.data.diff_scores_img.src).attr("width",t.data.diff_scores_img.width).attr("height",t.data.diff_scores_img.height);t.ReadNameMaxwidth=0;if(e.show_readnames){t.dom.read_names_g.attr("transform","translate(0,0)");t.dom.read_names_g.selectAll("*").remove();if(t.data.templatebox&&t.data.stackheight>=x){let e=1;for(const a of t.data.templatebox){const i=t.dom.read_names_g.append("text").attr("x",0).attr("y",t.data.height*e/t.data.templatebox.length).attr("text-anchor","end").style("fill","black").attr("font-size",t.data.height/t.data.templatebox.length).text(a.qname);t.ReadNameMaxwidth=Math.max(t.ReadNameMaxwidth,i.node().getBBox().width);e+=1}}}else{t.dom.read_names_g.selectAll("*").remove();t.ReadNameMaxwidth=0}}t.dom.img_partstack.attr("xlink:href",t.data.src).attr("width",t.data.width).attr("height",t.data.height).attr("y",0);t.dom.img_fullstack.attr("width",0).attr("height",0);if(e.variants){t.dom.diff_score_barplot_fullstack.attr("width",0).attr("height",0)}const a=t.data.height;t.dom.rightg.vslider.bar.transition().attr("height",a);t.dom.rightg.vslider.boxy=a*t.partstack.start/t.data_fullstack.stackcount;t.dom.rightg.vslider.boxh=a*(t.partstack.stop-t.partstack.start)/t.data_fullstack.stackcount;t.dom.rightg.vslider.box.transition().attr("height",t.dom.rightg.vslider.boxh);t.dom.rightg.vslider.boxbotline.transition().attr("y1",t.dom.rightg.vslider.boxh).attr("y2",t.dom.rightg.vslider.boxh);t.dom.rightg.vslider.boxg.transition().attr("transform","translate(0,"+t.dom.rightg.vslider.boxy+")")}else{t.dom.img_fullstack.attr("xlink:href",t.data.src).attr("width",t.data.width).attr("height",t.data.height);t.dom.img_partstack.attr("width",0).attr("height",0);if(e.variants){if(t.dom.diff_score_barplot_partstack){t.dom.diff_score_barplot_partstack.attr("width",0).attr("height",0)}t.dom.diff_score_barplot_fullstack.attr("width",t.data.diff_scores_img.width).attr("height",t.data.diff_scores_img.height);if(e.show_readnames){t.dom.read_names_g.selectAll("*").remove()}}t.dom.rightg.vslider.g.transition().attr("transform","scale(0)")}t.dom.img_cover.attr("width",t.data.width).attr("height",t.data.height)}export{y as loadTk};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as e,I as t,W as o,ag as a,aB as n,aC as r,p,ac as l}from"./app-
|
|
1
|
+
import{q as e,I as t,W as o,ag as a,aB as n,aC as r,p,ac as l}from"./app-488d9fd6.js";import{b as i}from"./axis-747c801e.js";async function s(e,t){t.tkcloakon(e);t.block_setheight();const o=c(e,t);try{if(e.uninitialized){d(e,t);delete e.uninitialized}await f(e,t);o({})}catch(t){e.height_main=50;o({error:t.message||t});if(t.stack)console.log(t.stack);return}}function c(e,t){return o=>{t.tkcloakoff(e,{error:o.error});t.block_setheight();t.setllabel()}}function d(e,t){if(!e.scale)e.scale={};if(Number.isFinite(e.scale.min)&&Number.isFinite(e.scale.max));else{e.scale.auto=true}if(!Number.isFinite(e.barheight))e.barheight=100;e.height_main=e.toppad+e.barheight+e.bottompad;if(!e.ncolor)e.ncolor="#BD005E";if(!e.ncolor2)e.ncolor2="#5E00BD";if(!e.pcolor)e.pcolor="#005EBD";if(!e.pcolor2)e.pcolor2="#FA7D00";e.leftaxis=e.gleft.append("g");e.config_handle=t.maketkconfighandle(e).on("click",(()=>{e.tkconfigtip.clear().showunder(e.config_handle.node())}))}async function f(n,r){r.tkcloakon(n);const p=r.tkarg_q(n);p.rglst=m(n,r);p.genome=r.genome.name;n.height_main=n.toppad+n.barheight+n.bottompad;n.glider.selectAll("*").remove();const l=await e("tkbedgraphdot",p);if(l.error)throw l.error;n.tklabel.transition().attr("y",n.barheight/2);for(const e of l.rglst){n.glider.append("g").attr("transform","translate("+e.xoff+","+n.toppad+")").append("image").attr("width",e.width).attr("height",n.barheight).attr("xlink:href",e.img)}n.leftaxis.selectAll("*").remove();if(l.nodata){throw"no data in view range"}if(l.minv!=undefined){n.scale.min=l.minv;n.scale.max=l.maxv}const s=t().domain([n.scale.min,n.scale.max]).range([n.barheight,0]);const c=i().scale(s).tickValues([n.scale.min,n.scale.max]);if(n.integer4axis){c.tickFormat(o("d"))}a({axis:n.leftaxis.call(c),color:"black",showline:true})}function u(e,t,o,a){const i={pcolor:{},ncolor:{},pcolor2:{},ncolor2:{},dotplot:{},dividefactor:{}};{const t=o.append("div").style("margin-bottom","15px");t.append("span").html("Height ");t.append("input").attr("size",5).property("value",e.barheight).on("keyup",(t=>{if(t.code!="Enter")return;const o=t.target.value;if(o=="")return;const r=Number.parseInt(o);if(Number.isNaN(r)||r<=1){alert("track height must be positive integer");return}e.barheight=r;a(n.height)}))}i.pcolor.row=o.append("div").style("margin-bottom","15px");i.pcolor.lab=i.pcolor.row.append("span").text("Positive value color").style("padding-right","10px");i.pcolor.row.append("input").attr("type","color").property("value",r(e.pcolor)).on("change",(t=>{e.pcolor=t.target.value;a(n.pcolor)}));i.ncolor.row=o.append("div").style("margin-bottom","15px");i.ncolor.lab=i.ncolor.row.append("span").text("Negative value color").style("padding-right","10px");i.ncolor.row.append("input").attr("type","color").property("value",r(e.ncolor)).on("change",(t=>{e.ncolor=t.target.value;a(n.ncolor)}));if(!e.scale.auto){i.pcolor2.row=o.append("div").style("margin-bottom","15px");i.pcolor2.lab=i.pcolor2.row.append("span").html("≥Max color").style("padding-right","10px");i.pcolor2.row.append("input").attr("type","color").property("value",r(e.pcolor2)).on("change",(t=>{e.pcolor2=t.target.value;a(n.pcolor2)}));i.ncolor2.row=o.append("div").style("margin-bottom","15px");i.ncolor2.lab=i.ncolor2.row.append("span").html("≤Min color").style("padding-right","10px");i.ncolor2.row.append("input").attr("type","color").property("value",r(e.ncolor2)).on("change",(t=>{e.ncolor2=t.target.value;a(n.ncolor2)}))}{const t=o.append("div").style("margin-bottom","15px");t.append("span").html("Y scale ");const r=t.append("select");const p=r.append("option").text("automatic");const l=r.append("option").text("fixed");const i=r.append("option").text("percentile");r.on("change",(t=>{const o=t.target.selectedIndex;if(o==0){d.style("display","none");f.style("display","none");e.scale.auto=1;a(n.autoscale);return}if(o==1){d.style("display","block");f.style("display","none");return}d.style("display","none");f.style("display","block")}));let s=false,c=false;if(e.scale.auto){p.property("selected",1)}else{if(e.scale.percentile){c=true;i.property("selected",1)}else{s=true;l.property("selected",1)}}const d=t.append("div").style("margin","10px").style("display",s?"block":"none");{const t=d.append("div");t.append("span").html("Max ").style("font-family","Courier").style("font-size",".9em");const o=t.append("input").attr("size",5);if(s){o.property("value",e.scale.max)}const r=d.append("div");r.append("span").html("Min ").style("font-family","Courier").style("font-size",".9em");const p=r.append("input").attr("size",5);if(s){p.property("value",e.scale.min)}r.append("button").text("Set").style("margin-left","5px").on("click",(()=>{const t=o.property("value");if(t==""){return}const r=Number.parseFloat(t);if(Number.isNaN(r)){alert("invalid max value");return}const l=p.property("value");if(l==""){return}const i=Number.parseFloat(l);if(Number.isNaN(i)){alert("invalid min value");return}delete e.scale.auto;delete e.scale.percentile;e.scale.max=r;e.scale.min=i;a(n.fixedscale)}))}const f=t.append("div").style("margin-top","6px").style("display",c?"block":"none");{f.append("span").html("Percentile ").style("font-family","Courier").style("font-size",".9em");const t=f.append("input").attr("size",5);if(c){t.property("value",e.scale.percentile)}const o=t=>{if(t=="")return;const o=Number.parseInt(t);if(Number.isNaN(o)||o<=0||o>100){alert("percentile should be integer within range 0-100");return}delete e.scale.auto;e.scale.percentile=o;a(n.percentilescale)};t.on("keyup",(e=>{if(e.code!="Enter")return;o(t.property("value"))}));f.append("button").text("Set").style("margin-left","5px").on("click",(()=>{o(t.property("value"))}))}}{i.dotplot.row=o.append("div").style("margin-bottom","15px");i.dotplot.row.append("span").html("Dot plot ");const t=i.dotplot.row.append("select").on("change",(t=>{const o=t.target.selectedIndex;if(o==0){delete e.dotplotfactor}else{e.dotplotfactor=Number.parseInt(t.target.options[o].innerHTML)}a(o==0?n.nodotplot:n.usedotplot)}));let r=t.append("option").text("no");if(!e.dotplotfactor){r.property("selected",1)}r=t.append("option").text("5");if(e.dotplotfactor==5){r.property("selected",1)}r=t.append("option").text("10");if(e.dotplotfactor==10){r.property("selected",1)}r=t.append("option").text("15");if(e.dotplotfactor==15){r.property("selected",1)}r=t.append("option").text("20");if(e.dotplotfactor==20){r.property("selected",1)}}i.dividefactor.row=o.append("div");{const t=Math.random().toString();const o=i.dividefactor.row.append("input").attr("type","checkbox").attr("id",t);if(!e.normalize.disable){o.property("checked",1)}i.dividefactor.row.append("label").html(" Apply normalization").attr("for",t);const r=i.dividefactor.row.append("div").style("margin","5px 10px 0px 20px").style("display",e.normalize.disable?"none":"block");r.append("span").html("Divide raw value by ");const s=r.append("input").attr("type","number").style("width","60px").property("value",e.normalize.dividefactor).on("keyup",(t=>{if(t.code!="Enter"&&t.code!="NumpadEnter")return;const o=t.target.value;if(o<=0){return}e.normalize.dividefactor=o;a(n.usedividefactor)}));r.append("div").text("Enter a value above zero").style("font-size",".7em").style("color","#858585");o.on("change",(t=>{if(t.target.checked){p(r);delete e.normalize.disable;s.property("value",e.normalize.dividefactor);a(n.usedividefactor);return}l(r);e.normalize.disable=1;a(n.nodividefactor)}))}return i}function m(e,t){let o=t.tkarg_rglst(e);if(t.usegm){const e=o[0];e.usegm_isoform=t.usegm.isoform;for(let a=1;a<o.length;a++){const n=o[a];e.width+=n.width+t.regionspace;e.start=Math.min(e.start,n.start);e.stop=Math.max(e.stop,n.stop)}o=[e]}let a=0;for(const e of o){e.xoff=0;a+=e.width+t.regionspace}if(t.subpanels.length==e.subpanels.length){for(const e of t.subpanels){o.push({chr:e.chr,start:e.start,stop:e.stop,width:e.width,exonsf:e.exonsf,xoff:a});a+=e.width+e.leftpad}}return o}export{u as bigwigconfigpanel,s as loadTk,f as loadTk_do};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,a as t,b as n,c as i,i as a,d as s,e as l}from"./uiUtils-
|
|
1
|
+
import{m as e,a as t,b as n,c as i,i as a,d as s,e as l}from"./uiUtils-5aad7e13.js";import{T as o}from"./toggleButtons-bb9aca2f.js";import{d as r,f as p,aT as c}from"./app-488d9fd6.js";import"./tslib.es6-c3c2d88f.js";async function d(n,i){const a=i.append("div").style("margin","5px 5px 5px 20px").style("font-family","'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif").classed("sjpp-bw-ui",true).style("overflow","hidden");const s={};e(a,"Select Genome").style("font-size","1.15em").style("padding","10px 0px").style("color","#003366");m(a,n,s);e(a,"Provide Data").style("font-size","1.15em").style("padding","20px 0px 10px 0px").style("color","#003366");const l=a.append("div").style("margin-left","40px");g(l,s);const o=a.append("div").style("display","flex").style("align-items","center").style("margin","40px 0px 40px 130px");b(o,s,i,n);t(o,s,".sjpp_bigwigUI_input").style("margin","0px 20px 20px 0px");k(a)}function g(t,n){const i=[{label:"Single Track",callback:async(t,i)=>{i.contentHolder.style("border","none").style("display","block");const a=i.contentHolder.append("div").style("border","none");c(i.contentHolder);e(a,"Name");u(a,n);e(a,"File Path");f(a,n);delete i.callback}},{label:"Multiple Tracks",callback:async(e,t)=>{t.contentHolder.style("border","none").style("display","block");c(t.contentHolder);t.contentHolder.append("div").html('<p style="margin-left: 10px;">Enter one track per line in the following format: [track name],[path/to/file.bw or URL]</p><p style="margin-left: 20px; color: #7d7c7c;">e.g. BigWig Track, proteinpaint_demo/hg19/bigwig/file.bw</p>');y(t.contentHolder,n);delete t.callback}}];new o({holder:t,tabs:i}).main()}async function m(e,t,i){const a=e.append("div").style("margin-left","40px");const s=n(a,t).style("border","1px solid rgb(138, 177, 212)");i.genomeselect=s.node()}function u(e,t){const n=e.append("div").style("margin-left","10px");const i=s(n,"BigWig track").style("border","1px solid rgb(138, 177, 212)").classed("sjpp_bigwigUI_input",true).on("keyup",(async()=>{t.trackname=i.property("value").trim()}))}function f(e,t){const n=e.append("div").style("margin-left","10px");const i=s(n).style("border","1px solid rgb(138, 177, 212)").classed("sjpp_bigwigUI_input",true).on("keyup",(async()=>{t.filepath=i.property("value").trim();t.tabInUse="single"}))}function y(e,t){const n=e.append("div").style("display","block");const i=l({div:n}).style("border","1px solid rgb(138, 177, 212)").style("margin","0px 0px 0px 20px").classed("sjpp_bigwigUI_input",true).on("keyup",(async()=>{t.multitrackdata=i.property("value").trim();t.tabInUse="multi"}))}function b(e,t,n,a){const s=i({div:e,text:"Submit"});s.style("margin","0px 20px 20px 60px").style("font-size","16px").on("click",(()=>{const e={holder:n.append("div").style("margin","20px").node(),host:sessionStorage.getItem("hostURL")};const i=x(t,a);if(!i)return;r(".sjpp-bw-ui").remove();runproteinpaint(Object.assign(e,i))}))}function x(e,t){if(!e.filepath&&!e.multitrackdata){alert("Provide data for either a single track or multiple tracks.");return}let n=e.genomeselect.options[e.genomeselect.selectedIndex].text;const i={block:true,nobox:1,noheader:true,genome:n,tracks:[]};const s=t[n];if(e.tabInUse=="single"){let t,n;if(a(e.filepath))n=e.filepath;else t=e.filepath;const l={type:"bigwig",name:e.trackname||"BigWig track",file:t,url:n,scale:{auto:1}};i.tracks.push(l);p(s,i.tracks);return i}if(e.tabInUse=="multi"){for(const t of e.multitrackdata.split(/[\r\n]/)){const e=t.split(",");if(e[0]&&!e[1])alert("Problem with submission. Are commas between the track names and filepaths?");if(e[0]&&e[1]){let t,n;const s=e[1].trim();if(a(s))n=s;else t=s;const l={type:"bigwig",name:e[0].trim(),file:t,url:n,scale:{auto:1},iscustom:true};i.tracks.push(l)}}p(s,i.tracks);return i}throw"unknown option"}function k(e){e.append("div").style("margin","10px").style("opacity","0.65").style("line-height","1.5").html(`<ul>\n <li>\n <a href=https://docs.google.com/document/d/1ZnPZKSSajWyNISSLELMozKxrZHQbdxQkkkQFnxw6zTs/edit#heading=h.6spyog171fm9 target=_blank>BigWig track documentation</a>\n </li>\n <li>\n <a href=https://proteinpaint.stjude.org/ppdemo/hg19/bigwig/file.bw target=_blank>Example file</a>\n </li>\n <li>\n Please see the <a href=https://genome.ucsc.edu/goldenpath/help/bigWig.html target=_blank>UCSC documention</a> for information on bigWig file formatting.\n </li>\n </ul>`)}export{d as bigwigUI};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a7 as t,ae as e,r as o}from"./app-3d14cbe4.js";import{a as i,b as n}from"./parseData-62083461.js";import{C as r}from"./ColorScale-4b4ea8a2.js";import"./tslib.es6-c3c2d88f.js";import"./axisstyle-fac7f76b.js";import"./axis-747c801e.js";const a="NONE";const s=200;const l=200;const c=5;const d="102,102,102";const f="https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq";function p(e,o){o.tkcloakon(e);o.block_setheight();Promise.resolve().then((()=>import("./HicApp-674a148d.js").then((t=>{})))).then((()=>{if(!e.uninitialized)return;delete e.uninitialized;_(e,o);if(e.textdata||e.bedfile||e.bedurl)return;return t("hicstat?"+(e.file?"file="+e.file:"url="+e.url)).then((t=>{if(t.error)throw t.error;const o=i(e.hic,t.out);if(o)throw o}))})).then((()=>h(e,o))).then((()=>m(e))).then((()=>{if(e.textdata)return u(e,o);if(e.bedfile||e.bedurl)return b(e,o);return y(e,o)})).then((()=>{if(e.data.length==0){e.height_main=100;e.img.attr("width",0);throw e.name+": no data in view range"}v(e,o)})).catch((t=>{if(t.stack){console.log(t.stack)}return typeof t=="string"?t:t.message})).then((t=>{o.tkcloakoff(e,{error:t});o.block_setheight()}))}function h(o,i){const r=[];let a=0;for(let t=i.startidx;t<=i.stopidx;t++){const e=i.rglst[t];r.push({chr:e.chr,start:e.start,stop:e.stop,width:e.width,x:a+(t==0?0:1)*i.regionspace});a+=i.regionspace+e.width}for(const t of i.subpanels){r.push({chr:t.chr,start:t.start,stop:t.stop,width:t.width,x:a+t.leftpad});a+=t.leftpad+t.width}o.regions=r;if(o.textdata||o.bedfile||o.bedurl){return}const c=Math.max(...r.map((t=>t.stop-t.start)));let d=null;for(const t of o.hic.bpresolution){if(c/t>s){d=t;break}}return Promise.resolve().then((()=>{var e;if(d){return}if(!o.hic.enzymefile||!((e=o.hic.fragresolution)===null||e===void 0?void 0:e.length)){d=o.hic.bpresolution[o.hic.bpresolution.length-1];return}const i=[];for(const e of r){const r={getdata:1,getBED:1,file:o.hic.enzymefile,rglst:[{chr:e.chr,start:e.start,stop:e.stop}]};i.push(t("tkbedj",{method:"POST",body:JSON.stringify(r)}).then((t=>{if(t.error)throw t.error;if(!t.items)throw".items[] missing at mapping coord to fragment index";const[o,i,r,a]=n(t.items);if(o)throw o;e.frag={id2coord:i,startidx:r,stopidx:a};return})))}return Promise.all(i)})).then((()=>{let t;if(!d){const e=Math.max(...r.map((t=>t.frag.stopidx-t.frag.startidx)));for(const i of o.hic.fragresolution){if(e/i>l){t=i;break}}if(!t){t=o.hic.fragresolution[o.hic.fragresolution.length-1]}}o.resolution_bp=d;o.resolution_frag=t;if(d){o.label_resolution.text("Resolution: "+e(d))}else{o.label_resolution.text("Resolution: "+t+" fragment"+(t>1?"s":""))}return}))}function m(e){if(!e.domainoverlay||!e.domainoverlay.inuse)return;return Promise.resolve().then((()=>{const o=[];for(const i of e.regions){const n={getdata:1,getBED:1,rglst:[{chr:i.chr,start:i.start,stop:i.stop}]};if(e.domainoverlay.file){n.file=e.domainoverlay.file}else{n.url=e.domainoverlay.url}o.push(t("tkbedj",{method:"POST",body:JSON.stringify(n)}).then((t=>{if(t.error)throw t.error;if(!t.items||t.items.length==0)return;i.domainlst=t.items})))}return Promise.all(o)}))}function u(t,e){t.data=[];for(const o of t.textdata.lst){const i=g(o.chr1,o.start1,o.stop1,o.chr2,o.start2,o.stop2,e);if(i){i.push(o.value);t.data.push(i)}}}function g(t,e,o,i,n,r,a){let s=x(t,e,a);let l=x(t,o,a);if(s==-1&&l==-1)return;if(s==-1)s=l;else if(l==-1)l=s;let c=x(i,n,a);let d=x(i,r,a);if(c==-1&&d==-1)return;if(c==-1)c=d;else if(d==-1)d=c;if(s<c)return[s,l,c,d];return[c,d,s,l]}function x(t,e,o){const i=o.seekcoord(t,e);for(const t of i){if(t.ridx!=undefined){if(t.x>0&&t.x<o.width)return t.x}else if(t.subpanelidx!=undefined){return t.x}}return-1}function b(e,o){const i={getdata:1,getBED:1,rglst:e.regions.map((t=>({chr:t.chr,start:t.start,stop:t.stop})))};if(e.bedfile){i.file=e.bedfile}else{i.url=e.bedurl;if(e.bedindexURL)i.indexURL=e.bedindexURL}return t("tkbedj",{method:"POST",body:JSON.stringify(i)}).then((t=>{if(t.error)throw t.error;e.data=[];if(!t.items){return}const i=new Set;for(const n of t.items){const t=n.chr+" "+n.start+" "+n.stop+" "+n.rest[0]+" "+n.rest[1]+" "+n.rest[2];if(i.has(t))continue;const r=n.rest[0]+" "+n.rest[1]+" "+n.rest[2]+" "+n.chr+" "+n.start+" "+n.stop;i.add(r);const a=n.rest[0];const s=Number.parseInt(n.rest[1]);const l=Number.parseInt(n.rest[2]);if(Number.isNaN(s))throw"invalid start2 position: "+n.rest[1];if(Number.isNaN(l))throw"invalid stop2 position: "+n.rest[2];const c=Number.parseFloat(n.rest[3]);if(Number.isNaN(c))throw"invalid value: "+n.rest[3];const d=g(n.chr,n.start,n.stop,a,s,l,o);if(d){d.push(c);e.data.push(d)}}}))}function y(e,o){const i=e.resolution_bp;const n=e.resolution_frag;for(const t of e.regions){t._str=(e.hic.nochr?t.chr.replace("chr",""):t.chr)+":"+(i?t.start+":"+t.stop:t.frag.startidx+":"+t.frag.stopidx)}const r=[];for(const[a,s]of e.regions.entries()){const l={jwt:o.jwt,file:e.file,url:e.url,pos1:s._str,pos2:s._str,nmeth:e.normalizationmethod,mincutoff:e.mincutoff};if(i){l.resolution=i}else{l.resolution=n;l.isfrag=true}r.push(t("hicdata",{method:"POST",body:JSON.stringify(l)}).then((t=>{if(t.error)throw t.error;if(!t.items||t.items.length==0){return null}return{items:t.items,regionidx:a}})))}for(let a=0;a<e.regions.length-1;a++){for(let s=a+1;s<e.regions.length;s++){const l={jwt:o.jwt,file:e.file,url:e.url,pos1:e.regions[a]._str,pos2:e.regions[s]._str,nmeth:e.normalizationmethod,mincutoff:e.mincutoff};if(i){l.resolution=i}else{l.resolution=n;l.isfrag=true}r.push(t("hicdata",{method:"POST",body:JSON.stringify(l)}).then((t=>{if(t.error)throw{message:t.error};if(!t.items||t.items.length==0){return null}return{items:t.items,leftregionidx:a,rightregionidx:s}})))}}return Promise.all(r).then((t=>w(t,i,n,e,o)))}function w(t,e,o,i,n){i.data=[];for(const n of t){if(!n){continue}let t,r,a,s;let l=false;if(n.regionidx!=undefined){t=r=i.regions[n.regionidx];a=s=t.width/(t.stop-t.start);l=true}else{t=i.regions[n.leftregionidx];a=t.width/(t.stop-t.start);r=i.regions[n.rightregionidx];s=r.width/(r.stop-r.start);l=i.hic.chrorder.indexOf(t.chr)<i.hic.chrorder.indexOf(r.chr)}for(const[c,d,f]of n.items){let p,h,m,u;if(o){const e=l?c:d;const i=l?d:c;let a=t.frag.id2coord.get(e);if(!a){a=r.frag.id2coord.get(e);if(!a)return"unknown frag id in region "+n.leftregionidx+": "+e}p=a[0];m=a[1]-a[0];if(t.frag.id2coord.has(e+o)){const i=t.frag.id2coord.get(e+o);m=i[1]-p}let s=r.frag.id2coord.get(i);if(!s){s=t.frag.id2coord.get(i);if(!s)return"unknown frag id in region "+n.rightregionidx+": "+i}h=s[0];u=s[1]-s[0];if(r.frag.id2coord.has(i+o)){const t=r.frag.id2coord.get(i+o);u=t[1]-h}}else{p=l?c:d;h=l?d:c;m=u=e}let g=false;if(i.domainoverlay&&i.domainoverlay.inuse){if(n.regionidx!=undefined){if(t.domainlst){if(t.domainlst.find((t=>t.start<=p&&t.stop>=h))){g=true}}}}if(n.leftregionidx!=undefined&&t.chr==r.chr){if(p>t.start-m&&p<t.stop&&h>r.start-u&&h<r.stop){const e=t.x+a*(p-t.start);const o=e+a*m;const n=r.x+s*(h-r.start);const l=n+s*u;i.data.push([e,o,n,l,f,g])}if(h>t.start-u&&h<t.stop&&p>r.start&&p<r.stop){const e=t.x+a*(h-t.start);const o=e+a*u;const n=r.x+s*(p-r.start);const l=n+s*m;i.data.push([e,o,n,l,f,g])}}else{const e=t.x+a*(p-t.start);const o=e+a*m;const n=r.x+s*(h-r.start);const l=n+s*u;i.data.push([e,o,n,l,f,g])}}}v(i,n);return}function v(t,e){if(t.data.length==0)return;let i;{const e=o(t.color);i=e.r+","+e.g+","+e.b}const n=t.hiddencanvas.node();const r=e.width+e.subpanels.reduce(((t,e)=>t+e.leftpad+e.width),0);let a=0;if(t.mode_hm){a=Math.min(r,t.data.reduce(((t,e)=>Math.max(t,(e[3]-e[0])/2)),0))}else if(t.mode_arc){for(const e of t.data){const o=(e[2]+e[3])/2-(e[0]+e[1])/2;const i=o/2/Math.tan((Math.PI-t.arcangle/2)/2);a=Math.max(a,i)}}n.width=r;n.height=a;const s=n.getContext("2d");if(window.devicePixelRatio>1){n.width=r*window.devicePixelRatio;n.height=a*window.devicePixelRatio;s.scale(window.devicePixelRatio,window.devicePixelRatio)}let l;{const e=t.data.map((t=>t[4]));e.sort(((t,e)=>t-e));l=e[Math.floor(e.length*t.percentile_max/100)]}k(t,e);for(const[e,o,n,r,c,f]of t.data){if(c<t.mincutoff){continue}let p;if(f){p="rgba("+d+","+(c/l).toFixed(2)+")"}else{p="rgba("+i+","+(c/l).toFixed(2)+")"}if(t.mode_hm){s.fillStyle=p;s.beginPath();let i,l,c,d,f,h,m,u;if(t.pyramidup){i=(e+r)/2;l=a-(r-e)/2;c=(e+n)/2;d=a-(n-e)/2;f=(o+n)/2;h=a-(n-o)/2;m=(o+r)/2;u=a-(r-o)/2}else{i=(o+n)/2;l=(n-o)/2;c=(e+n)/2;d=(n-e)/2;f=(e+r)/2;h=(r-e)/2;m=(o+r)/2;u=(r-o)/2}s.moveTo(i,l);s.lineTo(c,d);s.lineTo(f,h);s.lineTo(m,u);s.closePath();s.fill()}else if(t.mode_arc){const i=(e+o)/2;const l=(n+r)/2;const c=Math.abs(i-l);const d=Math.min(i,l)+c/2;const f=c/2/Math.sin(t.arcangle/2);let h,m,u;if(t.pyramidup){h=a+f*Math.cos(t.arcangle/2);m=Math.PI+(Math.PI-t.arcangle)/2;u=m+t.arcangle}else{h=-f*Math.cos(t.arcangle/2);m=(Math.PI-t.arcangle)/2;u=m+t.arcangle}s.strokeStyle=p;s.beginPath();s.arc(d,h,f,m,u);s.stroke()}}t.img.attr("width",r).attr("height",a).attr("xlink:href",n.toDataURL());t.colorScale.data=[0,l];t.colorScale.markedValue=t.mincutoff;t.colorScale.updateScale();t.height_main=t.toppad+Math.max(t.left_labelheight,a)+t.bottompad}function k(t,e){t.leftLabelMaxwidth=t.colorScale.barwidth;t.tklabel.each((function(){t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,this.getBBox().width)}));if(t.label_resolution){t.label_resolution.each((function(){t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,this.getBBox().width)}))}e.setllabel()}function _(t,e){if(t.textdata){if(!t.textdata.raw)throw".raw missing from textdata";const o=M(t,e);if(o)throw"Error with text data: "+o}if(t.mode_hm==undefined)t.mode_hm=true;if(t.mode_arc==undefined)t.mode_arc=false;if(t.mode_hm&&t.mode_arc){t.mode_arc=false}else if(!t.mode_hm&&!t.mode_arc){t.mode_hm=true}if(!t.color)t.color="#ff0000";t.arcangle=Math.PI/2;if(t.pyramidup==undefined)t.pyramidup=true;t.hic.genome=e.genome;if(t.hic.enzyme){if(e.genome.hicenzymefragment){const o=e.genome.hicenzymefragment.find((e=>e.enzyme.toUpperCase()==t.hic.enzyme.toUpperCase()));if(o){t.hic.enzymefile=o.file}else{e.error("unknown Hi-C enzyme: "+t.hic.enzyme);delete t.hic.enzyme}}else{e.error("Hi-C enzyme fragment not available for this genome");delete t.hic.enzyme}}if(!t.percentile_max){t.percentile_max=90}if(t.mincutoff==undefined){t.mincutoff=0}if(!t.normalizationmethod){t.normalizationmethod=a}let o=c+e.labelfontsize;if(t.file||t.url){t.label_resolution=e.maketklefthandle(t,o).attr("class",null);o+=c+e.labelfontsize}{const i=14;const n=100;const a=1;const s=t.gleft.append("g").attr("transform",`scale(1), translate(${e.tkleftlabel_xshift-n}, ${o})`);t.colorScale=new r({barheight:i,barwidth:n,data:[0,1],fontSize:12,height:45,width:120,holder:s,endColor:t.color,position:`6,${i+a}`,ticks:2,tickSize:2,markedValue:t.mincutoff});t.colorScale.render();o+=i+10+e.labelfontsize}o+=10;t.left_labelheight=o;t.img=t.glider.append("image");t.hiddencanvas=e.holder.append("canvas").style("display","none");t.config_handle=e.maketkconfighandle(t).on("click",(()=>{N(t,e)}))}function N(t,e){t.tkconfigtip.clear().showunder(t.config_handle.node());if(t.textdata){t.tkconfigtip.d.append("div").attr("class","sja_menuoption").style("margin-bottom","10px").text("Edit interaction data").on("click",(()=>{z(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("span").text("Change color");o.append("input").style("margin-left","5px").attr("type","color").property("value",t.color).on("change",(o=>{t.color=o.target.value;t.colorScale.endColor=t.color;t.colorScale.updateScale();v(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("input").attr("type","number").style("width","40px").property("value",t.percentile_max).on("keyup",(o=>{if(o.code!="Enter"&&o.code!="NumpadEnter")return;const i=Number.parseFloat(o.target.value);if(Number.isNaN(i)||i<=0||i>=100){alert("Please enter a value between 0 and 100");return}t.percentile_max=i;v(t,e)}));o.append("span").html(" percentile for color scale max")}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("input").attr("type","number").style("width","50px").property("value",t.mincutoff).on("keyup",(o=>{if(o.code!="Enter"&&o.code!="NumpadEnter")return;const i=Number.parseFloat(o.target.value);if(Number.isNaN(i)){alert("Please enter a valid number");return}t.mincutoff=i;p(t,e)}));o.append("span").html(" for minimum cutoff value");o.append("div").style("font-size",".8em").style("opacity",.5).html("Interactions with scores ≤ cutoff will not be shown.")}if(t.file||t.url){const o=t.hic.normalization;const i=t.tkconfigtip.d.append("div").style("margin-bottom","10px");i.append("span").html("Normalization ");if(t.hic.normalization.length>0){const n=i.append("select").on("change",(()=>{const o=n.node();t.normalizationmethod=o.options[o.selectedIndex].innerHTML;p(t,e)}));for(const t of o)n.append("option").text(t);for(const e of n.node().options){if(e.innerHTML==t.normalizationmethod){e.selected=true;break}}}else{i.append("span").text("NONE")}}if(t.domainoverlay){const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("span").html("Overlay with "+t.domainoverlay.name+" domains ");o.append("button").text(t.domainoverlay.inuse?"No":"Yes").on("click",(()=>{t.tkconfigtip.hide();t.domainoverlay.inuse=!t.domainoverlay.inuse;p(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");const i=Math.random().toString();o.append("input").attr("name",i).attr("id",i+"1").attr("type","radio").property("checked",t.mode_hm).on("change",(o=>{if(o.target.checked){t.mode_hm=true;t.mode_arc=false}else{t.mode_hm=false;t.mode_arc=true}v(t,e);e.block_setheight()}));o.append("label").attr("for",i+"1").attr("class","sja_clbtext").html(" Heatmap");o.append("input").style("margin-left","10px").attr("name",i).attr("id",i+"2").attr("type","radio").property("checked",t.mode_arc).on("change",(o=>{if(o.target.checked){t.mode_hm=false;t.mode_arc=true}else{t.mode_hm=true;t.mode_arc=false}v(t,e);e.block_setheight()}));o.append("label").attr("for",i+"2").attr("class","sja_clbtext").html(" Arc");o.append("span").style("margin-left","10px").style("opacity",.5).text("for showing interactions.")}{t.tkconfigtip.d.append("div").style("margin","20px 0px").append("button").text("Point "+(t.pyramidup?"down":"up")).on("click",(()=>{t.pyramidup=!t.pyramidup;v(t,e);t.tkconfigtip.hide()}))}if(t.hic.version){t.tkconfigtip.d.append("div").style("opacity",.5).text("HiC file version: "+t.hic.version)}}function z(t,e){t.tkconfigtip.d.transition().style("left",Number.parseInt(t.tkconfigtip.d.style("left"))-500+"px");t.tkconfigtip.clear();const o=t.tkconfigtip.d.append("div");const i=o.append("textarea").attr("cols",50).attr("rows",10);i.property("value",t.textdata.raw);const n=o.append("div").style("margin-top","10px");n.append("button").text("Update").on("click",(()=>{const o=i.property("value");if(!o){window.alert("Enter text interaction data");return}t.textdata.raw=o;const n=M(t,e);if(n){window.alert(n);return}p(t,e);t.tkconfigtip.hide()}));n.append("span").style("margin-left","5px").html("<a href="+f+" target=_blank>Text data format</a>");n.append("button").style("margin-left","30px").text("Cancel").on("click",(()=>t.tkconfigtip.hide()))}function M(t,e){t.textdata.lst=[];const o=t.textdata.raw.trim().split(/\r?\n/);for(let i=0;i<o.length;i++){const n=o[i].trim();if(!n)continue;const r=n.split(/[\t\s]+/);const a=r[0];if(!e.genome.chrlookup[a.toUpperCase()])return"wrong chrA name at line "+(i+1);const s=Number.parseInt(r[1]);if(Number.isNaN(s))return"invalid startA at line "+(i+1);const l=Number.parseInt(r[2]);if(Number.isNaN(l))return"invalid stopA name at line "+(i+1);const c=r[3];if(!e.genome.chrlookup[c.toUpperCase()])return"wrong chrB name at line "+(i+1);const d=Number.parseInt(r[4]);if(Number.isNaN(d))return"invalid startB at line "+(i+1);const f=Number.parseInt(r[5]);if(Number.isNaN(f))return"invalid stopB at line "+(i+1);const p=Number.parseFloat(r[7]);if(Number.isNaN(p))return"invalid value (8th column) at line "+(i+1);t.textdata.lst.push({chr1:a,start1:s,stop1:l,chr2:c,start2:d,stop2:f,value:p})}if(t.textdata.lst.length==0)return"No data points from text input"}export{p as loadTk};
|
|
1
|
+
import{a7 as t,ae as e,r as o}from"./app-488d9fd6.js";import{a as i,b as n}from"./parseData-3bf0ef9f.js";import{C as r}from"./ColorScale-7a36cc17.js";import"./tslib.es6-c3c2d88f.js";import"./axisstyle-fac7f76b.js";import"./axis-747c801e.js";const a="NONE";const s=200;const l=200;const c=5;const d="102,102,102";const f="https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq";function p(e,o){o.tkcloakon(e);o.block_setheight();Promise.resolve().then((()=>import("./HicApp-fe8682af.js").then((t=>{})))).then((()=>{if(!e.uninitialized)return;delete e.uninitialized;_(e,o);if(e.textdata||e.bedfile||e.bedurl)return;return t("hicstat?"+(e.file?"file="+e.file:"url="+e.url)).then((t=>{if(t.error)throw t.error;const o=i(e.hic,t.out);if(o)throw o}))})).then((()=>h(e,o))).then((()=>m(e))).then((()=>{if(e.textdata)return u(e,o);if(e.bedfile||e.bedurl)return b(e,o);return y(e,o)})).then((()=>{if(e.data.length==0){e.height_main=100;e.img.attr("width",0);throw e.name+": no data in view range"}v(e,o)})).catch((t=>{if(t.stack){console.log(t.stack)}return typeof t=="string"?t:t.message})).then((t=>{o.tkcloakoff(e,{error:t});o.block_setheight()}))}function h(o,i){const r=[];let a=0;for(let t=i.startidx;t<=i.stopidx;t++){const e=i.rglst[t];r.push({chr:e.chr,start:e.start,stop:e.stop,width:e.width,x:a+(t==0?0:1)*i.regionspace});a+=i.regionspace+e.width}for(const t of i.subpanels){r.push({chr:t.chr,start:t.start,stop:t.stop,width:t.width,x:a+t.leftpad});a+=t.leftpad+t.width}o.regions=r;if(o.textdata||o.bedfile||o.bedurl){return}const c=Math.max(...r.map((t=>t.stop-t.start)));let d=null;for(const t of o.hic.bpresolution){if(c/t>s){d=t;break}}return Promise.resolve().then((()=>{var e;if(d){return}if(!o.hic.enzymefile||!((e=o.hic.fragresolution)===null||e===void 0?void 0:e.length)){d=o.hic.bpresolution[o.hic.bpresolution.length-1];return}const i=[];for(const e of r){const r={getdata:1,getBED:1,file:o.hic.enzymefile,rglst:[{chr:e.chr,start:e.start,stop:e.stop}]};i.push(t("tkbedj",{method:"POST",body:JSON.stringify(r)}).then((t=>{if(t.error)throw t.error;if(!t.items)throw".items[] missing at mapping coord to fragment index";const[o,i,r,a]=n(t.items);if(o)throw o;e.frag={id2coord:i,startidx:r,stopidx:a};return})))}return Promise.all(i)})).then((()=>{let t;if(!d){const e=Math.max(...r.map((t=>t.frag.stopidx-t.frag.startidx)));for(const i of o.hic.fragresolution){if(e/i>l){t=i;break}}if(!t){t=o.hic.fragresolution[o.hic.fragresolution.length-1]}}o.resolution_bp=d;o.resolution_frag=t;if(d){o.label_resolution.text("Resolution: "+e(d))}else{o.label_resolution.text("Resolution: "+t+" fragment"+(t>1?"s":""))}return}))}function m(e){if(!e.domainoverlay||!e.domainoverlay.inuse)return;return Promise.resolve().then((()=>{const o=[];for(const i of e.regions){const n={getdata:1,getBED:1,rglst:[{chr:i.chr,start:i.start,stop:i.stop}]};if(e.domainoverlay.file){n.file=e.domainoverlay.file}else{n.url=e.domainoverlay.url}o.push(t("tkbedj",{method:"POST",body:JSON.stringify(n)}).then((t=>{if(t.error)throw t.error;if(!t.items||t.items.length==0)return;i.domainlst=t.items})))}return Promise.all(o)}))}function u(t,e){t.data=[];for(const o of t.textdata.lst){const i=g(o.chr1,o.start1,o.stop1,o.chr2,o.start2,o.stop2,e);if(i){i.push(o.value);t.data.push(i)}}}function g(t,e,o,i,n,r,a){let s=x(t,e,a);let l=x(t,o,a);if(s==-1&&l==-1)return;if(s==-1)s=l;else if(l==-1)l=s;let c=x(i,n,a);let d=x(i,r,a);if(c==-1&&d==-1)return;if(c==-1)c=d;else if(d==-1)d=c;if(s<c)return[s,l,c,d];return[c,d,s,l]}function x(t,e,o){const i=o.seekcoord(t,e);for(const t of i){if(t.ridx!=undefined){if(t.x>0&&t.x<o.width)return t.x}else if(t.subpanelidx!=undefined){return t.x}}return-1}function b(e,o){const i={getdata:1,getBED:1,rglst:e.regions.map((t=>({chr:t.chr,start:t.start,stop:t.stop})))};if(e.bedfile){i.file=e.bedfile}else{i.url=e.bedurl;if(e.bedindexURL)i.indexURL=e.bedindexURL}return t("tkbedj",{method:"POST",body:JSON.stringify(i)}).then((t=>{if(t.error)throw t.error;e.data=[];if(!t.items){return}const i=new Set;for(const n of t.items){const t=n.chr+" "+n.start+" "+n.stop+" "+n.rest[0]+" "+n.rest[1]+" "+n.rest[2];if(i.has(t))continue;const r=n.rest[0]+" "+n.rest[1]+" "+n.rest[2]+" "+n.chr+" "+n.start+" "+n.stop;i.add(r);const a=n.rest[0];const s=Number.parseInt(n.rest[1]);const l=Number.parseInt(n.rest[2]);if(Number.isNaN(s))throw"invalid start2 position: "+n.rest[1];if(Number.isNaN(l))throw"invalid stop2 position: "+n.rest[2];const c=Number.parseFloat(n.rest[3]);if(Number.isNaN(c))throw"invalid value: "+n.rest[3];const d=g(n.chr,n.start,n.stop,a,s,l,o);if(d){d.push(c);e.data.push(d)}}}))}function y(e,o){const i=e.resolution_bp;const n=e.resolution_frag;for(const t of e.regions){t._str=(e.hic.nochr?t.chr.replace("chr",""):t.chr)+":"+(i?t.start+":"+t.stop:t.frag.startidx+":"+t.frag.stopidx)}const r=[];for(const[a,s]of e.regions.entries()){const l={jwt:o.jwt,file:e.file,url:e.url,pos1:s._str,pos2:s._str,nmeth:e.normalizationmethod,mincutoff:e.mincutoff};if(i){l.resolution=i}else{l.resolution=n;l.isfrag=true}r.push(t("hicdata",{method:"POST",body:JSON.stringify(l)}).then((t=>{if(t.error)throw t.error;if(!t.items||t.items.length==0){return null}return{items:t.items,regionidx:a}})))}for(let a=0;a<e.regions.length-1;a++){for(let s=a+1;s<e.regions.length;s++){const l={jwt:o.jwt,file:e.file,url:e.url,pos1:e.regions[a]._str,pos2:e.regions[s]._str,nmeth:e.normalizationmethod,mincutoff:e.mincutoff};if(i){l.resolution=i}else{l.resolution=n;l.isfrag=true}r.push(t("hicdata",{method:"POST",body:JSON.stringify(l)}).then((t=>{if(t.error)throw{message:t.error};if(!t.items||t.items.length==0){return null}return{items:t.items,leftregionidx:a,rightregionidx:s}})))}}return Promise.all(r).then((t=>w(t,i,n,e,o)))}function w(t,e,o,i,n){i.data=[];for(const n of t){if(!n){continue}let t,r,a,s;let l=false;if(n.regionidx!=undefined){t=r=i.regions[n.regionidx];a=s=t.width/(t.stop-t.start);l=true}else{t=i.regions[n.leftregionidx];a=t.width/(t.stop-t.start);r=i.regions[n.rightregionidx];s=r.width/(r.stop-r.start);l=i.hic.chrorder.indexOf(t.chr)<i.hic.chrorder.indexOf(r.chr)}for(const[c,d,f]of n.items){let p,h,m,u;if(o){const e=l?c:d;const i=l?d:c;let a=t.frag.id2coord.get(e);if(!a){a=r.frag.id2coord.get(e);if(!a)return"unknown frag id in region "+n.leftregionidx+": "+e}p=a[0];m=a[1]-a[0];if(t.frag.id2coord.has(e+o)){const i=t.frag.id2coord.get(e+o);m=i[1]-p}let s=r.frag.id2coord.get(i);if(!s){s=t.frag.id2coord.get(i);if(!s)return"unknown frag id in region "+n.rightregionidx+": "+i}h=s[0];u=s[1]-s[0];if(r.frag.id2coord.has(i+o)){const t=r.frag.id2coord.get(i+o);u=t[1]-h}}else{p=l?c:d;h=l?d:c;m=u=e}let g=false;if(i.domainoverlay&&i.domainoverlay.inuse){if(n.regionidx!=undefined){if(t.domainlst){if(t.domainlst.find((t=>t.start<=p&&t.stop>=h))){g=true}}}}if(n.leftregionidx!=undefined&&t.chr==r.chr){if(p>t.start-m&&p<t.stop&&h>r.start-u&&h<r.stop){const e=t.x+a*(p-t.start);const o=e+a*m;const n=r.x+s*(h-r.start);const l=n+s*u;i.data.push([e,o,n,l,f,g])}if(h>t.start-u&&h<t.stop&&p>r.start&&p<r.stop){const e=t.x+a*(h-t.start);const o=e+a*u;const n=r.x+s*(p-r.start);const l=n+s*m;i.data.push([e,o,n,l,f,g])}}else{const e=t.x+a*(p-t.start);const o=e+a*m;const n=r.x+s*(h-r.start);const l=n+s*u;i.data.push([e,o,n,l,f,g])}}}v(i,n);return}function v(t,e){if(t.data.length==0)return;let i;{const e=o(t.color);i=e.r+","+e.g+","+e.b}const n=t.hiddencanvas.node();const r=e.width+e.subpanels.reduce(((t,e)=>t+e.leftpad+e.width),0);let a=0;if(t.mode_hm){a=Math.min(r,t.data.reduce(((t,e)=>Math.max(t,(e[3]-e[0])/2)),0))}else if(t.mode_arc){for(const e of t.data){const o=(e[2]+e[3])/2-(e[0]+e[1])/2;const i=o/2/Math.tan((Math.PI-t.arcangle/2)/2);a=Math.max(a,i)}}n.width=r;n.height=a;const s=n.getContext("2d");if(window.devicePixelRatio>1){n.width=r*window.devicePixelRatio;n.height=a*window.devicePixelRatio;s.scale(window.devicePixelRatio,window.devicePixelRatio)}let l;{const e=t.data.map((t=>t[4]));e.sort(((t,e)=>t-e));l=e[Math.floor(e.length*t.percentile_max/100)]}k(t,e);for(const[e,o,n,r,c,f]of t.data){if(c<t.mincutoff){continue}let p;if(f){p="rgba("+d+","+(c/l).toFixed(2)+")"}else{p="rgba("+i+","+(c/l).toFixed(2)+")"}if(t.mode_hm){s.fillStyle=p;s.beginPath();let i,l,c,d,f,h,m,u;if(t.pyramidup){i=(e+r)/2;l=a-(r-e)/2;c=(e+n)/2;d=a-(n-e)/2;f=(o+n)/2;h=a-(n-o)/2;m=(o+r)/2;u=a-(r-o)/2}else{i=(o+n)/2;l=(n-o)/2;c=(e+n)/2;d=(n-e)/2;f=(e+r)/2;h=(r-e)/2;m=(o+r)/2;u=(r-o)/2}s.moveTo(i,l);s.lineTo(c,d);s.lineTo(f,h);s.lineTo(m,u);s.closePath();s.fill()}else if(t.mode_arc){const i=(e+o)/2;const l=(n+r)/2;const c=Math.abs(i-l);const d=Math.min(i,l)+c/2;const f=c/2/Math.sin(t.arcangle/2);let h,m,u;if(t.pyramidup){h=a+f*Math.cos(t.arcangle/2);m=Math.PI+(Math.PI-t.arcangle)/2;u=m+t.arcangle}else{h=-f*Math.cos(t.arcangle/2);m=(Math.PI-t.arcangle)/2;u=m+t.arcangle}s.strokeStyle=p;s.beginPath();s.arc(d,h,f,m,u);s.stroke()}}t.img.attr("width",r).attr("height",a).attr("xlink:href",n.toDataURL());t.colorScale.data=[0,l];t.colorScale.markedValue=t.mincutoff;t.colorScale.updateScale();t.height_main=t.toppad+Math.max(t.left_labelheight,a)+t.bottompad}function k(t,e){t.leftLabelMaxwidth=t.colorScale.barwidth;t.tklabel.each((function(){t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,this.getBBox().width)}));if(t.label_resolution){t.label_resolution.each((function(){t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,this.getBBox().width)}))}e.setllabel()}function _(t,e){if(t.textdata){if(!t.textdata.raw)throw".raw missing from textdata";const o=M(t,e);if(o)throw"Error with text data: "+o}if(t.mode_hm==undefined)t.mode_hm=true;if(t.mode_arc==undefined)t.mode_arc=false;if(t.mode_hm&&t.mode_arc){t.mode_arc=false}else if(!t.mode_hm&&!t.mode_arc){t.mode_hm=true}if(!t.color)t.color="#ff0000";t.arcangle=Math.PI/2;if(t.pyramidup==undefined)t.pyramidup=true;t.hic.genome=e.genome;if(t.hic.enzyme){if(e.genome.hicenzymefragment){const o=e.genome.hicenzymefragment.find((e=>e.enzyme.toUpperCase()==t.hic.enzyme.toUpperCase()));if(o){t.hic.enzymefile=o.file}else{e.error("unknown Hi-C enzyme: "+t.hic.enzyme);delete t.hic.enzyme}}else{e.error("Hi-C enzyme fragment not available for this genome");delete t.hic.enzyme}}if(!t.percentile_max){t.percentile_max=90}if(t.mincutoff==undefined){t.mincutoff=0}if(!t.normalizationmethod){t.normalizationmethod=a}let o=c+e.labelfontsize;if(t.file||t.url){t.label_resolution=e.maketklefthandle(t,o).attr("class",null);o+=c+e.labelfontsize}{const i=14;const n=100;const a=1;const s=t.gleft.append("g").attr("transform",`scale(1), translate(${e.tkleftlabel_xshift-n}, ${o})`);t.colorScale=new r({barheight:i,barwidth:n,data:[0,1],fontSize:12,height:45,width:120,holder:s,endColor:t.color,position:`6,${i+a}`,ticks:2,tickSize:2,markedValue:t.mincutoff});t.colorScale.render();o+=i+10+e.labelfontsize}o+=10;t.left_labelheight=o;t.img=t.glider.append("image");t.hiddencanvas=e.holder.append("canvas").style("display","none");t.config_handle=e.maketkconfighandle(t).on("click",(()=>{N(t,e)}))}function N(t,e){t.tkconfigtip.clear().showunder(t.config_handle.node());if(t.textdata){t.tkconfigtip.d.append("div").attr("class","sja_menuoption").style("margin-bottom","10px").text("Edit interaction data").on("click",(()=>{z(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("span").text("Change color");o.append("input").style("margin-left","5px").attr("type","color").property("value",t.color).on("change",(o=>{t.color=o.target.value;t.colorScale.endColor=t.color;t.colorScale.updateScale();v(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("input").attr("type","number").style("width","40px").property("value",t.percentile_max).on("keyup",(o=>{if(o.code!="Enter"&&o.code!="NumpadEnter")return;const i=Number.parseFloat(o.target.value);if(Number.isNaN(i)||i<=0||i>=100){alert("Please enter a value between 0 and 100");return}t.percentile_max=i;v(t,e)}));o.append("span").html(" percentile for color scale max")}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("input").attr("type","number").style("width","50px").property("value",t.mincutoff).on("keyup",(o=>{if(o.code!="Enter"&&o.code!="NumpadEnter")return;const i=Number.parseFloat(o.target.value);if(Number.isNaN(i)){alert("Please enter a valid number");return}t.mincutoff=i;p(t,e)}));o.append("span").html(" for minimum cutoff value");o.append("div").style("font-size",".8em").style("opacity",.5).html("Interactions with scores ≤ cutoff will not be shown.")}if(t.file||t.url){const o=t.hic.normalization;const i=t.tkconfigtip.d.append("div").style("margin-bottom","10px");i.append("span").html("Normalization ");if(t.hic.normalization.length>0){const n=i.append("select").on("change",(()=>{const o=n.node();t.normalizationmethod=o.options[o.selectedIndex].innerHTML;p(t,e)}));for(const t of o)n.append("option").text(t);for(const e of n.node().options){if(e.innerHTML==t.normalizationmethod){e.selected=true;break}}}else{i.append("span").text("NONE")}}if(t.domainoverlay){const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");o.append("span").html("Overlay with "+t.domainoverlay.name+" domains ");o.append("button").text(t.domainoverlay.inuse?"No":"Yes").on("click",(()=>{t.tkconfigtip.hide();t.domainoverlay.inuse=!t.domainoverlay.inuse;p(t,e)}))}{const o=t.tkconfigtip.d.append("div").style("margin-bottom","10px");const i=Math.random().toString();o.append("input").attr("name",i).attr("id",i+"1").attr("type","radio").property("checked",t.mode_hm).on("change",(o=>{if(o.target.checked){t.mode_hm=true;t.mode_arc=false}else{t.mode_hm=false;t.mode_arc=true}v(t,e);e.block_setheight()}));o.append("label").attr("for",i+"1").attr("class","sja_clbtext").html(" Heatmap");o.append("input").style("margin-left","10px").attr("name",i).attr("id",i+"2").attr("type","radio").property("checked",t.mode_arc).on("change",(o=>{if(o.target.checked){t.mode_hm=false;t.mode_arc=true}else{t.mode_hm=true;t.mode_arc=false}v(t,e);e.block_setheight()}));o.append("label").attr("for",i+"2").attr("class","sja_clbtext").html(" Arc");o.append("span").style("margin-left","10px").style("opacity",.5).text("for showing interactions.")}{t.tkconfigtip.d.append("div").style("margin","20px 0px").append("button").text("Point "+(t.pyramidup?"down":"up")).on("click",(()=>{t.pyramidup=!t.pyramidup;v(t,e);t.tkconfigtip.hide()}))}if(t.hic.version){t.tkconfigtip.d.append("div").style("opacity",.5).text("HiC file version: "+t.hic.version)}}function z(t,e){t.tkconfigtip.d.transition().style("left",Number.parseInt(t.tkconfigtip.d.style("left"))-500+"px");t.tkconfigtip.clear();const o=t.tkconfigtip.d.append("div");const i=o.append("textarea").attr("cols",50).attr("rows",10);i.property("value",t.textdata.raw);const n=o.append("div").style("margin-top","10px");n.append("button").text("Update").on("click",(()=>{const o=i.property("value");if(!o){window.alert("Enter text interaction data");return}t.textdata.raw=o;const n=M(t,e);if(n){window.alert(n);return}p(t,e);t.tkconfigtip.hide()}));n.append("span").style("margin-left","5px").html("<a href="+f+" target=_blank>Text data format</a>");n.append("button").style("margin-left","30px").text("Cancel").on("click",(()=>t.tkconfigtip.hide()))}function M(t,e){t.textdata.lst=[];const o=t.textdata.raw.trim().split(/\r?\n/);for(let i=0;i<o.length;i++){const n=o[i].trim();if(!n)continue;const r=n.split(/[\t\s]+/);const a=r[0];if(!e.genome.chrlookup[a.toUpperCase()])return"wrong chrA name at line "+(i+1);const s=Number.parseInt(r[1]);if(Number.isNaN(s))return"invalid startA at line "+(i+1);const l=Number.parseInt(r[2]);if(Number.isNaN(l))return"invalid stopA name at line "+(i+1);const c=r[3];if(!e.genome.chrlookup[c.toUpperCase()])return"wrong chrB name at line "+(i+1);const d=Number.parseInt(r[4]);if(Number.isNaN(d))return"invalid startB at line "+(i+1);const f=Number.parseInt(r[5]);if(Number.isNaN(f))return"invalid stopB at line "+(i+1);const p=Number.parseFloat(r[7]);if(Number.isNaN(p))return"invalid value (8th column) at line "+(i+1);t.textdata.lst.push({chr1:a,start1:s,stop1:l,chr2:c,start2:d,stop2:f,value:p})}if(t.textdata.lst.length==0)return"No data points from text input"}export{p as loadTk};
|