@sjcrh/proteinpaint-client 2.70.2 → 2.70.3-1
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-74e1efe8.js → 2dmaf-13cd9aec.js} +1 -1
- package/dist/{AppHeader-48fdde2a.js → AppHeader-cf5af7cf.js} +1 -1
- package/dist/{ColorScale-3574a0e5.js → ColorScale-ecac40b5.js} +1 -1
- package/dist/{DEanalysis-e87bd46e.js → DEanalysis-03f714c6.js} +1 -1
- package/dist/{Disco-9a265e00.js → Disco-f5eb95e2.js} +1 -1
- package/dist/{Disco.UI-b714e338.js → Disco.UI-12afaab1.js} +1 -1
- package/dist/{DragControls-b2147f37.js → DragControls-7ed39010.js} +1 -1
- package/dist/{DziViewer-37ed3459.js → DziViewer-deef8d05.js} +1 -1
- package/dist/{FilterRxComp-b2d92192.js → FilterRxComp-b9222eca.js} +1 -1
- package/dist/FilterStateless-cc191cb1.js +1 -0
- package/dist/{HicApp-1c2f470c.js → HicApp-71a9f4af.js} +1 -1
- package/dist/{OrbitControls-9fb103e5.js → OrbitControls-1f73e7c8.js} +1 -1
- package/dist/TiaViewer-8626a589.js +1 -0
- package/dist/{adSandbox-3b54a54c.js → adSandbox-fc06d4a1.js} +1 -1
- package/dist/{app-25459cf7.js → app-988e4a8e.js} +1 -1
- package/dist/app-d1081019.js +1 -0
- package/dist/{app-f070f904.js → app-f3a0804e.js} +1 -1
- package/dist/app.js +1 -1
- package/dist/{bam-b80cf438.js → bam-27f62e51.js} +1 -1
- package/dist/{barchart-cfc75692.js → barchart-9ae009aa.js} +1 -1
- package/dist/{barchart.events-63b000a2.js → barchart.events-4d928dd5.js} +1 -1
- package/dist/{bars.renderer-e7ddbdc6.js → bars.renderer-eff9d4da.js} +1 -1
- package/dist/{block-0221245d.js → block-da405d5b.js} +1 -1
- package/dist/block.lazyload-45b77578.js +1 -0
- package/dist/{block.legend-0476452b.js → block.legend-b7fbf9bd.js} +1 -1
- package/dist/{block.mds-6e7d8150.js → block.mds-dd894359.js} +1 -1
- package/dist/{block.mds.cnv-68706b43.js → block.mds.cnv-72f5df00.js} +1 -1
- package/dist/{block.mds.expressionrank-40c03b81.js → block.mds.expressionrank-8787a9b2.js} +1 -1
- package/dist/{block.mds.expressionstat-42bf0540.js → block.mds.expressionstat-6204d681.js} +1 -1
- package/dist/{block.mds.geneboxplot-a0551169.js → block.mds.geneboxplot-818ffefb.js} +1 -1
- package/dist/{block.mds.junction-962ecfe1.js → block.mds.junction-8dd53af0.js} +1 -1
- package/dist/{block.mds.svcnv-4682e691.js → block.mds.svcnv-54c04b31.js} +1 -1
- package/dist/{block.mds.svcnv.share-810e65f0.js → block.mds.svcnv.share-07099e81.js} +1 -1
- package/dist/{block.mds2-a8b7ef44.js → block.mds2-7c527019.js} +1 -1
- package/dist/{block.svg-0ccc8b03.js → block.svg-533e1554.js} +1 -1
- package/dist/{block.tk.aicheck-342cb2da.js → block.tk.aicheck-401b9332.js} +1 -1
- package/dist/{block.tk.ase-74dfdbc4.js → block.tk.ase-1cea8b57.js} +1 -1
- package/dist/{block.tk.bam-0e4150b4.js → block.tk.bam-909f3ea1.js} +1 -1
- package/dist/{block.tk.bedgraphdot-fc9cb4c7.js → block.tk.bedgraphdot-e86b7907.js} +1 -1
- package/dist/{block.tk.bigwig.ui-e8caf9ab.js → block.tk.bigwig.ui-d487a233.js} +1 -1
- package/dist/{block.tk.hicstraw-52bff9c7.js → block.tk.hicstraw-3e6fa2ef.js} +1 -1
- package/dist/block.tk.junction-85e68381.js +1 -0
- package/dist/{block.tk.junction.textmatrixui-d252243a.js → block.tk.junction.textmatrixui-87ead8b2.js} +1 -1
- package/dist/{block.tk.ld-3f20a4cd.js → block.tk.ld-ef105592.js} +1 -1
- package/dist/{block.tk.menu-1c5230f9.js → block.tk.menu-438e255b.js} +1 -1
- package/dist/{block.tk.pgv-61e6fb4c.js → block.tk.pgv-1422e150.js} +1 -1
- package/dist/{boxplot-531c67ec.js → boxplot-d41f21ff.js} +1 -1
- package/dist/brainImaging-99cd9f66.js +1 -0
- package/dist/{brush-503d7700.js → brush-f245c76c.js} +1 -1
- package/dist/{categorical-fe842fd2.js → categorical-6454c56d.js} +1 -1
- package/dist/{condition-6ae91bc5.js → condition-0ef60325.js} +1 -1
- package/dist/{controls-5545e307.js → controls-bffc3085.js} +1 -1
- package/dist/{controls.btns-49de730d.js → controls.btns-68ce0015.js} +1 -1
- package/dist/{controls.config-fb436d5d.js → controls.config-88b83e76.js} +1 -1
- package/dist/{controls.divide-4771c093.js → controls.divide-42828e26.js} +1 -1
- package/dist/{controls.overlay-9a2fd603.js → controls.overlay-8317a391.js} +1 -1
- package/dist/{controls.term1-4f9c23d6.js → controls.term1-9a366567.js} +1 -1
- package/dist/cuminc-2cadf067.js +1 -0
- package/dist/{customdata.inputui-29c648ae.js → customdata.inputui-5f7a2e73.js} +1 -1
- package/dist/{dataDownload-623e761f.js → dataDownload-62da34be.js} +1 -1
- package/dist/databrowser.ui-c5f694d1.js +1 -0
- package/dist/{density-52f287fa.js → density-4d7458b9.js} +1 -1
- package/dist/{dictionary-a8b8e3d9.js → dictionary-a9efe60e.js} +1 -1
- package/dist/{drag-4162e368.js → drag-f31f8896.js} +1 -1
- package/dist/{e2pca-8b6b84f2.js → e2pca-4954f499.js} +1 -1
- package/dist/{ep-edaadf54.js → ep-312d96a7.js} +1 -1
- package/dist/{facet-5c014491.js → facet-16d54805.js} +1 -1
- package/dist/{fusion.parse-0ab4f2e0.js → fusion.parse-f3f62b43.js} +1 -1
- package/dist/{geneExpClustering-2f8e9e73.js → geneExpClustering-69c35683.js} +1 -1
- package/dist/{geneExpression-79aa2c21.js → geneExpression-40719596.js} +1 -1
- package/dist/{geneExpression-273c5690.js → geneExpression-8c28bc26.js} +1 -1
- package/dist/{geneExpression-0e7a0e5a.js → geneExpression-aff3f201.js} +1 -1
- package/dist/{geneORA-492f4970.js → geneORA-83bf0dc7.js} +1 -1
- package/dist/{geneVariant-32dd8911.js → geneVariant-07ee932e.js} +1 -1
- package/dist/{geneVariant-1ccdd028.js → geneVariant-4dbb579e.js} +1 -1
- package/dist/{genefusion.ui-73f8e60c.js → genefusion.ui-e0d6bcc7.js} +1 -1
- package/dist/{genesearch-852717d7.js → genesearch-724230cd.js} +1 -1
- package/dist/{geneset-5d19a678.js → geneset-741bf44d.js} +1 -1
- package/dist/{genomeBrowser-d14228f3.js → genomeBrowser-ecd21732.js} +1 -1
- package/dist/{genomeBrowser.controls-a7e7bba6.js → genomeBrowser.controls-247b2242.js} +1 -1
- package/dist/{groupsetting-2f6eb0d7.js → groupsetting-627cc640.js} +1 -1
- package/dist/{gsea-2e9fd5db.js → gsea-3d9133de.js} +1 -1
- package/dist/{hierCluster-e0fb1321.js → hierCluster-d70d3ccd.js} +1 -1
- package/dist/{hierCluster.config-7508df62.js → hierCluster.config-e7f2095f.js} +1 -1
- package/dist/{hierCluster.interactivity-51883217.js → hierCluster.interactivity-327f5024.js} +1 -1
- package/dist/{hierCluster.renderers-5c1c78e5.js → hierCluster.renderers-1b71cb7a.js} +1 -1
- package/dist/{html.legend-5b991b7b.js → html.legend-b35db610.js} +1 -1
- package/dist/{imagePlot-4607b5d1.js → imagePlot-109d5e85.js} +1 -1
- package/dist/{lasso-8fa88465.js → lasso-4451c6f6.js} +1 -1
- package/dist/launch.adhoc-1697d63b.js +1 -0
- package/dist/{leftlabel.sample-e87401f4.js → leftlabel.sample-6b077b80.js} +1 -1
- package/dist/legacyDataset-1ba5e64d.js +1 -0
- package/dist/{log-4fa61483.js → log-b0f7291b.js} +1 -1
- package/dist/{lollipop-0bc6dfe3.js → lollipop-fa0f07b6.js} +1 -1
- package/dist/{maf-84d6ec96.js → maf-d53ff66a.js} +1 -1
- package/dist/{maftimeline-a71fb199.js → maftimeline-7b6c58c3.js} +1 -1
- package/dist/{matrix-00a06207.js → matrix-2ef01f5b.js} +1 -1
- package/dist/{matrix.cells-58a7f50d.js → matrix.cells-135fe285.js} +1 -1
- package/dist/{matrix.cluster-9b842cc0.js → matrix.cluster-7144d0c4.js} +1 -1
- package/dist/{matrix.config-3ade7cc4.js → matrix.config-9a9a5393.js} +1 -1
- package/dist/{matrix.controls-74993479.js → matrix.controls-355dd26f.js} +1 -1
- package/dist/{matrix.data-68ab8888.js → matrix.data-7ff930f8.js} +1 -1
- package/dist/{matrix.dom-24318f79.js → matrix.dom-cf3a2b94.js} +1 -1
- package/dist/{matrix.groups-4cd9a19c.js → matrix.groups-9f9a4e5b.js} +1 -1
- package/dist/matrix.interactivity-644ef2b9.js +1 -0
- package/dist/{matrix.layout-1aa7d4e1.js → matrix.layout-c5a3be06.js} +1 -1
- package/dist/{matrix.legend-b4b7b334.js → matrix.legend-d259590d.js} +1 -1
- package/dist/{matrix.renderers-f178ef4a.js → matrix.renderers-274e660f.js} +1 -1
- package/dist/{matrix.serieses-07071fd3.js → matrix.serieses-132fedef.js} +1 -1
- package/dist/{matrix.sort-93df5d1f.js → matrix.sort-54c2e25a.js} +1 -1
- package/dist/{matrix.sorterUi-4949012e.js → matrix.sorterUi-0812d185.js} +1 -1
- package/dist/{mavb-0a51aadf.js → mavb-40c9c55b.js} +1 -1
- package/dist/{mds.fimo-d233cc06.js → mds.fimo-46b4d352.js} +1 -1
- package/dist/{mds.samplescatterplot-95e76b31.js → mds.samplescatterplot-e6283816.js} +1 -1
- package/dist/{mds.survivalplot-26d4356d.js → mds.survivalplot-a5c2c3c5.js} +1 -1
- package/dist/{metaboliteIntensity-c287a571.js → metaboliteIntensity-b354703d.js} +1 -1
- package/dist/niceNumLabels-9cf2826f.js +1 -0
- package/dist/{nodrag-8af168fe.js → nodrag-977e760f.js} +1 -1
- package/dist/{notify-c75dc1b7.js → notify-ff396d4e.js} +1 -1
- package/dist/{numeric-d5397f03.js → numeric-b5d390de.js} +1 -1
- package/dist/{numeric.binary-fd60b254.js → numeric.binary-b217cd90.js} +1 -1
- package/dist/numeric.continuous-cbb5f843.js +1 -0
- package/dist/numeric.discrete-9ce5a2be.js +1 -0
- package/dist/{numeric.spline-8ed77d99.js → numeric.spline-bea32434.js} +1 -1
- package/dist/{numeric.toggle-15e12b70.js → numeric.toggle-18a97031.js} +1 -1
- package/dist/oncomatrix-4efd3f0c.js +1 -0
- package/dist/{parseData-c81e2457.js → parseData-f63789a4.js} +1 -1
- package/dist/{plot.2dvaf-09852854.js → plot.2dvaf-cacf57c4.js} +1 -1
- package/dist/plot.app-d04b34b8.js +1 -0
- package/dist/{plot.barplot-9d4523cb.js → plot.barplot-488a2fa6.js} +1 -1
- package/dist/{plot.boxplot-bcaa2cfb.js → plot.boxplot-10a5e3da.js} +1 -1
- package/dist/{plot.brainImaging-d23f095c.js → plot.brainImaging-827c6730.js} +1 -1
- package/dist/plot.disco-6dd83dac.js +1 -0
- package/dist/{plot.dzi-b2343036.js → plot.dzi-a2ec3e73.js} +1 -1
- package/dist/plot.ssgq-eba65102.js +1 -0
- package/dist/plot.tia-ca69ade7.js +1 -0
- package/dist/{plot.vaf2cov-f263cf73.js → plot.vaf2cov-dbe30898.js} +1 -1
- package/dist/{profileBarchart-a56097de.js → profileBarchart-7b764883.js} +1 -1
- package/dist/{profileHome-314ee616.js → profileHome-b632f5ff.js} +1 -1
- package/dist/profilePlot-c26abdae.js +1 -0
- package/dist/profilePolar-7780dd18.js +1 -0
- package/dist/profileRadar-12035628.js +1 -0
- package/dist/{profileRadarFacility-5ae97ce1.js → profileRadarFacility-443fa0bc.js} +1 -1
- package/dist/{profileSummary-6e8846c5.js → profileSummary-79c2821a.js} +1 -1
- package/dist/recover-47fa80f4.js +1 -0
- package/dist/{regression.inputs-d337f09d.js → regression.inputs-5450be57.js} +1 -1
- package/dist/{regression.inputs.values.table-2022c512.js → regression.inputs.values.table-e54beea0.js} +1 -1
- package/dist/{regression.results-0c712f0e.js → regression.results-5b32fc62.js} +1 -1
- package/dist/{renderPvalueTable-b282b409.js → renderPvalueTable-2c668798.js} +1 -1
- package/dist/{roundValue-bdeca19e.js → roundValue-9079d4c7.js} +1 -1
- package/dist/{sampleScatter-0c702007.js → sampleScatter-9e46e731.js} +1 -1
- package/dist/sampleScatter.interactivity-a347923c.js +1 -0
- package/dist/{sampleScatter.rendererThree-9b30c19b.js → sampleScatter.rendererThree-a41b7528.js} +2 -2
- package/dist/sampleView-244d17ad.js +1 -0
- package/dist/{samplelst-e83b26ee.js → samplelst-956f699d.js} +1 -1
- package/dist/{samplematrix-3e8f801c.js → samplematrix-3f5a62de.js} +1 -1
- package/dist/{scatter-e48ab662.js → scatter-a3e8d117.js} +1 -1
- package/dist/{select2Terms-b916930f.js → select2Terms-a88c5b72.js} +1 -1
- package/dist/{selectGenomeWithTklst-8b2682ed.js → selectGenomeWithTklst-6cdea3c5.js} +1 -1
- package/dist/{singleCellCellType-3bf9edc9.js → singleCellCellType-0bcb1b3a.js} +1 -1
- package/dist/{singleCellGeneExpression-fe78af90.js → singleCellGeneExpression-c40bcfee.js} +1 -1
- package/dist/{singleCellPlot-7c69876b.js → singleCellPlot-85535b75.js} +1 -1
- package/dist/{singlecell-ba9416b5.js → singlecell-39b92a9a.js} +1 -1
- package/dist/{singlecell-1aa3ed96.js → singlecell-bff31e75.js} +1 -1
- package/dist/{snp-fddad9f0.js → snp-1cb063f1.js} +1 -1
- package/dist/{snp-3a228544.js → snp-cecdad55.js} +1 -1
- package/dist/{snplocus-223775ab.js → snplocus-e5e2eb24.js} +1 -1
- package/dist/{spliceevent.a53ss.diagram-31ebee02.js → spliceevent.a53ss.diagram-1f40a692.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-e12c1964.js → spliceevent.exonskip.diagram-fb335ebc.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-1c4fec05.js +1 -0
- package/dist/{spliceevent.noeventdiagram-88ce4fa4.js → spliceevent.noeventdiagram-c7aff4bb.js} +1 -1
- package/dist/{spliceevent.phrase-af9f8848.js → spliceevent.phrase-74b77c9a.js} +1 -1
- package/dist/{stattable-f522ad6a.js → stattable-16b65fa2.js} +1 -1
- package/dist/{style.gdc-6ba4fedf.js → style.gdc-bdc95034.js} +1 -1
- package/dist/summary-de622daa.js +1 -0
- package/dist/{sunburst-1c5fbe4d.js → sunburst-7be3e1b0.js} +1 -1
- package/dist/survival-3623fa05.js +1 -0
- package/dist/{survival-406512bd.js → survival-96467d49.js} +1 -1
- package/dist/{svg.download-35413262.js → svg.download-44d2b0e5.js} +1 -1
- package/dist/{svg.legend-d099edbe.js → svg.legend-64d0f4cc.js} +1 -1
- package/dist/{svgraph-0dbeff4d.js → svgraph-f4771a5d.js} +1 -1
- package/dist/{svmr-d9e274e7.js → svmr-b100f2ec.js} +1 -1
- package/dist/{table-8581b1c6.js → table-57e17295.js} +1 -1
- package/dist/{table-b5c7914e.js → table-aff76e79.js} +1 -1
- package/dist/{termInfo-2997647d.js → termInfo-9e267ed9.js} +1 -1
- package/dist/termdb.bins-2c125708.js +1 -0
- package/dist/{tk-63dd8ffd.js → tk-aa76c5d2.js} +1 -1
- package/dist/{toggleButtons-3c56fcea.js → toggleButtons-e27421ba.js} +1 -1
- package/dist/{tp.ui-01aa6ea1.js → tp.ui-de4a92f2.js} +1 -1
- package/dist/{tvs.density-a92d77b2.js → tvs.density-7569c342.js} +1 -1
- package/dist/{tvs.geneVariant-8ed212a7.js → tvs.geneVariant-d666c132.js} +1 -1
- package/dist/{tvs.numeric-d73d1de9.js → tvs.numeric-87f4946b.js} +1 -1
- package/dist/{tvs.samplelst-753d8047.js → tvs.samplelst-ea1c8209.js} +1 -1
- package/dist/{uiUtils-44a8a5ff.js → uiUtils-00594591.js} +1 -1
- package/dist/{variantBrowser-de83b3bf.js → variantBrowser-d47eab79.js} +1 -1
- package/dist/{vcf-a21210aa.js → vcf-2e0c9552.js} +1 -1
- package/dist/{violin-d7958554.js → violin-f792d953.js} +1 -1
- package/dist/{violin.interactivity-a721ce07.js → violin.interactivity-ea93a515.js} +1 -1
- package/dist/{violin.renderer-b424f63d.js → violin.renderer-fc4d580a.js} +1 -1
- package/dist/{violinRenderer-1bae0fbb.js → violinRenderer-5b91ceed.js} +1 -1
- package/dist/{viridis-f2cf68bb.js → viridis-03e81dc4.js} +1 -1
- package/dist/{y-402c44f1.js → y-c1999c85.js} +1 -1
- package/dist/{zoom-f67f07e4.js → zoom-7f4cf30a.js} +1 -1
- package/package.json +2 -1
- package/dist/FilterStateless-81507a93.js +0 -1
- package/dist/app-c733b403.js +0 -1
- package/dist/block.lazyload-52d78b58.js +0 -1
- package/dist/block.tk.junction-a07b58e3.js +0 -1
- package/dist/brainImaging-018b2f86.js +0 -1
- package/dist/cuminc-c5a680ca.js +0 -1
- package/dist/databrowser.ui-2f27fafb.js +0 -1
- package/dist/launch.adhoc-8ee8c684.js +0 -1
- package/dist/legacyDataset-dfff500b.js +0 -1
- package/dist/matrix.interactivity-c2b92099.js +0 -1
- package/dist/niceNumLabels-a07b36bf.js +0 -1
- package/dist/numeric.continuous-fcb755ef.js +0 -1
- package/dist/numeric.discrete-59570063.js +0 -1
- package/dist/oncomatrix-13807379.js +0 -1
- package/dist/plot.app-26cc06f5.js +0 -1
- package/dist/plot.disco-8ecddd17.js +0 -1
- package/dist/plot.ssgq-742a9391.js +0 -1
- package/dist/profilePlot-6766270d.js +0 -1
- package/dist/profilePolar-c75749a4.js +0 -1
- package/dist/profileRadar-49d119b8.js +0 -1
- package/dist/recover-73a84767.js +0 -1
- package/dist/sampleScatter.interactivity-ab5de13f.js +0 -1
- package/dist/sampleView-e8075370.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-e9e82eaf.js +0 -1
- package/dist/summary-d3354625.js +0 -1
- package/dist/survival-66f067fb.js +0 -1
- package/dist/termdb.bins-71788afb.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as t,bn as e,bo as s,j as a,z as n,bl as i,ag as r,H as l,V as o,af as c,ay as p,P as h,d,Y as f,a8 as u}from"./app-f070f904.js";import{c as m,a as y,b as g}from"./axis-747c801e.js";import{s as x,b,e as k,a as v,f as _,d as D,c as w,S as T}from"./symbol-9df177b7.js";import"./math-1a9e8b53.js";import"./constant-426a1483.js";class N{constructor(t){this.opts=t;this.anchorType=t.anchorType;this.shareheight=t.shareheight;this.sharewidth=t.sharewidth;const e="x"in t?t.x:0;const s="y"in t?t.y:0;this.settings={visible:true,opacity:.3,x:e,y:s,xOffset:t.axiswidth+t.sp+t.sample2height,yOffset:t.shareheight,currX:t.axiswidth+t.sp+t.sample2height+e,currY:t.shareheight-s,strokeWidth:"strokeWidth"in t?t.strokeWidth:5,stroke:"stroke"in t?t.stroke:"red",xarmlen:"xarmlen"in t?t.xarmlen:25};this.addControls(this.anchorType?null:this.opts.headerdiv)}setWrapper(t){this.opts.wrapper=t}addControls(e=null){if(e){e.append("button").text("Anchors").on("click",(t=>{this.anchormenu.showunder(t.target);this.xInput.property("value",(this.settings.x/this.sharewidth).toFixed(2));this.yInput.property("value",(this.settings.y/this.sharewidth).toFixed(2))}))}this.anchormenu=new t({border:"solid 1px black"});this.anchormenu.d.style("text-align","center");this.addCoordInput();this.addColorInput();this.addOpacityInput();if(!this.anchorType)this.addSubmitBtns();else this.addDeleteBtn()}addColorInput(){const t=this.anchormenu.d.append("div");t.append("label").html("Color: ");this.strokeInput=t.append("input");this.strokeInput.attr("this.anchorType","text").property("value",this.settings.stroke).style("width","50px")}addOpacityInput(){const t=this.anchormenu.d.append("div");t.append("label").html("Opacity: ");this.opacityInput=t.append("input");this.opacityInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",this.settings.opacity).style("width","50px")}addSubmitBtns(){if(this.anchorType)return;const t=this.anchormenu.d.append("div");t.append("label").html("Add Anchor: ");t.append("button").html("R").on("click",(()=>{new R(this.getSettings("r"));this.anchormenu.hide()}));t.append("button").html("D").on("click",(()=>{new R(this.getSettings("d"));this.anchormenu.hide()}));t.append("button").html("X").on("click",(()=>{new R(this.getSettings("x"));this.anchormenu.hide()}));t.append("button").html("synced").on("click",(()=>{new R(this.getSettings("synced"));this.anchormenu.hide()}))}getSettings(t){return Object.assign({},this.opts,{anchorType:t,opacity:this.opacityInput.property("value"),x:this.xInput.property("value")*this.sharewidth,y:this.yInput.property("value")*this.shareheight,stroke:this.strokeInput.property("value")})}addCoordInput(){const t=this.anchormenu.d.append("div");t.append("label").html("X: ");this.xInput=t.append("input");this.xInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",0).style("width","80px");const e=this.anchormenu.d.append("div");e.append("label").html("Y: ");this.yInput=e.append("input");this.yInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",0).style("width","80px")}addDeleteBtn(){if(!this.anchorType)return;const t=this.anchormenu.d.append("div");t.append("button").html("Delete").on("click",(()=>{this.g_anchor.remove();this.anchormenu.hide()}))}}class R extends N{constructor(t){super(t);this.render();this.strokeInput.on("change",(()=>{this.settings.stroke=this.strokeInput.property("value");this.g_anchor.style("stroke",this.settings.stroke);this.anchormenu.hide()}));this.opacityInput.on("change",(()=>{this.settings.opacity=input.property("value");this.g_anchor.style("opacity",this.settings.opacity);this.anchormenu.hide()}));this.xInput.on("change",(()=>{this.settings.x=+this.xInput.property("value")*this.sharewidth;this.settings.currX=this.settings.x+this.settings.xOffset;if(this.d_anchor){this.d_anchor.transition().duration(1e3).attr("x1",this.settings.currX).attr("x2",this.settings.currX)}if(this.x_anchor){this.x_anchor.transition().duration(1e3).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")}this.anchormenu.hide()}));this.yInput.on("change",(()=>{this.settings.y=+this.yInput.property("value")*this.shareheight;this.settings.currY=-this.settings.y+this.settings.yOffset;if(this.r_anchor){this.r_anchor.transition().duration(1e3).attr("y1",this.settings.currY).attr("y2",this.settings.currY)}if(this.x_anchor){this.x_anchor.transition().duration(1e3).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")}this.anchormenu.hide()}))}render(){this.g_anchor=this.opts.wrapper.append("g").style("stroke",this.settings.stroke).style("opacity",this.settings.opacity).style("display",this.settings.visible?"":"none").style("stroke-width",this.settings.strokeWidth).on("click",this.anchorType=="synced"?null:t=>{this.anchormenu.showunder(t.target)});this.renderD();this.renderR();this.renderX()}renderD(){if(!["synced","d"].includes(this.anchorType))return;this.d_anchor=this.g_anchor.append("line");const t=this.opts;this.updateD(t.shareheight+t.sp2,t.shareheight+t.sample1height)}updateD(t,e){if(!["synced","d"].includes(this.anchorType))return;this.settings.D={y1:t,y2:e};this.d_anchor.attr("x1",this.settings.currX).attr("x2",this.settings.currX).attr("y1",t).attr("y2",e)}renderR(){if(!["synced","r"].includes(this.anchorType))return;this.r_anchor=this.g_anchor.append("line");const t=this.opts;this.updateR(t.axiswidth+t.sp,t.sample2height+t.sp)}updateR(t,e){if(!["synced","r"].includes(this.anchorType))return;this.settings.R={x1:t,x2:e};this.r_anchor.attr("x1",t).attr("x2",e).attr("y1",this.settings.currY).attr("y2",this.settings.currY)}renderX(){if(!["synced","x"].includes(this.anchorType))return;this.x_anchor=this.g_anchor.append("g").attr("transform","translate("+this.settings.currX+","+this.settings.currY+")");this.bindXDrag();this.x_anchor.append("circle").attr("cx",0).attr("cy",0).attr("r",this.settings.xarmlen).style("opacity",0);this.x_anchor.append("line").attr("x1",-this.settings.xarmlen).attr("x2",this.settings.xarmlen).attr("y1",0).attr("y2",0);this.x_anchor.append("line").attr("x1",0).attr("x2",0).attr("y1",this.settings.xarmlen).attr("y2",-this.settings.xarmlen)}bindXDrag(){if(!["synced"].includes(this.anchorType))return;this.x_anchor.on("mousedown",(t=>{const e=t.clientX;const s=t.clientY;let a=this.settings.currX,n=this.settings.currY;this.x_anchor.on("mousemove",(t=>{a=this.settings.currX-e+t.clientX;n=this.settings.currY-s+t.clientY;this.r_anchor.attr("y1",n).attr("y2",n);this.d_anchor.attr("x1",a).attr("x2",a);this.x_anchor.attr("transform","translate("+a+","+n+")")})).on("mouseup",(t=>{this.x_anchor.on("mousemove",null);a=this.settings.currX-e+t.clientX;n=this.settings.currY-s+t.clientY;if(a==this.settings.currX&&n==this.settings.currY){this.g_anchor.remove();return}this.settings.x=a<this.settings.xOffset?0:a-this.settings.xOffset;this.settings.y=n>this.settings.yOffset?0:-(n-this.settings.yOffset);this.settings.currX=this.settings.x+this.settings.xOffset;this.settings.currY=-this.settings.y+this.settings.yOffset;this.r_anchor.transition().duration(100).attr("y1",this.settings.currY).attr("y2",this.settings.currY);this.d_anchor.transition().duration(100).attr("x1",this.settings.currX).attr("x2",this.settings.currX);this.x_anchor.transition().duration(100).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")})).on("mouseleave",(()=>{this.x_anchor.on("mousemove",null)}))}))}}const I="#f9766c";const M="#609cff";const X="#01b937";const B={circle:x,cross:b,diamond:k,square:v,star:_,triangle:D,wye:w};const F={path:t=>t.symbol,circle:t=>!t.symbol};const Y={path:t=>t.symbol,ellipse:t=>!t.symbol};function z(t,a){let n,i,r,l,o,c;if(a!==undefined)[i,r,l,o,c]=e(a,t);else{[n,i,r,l,o,c]=s(100,100,t);n.header.text("2DMAF: mutant allele fraction plot between a pair of samples");n.body.style("margin","10px")}i.append("div").style("margin-top","20px").html("<ul>"+'<li><a href="https://docs.google.com/document/d/1anyEDMcW1lTSf8399Li2G9r57V-Fqp2591WvoODY7n4/edit#heading=h.mne2ecmp9m13" target=_blank>File format</a></li>'+'<li>To define samples differently than "Diagnosis/Relapse", <a href=https://plus.google.com/+XinZhou_s/posts/WqBVvmd3wYR target=_blank>see how</a>.</li>'+"</ul>");i.append("p").html("<a href=https://proteinpaint.stjude.org/ppdemo/hg19/2dmaf/2dmaf.txt target=_blank>Example file</a>");function p(t,e){o.style("color",e?"red":"black").html(t)}const h=()=>{l.selectAll("*").remove();const e=l.append("input").attr("type","file").on("change",(e=>{const s=e.target.files[0];if(!s){h();return}if(!s.size){p("Invalid file "+s.name);h();return}const a=new FileReader;a.onload=e=>{const a=r.options[r.selectedIndex].innerHTML;const n=C(e.target.result.trim().split(/\r?\n/),t[a],s.name,c);if(n){p(n,1);h();return}i.remove();l.remove();o.remove()};a.onerror=function(){p("Error reading file "+s.name,1);h();return};a.readAsText(s,"utf8")}));setTimeout((()=>e.node().focus()),1100)};h()}function A(t,e){if(!t.genome){a(e,".genome missing for 2dmaf");return}if(!t.input){a(e,".input missing for 2dmaf");return}const s=C(t.input.trim().split(/\r?\n/),t.genome,t.datasetname||"unnamed dataset",e);if(s){a(e,"2DMAF data error: "+s)}}function C(t,e,s,a){const[r,l,o]=O(t[0].trim());if(r){return r}const c={};const p={};const h={};const d={good:0,purity1set:false,purity2set:false,pairsetname:{}};const f=[];const u={};for(const t in n){u[n[t].label.toUpperCase()]=t}for(let e=1;e<t.length;e++){if(t[e]=="")continue;if(t[e][0]=="#"){if(t[e].startsWith("##samplename")){const s=t[e].trim().split(/[\s\t]+/);if(s.length==4){d.pairsetname[s[1]]={1:s[2],2:s[3]}}else{return"Line "+(e+1)+': invalid samplename line: must be "##samplename [patient] [sample1] [sample2]"'}}continue}const s=t[e].trim().split("\t");const a={};for(let t=0;t<l.length;t++){if(s[t]!=undefined&&s[t]!=""){a[l[t]]=s[t]}}if(!a.sample){return"Line "+(e+1)+": missing sample"}if(a.chr){if(a.chr.indexOf("chr")!=0){a.chr="chr"+a.chr}}if(a.chrstart){a.chrstart=Number.parseInt(a.chrstart);if(Number.isNaN(a.chrstart)){return"Line "+(e+1)+": invalid chromosome position"}}if(a.Dcnvloh){a.Dcnvlohraw=a.Dcnvloh;const t=a.Dcnvloh.toLowerCase();if(t=="yes"||t!="diploid"&&t!="haploid"){a.Dcnvloh=true}else{a.Dcnvloh=false}}if(a.Rcnvloh){a.Rcnvlohraw=a.Rcnvloh;const t=a.Rcnvloh.toLowerCase();if(t=="yes"||t!="diploid"&&t!="haploid"){a.Rcnvloh=true}else{a.Rcnvloh=false}}if(!a.call_d){f.push([e,"missing call_d",s]);continue}if(a.call_d!="somatic"&&a.call_d!="wildtype"){f.push([e,"call_d is neither somatic nor wildtype",s]);continue}if(!a.call_r){f.push([e,"missing call_r",s]);continue}if(a.call_r!="somatic"&&a.call_r!="wildtype"){f.push([e,"call_r is neither somatic nor wildtype",s]);continue}if(a.call_d=="somatic"){if(a.call_r=="somatic"){a.set_share=true}else{a.set_1=true}}else{if(a.call_r=="somatic"){a.set_2=true}}if(!a.type){f.push([e,"missing type",s]);continue}const i=a.type.toLowerCase();if(i=="snv"||i=="snp"||i=="mnv"||i=="complex"){a.issnv=true}else if(i=="indel"||i=="ins"||i=="del"){a.isindel=true}else{f.push([e,"type must be either SNV or INDEL",s]);continue}let r="MinD.D";let o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;r="TinD.D";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;if(a["TinD.D"]<a["MinD.D"]){f.push([e,"TinD.D value lower than MinD.D",s]);continue}r="MinN.D";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="TinN.D";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="MinD.R";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;r="TinD.R";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;if(a["TinD.R"]<a["MinD.R"]){f.push([e,"TinD.R value lower than MinD.R",s]);continue}r="MinN.R";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="TinN.R";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}if(a.symbol){if(!B[a.symbol]){f.push([e,"Invalid symbol value='"+a.symbol+"'",s]);continue}}if(a.class){const t=a.class.toUpperCase();if(t in u){a.class=u[t]}else{f.push([e,"invalid mutation class "+a.class,s]);continue}}a.style={fill:a.issnv?"white":"black",fillhl:a.class?n[a.class].color:"#ccc",stroke:a.chr=="chrX"?"black":a.issnv?"black":"none",strokehl:a.class?n[a.class].color:"black",fillopacity:a.issnv?0:.2,strokeopacity:.2};if(a["TinD.D"]>0){a.maf1=a["MinD.D"]/a["TinD.D"]}if(a["TinD.R"]>0){a.maf2=a["MinD.R"]/a["TinD.R"]}p[a.sample]=1;if(a.gene){h[a.gene]=1}if(!(a.sample in c)){c[a.sample]={name:a.sample,shown:false,header:l,mlst:[]}}const m=c[a.sample];m.mlst.push(a);if(a.purity1){let t=Number.parseFloat(a.purity1);if(Number.isNaN(t)){f.push([e,"diagnosis tumor purity should be a number"]);t=0}else{if(t>1){t/=100}}if(t>0){if(m.purity1==undefined){m.purity1=t;d.purity1set=true}else if(m.purity1!=t){f.push([e,"diagnosis tumor purity value "+t+" is different from existing value "+m.purity1+" in "+a.sample,s])}}}if(a.purity2){let t=Number.parseFloat(a.purity2);if(Number.isNaN(t)){f.push([e,"relapse tumor purity should be a number"]);t=0}else{if(t>1){t/=100}}if(t>0){if(m.purity2==undefined){m.purity2=t;d.purity2set=true}else if(m.purity2!=t){f.push([e,"relapse tumor purity value "+t+" is different from existing value "+m.purity2+" in "+a.sample,s])}}}d.good++}if(f.length>0){i(l,f)}if(d.good==0){return"No valid data."}a.append("p").text("File: "+s);let m=0;for(const t in h)m++;const y=16;const g=a.append("table");const x=g.append("tr");const b=x.append("td").attr("valign","top");b.append("div").html('<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+I+'"></div> Diagnosis only '+'<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+X+'"></div> Shared '+'<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+M+'"></div> Relapse only');const k=b.append("div").style("margin-top","10px").style("height","200px").style("width","300px").style("padding","5px").style("overflow-y","scroll").style("resize","both").style("border","solid 1px #ccc");b.append("div").style("margin-top","10px").style("height","200px").style("width","300px").style("padding","5px").style("overflow-y","scroll").style("resize","both").style("border","solid 1px #ccc");const v=x.append("td").style("vertical-align","top");for(const t in c){const e=d.pairsetname[t];if(e){c[t].setname=e}else{c[t].setname={1:"Diagnosis",2:"Relapse"}}}const _={genome:e,pairs:c,color1:I,color2:M,colorshare:X,rowh:y,peoplewidth:150,genewidth:150,showholder:v,genelimit:Math.min(20,m),purity1set:d.purity1set,purity2set:d.purity2set};E(_,k)}function O(t){const e=t.toLowerCase().split("\t");const s=t.split("\t");if(s.length<=1){return["invalid file header"]}const a=(...t)=>{for(const s of t){const t=e.indexOf(s);if(t!=-1)return t}return-1};let i=a("person","sample","samplename","patient");if(i==-1)return["sample missing from header"];s[i]="sample";i=a("type");if(i==-1)return["type missing from header"];s[i]="type";i=a("mind.d1_g1","mind.d","mind");if(i==-1)return["MinD.D missing from header"];s[i]="MinD.D";i=a("tind.d1_g1","tind.d","tind");if(i==-1)return["TinD.D missing from header"];s[i]="TinD.D";i=a("mind.r1_g1","mind.r","minr");if(i==-1)return["MinD.R missing from header"];s[i]="MinD.R";i=a("tind.r1_g1","tind.r","tinr");if(i==-1)return["TinD.R missing from header"];s[i]="TinD.R";i=a("call_d1_g1","call_d");if(i==-1)return["call_d missing from header"];s[i]="call_d";i=a("call_r1_g1","call_r");if(i==-1)return["call_r missing from header"];s[i]="call_r";i=a("genename","gene");if(i==-1)return["gene missing from header"];s[i]="gene";i=a("amino_acid_change","annovar_sj_aachange","aachange","protein_change");if(i==-1)return["amino_acid_change missing from header"];s[i]="mname";i=a("class","mclass","variant_class","variant_classification","annovar_sj_class");if(i==-1)return["variant_class missing from header"];s[i]="class";i=a("chromosome","chr");if(i==-1)return["chromosome missing from header"];s[i]="chr";i=a("start","start_position","wu_hg19_pos","chr_position");if(i==-1)return["start missing from header"];s[i]="chrstart";i=a("minn.d1_g1","minn.d");if(i!=-1)s[i]="MinN.D";i=a("tinn.d1_g1","tinn.d");if(i!=-1)s[i]="TinN.D";i=a("minn.r1_g1","minn.r");if(i!=-1)s[i]="MinN.R";i=a("tinn.r1_g1","tinn.r");if(i!=-1)s[i]="TinN.R";i=a("mrna_accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq");if(i!=-1)s[i]="isoform";i=a("primary_purity","purity_d");if(i!=-1)s[i]="purity1";i=a("relapse_purity","purity_r");if(i!=-1)s[i]="purity2";i=a("tag_d_cnvloh","cnvloh_d");if(i!=-1)s[i]="Dcnvloh";i=a("tag_r_cnvloh","cnvloh_r");if(i!=-1)s[i]="Rcnvloh";const r=[];for(const t of s){switch(t){case"Dcnvloh":r.push({label:"D. CNV/LOH",get:t=>t.Dcnvlohraw});break;case"Rcnvloh":r.push({label:"R. CNV/LOH",get:t=>t.Rcnvlohraw});break;case"type":r.push({label:"Type",get:t=>t.type});break;case"chr":break;case"chrstart":r.push({label:"Genome Loc.",get:t=>t.chr+":"+(t.chrstart+1)});break;case"class":r.push({label:"Class",get:t=>{if(t.class==p){return t.originalclasslabel?t.originalclasslabel:n[t.class].label}return n[t.class].label}});break;case"mname":r.push({label:"Mutation",get:t=>{let e=t.mname;if(!e)e=t.cdna_change;return e}});break;case"MinD.D":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_diagnosis,label:"D. tumor MAF",fill:"#F7483B",fillbg:"#FCBAB6"});break;case"TinD.D":break;case"MinD.R":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_relapse,label:"R. tumor MAF",fill:"#146EFF",fillbg:"#B6D5FC"});break;case"TinD.R":break;case"MinN.D":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_diagnosis_normal,label:"D. normal MAF",fill:"#F7483B",fillbg:"#FCBAB6"});break;case"TinN.D":break;case"MinN.R":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_relapse_normal,label:"R. normal MAF",fill:"#146EFF",fillbg:"#B6D5FC"});break;case"TinN.R":break;case"call_d":r.push({label:"D. call",get:t=>t.call_d});break;case"call_r":r.push({label:"R. call",get:t=>t.call_r});break;case"purity1":r.push({label:"D. purity",get:t=>t.purity1});break;case"purity2":r.push({label:"R. purity",get:t=>t.purity2});break;default:r.push({label:t,get:e=>e[t]})}}return[null,s,r]}function j(e,s){const a=new t({border:"solid 1px black"});const i=[];const o=[];const p=[];const f=s.mlst;const u=f[0].sample;const m=T();let x=0;let b={};const k={};for(const t of f){if(t["TinD.D"]>0){x=Math.max(x,t["TinD.D"])}if(t["TinD.R"]>0){x=Math.max(x,t["TinD.R"])}if(t.set_share){p.push(t)}else if(t.set_1){i.push(t)}else if(t.set_2){o.push(t)}if(!(t.class in k)){k[t.class]=0}if(t.symbol){if(!b[t.symbol]){b[t.symbol]={numlines:0,label:t.symbollabel,hidden:false}}b[t.symbol].numlines++}k[t.class]++}const v=Math.min(window.innerWidth,window.innerHeight);const _=50,D=v*.5,w=v*.5,R=w/2,I=D/2,M=_/3,X=R/5,z=Math.min(20,12*v/500),A=v/40,C=A*.7,O=3;const j=l().domain([0,x]).range([A/2,A]);const W=t=>Math.PI*Math.pow(j(t),2);for(const t of f){t.radius=Math.max(t["TinD.D"]?j(t["TinD.D"]):0,t["TinD.R"]?j(t["TinD.R"]):0)}const E=e.append("table");const H=E.append("tr");const q=H.append("td").style("vertical-align","top");const G=H.append("td").style("vertical-align","top");G.append("div").style("margin","10px").text("Name: "+u);const P=q.append("div");P.append("button").text("Hide").on("click",(()=>{s.shown=false;if(s.handle){s.handle.attr("font-weight","normal")}E.remove()}));const U=new N({axiswidth:_,sp:M,sp2:X,sample1height:R,sample2height:I,shareheight:w,sharewidth:D,headerdiv:P});P.append("button").text("Screenshot").on("click",(()=>{h(Z.node(),"2dmaf_"+s.name)}));{const t=P.append("select").on("change",(t=>{const e=t.target.options[t.target.selectedIndex].value;if(e=="all"){at.transition().attr("transform",(t=>t.posstring+" scale(1)"));ot.transition().attr("transform",(t=>t.posstring+" scale(1)"));dt.transition().attr("transform",(t=>t.posstring+" scale(1)"));return}at.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"));ot.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"));dt.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"))}));t.append("option").text("Show all mutation classes").property("value","all");const e=[];for(const t in k){e.push([t,k[t]])}e.sort(((t,e)=>e[1]-t[1]));for(const s of e){t.append("option").text((s[0]in n?n[s[0]].label:s[0])+" ("+s[1]+")").property("value",s[0])}}const Z=q.append("svg").attr("width",_+M+I+D+M*2).attr("height",_+M+R+w+M*2);const J=Z.append("g").attr("transform","translate("+M+","+M+")");U.setWrapper(J.append("g"));const K=l().domain([0,1]).range([0,D]);const Q=J.append("g").attr("transform","translate("+(_+M+I)+","+(w+R+M)+")").call(y().scale(K).tickSize(5));c({axis:Q,showline:true,fontsize:z*.8});const $=i.length+p.length;Q.append("text").text(s.setname[1]+", n="+$+(s.purity1?", purity="+s.purity1:"")).attr("x",D/2).attr("y",_-4).attr("text-anchor","middle").attr("font-size",z);const tt=l().domain([0,1]).range([w,0]);const et=J.append("g").attr("transform","translate("+_+",0)").call(g().scale(tt).tickSize(5));c({axis:et,showline:true,fontsize:z*.8});const st=o.length+p.length;et.append("text").text(s.setname[2]+", n="+st+(s.purity2?", purity="+s.purity2:"")).attr("transform","translate("+(z-_-10)+","+w/2+") rotate(-90)").attr("text-anchor","middle").attr("font-size",z);J.append("path").attr("d","M"+(_+M)+",0"+"h"+(I+D)+"v"+(w+R)+"h-"+D+"v-"+(R+w)+"M"+(_+M)+",0"+"v"+w+"h"+(I+D)+"M"+(_+M+I)+","+w+"l"+D+",-"+w).attr("fill","none").attr("stroke","black").attr("shape-rendering","crispEdges").attr("stroke-dasharray","5,5");const at=J.append("g").attr("transform","translate("+(_+M+I)+",0)").selectAll().data(p).enter().append("g").attr("transform",(t=>{t.posstring="translate("+K(t.maf1)+","+tt(t.maf2)+")";return t.posstring}));at.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);at.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);let nt=at;for(const t in Y){nt.filter(Y[t]).append(t).attr("rx",(t=>t.symbol?null:j(t["TinD.D"]))).attr("ry",(t=>t.symbol?null:j(t["TinD.R"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.D"])+W(t["TinD.R"])/2)())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const it=l().domain([0,x]).range([R-X,0]);const rt=J.append("g").attr("transform","translate("+(_+M+I)+","+(w+X)+")");const lt="#FFBEAD";rt.append("rect").attr("fill",lt).attr("fill-opacity",0).attr("x",0).attr("width",3).attr("height",R-X);c({axis:rt.call(g().scale(it).tickValues([0,x])),showline:true,fontsize:z*.8});rt.append("g").attr("transform","translate(-"+z/2+","+(R-X)/2+")").append("text").text("D total").attr("font-size",z*.8).attr("font-family",r).attr("fill","black").attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform","rotate(-90)");const ot=rt.selectAll().data(i).enter().append("g").attr("transform",(t=>{t.posstring="translate("+K(t.maf1)+","+it(t["TinD.D"])+")";return t.posstring}));ot.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);ot.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);nt=ot;for(const t in F){nt.filter(F[t]).append(t).attr("class",(t=>t.symbol?"twodmaf-"+t.symbol:null)).attr("r",(t=>t.symbol?null:j(t["TinD.R"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.R"]))())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const ct=l().domain([0,x]).range([0,I-X]);const pt=J.append("g").attr("transform","translate("+(_+M)+",0)");pt.append("rect").attr("fill",lt).attr("fill-opacity",0).attr("y",w).attr("width",I-X).attr("height",3);const ht=pt.append("g").attr("transform","translate(0,"+w+")").call(y().scale(ct).tickValues([0,x]));c({axis:ht,showline:true,fontsize:z*.8});pt.append("text").text("R total").attr("font-size",z*.8).attr("font-family",r).attr("fill","black").attr("x",(I-X)/2).attr("y",w+z).attr("text-anchor","middle");const dt=pt.selectAll().data(o).enter().append("g").attr("transform",(t=>{t.posstring="translate("+ct(t["TinD.R"])+","+tt(t.maf2)+")";return t.posstring}));dt.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);dt.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);nt=dt;for(const t in F){nt.filter(F[t]).append(t).attr("class",(t=>t.symbol?"twodmaf-"+t.symbol:null)).attr("r",(t=>t.symbol?null:j(t["TinD.D"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.R"]))())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const ft=J.append("g").attr("transform","translate(0,"+(w+X)+")");let ut=z;ft.append("text").text(u).attr("font-size",z).attr("y",ut);const mt=j(20),yt=j(x);ut+=z+yt;let gt;ft.append("text").text("SNV coverage").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",mt).attr("stroke","black").attr("fill","none");ft.append("text").text(20).attr("x",gt).attr("y",ut).attr("text-anchor","middle").attr("dominant-baseline","middle");gt+=mt+yt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",yt).attr("stroke","black").attr("fill","none");ft.append("text").text(x).attr("x",gt).attr("y",ut).attr("text-anchor","middle").attr("dominant-baseline","middle");ut+=yt+10;ft.append("text").text("Indel").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));ft.append("circle").attr("cx",gt+10+C/2).attr("cy",ut).attr("r",C/2).attr("fill","black").attr("fill-opacity",.3);ut+=30;ft.append("text").text("chrX").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("stroke-dasharray","5,5").attr("fill","none");ut+=30;ft.append("text").text("D. CNV/LOH").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("fill","none");ft.append("circle").attr("cx",gt).attr("cy",ut+10).attr("r",O).attr("fill","black");ut+=30;ft.append("text").text("R. CNV/LOH").attr("y",ut).attr("dominant-baseline","central").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("fill","none");ft.append("circle").attr("cx",gt-10).attr("cy",ut).attr("r",O).attr("fill","black");ut+=30;if(s.purity1!=undefined||s.purity2!=undefined){ft.append("text").text("Expected MAF").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=10;ft.append("rect").attr("fill",lt).attr("x",gt).attr("y",ut).attr("width",40).attr("height",3);ut+=30}const xt=Object.keys(b);if(xt.length){ft.append("text").text("Symbols").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));let t;for(const e in b){const s=b[e];const a=ft.append("g").on("click",(()=>{s.hidden=!s.hidden;Z.selectAll(".twodmaf-"+e).style("display",s.hidden?"none":"");n.style("text-decoration",s.hidden?"line-through":"")}));t=gt+20;a.append("path").attr("transform","translate("+t+","+ut+")").attr("d",m.type(B[e]).size(100)()).attr("stroke","black").attr("fill","none").each((function(){t+=this.getBBox().width}));const n=a.append("text").text(s.label?s.label+" ("+s.numlines+")":"").attr("y",ut+2).attr("x",t).attr("dominant-baseline","middle").style("text-decoration",s.hidden?"line-through":"");ut+=30}ut+=30}const bt={},kt={},vt={},_t={};for(const t of f){if(!t.gene)continue;if(!(t.gene in bt)){bt[t.gene]=[]}bt[t.gene].push(t);if(t.set_1){kt[t.gene]=1}else if(t.set_2){vt[t.gene]=1}else if(t.set_share){_t[t.gene]=1}}const Dt=[];for(const t in kt){Dt.push(t)}for(const t in vt){if(!(t in kt)){Dt.push(t)}}for(const t in _t){if(!(t in kt)&&!(t in vt)){Dt.push(t)}}const wt=G.append("div").style("height",w+R+"px").style("margin","10px").style("padding","10px").style("border","solid 1px #ccc").style("overflow-y","scroll").style("resize","both").append("table");{const t=wt.append("tr");t.append("td").text("Gene");t.append("td").text(s.setname[1]+" only");t.append("td").text(s.setname[2]+" only");t.append("td").text("Shared")}let Tt=true;for(const t of Dt){const e=wt.append("tr");if(Tt){e.style("background-color","#f3f3f3")}Tt=!Tt;e.append("td").text(t);let s=[];if(t in bt){s=bt[t]}const a=[],n=[],i=[];for(const t of s){if(t.set_share)i.push(t);else if(t.set_1)a.push(t);else if(t.set_2)n.push(t)}let r=e.append("td");if(a.length){for(const t of a){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,ot)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}r=e.append("td");if(n.length){for(const t of n){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,dt)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}r=e.append("td");if(i.length){for(const t of i){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,at)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}}function Nt(t,e,s){if(e.selected){t.style.border="";e.selected=false}else{t.style.border="solid 1px black";e.selected=true}const a=s.filter((t=>t.gene==e.gene&&t.class==e.class&&t.mname==e.mname));a.selectAll("rect").attr("fill-opacity",e.selected?.5:e.style.fillopacity).attr("fill",e.selected?e.style.fillhl:e.style.fill);a.selectAll("circle,ellipse,line").attr("stroke-opacity",e.selected?1:e.style.strokeopacity).attr("stroke",e.selected?e.style.strokehl:e.style.stroke).attr("stroke-width",e.selected?2:1);if(e.selected){let t=Math.max(20,e.radius),s=0;if((e.set_1||e.set_share)&&e.maf1>=.8){t=-e.radius;s=e.radius*2}const n=a.append("g").attr("class","sja_2dmaf_mlabel").attr("transform","translate("+t+","+s+")");let i;n.append("text").text(e.labelAs?e.labelAs:e.gene+" "+e.mname).attr("fill",e.style.fillhl).attr("dominant-baseline","middle").attr("text-anchor","start").attr("font-size",e.radius).each((function(){i=this.getBBox().width}));n.append("rect").attr("y",-e.radius/2).attr("width",i).attr("height",e.radius).attr("fill","black").attr("fill-opacity",0).on("mouseover",(t=>d(t.target).attr("fill-opacity",.2))).on("mouseout",(t=>d(t.target).attr("fill-opacity",0))).on("mousedown",(e=>{const a=t,i=s,r=e.clientX,l=e.clientY,o=d(document.body);o.on("mousemove",(e=>{e.preventDefault();t=a+e.clientX-r;s=i+e.clientY-l;n.attr("transform","translate("+t+","+s+")")}));o.on("mouseup",(()=>{o.on("mousemove",null).on("mouseup",null)}))}))}else{a.select(".sja_2dmaf_mlabel").remove()}}return E}function S(t,e,s){if(!e.selected){d(t.target).attr("fill",e.style.fillhl).attr("fill-opacity",.2)}s.clear();s.show(t.clientX,t.clientY);s.d.append("div").html((e.gene||"no gene")+' <span style="color:'+e.style.fillhl+'">'+(e.mname||"")+"</span>"+(e.class?' <span style="font-size:70%">'+n[e.class].label+"</span>":""))}function L(t,e,s){if(!e.selected){d(t.ele).attr("fill",e.style.fill).attr("fill-opacity",e.style.fillopacity).attr("stroke",e.style.stroke)}s.hide()}function V(t,e,s){const a=f({x:t.clientX+30,y:t.clientY-30});a.header.text((s.gene?s.gene:"No gene")+" "+(s.mname?s.mname:""));var n=[];for(let t=0;t<e.length;t++){n.push({k:e[t],v:s[e[t]]})}u(a.body,n)}function W(t,e){const s=t.pairs[e];if(s.shown){s.shown=false;s.holder.remove();if(s.handle){s.handle.attr("font-weight","normal")}}else{s.shown=true;if(s.holder){t.showholder.node().appendChild(s.holder.node())}else{s.holder=j(t.showholder,s)}if(s.handle){s.handle.attr("font-weight","bold")}}}function E(t,e){const s=[];for(const e in t.pairs){s.push([e,t.pairs[e].mlst.length])}e.selectAll("*").remove();const a=e.append("div").style("margin-bottom","5px");a.append("span").text(s.length+" individual"+(s.length>1?"s":""));const n=e.append("svg");const i=5,p=20,h=t.rowh;let d=0;for(const t of s){n.append("text").text(t[0]).attr("font-size",h).attr("font-family",r).each((function(){d=Math.max(d,this.getBBox().width)})).remove()}n.attr("width",d+i+t.peoplewidth+30).attr("height",p+i+h*s.length);s.sort(((t,e)=>e[1]-t[1]));let f=0;for(const e in t.pairs){f=Math.max(f,t.pairs[e].mlst.length)}const u=n.append("g").attr("transform","translate("+(d+i)+","+p+")").call(m().scale(l().domain([0,f]).range([0,t.peoplewidth])).tickFormat(o("d")).ticks(3));c({axis:u,showline:true,color:"black"});const y=t.peoplewidth/f;let g=p+i;for(const e of s){const s=e[0];t.pairs[s].handle=n.append("text").text(s).attr("class","sja_svgtext2").attr("font-size",h-2).attr("font-family",r).attr("x",d).attr("y",g+i+h/2).attr("text-anchor","end").on("click",(()=>{W(t,s)}));let a=0,l=0,o=0;for(const e of t.pairs[s].mlst){if(e.set_1)a++;else if(e.set_2)l++;else if(e.set_share)o++}const c=n.append("g").attr("transform","translate("+(d+i)+","+g+")");if(a>0){c.append("rect").attr("width",y*a).attr("height",h-1).attr("fill",t.color1)}if(o>0){c.append("rect").attr("x",y*a).attr("width",y*o).attr("height",h-1).attr("fill",t.colorshare)}if(l>0){c.append("rect").attr("x",y*(a+o)).attr("width",y*l).attr("height",h-1).attr("fill",t.color2)}g+=h}}export{A as d2mafparseinput,z as d2mafui};
|
|
1
|
+
import{M as t,bn as e,bo as s,j as a,z as n,bl as i,ag as r,H as l,V as o,af as c,ay as p,P as h,d,Y as f,a8 as u}from"./app-f3a0804e.js";import{c as m,a as y,b as g}from"./axis-747c801e.js";import{s as x,b,e as k,a as v,f as _,d as D,c as w,S as T}from"./symbol-9df177b7.js";import"./math-1a9e8b53.js";import"./constant-426a1483.js";class N{constructor(t){this.opts=t;this.anchorType=t.anchorType;this.shareheight=t.shareheight;this.sharewidth=t.sharewidth;const e="x"in t?t.x:0;const s="y"in t?t.y:0;this.settings={visible:true,opacity:.3,x:e,y:s,xOffset:t.axiswidth+t.sp+t.sample2height,yOffset:t.shareheight,currX:t.axiswidth+t.sp+t.sample2height+e,currY:t.shareheight-s,strokeWidth:"strokeWidth"in t?t.strokeWidth:5,stroke:"stroke"in t?t.stroke:"red",xarmlen:"xarmlen"in t?t.xarmlen:25};this.addControls(this.anchorType?null:this.opts.headerdiv)}setWrapper(t){this.opts.wrapper=t}addControls(e=null){if(e){e.append("button").text("Anchors").on("click",(t=>{this.anchormenu.showunder(t.target);this.xInput.property("value",(this.settings.x/this.sharewidth).toFixed(2));this.yInput.property("value",(this.settings.y/this.sharewidth).toFixed(2))}))}this.anchormenu=new t({border:"solid 1px black"});this.anchormenu.d.style("text-align","center");this.addCoordInput();this.addColorInput();this.addOpacityInput();if(!this.anchorType)this.addSubmitBtns();else this.addDeleteBtn()}addColorInput(){const t=this.anchormenu.d.append("div");t.append("label").html("Color: ");this.strokeInput=t.append("input");this.strokeInput.attr("this.anchorType","text").property("value",this.settings.stroke).style("width","50px")}addOpacityInput(){const t=this.anchormenu.d.append("div");t.append("label").html("Opacity: ");this.opacityInput=t.append("input");this.opacityInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",this.settings.opacity).style("width","50px")}addSubmitBtns(){if(this.anchorType)return;const t=this.anchormenu.d.append("div");t.append("label").html("Add Anchor: ");t.append("button").html("R").on("click",(()=>{new R(this.getSettings("r"));this.anchormenu.hide()}));t.append("button").html("D").on("click",(()=>{new R(this.getSettings("d"));this.anchormenu.hide()}));t.append("button").html("X").on("click",(()=>{new R(this.getSettings("x"));this.anchormenu.hide()}));t.append("button").html("synced").on("click",(()=>{new R(this.getSettings("synced"));this.anchormenu.hide()}))}getSettings(t){return Object.assign({},this.opts,{anchorType:t,opacity:this.opacityInput.property("value"),x:this.xInput.property("value")*this.sharewidth,y:this.yInput.property("value")*this.shareheight,stroke:this.strokeInput.property("value")})}addCoordInput(){const t=this.anchormenu.d.append("div");t.append("label").html("X: ");this.xInput=t.append("input");this.xInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",0).style("width","80px");const e=this.anchormenu.d.append("div");e.append("label").html("Y: ");this.yInput=e.append("input");this.yInput.attr("this.anchorType","number").attr("min",0).attr("max",1).attr("step",.01).property("value",0).style("width","80px")}addDeleteBtn(){if(!this.anchorType)return;const t=this.anchormenu.d.append("div");t.append("button").html("Delete").on("click",(()=>{this.g_anchor.remove();this.anchormenu.hide()}))}}class R extends N{constructor(t){super(t);this.render();this.strokeInput.on("change",(()=>{this.settings.stroke=this.strokeInput.property("value");this.g_anchor.style("stroke",this.settings.stroke);this.anchormenu.hide()}));this.opacityInput.on("change",(()=>{this.settings.opacity=input.property("value");this.g_anchor.style("opacity",this.settings.opacity);this.anchormenu.hide()}));this.xInput.on("change",(()=>{this.settings.x=+this.xInput.property("value")*this.sharewidth;this.settings.currX=this.settings.x+this.settings.xOffset;if(this.d_anchor){this.d_anchor.transition().duration(1e3).attr("x1",this.settings.currX).attr("x2",this.settings.currX)}if(this.x_anchor){this.x_anchor.transition().duration(1e3).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")}this.anchormenu.hide()}));this.yInput.on("change",(()=>{this.settings.y=+this.yInput.property("value")*this.shareheight;this.settings.currY=-this.settings.y+this.settings.yOffset;if(this.r_anchor){this.r_anchor.transition().duration(1e3).attr("y1",this.settings.currY).attr("y2",this.settings.currY)}if(this.x_anchor){this.x_anchor.transition().duration(1e3).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")}this.anchormenu.hide()}))}render(){this.g_anchor=this.opts.wrapper.append("g").style("stroke",this.settings.stroke).style("opacity",this.settings.opacity).style("display",this.settings.visible?"":"none").style("stroke-width",this.settings.strokeWidth).on("click",this.anchorType=="synced"?null:t=>{this.anchormenu.showunder(t.target)});this.renderD();this.renderR();this.renderX()}renderD(){if(!["synced","d"].includes(this.anchorType))return;this.d_anchor=this.g_anchor.append("line");const t=this.opts;this.updateD(t.shareheight+t.sp2,t.shareheight+t.sample1height)}updateD(t,e){if(!["synced","d"].includes(this.anchorType))return;this.settings.D={y1:t,y2:e};this.d_anchor.attr("x1",this.settings.currX).attr("x2",this.settings.currX).attr("y1",t).attr("y2",e)}renderR(){if(!["synced","r"].includes(this.anchorType))return;this.r_anchor=this.g_anchor.append("line");const t=this.opts;this.updateR(t.axiswidth+t.sp,t.sample2height+t.sp)}updateR(t,e){if(!["synced","r"].includes(this.anchorType))return;this.settings.R={x1:t,x2:e};this.r_anchor.attr("x1",t).attr("x2",e).attr("y1",this.settings.currY).attr("y2",this.settings.currY)}renderX(){if(!["synced","x"].includes(this.anchorType))return;this.x_anchor=this.g_anchor.append("g").attr("transform","translate("+this.settings.currX+","+this.settings.currY+")");this.bindXDrag();this.x_anchor.append("circle").attr("cx",0).attr("cy",0).attr("r",this.settings.xarmlen).style("opacity",0);this.x_anchor.append("line").attr("x1",-this.settings.xarmlen).attr("x2",this.settings.xarmlen).attr("y1",0).attr("y2",0);this.x_anchor.append("line").attr("x1",0).attr("x2",0).attr("y1",this.settings.xarmlen).attr("y2",-this.settings.xarmlen)}bindXDrag(){if(!["synced"].includes(this.anchorType))return;this.x_anchor.on("mousedown",(t=>{const e=t.clientX;const s=t.clientY;let a=this.settings.currX,n=this.settings.currY;this.x_anchor.on("mousemove",(t=>{a=this.settings.currX-e+t.clientX;n=this.settings.currY-s+t.clientY;this.r_anchor.attr("y1",n).attr("y2",n);this.d_anchor.attr("x1",a).attr("x2",a);this.x_anchor.attr("transform","translate("+a+","+n+")")})).on("mouseup",(t=>{this.x_anchor.on("mousemove",null);a=this.settings.currX-e+t.clientX;n=this.settings.currY-s+t.clientY;if(a==this.settings.currX&&n==this.settings.currY){this.g_anchor.remove();return}this.settings.x=a<this.settings.xOffset?0:a-this.settings.xOffset;this.settings.y=n>this.settings.yOffset?0:-(n-this.settings.yOffset);this.settings.currX=this.settings.x+this.settings.xOffset;this.settings.currY=-this.settings.y+this.settings.yOffset;this.r_anchor.transition().duration(100).attr("y1",this.settings.currY).attr("y2",this.settings.currY);this.d_anchor.transition().duration(100).attr("x1",this.settings.currX).attr("x2",this.settings.currX);this.x_anchor.transition().duration(100).attr("transform","translate("+this.settings.currX+","+this.settings.currY+")")})).on("mouseleave",(()=>{this.x_anchor.on("mousemove",null)}))}))}}const I="#f9766c";const M="#609cff";const X="#01b937";const B={circle:x,cross:b,diamond:k,square:v,star:_,triangle:D,wye:w};const F={path:t=>t.symbol,circle:t=>!t.symbol};const Y={path:t=>t.symbol,ellipse:t=>!t.symbol};function z(t,a){let n,i,r,l,o,c;if(a!==undefined)[i,r,l,o,c]=e(a,t);else{[n,i,r,l,o,c]=s(100,100,t);n.header.text("2DMAF: mutant allele fraction plot between a pair of samples");n.body.style("margin","10px")}i.append("div").style("margin-top","20px").html("<ul>"+'<li><a href="https://docs.google.com/document/d/1anyEDMcW1lTSf8399Li2G9r57V-Fqp2591WvoODY7n4/edit#heading=h.mne2ecmp9m13" target=_blank>File format</a></li>'+'<li>To define samples differently than "Diagnosis/Relapse", <a href=https://plus.google.com/+XinZhou_s/posts/WqBVvmd3wYR target=_blank>see how</a>.</li>'+"</ul>");i.append("p").html("<a href=https://proteinpaint.stjude.org/ppdemo/hg19/2dmaf/2dmaf.txt target=_blank>Example file</a>");function p(t,e){o.style("color",e?"red":"black").html(t)}const h=()=>{l.selectAll("*").remove();const e=l.append("input").attr("type","file").on("change",(e=>{const s=e.target.files[0];if(!s){h();return}if(!s.size){p("Invalid file "+s.name);h();return}const a=new FileReader;a.onload=e=>{const a=r.options[r.selectedIndex].innerHTML;const n=C(e.target.result.trim().split(/\r?\n/),t[a],s.name,c);if(n){p(n,1);h();return}i.remove();l.remove();o.remove()};a.onerror=function(){p("Error reading file "+s.name,1);h();return};a.readAsText(s,"utf8")}));setTimeout((()=>e.node().focus()),1100)};h()}function A(t,e){if(!t.genome){a(e,".genome missing for 2dmaf");return}if(!t.input){a(e,".input missing for 2dmaf");return}const s=C(t.input.trim().split(/\r?\n/),t.genome,t.datasetname||"unnamed dataset",e);if(s){a(e,"2DMAF data error: "+s)}}function C(t,e,s,a){const[r,l,o]=O(t[0].trim());if(r){return r}const c={};const p={};const h={};const d={good:0,purity1set:false,purity2set:false,pairsetname:{}};const f=[];const u={};for(const t in n){u[n[t].label.toUpperCase()]=t}for(let e=1;e<t.length;e++){if(t[e]=="")continue;if(t[e][0]=="#"){if(t[e].startsWith("##samplename")){const s=t[e].trim().split(/[\s\t]+/);if(s.length==4){d.pairsetname[s[1]]={1:s[2],2:s[3]}}else{return"Line "+(e+1)+': invalid samplename line: must be "##samplename [patient] [sample1] [sample2]"'}}continue}const s=t[e].trim().split("\t");const a={};for(let t=0;t<l.length;t++){if(s[t]!=undefined&&s[t]!=""){a[l[t]]=s[t]}}if(!a.sample){return"Line "+(e+1)+": missing sample"}if(a.chr){if(a.chr.indexOf("chr")!=0){a.chr="chr"+a.chr}}if(a.chrstart){a.chrstart=Number.parseInt(a.chrstart);if(Number.isNaN(a.chrstart)){return"Line "+(e+1)+": invalid chromosome position"}}if(a.Dcnvloh){a.Dcnvlohraw=a.Dcnvloh;const t=a.Dcnvloh.toLowerCase();if(t=="yes"||t!="diploid"&&t!="haploid"){a.Dcnvloh=true}else{a.Dcnvloh=false}}if(a.Rcnvloh){a.Rcnvlohraw=a.Rcnvloh;const t=a.Rcnvloh.toLowerCase();if(t=="yes"||t!="diploid"&&t!="haploid"){a.Rcnvloh=true}else{a.Rcnvloh=false}}if(!a.call_d){f.push([e,"missing call_d",s]);continue}if(a.call_d!="somatic"&&a.call_d!="wildtype"){f.push([e,"call_d is neither somatic nor wildtype",s]);continue}if(!a.call_r){f.push([e,"missing call_r",s]);continue}if(a.call_r!="somatic"&&a.call_r!="wildtype"){f.push([e,"call_r is neither somatic nor wildtype",s]);continue}if(a.call_d=="somatic"){if(a.call_r=="somatic"){a.set_share=true}else{a.set_1=true}}else{if(a.call_r=="somatic"){a.set_2=true}}if(!a.type){f.push([e,"missing type",s]);continue}const i=a.type.toLowerCase();if(i=="snv"||i=="snp"||i=="mnv"||i=="complex"){a.issnv=true}else if(i=="indel"||i=="ins"||i=="del"){a.isindel=true}else{f.push([e,"type must be either SNV or INDEL",s]);continue}let r="MinD.D";let o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;r="TinD.D";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;if(a["TinD.D"]<a["MinD.D"]){f.push([e,"TinD.D value lower than MinD.D",s]);continue}r="MinN.D";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="TinN.D";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="MinD.R";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;r="TinD.R";o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){f.push([e,"invalid "+r+" value",s]);continue}a[r]=o;if(a["TinD.R"]<a["MinD.R"]){f.push([e,"TinD.R value lower than MinD.R",s]);continue}r="MinN.R";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}r="TinN.R";if(r in a){o=Number.parseInt(a[r]);if(Number.isNaN(o)||o<0){delete a[r]}else{a[r]=o}}if(a.symbol){if(!B[a.symbol]){f.push([e,"Invalid symbol value='"+a.symbol+"'",s]);continue}}if(a.class){const t=a.class.toUpperCase();if(t in u){a.class=u[t]}else{f.push([e,"invalid mutation class "+a.class,s]);continue}}a.style={fill:a.issnv?"white":"black",fillhl:a.class?n[a.class].color:"#ccc",stroke:a.chr=="chrX"?"black":a.issnv?"black":"none",strokehl:a.class?n[a.class].color:"black",fillopacity:a.issnv?0:.2,strokeopacity:.2};if(a["TinD.D"]>0){a.maf1=a["MinD.D"]/a["TinD.D"]}if(a["TinD.R"]>0){a.maf2=a["MinD.R"]/a["TinD.R"]}p[a.sample]=1;if(a.gene){h[a.gene]=1}if(!(a.sample in c)){c[a.sample]={name:a.sample,shown:false,header:l,mlst:[]}}const m=c[a.sample];m.mlst.push(a);if(a.purity1){let t=Number.parseFloat(a.purity1);if(Number.isNaN(t)){f.push([e,"diagnosis tumor purity should be a number"]);t=0}else{if(t>1){t/=100}}if(t>0){if(m.purity1==undefined){m.purity1=t;d.purity1set=true}else if(m.purity1!=t){f.push([e,"diagnosis tumor purity value "+t+" is different from existing value "+m.purity1+" in "+a.sample,s])}}}if(a.purity2){let t=Number.parseFloat(a.purity2);if(Number.isNaN(t)){f.push([e,"relapse tumor purity should be a number"]);t=0}else{if(t>1){t/=100}}if(t>0){if(m.purity2==undefined){m.purity2=t;d.purity2set=true}else if(m.purity2!=t){f.push([e,"relapse tumor purity value "+t+" is different from existing value "+m.purity2+" in "+a.sample,s])}}}d.good++}if(f.length>0){i(l,f)}if(d.good==0){return"No valid data."}a.append("p").text("File: "+s);let m=0;for(const t in h)m++;const y=16;const g=a.append("table");const x=g.append("tr");const b=x.append("td").attr("valign","top");b.append("div").html('<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+I+'"></div> Diagnosis only '+'<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+X+'"></div> Shared '+'<div style="display:inline-block;width:'+y+"px;height:"+y+"px;background-color:"+M+'"></div> Relapse only');const k=b.append("div").style("margin-top","10px").style("height","200px").style("width","300px").style("padding","5px").style("overflow-y","scroll").style("resize","both").style("border","solid 1px #ccc");b.append("div").style("margin-top","10px").style("height","200px").style("width","300px").style("padding","5px").style("overflow-y","scroll").style("resize","both").style("border","solid 1px #ccc");const v=x.append("td").style("vertical-align","top");for(const t in c){const e=d.pairsetname[t];if(e){c[t].setname=e}else{c[t].setname={1:"Diagnosis",2:"Relapse"}}}const _={genome:e,pairs:c,color1:I,color2:M,colorshare:X,rowh:y,peoplewidth:150,genewidth:150,showholder:v,genelimit:Math.min(20,m),purity1set:d.purity1set,purity2set:d.purity2set};E(_,k)}function O(t){const e=t.toLowerCase().split("\t");const s=t.split("\t");if(s.length<=1){return["invalid file header"]}const a=(...t)=>{for(const s of t){const t=e.indexOf(s);if(t!=-1)return t}return-1};let i=a("person","sample","samplename","patient");if(i==-1)return["sample missing from header"];s[i]="sample";i=a("type");if(i==-1)return["type missing from header"];s[i]="type";i=a("mind.d1_g1","mind.d","mind");if(i==-1)return["MinD.D missing from header"];s[i]="MinD.D";i=a("tind.d1_g1","tind.d","tind");if(i==-1)return["TinD.D missing from header"];s[i]="TinD.D";i=a("mind.r1_g1","mind.r","minr");if(i==-1)return["MinD.R missing from header"];s[i]="MinD.R";i=a("tind.r1_g1","tind.r","tinr");if(i==-1)return["TinD.R missing from header"];s[i]="TinD.R";i=a("call_d1_g1","call_d");if(i==-1)return["call_d missing from header"];s[i]="call_d";i=a("call_r1_g1","call_r");if(i==-1)return["call_r missing from header"];s[i]="call_r";i=a("genename","gene");if(i==-1)return["gene missing from header"];s[i]="gene";i=a("amino_acid_change","annovar_sj_aachange","aachange","protein_change");if(i==-1)return["amino_acid_change missing from header"];s[i]="mname";i=a("class","mclass","variant_class","variant_classification","annovar_sj_class");if(i==-1)return["variant_class missing from header"];s[i]="class";i=a("chromosome","chr");if(i==-1)return["chromosome missing from header"];s[i]="chr";i=a("start","start_position","wu_hg19_pos","chr_position");if(i==-1)return["start missing from header"];s[i]="chrstart";i=a("minn.d1_g1","minn.d");if(i!=-1)s[i]="MinN.D";i=a("tinn.d1_g1","tinn.d");if(i!=-1)s[i]="TinN.D";i=a("minn.r1_g1","minn.r");if(i!=-1)s[i]="MinN.R";i=a("tinn.r1_g1","tinn.r");if(i!=-1)s[i]="TinN.R";i=a("mrna_accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq");if(i!=-1)s[i]="isoform";i=a("primary_purity","purity_d");if(i!=-1)s[i]="purity1";i=a("relapse_purity","purity_r");if(i!=-1)s[i]="purity2";i=a("tag_d_cnvloh","cnvloh_d");if(i!=-1)s[i]="Dcnvloh";i=a("tag_r_cnvloh","cnvloh_r");if(i!=-1)s[i]="Rcnvloh";const r=[];for(const t of s){switch(t){case"Dcnvloh":r.push({label:"D. CNV/LOH",get:t=>t.Dcnvlohraw});break;case"Rcnvloh":r.push({label:"R. CNV/LOH",get:t=>t.Rcnvlohraw});break;case"type":r.push({label:"Type",get:t=>t.type});break;case"chr":break;case"chrstart":r.push({label:"Genome Loc.",get:t=>t.chr+":"+(t.chrstart+1)});break;case"class":r.push({label:"Class",get:t=>{if(t.class==p){return t.originalclasslabel?t.originalclasslabel:n[t.class].label}return n[t.class].label}});break;case"mname":r.push({label:"Mutation",get:t=>{let e=t.mname;if(!e)e=t.cdna_change;return e}});break;case"MinD.D":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_diagnosis,label:"D. tumor MAF",fill:"#F7483B",fillbg:"#FCBAB6"});break;case"TinD.D":break;case"MinD.R":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_relapse,label:"R. tumor MAF",fill:"#146EFF",fillbg:"#B6D5FC"});break;case"TinD.R":break;case"MinN.D":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_diagnosis_normal,label:"D. normal MAF",fill:"#F7483B",fillbg:"#FCBAB6"});break;case"TinN.D":break;case"MinN.R":r.push({ismaf:true,width:60,height:14,readcountcredible:30,get:t=>t.maf_relapse_normal,label:"R. normal MAF",fill:"#146EFF",fillbg:"#B6D5FC"});break;case"TinN.R":break;case"call_d":r.push({label:"D. call",get:t=>t.call_d});break;case"call_r":r.push({label:"R. call",get:t=>t.call_r});break;case"purity1":r.push({label:"D. purity",get:t=>t.purity1});break;case"purity2":r.push({label:"R. purity",get:t=>t.purity2});break;default:r.push({label:t,get:e=>e[t]})}}return[null,s,r]}function j(e,s){const a=new t({border:"solid 1px black"});const i=[];const o=[];const p=[];const f=s.mlst;const u=f[0].sample;const m=T();let x=0;let b={};const k={};for(const t of f){if(t["TinD.D"]>0){x=Math.max(x,t["TinD.D"])}if(t["TinD.R"]>0){x=Math.max(x,t["TinD.R"])}if(t.set_share){p.push(t)}else if(t.set_1){i.push(t)}else if(t.set_2){o.push(t)}if(!(t.class in k)){k[t.class]=0}if(t.symbol){if(!b[t.symbol]){b[t.symbol]={numlines:0,label:t.symbollabel,hidden:false}}b[t.symbol].numlines++}k[t.class]++}const v=Math.min(window.innerWidth,window.innerHeight);const _=50,D=v*.5,w=v*.5,R=w/2,I=D/2,M=_/3,X=R/5,z=Math.min(20,12*v/500),A=v/40,C=A*.7,O=3;const j=l().domain([0,x]).range([A/2,A]);const W=t=>Math.PI*Math.pow(j(t),2);for(const t of f){t.radius=Math.max(t["TinD.D"]?j(t["TinD.D"]):0,t["TinD.R"]?j(t["TinD.R"]):0)}const E=e.append("table");const H=E.append("tr");const q=H.append("td").style("vertical-align","top");const G=H.append("td").style("vertical-align","top");G.append("div").style("margin","10px").text("Name: "+u);const P=q.append("div");P.append("button").text("Hide").on("click",(()=>{s.shown=false;if(s.handle){s.handle.attr("font-weight","normal")}E.remove()}));const U=new N({axiswidth:_,sp:M,sp2:X,sample1height:R,sample2height:I,shareheight:w,sharewidth:D,headerdiv:P});P.append("button").text("Screenshot").on("click",(()=>{h(Z.node(),"2dmaf_"+s.name)}));{const t=P.append("select").on("change",(t=>{const e=t.target.options[t.target.selectedIndex].value;if(e=="all"){at.transition().attr("transform",(t=>t.posstring+" scale(1)"));ot.transition().attr("transform",(t=>t.posstring+" scale(1)"));dt.transition().attr("transform",(t=>t.posstring+" scale(1)"));return}at.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"));ot.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"));dt.transition().attr("transform",(t=>t.posstring+" scale("+(t.class==e?1:0)+")"))}));t.append("option").text("Show all mutation classes").property("value","all");const e=[];for(const t in k){e.push([t,k[t]])}e.sort(((t,e)=>e[1]-t[1]));for(const s of e){t.append("option").text((s[0]in n?n[s[0]].label:s[0])+" ("+s[1]+")").property("value",s[0])}}const Z=q.append("svg").attr("width",_+M+I+D+M*2).attr("height",_+M+R+w+M*2);const J=Z.append("g").attr("transform","translate("+M+","+M+")");U.setWrapper(J.append("g"));const K=l().domain([0,1]).range([0,D]);const Q=J.append("g").attr("transform","translate("+(_+M+I)+","+(w+R+M)+")").call(y().scale(K).tickSize(5));c({axis:Q,showline:true,fontsize:z*.8});const $=i.length+p.length;Q.append("text").text(s.setname[1]+", n="+$+(s.purity1?", purity="+s.purity1:"")).attr("x",D/2).attr("y",_-4).attr("text-anchor","middle").attr("font-size",z);const tt=l().domain([0,1]).range([w,0]);const et=J.append("g").attr("transform","translate("+_+",0)").call(g().scale(tt).tickSize(5));c({axis:et,showline:true,fontsize:z*.8});const st=o.length+p.length;et.append("text").text(s.setname[2]+", n="+st+(s.purity2?", purity="+s.purity2:"")).attr("transform","translate("+(z-_-10)+","+w/2+") rotate(-90)").attr("text-anchor","middle").attr("font-size",z);J.append("path").attr("d","M"+(_+M)+",0"+"h"+(I+D)+"v"+(w+R)+"h-"+D+"v-"+(R+w)+"M"+(_+M)+",0"+"v"+w+"h"+(I+D)+"M"+(_+M+I)+","+w+"l"+D+",-"+w).attr("fill","none").attr("stroke","black").attr("shape-rendering","crispEdges").attr("stroke-dasharray","5,5");const at=J.append("g").attr("transform","translate("+(_+M+I)+",0)").selectAll().data(p).enter().append("g").attr("transform",(t=>{t.posstring="translate("+K(t.maf1)+","+tt(t.maf2)+")";return t.posstring}));at.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);at.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);let nt=at;for(const t in Y){nt.filter(Y[t]).append(t).attr("rx",(t=>t.symbol?null:j(t["TinD.D"]))).attr("ry",(t=>t.symbol?null:j(t["TinD.R"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.D"])+W(t["TinD.R"])/2)())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const it=l().domain([0,x]).range([R-X,0]);const rt=J.append("g").attr("transform","translate("+(_+M+I)+","+(w+X)+")");const lt="#FFBEAD";rt.append("rect").attr("fill",lt).attr("fill-opacity",0).attr("x",0).attr("width",3).attr("height",R-X);c({axis:rt.call(g().scale(it).tickValues([0,x])),showline:true,fontsize:z*.8});rt.append("g").attr("transform","translate(-"+z/2+","+(R-X)/2+")").append("text").text("D total").attr("font-size",z*.8).attr("font-family",r).attr("fill","black").attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform","rotate(-90)");const ot=rt.selectAll().data(i).enter().append("g").attr("transform",(t=>{t.posstring="translate("+K(t.maf1)+","+it(t["TinD.D"])+")";return t.posstring}));ot.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);ot.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);nt=ot;for(const t in F){nt.filter(F[t]).append(t).attr("class",(t=>t.symbol?"twodmaf-"+t.symbol:null)).attr("r",(t=>t.symbol?null:j(t["TinD.R"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.R"]))())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const ct=l().domain([0,x]).range([0,I-X]);const pt=J.append("g").attr("transform","translate("+(_+M)+",0)");pt.append("rect").attr("fill",lt).attr("fill-opacity",0).attr("y",w).attr("width",I-X).attr("height",3);const ht=pt.append("g").attr("transform","translate(0,"+w+")").call(y().scale(ct).tickValues([0,x]));c({axis:ht,showline:true,fontsize:z*.8});pt.append("text").text("R total").attr("font-size",z*.8).attr("font-family",r).attr("fill","black").attr("x",(I-X)/2).attr("y",w+z).attr("text-anchor","middle");const dt=pt.selectAll().data(o).enter().append("g").attr("transform",(t=>{t.posstring="translate("+ct(t["TinD.R"])+","+tt(t.maf2)+")";return t.posstring}));dt.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?j(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);dt.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-j(t["TinD.D"]):-C/2)).attr("fill","#858585").attr("r",O);nt=dt;for(const t in F){nt.filter(F[t]).append(t).attr("class",(t=>t.symbol?"twodmaf-"+t.symbol:null)).attr("r",(t=>t.symbol?null:j(t["TinD.D"]))).attr("d",(t=>!t.symbol?null:m.type(B[t.symbol]).size(W(t["TinD.R"]))())).attr("fill",(t=>t.style.fill)).attr("fill-opacity",(t=>t.style.fillopacity)).attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("stroke-dasharray",(t=>t.chr=="chrX"?"5,5":"none")).on("mouseover",((t,e)=>S(t,e,a))).on("mouseout",((t,e)=>L(t,e,a))).on("click",((t,e)=>V(t,s.header,e)))}nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",-3).attr("x2",3).attr("y2",3);nt.append("line").attr("stroke",(t=>t.style.stroke)).attr("stroke-opacity",(t=>t.style.strokeopacity)).attr("x1",-3).attr("y1",3).attr("x2",3).attr("y2",-3);const ft=J.append("g").attr("transform","translate(0,"+(w+X)+")");let ut=z;ft.append("text").text(u).attr("font-size",z).attr("y",ut);const mt=j(20),yt=j(x);ut+=z+yt;let gt;ft.append("text").text("SNV coverage").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",mt).attr("stroke","black").attr("fill","none");ft.append("text").text(20).attr("x",gt).attr("y",ut).attr("text-anchor","middle").attr("dominant-baseline","middle");gt+=mt+yt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",yt).attr("stroke","black").attr("fill","none");ft.append("text").text(x).attr("x",gt).attr("y",ut).attr("text-anchor","middle").attr("dominant-baseline","middle");ut+=yt+10;ft.append("text").text("Indel").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));ft.append("circle").attr("cx",gt+10+C/2).attr("cy",ut).attr("r",C/2).attr("fill","black").attr("fill-opacity",.3);ut+=30;ft.append("text").text("chrX").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("stroke-dasharray","5,5").attr("fill","none");ut+=30;ft.append("text").text("D. CNV/LOH").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("fill","none");ft.append("circle").attr("cx",gt).attr("cy",ut+10).attr("r",O).attr("fill","black");ut+=30;ft.append("text").text("R. CNV/LOH").attr("y",ut).attr("dominant-baseline","central").each((function(){gt=this.getBBox().width}));gt+=mt+10;ft.append("circle").attr("cx",gt).attr("cy",ut).attr("r",10).attr("stroke","black").attr("fill","none");ft.append("circle").attr("cx",gt-10).attr("cy",ut).attr("r",O).attr("fill","black");ut+=30;if(s.purity1!=undefined||s.purity2!=undefined){ft.append("text").text("Expected MAF").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));gt+=10;ft.append("rect").attr("fill",lt).attr("x",gt).attr("y",ut).attr("width",40).attr("height",3);ut+=30}const xt=Object.keys(b);if(xt.length){ft.append("text").text("Symbols").attr("y",ut).attr("dominant-baseline","middle").each((function(){gt=this.getBBox().width}));let t;for(const e in b){const s=b[e];const a=ft.append("g").on("click",(()=>{s.hidden=!s.hidden;Z.selectAll(".twodmaf-"+e).style("display",s.hidden?"none":"");n.style("text-decoration",s.hidden?"line-through":"")}));t=gt+20;a.append("path").attr("transform","translate("+t+","+ut+")").attr("d",m.type(B[e]).size(100)()).attr("stroke","black").attr("fill","none").each((function(){t+=this.getBBox().width}));const n=a.append("text").text(s.label?s.label+" ("+s.numlines+")":"").attr("y",ut+2).attr("x",t).attr("dominant-baseline","middle").style("text-decoration",s.hidden?"line-through":"");ut+=30}ut+=30}const bt={},kt={},vt={},_t={};for(const t of f){if(!t.gene)continue;if(!(t.gene in bt)){bt[t.gene]=[]}bt[t.gene].push(t);if(t.set_1){kt[t.gene]=1}else if(t.set_2){vt[t.gene]=1}else if(t.set_share){_t[t.gene]=1}}const Dt=[];for(const t in kt){Dt.push(t)}for(const t in vt){if(!(t in kt)){Dt.push(t)}}for(const t in _t){if(!(t in kt)&&!(t in vt)){Dt.push(t)}}const wt=G.append("div").style("height",w+R+"px").style("margin","10px").style("padding","10px").style("border","solid 1px #ccc").style("overflow-y","scroll").style("resize","both").append("table");{const t=wt.append("tr");t.append("td").text("Gene");t.append("td").text(s.setname[1]+" only");t.append("td").text(s.setname[2]+" only");t.append("td").text("Shared")}let Tt=true;for(const t of Dt){const e=wt.append("tr");if(Tt){e.style("background-color","#f3f3f3")}Tt=!Tt;e.append("td").text(t);let s=[];if(t in bt){s=bt[t]}const a=[],n=[],i=[];for(const t of s){if(t.set_share)i.push(t);else if(t.set_1)a.push(t);else if(t.set_2)n.push(t)}let r=e.append("td");if(a.length){for(const t of a){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,ot)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}r=e.append("td");if(n.length){for(const t of n){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,dt)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}r=e.append("td");if(i.length){for(const t of i){const e=r.append("div").attr("class","sja_clbtext").style("color",t.style.fillhl).text(t.mname||"").on("click",(e=>{Nt(e.target,t,at)}));if(t.labelIsVisible){Nt(e.node(),t,ot)}}}}function Nt(t,e,s){if(e.selected){t.style.border="";e.selected=false}else{t.style.border="solid 1px black";e.selected=true}const a=s.filter((t=>t.gene==e.gene&&t.class==e.class&&t.mname==e.mname));a.selectAll("rect").attr("fill-opacity",e.selected?.5:e.style.fillopacity).attr("fill",e.selected?e.style.fillhl:e.style.fill);a.selectAll("circle,ellipse,line").attr("stroke-opacity",e.selected?1:e.style.strokeopacity).attr("stroke",e.selected?e.style.strokehl:e.style.stroke).attr("stroke-width",e.selected?2:1);if(e.selected){let t=Math.max(20,e.radius),s=0;if((e.set_1||e.set_share)&&e.maf1>=.8){t=-e.radius;s=e.radius*2}const n=a.append("g").attr("class","sja_2dmaf_mlabel").attr("transform","translate("+t+","+s+")");let i;n.append("text").text(e.labelAs?e.labelAs:e.gene+" "+e.mname).attr("fill",e.style.fillhl).attr("dominant-baseline","middle").attr("text-anchor","start").attr("font-size",e.radius).each((function(){i=this.getBBox().width}));n.append("rect").attr("y",-e.radius/2).attr("width",i).attr("height",e.radius).attr("fill","black").attr("fill-opacity",0).on("mouseover",(t=>d(t.target).attr("fill-opacity",.2))).on("mouseout",(t=>d(t.target).attr("fill-opacity",0))).on("mousedown",(e=>{const a=t,i=s,r=e.clientX,l=e.clientY,o=d(document.body);o.on("mousemove",(e=>{e.preventDefault();t=a+e.clientX-r;s=i+e.clientY-l;n.attr("transform","translate("+t+","+s+")")}));o.on("mouseup",(()=>{o.on("mousemove",null).on("mouseup",null)}))}))}else{a.select(".sja_2dmaf_mlabel").remove()}}return E}function S(t,e,s){if(!e.selected){d(t.target).attr("fill",e.style.fillhl).attr("fill-opacity",.2)}s.clear();s.show(t.clientX,t.clientY);s.d.append("div").html((e.gene||"no gene")+' <span style="color:'+e.style.fillhl+'">'+(e.mname||"")+"</span>"+(e.class?' <span style="font-size:70%">'+n[e.class].label+"</span>":""))}function L(t,e,s){if(!e.selected){d(t.ele).attr("fill",e.style.fill).attr("fill-opacity",e.style.fillopacity).attr("stroke",e.style.stroke)}s.hide()}function V(t,e,s){const a=f({x:t.clientX+30,y:t.clientY-30});a.header.text((s.gene?s.gene:"No gene")+" "+(s.mname?s.mname:""));var n=[];for(let t=0;t<e.length;t++){n.push({k:e[t],v:s[e[t]]})}u(a.body,n)}function W(t,e){const s=t.pairs[e];if(s.shown){s.shown=false;s.holder.remove();if(s.handle){s.handle.attr("font-weight","normal")}}else{s.shown=true;if(s.holder){t.showholder.node().appendChild(s.holder.node())}else{s.holder=j(t.showholder,s)}if(s.handle){s.handle.attr("font-weight","bold")}}}function E(t,e){const s=[];for(const e in t.pairs){s.push([e,t.pairs[e].mlst.length])}e.selectAll("*").remove();const a=e.append("div").style("margin-bottom","5px");a.append("span").text(s.length+" individual"+(s.length>1?"s":""));const n=e.append("svg");const i=5,p=20,h=t.rowh;let d=0;for(const t of s){n.append("text").text(t[0]).attr("font-size",h).attr("font-family",r).each((function(){d=Math.max(d,this.getBBox().width)})).remove()}n.attr("width",d+i+t.peoplewidth+30).attr("height",p+i+h*s.length);s.sort(((t,e)=>e[1]-t[1]));let f=0;for(const e in t.pairs){f=Math.max(f,t.pairs[e].mlst.length)}const u=n.append("g").attr("transform","translate("+(d+i)+","+p+")").call(m().scale(l().domain([0,f]).range([0,t.peoplewidth])).tickFormat(o("d")).ticks(3));c({axis:u,showline:true,color:"black"});const y=t.peoplewidth/f;let g=p+i;for(const e of s){const s=e[0];t.pairs[s].handle=n.append("text").text(s).attr("class","sja_svgtext2").attr("font-size",h-2).attr("font-family",r).attr("x",d).attr("y",g+i+h/2).attr("text-anchor","end").on("click",(()=>{W(t,s)}));let a=0,l=0,o=0;for(const e of t.pairs[s].mlst){if(e.set_1)a++;else if(e.set_2)l++;else if(e.set_share)o++}const c=n.append("g").attr("transform","translate("+(d+i)+","+g+")");if(a>0){c.append("rect").attr("width",y*a).attr("height",h-1).attr("fill",t.color1)}if(o>0){c.append("rect").attr("x",y*a).attr("width",y*o).attr("height",h-1).attr("fill",t.colorshare)}if(l>0){c.append("rect").attr("x",y*(a+o)).attr("width",y*l).attr("height",h-1).attr("fill",t.color2)}g+=h}}export{A as d2mafparseinput,z as d2mafui};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./tslib.es6-62bb2d8e.js";import{M as e,k as s,a as i,t as a,d as n,b as o,n as r,u as p,g as l,c as d,f as c,e as h,h as m,r as u,i as y,j as b,l as f,m as g,o as w}from"./app-f070f904.js";import{o as v,m as x}from"./adSandbox-3b54a54c.js";import"./genesearch-852717d7.js";import"./toggleButtons-3c56fcea.js";class k{constructor(t){this.holder=t.holder;this.input=t.holder.append("input");this.tip=t.tip||new e({border:"",padding:"0px"});this.style=t.style||{};this.size=t.size||20;this.placeholder=t.placeholder||"";this.title=t.title||"";this.searchItems=t.searchItems;this.app=t.app}initUI(){this.holder.style("padding","padding"in this.style?this.style.padding:"5px").style("display","inline-block");this.input.attr("class","sjpp-input-search").style("border","border"in this.style?this.style.border:"5px").attr("size",this.size).attr("placeholder",this.placeholder).attr("title",this.title).on("keyup",(e=>t(this,void 0,void 0,(function*(){if(s(e))yield this.enterSearch();i.debounce(this.addSearchItems(),400)}))))}addSearchItems(){return t(this,void 0,void 0,(function*(){if(!this.input.property("value").trim()){this.tip.hide();return}try{this.tip.clear().showunder(this.input.node());const t=this.tip.d.append("div");const e=yield this.searchItems();yield t.append("div").style("display","flex").selectAll().data(e.filter((t=>{var e;return((e=t.items)===null||e===void 0?void 0:e.length)>=1}))).enter().append("div").style("display","block").style("border-left","0.5px solid lightgrey").each(this.showResultsList)}catch(t){if(t.stack)console.log(t.stack);else a(t)}}))}showResultsList(e){return t(this,void 0,void 0,(function*(){e.wrapper=n(this);e.wrapper.style("padding","5px");e.titleDiv=e.wrapper.append("span").style("padding","3px 0px 5px").style("opacity",.65).style("font-size","0.8em").text(e.title);yield e.wrapper.append("div").classed("sjpp-result-wrapper",true).selectAll("div").data(e.items).enter().append("div").classed("sja_menuoption",true).classed("sjpp-search-result",true).style("display","block").style("padding-left","10px").style("background-color",e.color||"").text((t=>t.name||t.label||t.title||t)).on("click",((t,s)=>{t.stopPropagation();e.callback(s)}))}))}enterSearch(){return t(this,void 0,void 0,(function*(){if(!this.input.property("value").trim())return;const t=this.tip.d.select(".sjpp-result-wrapper").node();const e=this.tip.d.select(".sjpp-search-result").node();if(e!=null&&e.__data__)t.__data__.callback(e.__data__);else{const t=yield this.searchItems();const e=t.filter((t=>t.default));e[0].callback(this.input.property("value"))}this.input.property("value","");this.tip.hide()}))}updatePlaceholder(t){this.input.attr("placeholder",t)}}async function _(t,e,s,i,a){const o=n("input").property("value").trim();const r=[{title:"Genes",default:true,items:await $(o,t.selectgenome.property("value"),a),color:"#F2F2F2",callback:s=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});e.hide();B(s,t,t.selectgenome.property("value"),a)}}];await j(t,o,r,e);r.push({title:"Help",default:false,items:s.filter((t=>t.label.toLowerCase().includes(o.toLowerCase()))),color:"#faebd9",callback:t=>{window.open(t.link,t.label)}});r.push({title:"Publications",default:false,items:i.filter((t=>t.title.toLowerCase().includes(o.toLowerCase())||t.appHeaderTitle.toLowerCase().includes(o.toLowerCase()))),color:"#E6E6FA",callback:t=>{window.open(t.doi,t.title)}});return r}async function j(t,e,s,i){const n=await o(t.cardsPath+"/index.json");if(n.error)a(`Problem retrieving ../cards/index.json`);const r=e.toLowerCase().trim();const p=[...n.elements];let l;if(r.length>2){await A(p,t);l=P(p,r)}else{l=P(p,r)}const d={app:t.drawer.opts,sandboxDiv:t.drawer.opts.sandboxDiv,genomes:t.genomes,fromApp:true};s.push({title:"Tracks and Apps",items:l.filter((t=>t.type=="card")),color:"#e1edf7",callback:e=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});i.hide();v(e,d)}},{title:"Datasets",items:l.filter((t=>t.type=="dsButton")),color:"#e5f5e4",callback:e=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});i.hide();v(e,d)}});return s}async function A(t,e){const s=t.map((async t=>{if(t.hidden||t.type!="card"||!t.sandboxJson)return t;const s=await o(e.cardsPath+`/${t.sandboxJson}.json`);if(s?.ppcalls.length>0){for(const e of s.ppcalls){if(e.isUI)return;if(e?.label)t.searchterms.push(e.label)}}}));await Promise.all(s)}function P(t,e){return t.filter((t=>{if(t.hidden)return false;let s=(t.searchterms||[]).reduce(((t,s)=>{if(t)return true;return s.toLowerCase().includes(e)}),false);return s||t.name.toLowerCase().includes(e)})).sort(((t,e)=>t.name.localeCompare(e.name)))}async function $(t,e,s){if(t.length==0)return;try{const i=await o("/genelookup",{body:{input:t,genome:e,jwt:s}});if(i.error)throw i.error;if(!i.hits)throw".hits[] missing";return i.hits}catch(t){}}async function B(t,e,s,i){const a=e.genomes[s];if(!a){console.error("unknown genome "+s);return}const n=r(e.drawer.opts.sandboxDiv);n.header.html('<div style="display:inline-block;">'+t+'</div><div class="sjpp-output-sandbox-title">'+s+"</div>");const o=p();const m=await l(o,a);const u=d(t,a);if(u){const t={hostURL:e.hostURL,jwt:i,holder:n.body,genome:a,nobox:true,chr:u.chr,start:u.start,stop:u.stop,dogtag:s,tklst:m,debugmode:e.debugmode};c(a,t.tklst);import("./block-0221245d.js").then((function(t){return t.c})).then((e=>new e.Block(t))).catch((t=>{e.error0(t)}));return}const y={hostURL:e.hostURL,jwt:i,query:t,genome:a,holder:n.body,variantPageCall_snv:e.variantPageCall_snv,samplecart:e.samplecart,tklst:m,debugmode:e.debugmode};const b=sessionStorage.getItem("urlp_mds");if(b){const t=b.split(",");if(t.length==2){y.datasetqueries=[{dataset:t[0],querykey:t[1]}]}}await h(y)}class D{constructor(t){this.type="card";this.opts=this.validateOpts(t);this.holder=t.holder;this.dom=t.dom;this.sandboxDiv=t.sandboxDiv;R(this)}validateOpts(t){if(!t.element.name)throw`Card .name is missing`;if(t.element.type=="card"){if(!t.element.sandboxJson&&!t.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for card=${t.element.name}`}if(t.element.type=="nestedCard"){if(!t.element.children||t.element.children.length==0)throw`Missing .children for nested card = ${t.element.name}`}if(t.element.ribbon){if(!t.element.ribbon.text)throw`Missing ribbon .text for ${t.element.type} = ${t.element.name}`;if((t.element.ribbon.text.toUpperCase()=="NEW"||t.element.ribbon.text.toUpperCase()=="UPDATED")&&!t.element.ribbon.expireDate)throw`${t.element.type} = ${t.element.name} ribbon is ${t.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`;if(t.element.ribbon.expireDate){if(t.element.ribbon.expireDate>=0){throw`Flag for ${t.element.type} = ${t.element.name} is not a valid date`}}}return t}main(){}}const L=m(D);function R(t){const e=t.holder.append("li");if(t.opts.element.type=="card"){e.classed("sjpp-track",true).html(`<div class="sjpp-track-h"><span style="font-size:14.5px;font-weight:500;">${t.opts.element.name}</span></div>\n\t\t\t\t${t.opts.element.description?`<span class="sjpp-track-blurb" style="cursor:default">${t.opts.element.description}</span></div>`:" "}\n\t\t\t\t<span class="sjpp-track-image"><img src="${t.opts.element.image}" alt="${t.opts.element.description}"></img></span>\n\t\t\t\t</div>`)}else if(t.opts.element.type=="nestedCard"){e.classed("sjpp-app-drawer-card",true).html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${t.opts.element.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${t.opts.element.description}</p>`)}t.makeRibbon=function(t){const s=e.append("div").classed("sjpp-app-drawer-card-ribbon",true).style("align-items","center").style("justify-content","center");const i=t.text.toUpperCase();const a=i=="BETA"?"#418cb5":i=="NEW"?"#1ba176":i=="UPDATED"?"orange":t.color?t.color:"red";s.append("span").text(i).style("color","white").style("background-color",u(a).darker()).style("height","auto").style("width","100%").style("top","15%").style("left","-30%").style("font-size","11.5px").style("text-transform","uppercase").style("text-align","center")};if(t.opts.element.ribbon){const e=new Date;const s=new Date(t.opts.element.ribbon.expireDate);if(s>e||s=="Invalid Date")t.makeRibbon(t.opts.element.ribbon)}e.on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active",value:false});T(t);await v(t.opts.element,t.opts)}))}class S{constructor(t){this.type="button";this.opts=this.validateOpts(t);this.holder=t.holder;this.dom=t.dom;this.sandboxDiv=t.sandboxDiv;z(this)}validateOpts(t){if(!t.element.name)throw`Button name is missing`;if(!t.element.sandboxJson&&!t.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for button=${t.element.name}`;return t}main(){}}const C=y(S);function z(t){const e=x({div:t.holder,text:t.opts.element.name,margin:"20px 20px 0px"});e.attr("class","sjpp-appdrawer-dataset-btn").on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active",value:false});T(t);await v(t.opts.element,t.opts)}))}class H{constructor(t){this.type="layout";this.dom={holder:t.dom.drawerDiv,wrapper:t.dom.wrapper,sandboxDiv:t.dom.sandboxDiv};this.state=t.state;this.hasStatePreMain=true}async validateIndexJson(){const t=await this.getIndexJson();if(!t.elements)throw`Missing elements array`;if(!t.elements.length)throw`No element objects provided`;if(t.columnsLayout){if(t.columnsLayout.length==0)throw`Missing column objects`;const e=t.columnsLayout.map((t=>t.gridarea));if(e.length!=new Set(e).size)throw`Duplicate values for .gridarea found`;const s=[];for(const e of t.columnsLayout){if(!e.gridarea)throw`Missing column .gridarea for column = ${e.name}`;if(!e.sections||e.sections.length==0)throw`Missing section objects for column = ${e.name}`;for(const t of e.sections){if(!t.id)throw`Missing section .id in ${t.name?`section = ${t.name}`:`column = ${e.name} array`}`;s.push(t.id)}if(e.sections.length!=new Set(e.sections).size){throw`Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`}}if(s.length!=new Set(s).size)throw`Duplicate values for section.id found`;for(const e of t.elements){if(!e.section)throw`.section is missing for ${e.type} = ${e.name}`;if(!s.some((t=>t==e.section)))throw`section = ${e.section} for ${e.type} = ${e.name} is not a column section`}}return t}async getIndexJson(){const t=await o(this.app.cardsPath+"/index.json");if(t.error){b(this.dom.holder.append("div"),t.error);return}return t}async init(){this.index=await this.validateIndexJson();this.elementsRendered=false;U(this);this.elements=this.index.elements.filter((t=>!t.hidden));this.layout=this.index.columnsLayout?this.index.columnsLayout:null;this.components={elements:[]}}async main(){if(this.elementsRendered==true)return;this.elementsRendered=true;for(const t of this.elements){const e=n(this.layout?`#${t.section} > .sjpp-element-list`:`.sjpp-element-list`);if(t.type=="card"||t.type=="nestedCard"){this.components.elements.push(await L({app:this.app,holder:e.style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(320px, 1fr))").style("gap","10px").style("list-style","none").style("margin","15px 0px"),element:t,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}else if(t.type=="dsButton"){this.components.elements.push(await C({app:this.app,holder:e,element:t,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}}}}const I=m(H);function U(t){if(!t.index.columnsLayout)J(t);if(t.index.columnsLayout)E(t)}function J(t){const e=t.dom.wrapper.append("div").style("display","flex").style("padding","10px").classed("sjpp-element-list",true);return e}function E(t){const e=t.dom.wrapper.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(425px, 1fr))").style("gap","10px").style("padding","10px").style("text-align","left");const s=[];for(const e of t.index.columnsLayout)s.push(e.gridarea);e.style("grid-template-areas",`"${s.toString().replace(","," ")}"`);for(const s of t.index.columnsLayout){const t=e.append("div").style("grid-area",s.gridarea).classed(".sjpp-track-cols",true);for(const e of s.sections)i(e,t)}function i(t,e){const s=e.append("div").attr("id",t.id);if(t.name)s.append("h5").classed("sjpp-appdrawer-cols",true).style("color",u(f).darker()).text(t.name);s.append("div").classed("sjpp-element-list",true).style("padding","10px");return s}}class F{constructor(t){this.type="mainBtn";this.opts=this.validateOpts(t);this.dom=t.dom;this.state=t.state;this.hasStatePreMain=true;N(this)}validateOpts(t){return t.app.opts}getState(t){return{appBtnActive:t.appBtnActive}}async init(){this.btnRendered=false;this.drawerFullHeight="";try{if(window.location.pathname=="/"&&!window.location.search.length)await this.app.dispatch({type:"is_apps_btn_active",value:true});this.components={layout:[]}}catch(t){throw t}}async main(t){if(this.app.getState(t).appBtnActive==true&&this.btnRendered==false){this.dom.drawerDiv.style("background-color","#f5f5f5");this.components.layout.push(await I({app:this.app,dom:this.dom,state:this.state}));setTimeout((()=>{this.drawerFullHeight=this.dom.drawerDiv.node().getBoundingClientRect().height+5}),this.state.duration+5);T(this);this.btnRendered=true}if(this.state.appBtnActive==false&&this.btnRendered==true)T(this)}}const O=m(F);function N(t){t.dom.btnWrapper.style("background-color",t.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",t.state.appBtnActive?"#fff":"#000").on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active"});T(t);if(t.state.appBtnActive){setTimeout((()=>{t.drawerFullHeight=t.dom.drawerDiv.node().getBoundingClientRect().height+5}),t.state.duration+5)}}));t.dom.btn.attr("class","sja_menuoption").style("display","inline-block").style("background-color","transparent").style("color",t.state.appBtnActive?"#fff":"#000").style("padding",t.opts.padw_sm).style("margin","0px 5px").style("cursor","pointer").text("Apps");t.dom.drawerHint.style("position","relative").style("display","inline-block").style("height",t.state.arrowSize.closed+"px").style("width",t.state.appBtnActive?t.state.hintWidth.open:t.state.hintWidth.closed).style("background-color","transparent").style("text-align","center").style("cursor","pointer");t.dom.drawerArrow.style("position","absolute").style("font-size",t.state.arrowSize.closed+"px").style("right",t.state.hintPos.closed.rt+"px").style("bottom",t.state.hintPos.closed.btm+"px").style("background-color","transparent").style("color",t.state.arrowColor.closed).style("opacity",t.state.appBtnActive?0:1).style("cursor","pointer").html("▼");t.dom.drawerArrowOpen.style("position","absolute").style("font-size",t.state.arrowSize.open+"px").style("left",t.state.hintPos.open.left+"px").style("bottom",t.state.hintPos.open.btm+"px").style("transform","rotate(180deg)").style("background-color","transparent").style("color",t.state.arrowColor.open).style("opacity",t.state.appBtnActive?1:0).style("cursor","pointer").style("pointer-events",t.state.appBtnActive?"auto":"none").html("▼");t.drawerFullHeight=t.dom.drawerRow.node().getBoundingClientRect().height+5}async function T(t){t.dom.btnWrapper.transition().duration(t.opts.state.duration).style("background-color",t.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",t.state.appBtnActive?"#fff":"#000");t.dom.btn.transition().duration(t.opts.state.duration).style("color",t.state.appBtnActive?"#fff":"#000");t.dom.drawerDiv.style("display","inline-block").transition().duration(t.opts.state.duration).style("top",t.state.appBtnActive?"0px":"-"+t.drawerFullHeight+"px");t.dom.drawerRow.transition().duration(t.opts.state.duration).style("height",t.state.appBtnActive?t.drawerFullHeight+"px":"0px");t.dom.drawerHint.transition().duration(t.opts.state.duration).style("width",t.state.appBtnActive?t.opts.state.hintWidth.open:t.opts.state.hintWidth.closed);t.dom.drawerArrow.transition().duration(t.opts.state.duration).style("opacity",t.state.appBtnActive?0:1);t.dom.drawerArrowOpen.style("pointer-events",t.state.appBtnActive?"auto":"none").transition().duration(t.opts.state.duration).style("opacity",t.state.appBtnActive?1:0)}class W{constructor(t){this.type="store";this.defaultState={duration:500,hintPos:{open:{btm:-42,left:13},closed:{btm:3,rt:5}},hintWidth:{open:"0px",closed:"18px"},arrowSize:{open:42,closed:20},arrowColor:{open:"rgb(242,242,242)",closed:"rgb(85,85,85)"},appBtnActive:false}}async init(){}}const M=g(W);W.prototype.actions={is_apps_btn_active(t){this.state.appBtnActive="value"in t?t.value:!this.state.appBtnActive}};class q{constructor(t){this.type="app";const e=t.drawerRow.append("div").style("position","relative").style("margin","0 20px").style("padding",`0 ${t.padw_sm}`).style("display","inline-block").style("overflow","hidden").style("border-radius","0px 0px 5px 5px").style("width","93vw").classed("sjpp-drawer-div",true);const s=t.headbox.append("div").style("position","relative").style("display","inline-block").style("margin-left","5px").style("margin-right","5px").style("border-radius","5px").classed("sjpp-apps-btn-wrapper",true);this.dom={drawerRow:t.drawerRow,drawerDiv:e,sandboxDiv:t.sandboxDiv,btnWrapper:s,btn:s.append("div"),drawerHint:s.append("div"),drawerArrow:s.append("div"),drawerArrowOpen:s.append("div"),wrapper:e.append("div")}}preApiFreeze(t){t.cardsPath=this.opts.cardsPath}async init(){try{this.store=await M({app:this.api,state:this.opts.state});this.state=await this.store.copyState();this.components={mainBtn:await O({app:this.api,dom:this.dom,state:this.state,indexJson:this.indexJson})};await this.api.dispatch()}catch(t){throw t}}main(){}}const G=w(q);class K{constructor(t){this.headtip=t.headtip;this.app=t.app;this.data=t.data;this.jwt=t.jwt;this.publications=[]}createPublicationsList(){var e;return t(this,void 0,void 0,(function*(){const t=yield o(this.app.cardsPath+"/citations.json");if(t.error)console.error(`Problem retrieving ../cards/citations.json`);this.publications=((e=t===null||t===void 0?void 0:t.publications)===null||e===void 0?void 0:e.length)?t.publications.filter((t=>t.appHeaderTitle)).sort(((t,e)=>e.year-t.year)):[]}))}makeheader(){return t(this,void 0,void 0,(function*(){yield this.createPublicationsList();const s=u(f);const i="13px";const a="5px 10px";const n="7px 10px";const r=document.documentElement.clientWidth;const p=this.app.holder.append("div").style("white-space","nowrap").style("border-bottom",r>1600?"solid 1px rgba("+s.r+","+s.g+","+s.b+",.3)":"");const l=p.append("div").style("margin","10px").style("padding","8px").style("padding-bottom","12px").style("display",r<1600?"block":"inline-block").style("border-bottom",r<1600?"solid 1px rgba("+s.r+","+s.g+","+s.b+",.3)":"");const d=p.append("div").style("display","inline-block").style("padding",n).style("padding-left","25px").style("font-size",".8em").style("color",u(f).darker());{const e=d.append("div").style("padding-left","15px");e.append("span").text("Code updated: "+(this.data.codedate||"??")+", server launched: "+(this.data.launchdate||"??")+".");if(this.data.hasblat){e.append("a").style("margin-left","10px").text("Running BLAT").on("click",(e=>t(this,void 0,void 0,(function*(){this.headtip.clear().showunder(e.target);const t=this.headtip.d.append("div").style("margin","10px");const s=t.append("div").text("Loading...");try{const e=yield o("blat?serverstat=1");if(e.error)throw e.error;if(!e.lst)throw"invalid response";s.remove();for(const s of e.lst){t.append("div").text(s)}}catch(t){s.text(t.message||t);if(t.stack)console.error(t.stack)}}))))}}if(this.data.headermessage){d.append("div").html(this.data.headermessage)}l.append("div").text("ProteinPaint").style("display","inline-block").style("padding",i).style("color",f).style("font-size","1.3em").style("font-weight","bold");const c=new e({border:"",padding:"0px"});const h=new k({holder:l,tip:c,style:{padding:n,border:`'solid 1px ${f}`},size:32,placeholder:"Gene, position, SNP, app, or dataset",title:"Search by gene, SNP, position, app, or dataset",searchItems:()=>t(this,void 0,void 0,(function*(){return yield _(this.app,this.headtip,K.help,this.publications,this.jwt)}))});h.initUI();const m=l.append("div").attr("class","sjpp-genome-select-div").style("padding",n);const y=()=>{const t=this.app.genomes[this.app.selectgenome.property("value")];const e=["Gene","position","app"];if(t.hasSNP)e.splice(2,0,"SNP");if(Object.keys(t.datasets).length)e.push("dataset");const s=e.join(", ").replace(/,(?=[^,]*$)/,", or");return s};this.app.selectgenome=m.append("select").attr("title","Select a genome").attr("class","sjpp-genome-select").style("padding",a).style("border","solid 1px "+f).on("change",(()=>{this.update_genome_browser_btn(this.app);h.updatePlaceholder(y())}));for(const t in this.app.genomes){this.app.selectgenome.append("option").attr("n",t).text(this.app.genomes[t].species+" "+t).property("value",t)}this.app.genome_browser_btn=this.make_genome_browser_btn(this.app,l,this.jwt);this.app.drawer=yield G({holder:this.app.holder,genomes:this.app.genomes,drawerRow:this.app.holder.append("div").style("position","relative").style("overflow-x","visible").style("overflow-y","hidden").classed("sjpp-drawer-row",true),sandboxDiv:this.app.holder.append("div").style("margin-top","15px").classed("sjpp-drawer-sandbox",true),genome_browser_btn:this.app.genome_browser_btn,debugmode:this.app.debugmode,headbox:l,padw_sm:n,cardsPath:this.app.cardsPath});l.append("span").classed("sja_menuoption",true).style("padding",n).text("Help").on("click",(e=>t(this,void 0,void 0,(function*(){const t=e.target.getBoundingClientRect();const s=this.headtip.clear().show(t.left-0,t.top+t.height+5);yield s.d.append("div").style("padding","5px 20px").selectAll("p").data(K.help.filter((t=>!t.onlySearch))).enter().append("p").html((t=>`<a href=${t.link} target=_blank>${t.label}</a>`))}))));if(this.publications.length>0){l.append("span").classed("sja_menuoption",true).style("padding",n).style("margin","0px 5px").text("Publications").on("click",(e=>t(this,void 0,void 0,(function*(){const t=e.target.getBoundingClientRect();const s=this.headtip.clear().show(t.left-150,t.top+t.height+5);yield s.d.append("div").style("padding","5px 20px").selectAll("p").data(this.publications).enter().append("p").html((t=>`<a href=${t.doi} target=_blank>${t.appHeaderTitle}, ${t.journal}, ${t.year}</a>`))}))))}}))}make_genome_browser_btn(t,e,s){const i="8px";const a=e.append("span");const n=t.selectgenome.node().options[t.selectgenome.property("selectedIndex")].value;const o=a.attr("class","sja_menuoption").attr("id","genome_btn").style("padding",i).datum(n).text(n+" genome browser").on("click",(()=>{const e=t.selectgenome.node().value;const i=t.genomes[e];if(!i){alert("Invalid genome name: "+e);return}const a=r(t.drawer.opts.sandboxDiv);a.header.text(e+" genome browser");const n={hostURL:t.hostURL,jwt:s,holder:a.body,genome:i,chr:i.defaultcoord.chr,start:i.defaultcoord.start,stop:i.defaultcoord.stop,nobox:true,tklst:[],debugmode:t.debugmode};c(i,n.tklst);import("./block-0221245d.js").then((function(t){return t.c})).then((t=>new t.Block(n)));t.drawer.dispatch({type:"is_apps_btn_active",value:false})}));return o}update_genome_browser_btn(t){t.genome_browser_btn.text(t.selectgenome.node().value+" genome browser");t.genome_browser_btn.datum(t.selectgenome.node().value)}}K.help=[{label:"Embed in your website",link:"https://github.com/stjude/proteinpaint/wiki/Embedding"},{label:"URL parameters",link:"https://github.com/stjude/proteinpaint/wiki/URL-parameters"},{label:"All tutorials",link:"https://github.com/stjude/proteinpaint/wiki/"},{label:"User community",link:"https://groups.google.com/g/proteinpaint"},{label:"License ProteinPaint",link:"https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html",onlySearch:true},{label:"Our Team",link:"https://proteinpaint.stjude.org/team/",onlySearch:true}];export{K as AppHeader};
|
|
1
|
+
import{_ as t}from"./tslib.es6-62bb2d8e.js";import{M as e,k as s,a as i,t as a,d as n,b as o,n as r,u as p,g as l,c as d,f as c,e as h,h as m,r as u,i as y,j as b,l as g,m as f,o as w}from"./app-f3a0804e.js";import{o as v,m as x}from"./adSandbox-fc06d4a1.js";import"./genesearch-724230cd.js";import"./toggleButtons-e27421ba.js";class k{constructor(t){this.holder=t.holder;this.input=t.holder.append("input");this.tip=t.tip||new e({border:"",padding:"0px"});this.style=t.style||{};this.size=t.size||20;this.placeholder=t.placeholder||"";this.title=t.title||"";this.searchItems=t.searchItems;this.app=t.app}initUI(){this.holder.style("padding","padding"in this.style?this.style.padding:"5px").style("display","inline-block");this.input.attr("class","sjpp-input-search").style("border","border"in this.style?this.style.border:"5px").attr("size",this.size).attr("placeholder",this.placeholder).attr("title",this.title).on("keyup",(e=>t(this,void 0,void 0,(function*(){if(s(e))yield this.enterSearch();i.debounce(this.addSearchItems(),400)}))))}addSearchItems(){return t(this,void 0,void 0,(function*(){if(!this.input.property("value").trim()){this.tip.hide();return}try{this.tip.clear().showunder(this.input.node());const t=this.tip.d.append("div");const e=yield this.searchItems();yield t.append("div").style("display","flex").selectAll().data(e.filter((t=>{var e;return((e=t.items)===null||e===void 0?void 0:e.length)>=1}))).enter().append("div").style("display","block").style("border-left","0.5px solid lightgrey").each(this.showResultsList)}catch(t){if(t.stack)console.log(t.stack);else a(t)}}))}showResultsList(e){return t(this,void 0,void 0,(function*(){e.wrapper=n(this);e.wrapper.style("padding","5px");e.titleDiv=e.wrapper.append("span").style("padding","3px 0px 5px").style("opacity",.65).style("font-size","0.8em").text(e.title);yield e.wrapper.append("div").classed("sjpp-result-wrapper",true).selectAll("div").data(e.items).enter().append("div").classed("sja_menuoption",true).classed("sjpp-search-result",true).style("display","block").style("padding-left","10px").style("background-color",e.color||"").text((t=>t.name||t.label||t.title||t)).on("click",((t,s)=>{t.stopPropagation();e.callback(s)}))}))}enterSearch(){return t(this,void 0,void 0,(function*(){if(!this.input.property("value").trim())return;const t=this.tip.d.select(".sjpp-result-wrapper").node();const e=this.tip.d.select(".sjpp-search-result").node();if(e!=null&&e.__data__)t.__data__.callback(e.__data__);else{const t=yield this.searchItems();const e=t.filter((t=>t.default));e[0].callback(this.input.property("value"))}this.input.property("value","");this.tip.hide()}))}updatePlaceholder(t){this.input.attr("placeholder",t)}}async function _(t,e,s,i,a){const o=n("input").property("value").trim();const r=[{title:"Genes",default:true,items:await $(o,t.selectgenome.property("value"),a),color:"#F2F2F2",callback:s=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});e.hide();B(s,t,t.selectgenome.property("value"),a)}}];await j(t,o,r,e);r.push({title:"Help",default:false,items:s.filter((t=>t.label.toLowerCase().includes(o.toLowerCase()))),color:"#faebd9",callback:t=>{window.open(t.link,t.label)}});r.push({title:"Publications",default:false,items:i.filter((t=>t.title.toLowerCase().includes(o.toLowerCase())||t.appHeaderTitle.toLowerCase().includes(o.toLowerCase()))),color:"#E6E6FA",callback:t=>{window.open(t.doi,t.title)}});return r}async function j(t,e,s,i){const n=await o(t.cardsPath+"/index.json");if(n.error)a(`Problem retrieving ../cards/index.json`);const r=e.toLowerCase().trim();const p=[...n.elements];let l;if(r.length>2){await A(p,t);l=P(p,r)}else{l=P(p,r)}const d={app:t.drawer.opts,sandboxDiv:t.drawer.opts.sandboxDiv,genomes:t.genomes,fromApp:true};s.push({title:"Tracks and Apps",items:l.filter((t=>t.type=="card")),color:"#e1edf7",callback:e=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});i.hide();v(e,d)}},{title:"Datasets",items:l.filter((t=>t.type=="dsButton")),color:"#e5f5e4",callback:e=>{t.drawer.dispatch({type:"is_apps_btn_active",value:false});i.hide();v(e,d)}});return s}async function A(t,e){const s=t.map((async t=>{if(t.hidden||t.type!="card"||!t.sandboxJson)return t;const s=await o(e.cardsPath+`/${t.sandboxJson}.json`);if(s?.ppcalls.length>0){for(const e of s.ppcalls){if(e.isUI)return;if(e?.label)t.searchterms.push(e.label)}}}));await Promise.all(s)}function P(t,e){return t.filter((t=>{if(t.hidden)return false;let s=(t.searchterms||[]).reduce(((t,s)=>{if(t)return true;return s.toLowerCase().includes(e)}),false);return s||t.name.toLowerCase().includes(e)})).sort(((t,e)=>t.name.localeCompare(e.name)))}async function $(t,e,s){if(t.length==0)return;try{const i=await o("/genelookup",{body:{input:t,genome:e,jwt:s}});if(i.error)throw i.error;if(!i.hits)throw".hits[] missing";return i.hits}catch(t){}}async function B(t,e,s,i){const a=e.genomes[s];if(!a){console.error("unknown genome "+s);return}const n=r(e.drawer.opts.sandboxDiv);n.header.html('<div style="display:inline-block;">'+t+'</div><div class="sjpp-output-sandbox-title">'+s+"</div>");const o=p();const m=await l(o,a);const u=d(t,a);if(u){const t={hostURL:e.hostURL,jwt:i,holder:n.body,genome:a,nobox:true,chr:u.chr,start:u.start,stop:u.stop,dogtag:s,tklst:m,debugmode:e.debugmode};c(a,t.tklst);import("./block-da405d5b.js").then((function(t){return t.c})).then((e=>new e.Block(t))).catch((t=>{e.error0(t)}));return}const y={hostURL:e.hostURL,jwt:i,query:t,genome:a,holder:n.body,variantPageCall_snv:e.variantPageCall_snv,samplecart:e.samplecart,tklst:m,debugmode:e.debugmode};const b=sessionStorage.getItem("urlp_mds");if(b){const t=b.split(",");if(t.length==2){y.datasetqueries=[{dataset:t[0],querykey:t[1]}]}}await h(y)}class D{constructor(t){this.type="card";this.opts=this.validateOpts(t);this.holder=t.holder;this.dom=t.dom;this.sandboxDiv=t.sandboxDiv;R(this)}validateOpts(t){if(!t.element.name)throw`Card .name is missing`;if(t.element.type=="card"){if(!t.element.sandboxJson&&!t.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for card=${t.element.name}`}if(t.element.type=="nestedCard"){if(!t.element.children||t.element.children.length==0)throw`Missing .children for nested card = ${t.element.name}`}if(t.element.ribbon){if(!t.element.ribbon.text)throw`Missing ribbon .text for ${t.element.type} = ${t.element.name}`;if((t.element.ribbon.text.toUpperCase()=="NEW"||t.element.ribbon.text.toUpperCase()=="UPDATED")&&!t.element.ribbon.expireDate)throw`${t.element.type} = ${t.element.name} ribbon is ${t.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`;if(t.element.ribbon.expireDate){if(t.element.ribbon.expireDate>=0){throw`Flag for ${t.element.type} = ${t.element.name} is not a valid date`}}}return t}main(){}}const L=m(D);function R(t){const e=t.holder.append("li");if(t.opts.element.type=="card"){e.classed("sjpp-track",true).html(`<div class="sjpp-track-h"><span style="font-size:14.5px;font-weight:500;">${t.opts.element.name}</span></div>\n\t\t\t\t${t.opts.element.description?`<span class="sjpp-track-blurb" style="cursor:default">${t.opts.element.description}</span></div>`:" "}\n\t\t\t\t<span class="sjpp-track-image"><img src="${t.opts.element.image}" alt="${t.opts.element.description}"></img></span>\n\t\t\t\t</div>`)}else if(t.opts.element.type=="nestedCard"){e.classed("sjpp-app-drawer-card",true).html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${t.opts.element.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${t.opts.element.description}</p>`)}t.makeRibbon=function(t){const s=e.append("div").classed("sjpp-app-drawer-card-ribbon",true).style("align-items","center").style("justify-content","center");const i=t.text.toUpperCase();const a=i=="BETA"?"#418cb5":i=="NEW"?"#1ba176":i=="UPDATED"?"orange":t.color?t.color:"red";s.append("span").text(i).style("color","white").style("background-color",u(a).darker()).style("height","auto").style("width","100%").style("top","15%").style("left","-30%").style("font-size","11.5px").style("text-transform","uppercase").style("text-align","center")};if(t.opts.element.ribbon){const e=new Date;const s=new Date(t.opts.element.ribbon.expireDate);if(s>e||s=="Invalid Date")t.makeRibbon(t.opts.element.ribbon)}e.on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active",value:false});T(t);await v(t.opts.element,t.opts)}))}class S{constructor(t){this.type="button";this.opts=this.validateOpts(t);this.holder=t.holder;this.dom=t.dom;this.sandboxDiv=t.sandboxDiv;z(this)}validateOpts(t){if(!t.element.name)throw`Button name is missing`;if(!t.element.sandboxJson&&!t.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for button=${t.element.name}`;return t}main(){}}const C=y(S);function z(t){const e=x({div:t.holder,text:t.opts.element.name,margin:"20px 20px 0px"});e.attr("class","sjpp-appdrawer-dataset-btn").on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active",value:false});T(t);await v(t.opts.element,t.opts)}))}class H{constructor(t){this.type="layout";this.dom={holder:t.dom.drawerDiv,wrapper:t.dom.wrapper,sandboxDiv:t.dom.sandboxDiv};this.state=t.state;this.hasStatePreMain=true}async validateIndexJson(){const t=await this.getIndexJson();if(!t.elements)throw`Missing elements array`;if(!t.elements.length)throw`No element objects provided`;if(t.columnsLayout){if(t.columnsLayout.length==0)throw`Missing column objects`;const e=t.columnsLayout.map((t=>t.gridarea));if(e.length!=new Set(e).size)throw`Duplicate values for .gridarea found`;const s=[];for(const e of t.columnsLayout){if(!e.gridarea)throw`Missing column .gridarea for column = ${e.name}`;if(!e.sections||e.sections.length==0)throw`Missing section objects for column = ${e.name}`;for(const t of e.sections){if(!t.id)throw`Missing section .id in ${t.name?`section = ${t.name}`:`column = ${e.name} array`}`;s.push(t.id)}if(e.sections.length!=new Set(e.sections).size){throw`Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`}}if(s.length!=new Set(s).size)throw`Duplicate values for section.id found`;for(const e of t.elements){if(!e.section)throw`.section is missing for ${e.type} = ${e.name}`;if(!s.some((t=>t==e.section)))throw`section = ${e.section} for ${e.type} = ${e.name} is not a column section`}}return t}async getIndexJson(){const t=await o(this.app.cardsPath+"/index.json");if(t.error){b(this.dom.holder.append("div"),t.error);return}return t}async init(){this.index=await this.validateIndexJson();this.elementsRendered=false;U(this);this.elements=this.index.elements.filter((t=>!t.hidden));this.layout=this.index.columnsLayout?this.index.columnsLayout:null;this.components={elements:[]}}async main(){if(this.elementsRendered==true)return;this.elementsRendered=true;for(const t of this.elements){const e=n(this.layout?`#${t.section} > .sjpp-element-list`:`.sjpp-element-list`);if(t.type=="card"||t.type=="nestedCard"){this.components.elements.push(await L({app:this.app,holder:e.style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(320px, 1fr))").style("gap","10px").style("list-style","none").style("margin","15px 0px"),element:t,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}else if(t.type=="dsButton"){this.components.elements.push(await C({app:this.app,holder:e,element:t,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}}}}const I=m(H);function U(t){if(!t.index.columnsLayout)J(t);if(t.index.columnsLayout)E(t)}function J(t){const e=t.dom.wrapper.append("div").style("display","flex").style("padding","10px").classed("sjpp-element-list",true);return e}function E(t){const e=t.dom.wrapper.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(425px, 1fr))").style("gap","10px").style("padding","10px").style("text-align","left");const s=[];for(const e of t.index.columnsLayout)s.push(e.gridarea);e.style("grid-template-areas",`"${s.toString().replace(","," ")}"`);for(const s of t.index.columnsLayout){const t=e.append("div").style("grid-area",s.gridarea).classed(".sjpp-track-cols",true);for(const e of s.sections)i(e,t)}function i(t,e){const s=e.append("div").attr("id",t.id);if(t.name)s.append("h5").classed("sjpp-appdrawer-cols",true).style("color",u(g).darker()).text(t.name);s.append("div").classed("sjpp-element-list",true).style("padding","10px");return s}}class F{constructor(t){this.type="mainBtn";this.opts=this.validateOpts(t);this.dom=t.dom;this.state=t.state;this.hasStatePreMain=true;N(this)}validateOpts(t){return t.app.opts}getState(t){return{appBtnActive:t.appBtnActive}}async init(){this.btnRendered=false;this.drawerFullHeight="";try{if(window.location.pathname=="/"&&!window.location.search.length)await this.app.dispatch({type:"is_apps_btn_active",value:true});this.components={layout:[]}}catch(t){throw t}}async main(t){if(this.app.getState(t).appBtnActive==true&&this.btnRendered==false){this.dom.drawerDiv.style("background-color","#f5f5f5");this.components.layout.push(await I({app:this.app,dom:this.dom,state:this.state}));setTimeout((()=>{this.drawerFullHeight=this.dom.drawerDiv.node().getBoundingClientRect().height+5}),this.state.duration+5);T(this);this.btnRendered=true}if(this.state.appBtnActive==false&&this.btnRendered==true)T(this)}}const O=m(F);function N(t){t.dom.btnWrapper.style("background-color",t.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",t.state.appBtnActive?"#fff":"#000").on("click",(async e=>{e.stopPropagation();await t.app.dispatch({type:"is_apps_btn_active"});T(t);if(t.state.appBtnActive){setTimeout((()=>{t.drawerFullHeight=t.dom.drawerDiv.node().getBoundingClientRect().height+5}),t.state.duration+5)}}));t.dom.btn.attr("class","sja_menuoption").style("display","inline-block").style("background-color","transparent").style("color",t.state.appBtnActive?"#fff":"#000").style("padding",t.opts.padw_sm).style("margin","0px 5px").style("cursor","pointer").text("Apps");t.dom.drawerHint.style("position","relative").style("display","inline-block").style("height",t.state.arrowSize.closed+"px").style("width",t.state.appBtnActive?t.state.hintWidth.open:t.state.hintWidth.closed).style("background-color","transparent").style("text-align","center").style("cursor","pointer");t.dom.drawerArrow.style("position","absolute").style("font-size",t.state.arrowSize.closed+"px").style("right",t.state.hintPos.closed.rt+"px").style("bottom",t.state.hintPos.closed.btm+"px").style("background-color","transparent").style("color",t.state.arrowColor.closed).style("opacity",t.state.appBtnActive?0:1).style("cursor","pointer").html("▼");t.dom.drawerArrowOpen.style("position","absolute").style("font-size",t.state.arrowSize.open+"px").style("left",t.state.hintPos.open.left+"px").style("bottom",t.state.hintPos.open.btm+"px").style("transform","rotate(180deg)").style("background-color","transparent").style("color",t.state.arrowColor.open).style("opacity",t.state.appBtnActive?1:0).style("cursor","pointer").style("pointer-events",t.state.appBtnActive?"auto":"none").html("▼");t.drawerFullHeight=t.dom.drawerRow.node().getBoundingClientRect().height+5}async function T(t){t.dom.btnWrapper.transition().duration(t.opts.state.duration).style("background-color",t.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",t.state.appBtnActive?"#fff":"#000");t.dom.btn.transition().duration(t.opts.state.duration).style("color",t.state.appBtnActive?"#fff":"#000");t.dom.drawerDiv.style("display","inline-block").transition().duration(t.opts.state.duration).style("top",t.state.appBtnActive?"0px":"-"+t.drawerFullHeight+"px");t.dom.drawerRow.transition().duration(t.opts.state.duration).style("height",t.state.appBtnActive?t.drawerFullHeight+"px":"0px");t.dom.drawerHint.transition().duration(t.opts.state.duration).style("width",t.state.appBtnActive?t.opts.state.hintWidth.open:t.opts.state.hintWidth.closed);t.dom.drawerArrow.transition().duration(t.opts.state.duration).style("opacity",t.state.appBtnActive?0:1);t.dom.drawerArrowOpen.style("pointer-events",t.state.appBtnActive?"auto":"none").transition().duration(t.opts.state.duration).style("opacity",t.state.appBtnActive?1:0)}class W{constructor(t){this.type="store";this.defaultState={duration:500,hintPos:{open:{btm:-42,left:13},closed:{btm:3,rt:5}},hintWidth:{open:"0px",closed:"18px"},arrowSize:{open:42,closed:20},arrowColor:{open:"rgb(242,242,242)",closed:"rgb(85,85,85)"},appBtnActive:false}}async init(){}}const M=f(W);W.prototype.actions={is_apps_btn_active(t){this.state.appBtnActive="value"in t?t.value:!this.state.appBtnActive}};class q{constructor(t){this.type="app";const e=t.drawerRow.append("div").style("position","relative").style("margin","0 20px").style("padding",`0 ${t.padw_sm}`).style("display","inline-block").style("overflow","hidden").style("border-radius","0px 0px 5px 5px").style("width","93vw").classed("sjpp-drawer-div",true);const s=t.headbox.append("div").style("position","relative").style("display","inline-block").style("margin-left","5px").style("margin-right","5px").style("border-radius","5px").classed("sjpp-apps-btn-wrapper",true);this.dom={drawerRow:t.drawerRow,drawerDiv:e,sandboxDiv:t.sandboxDiv,btnWrapper:s,btn:s.append("div"),drawerHint:s.append("div"),drawerArrow:s.append("div"),drawerArrowOpen:s.append("div"),wrapper:e.append("div")}}preApiFreeze(t){t.cardsPath=this.opts.cardsPath}async init(){try{this.store=await M({app:this.api,state:this.opts.state});this.state=await this.store.copyState();this.components={mainBtn:await O({app:this.api,dom:this.dom,state:this.state,indexJson:this.indexJson})};await this.api.dispatch()}catch(t){throw t}}main(){}}const G=w(q);class K{constructor(t){this.headtip=t.headtip;this.app=t.app;this.data=t.data;this.jwt=t.jwt;this.publications=[]}createPublicationsList(){var e;return t(this,void 0,void 0,(function*(){const t=yield o(this.app.cardsPath+"/citations.json");if(t.error)console.error(`Problem retrieving ../cards/citations.json`);this.publications=((e=t===null||t===void 0?void 0:t.publications)===null||e===void 0?void 0:e.length)?t.publications.filter((t=>t.appHeaderTitle)).sort(((t,e)=>e.year-t.year)):[]}))}makeheader(){return t(this,void 0,void 0,(function*(){yield this.createPublicationsList();const s=u(g);const i="13px";const a="5px 10px";const n="7px 10px";const r=document.documentElement.clientWidth;const p=this.app.holder.append("div").style("white-space","nowrap").style("border-bottom",r>1600?"solid 1px rgba("+s.r+","+s.g+","+s.b+",.3)":"");const l=p.append("div").style("margin","10px").style("padding","8px").style("padding-bottom","12px").style("display",r<1600?"block":"inline-block").style("border-bottom",r<1600?"solid 1px rgba("+s.r+","+s.g+","+s.b+",.3)":"");const d=p.append("div").style("display","inline-block").style("padding",n).style("padding-left","25px").style("font-size",".8em").style("color",u(g).darker());{const e=d.append("div").style("padding-left","15px");e.attr("id","sjpp-serverstat").append("span").text("Code updated: "+(this.data.codedate||"??")+", server launched: "+(this.data.launchdate||"??")+".");if(this.data.hasblat){e.append("a").style("margin-left","10px").text("Running BLAT").on("click",(e=>t(this,void 0,void 0,(function*(){this.headtip.clear().showunder(e.target);const t=this.headtip.d.append("div").style("margin","10px");const s=t.append("div").text("Loading...");try{const e=yield o("blat?serverstat=1");if(e.error)throw e.error;if(!e.lst)throw"invalid response";s.remove();for(const s of e.lst){t.append("div").text(s)}}catch(t){s.text(t.message||t);if(t.stack)console.error(t.stack)}}))))}}if(this.data.headermessage){d.append("div").html(this.data.headermessage)}l.append("div").text("ProteinPaint").style("display","inline-block").style("padding",i).style("color",g).style("font-size","1.3em").style("font-weight","bold");const c=new e({border:"",padding:"0px"});const h=new k({holder:l,tip:c,style:{padding:n,border:`'solid 1px ${g}`},size:32,placeholder:"Gene, position, SNP, app, or dataset",title:"Search by gene, SNP, position, app, or dataset",searchItems:()=>t(this,void 0,void 0,(function*(){return yield _(this.app,this.headtip,K.help,this.publications,this.jwt)}))});h.initUI();const m=l.append("div").attr("class","sjpp-genome-select-div").style("padding",n);const y=()=>{const t=this.app.genomes[this.app.selectgenome.property("value")];const e=["Gene","position","app"];if(t.hasSNP)e.splice(2,0,"SNP");if(Object.keys(t.datasets).length)e.push("dataset");const s=e.join(", ").replace(/,(?=[^,]*$)/,", or");return s};this.app.selectgenome=m.append("select").attr("title","Select a genome").attr("class","sjpp-genome-select").style("padding",a).style("border","solid 1px "+g).on("change",(()=>{this.update_genome_browser_btn(this.app);h.updatePlaceholder(y())}));for(const t in this.app.genomes){this.app.selectgenome.append("option").attr("n",t).text(this.app.genomes[t].species+" "+t).property("value",t)}this.app.genome_browser_btn=this.make_genome_browser_btn(this.app,l,this.jwt);this.app.drawer=yield G({holder:this.app.holder,genomes:this.app.genomes,drawerRow:this.app.holder.append("div").style("position","relative").style("overflow-x","visible").style("overflow-y","hidden").classed("sjpp-drawer-row",true),sandboxDiv:this.app.holder.append("div").style("margin-top","15px").classed("sjpp-drawer-sandbox",true),genome_browser_btn:this.app.genome_browser_btn,debugmode:this.app.debugmode,headbox:l,padw_sm:n,cardsPath:this.app.cardsPath});l.append("span").classed("sja_menuoption",true).attr("id","sjpp-header-help-btn").style("padding",n).text("Help").on("click",(e=>t(this,void 0,void 0,(function*(){const t=e.target.getBoundingClientRect();const s=this.headtip.clear().show(t.left-0,t.top+t.height+5);yield s.d.append("div").style("padding","5px 20px").selectAll("p").data(K.help.filter((t=>!t.onlySearch))).enter().append("p").html((t=>`<a href=${t.link} target=_blank>${t.label}</a>`))}))));if(this.publications.length>0){l.append("span").classed("sja_menuoption",true).attr("id","sjpp-header-publications-btn").style("padding",n).style("margin","0px 5px").text("Publications").on("click",(e=>t(this,void 0,void 0,(function*(){const t=e.target.getBoundingClientRect();const s=this.headtip.clear().show(t.left-150,t.top+t.height+5);yield s.d.append("div").style("padding","5px 20px").selectAll("p").data(this.publications).enter().append("p").html((t=>`<a href=${t.doi} target=_blank>${t.appHeaderTitle}, ${t.journal}, ${t.year}</a>`))}))))}}))}make_genome_browser_btn(t,e,s){const i="8px";const a=e.append("span");const n=t.selectgenome.node().options[t.selectgenome.property("selectedIndex")].value;const o=a.attr("class","sja_menuoption").attr("id","genome_btn").style("padding",i).datum(n).text(n+" genome browser").on("click",(()=>{const e=t.selectgenome.node().value;const i=t.genomes[e];if(!i){alert("Invalid genome name: "+e);return}const a=r(t.drawer.opts.sandboxDiv);a.header.text(e+" genome browser");const n={hostURL:t.hostURL,jwt:s,holder:a.body,genome:i,chr:i.defaultcoord.chr,start:i.defaultcoord.start,stop:i.defaultcoord.stop,nobox:true,tklst:[],debugmode:t.debugmode};c(i,n.tklst);import("./block-da405d5b.js").then((function(t){return t.c})).then((t=>new t.Block(n)));t.drawer.dispatch({type:"is_apps_btn_active",value:false})}));return o}update_genome_browser_btn(t){t.genome_browser_btn.text(t.selectgenome.node().value+" genome browser");t.genome_browser_btn.datum(t.selectgenome.node().value)}}K.help=[{label:"Embed in your website",link:"https://github.com/stjude/proteinpaint/wiki/Embedding"},{label:"URL parameters",link:"https://github.com/stjude/proteinpaint/wiki/URL-parameters"},{label:"All tutorials",link:"https://github.com/stjude/proteinpaint/wiki/"},{label:"User community",link:"https://groups.google.com/g/proteinpaint"},{label:"License ProteinPaint",link:"https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html",onlySearch:true},{label:"Our Team",link:"https://proteinpaint.stjude.org/team/",onlySearch:true}];export{K as AppHeader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./axisstyle-fac7f76b.js";import{H as a,ag as s}from"./app-
|
|
1
|
+
import{a as t}from"./axisstyle-fac7f76b.js";import{H as a,ag as s}from"./app-f3a0804e.js";import{c as i,a as r}from"./axis-747c801e.js";class e{constructor(t){this.barheight=t.barheight||14;this.barwidth=t.barwidth||100;this.startColor=t.startColor||"white";this.midColor=t.midColor||"white";this.endColor=t.endColor||"red";this.data=t.data;this.position=t.position||"0,0";this.svg={width:t.width||100,height:t.height||30};this.topTicks=t.topTicks||false;this.ticks=t.ticks||5;this.tickSize=t.tickSize||1;this.fontSize=t.fontSize||10;this.markedValue=t.markedValue&&t.markedValue>.001?t.markedValue:null;if(!t.holder)throw new Error("No holder provided for color scale.");if(!t.data)throw new Error("No data provided for color scale.");this.formatData();const a=t.holder.append("svg").attr("data-testid","sjpp-color-scale").attr("width",this.svg.width).attr("height",this.svg.height);const s=a.append("g").attr("transform",`translate(${this.position})`);const i=Math.random().toString();if(this.topTicks===true){const{scale:t,scaleAxis:a}=this.makeAxis(s,i);const{gradientStart:r,gradientMid:e,gradientEnd:o}=this.makeColorBar(s,i);this.dom={scale:t,scaleAxis:a,gradientStart:r,gradientMid:e,gradientEnd:o}}else{const{gradientStart:t,gradientMid:a,gradientEnd:r}=this.makeColorBar(s,i);const{scale:e,scaleAxis:o}=this.makeAxis(s,i);this.dom={scale:e,scaleAxis:o,gradientStart:t,gradientMid:a,gradientEnd:r};if(this.markedValue!==null)this.markedValueInColorBar(s)}}formatData(){this.data=this.data.map((t=>Number(t.toFixed(2))))}makeColorBar(t,a){const s=t.append("defs");const i=s.append("linearGradient").attr("data-testid","sjpp-color-scale-bar").attr("id",a);const r=i.append("stop").attr("offset","0%").attr("stop-color",this.startColor);const e=i.append("stop").attr("offset","100%").attr("stop-color",this.midColor);const o=i.append("stop").attr("offset","100%").attr("stop-color",this.endColor);return{gradientStart:r,gradientMid:e,gradientEnd:o}}makeAxis(t,s){t.append("rect").attr("height",this.barheight).attr("width",this.barwidth).attr("fill","url(#"+s+")");const i=t.append("g").attr("data-testid","sjpp-color-scale-axis");if(this.topTicks===false)i.attr("transform",`translate(0, ${this.barheight+2})`);const r=a().domain(this.data).range([0,this.barwidth]);return{scale:r,scaleAxis:i}}markedValueInColorBar(t){if(!this.markedValue||this.topTicks==true)return;this.dom.line=t.append("line").classed("sjpp-color-scale-marked",true).attr("data-testid","sjpp-color-scale-marked-tick").attr("y1",this.barheight-2).attr("y2",this.barheight+1).attr("stroke","black");this.dom.label=t.append("text").classed("sjpp-color-scale-marked",true).attr("data-testid","sjpp-color-scale-marked-label").attr("text-anchor","middle").attr("font-family",s).attr("font-size",this.fontSize).attr("y",this.barheight-3);this.updateValueInColorBar()}render(){const a=this.getAxis();t({axis:this.dom.scaleAxis.call(a),showline:false,fontsize:this.fontSize})}getAxis(){const t=this.topTicks===true?i(this.dom.scale):r(this.dom.scale);t.ticks(this.ticks).tickSize(this.tickSize);return t}setAxis(t){if(this.topTicks===true){return i(this.dom.scale).tickValues(t).tickSize(this.tickSize)}else{return r(this.dom.scale).tickValues(t).tickSize(this.tickSize)}}updateColors(){this.dom.gradientStart.attr("stop-color",this.startColor);this.dom.gradientMid.attr("stop-color",this.midColor);this.dom.gradientEnd.attr("stop-color",this.endColor)}updateAxis(){this.formatData();const t=this.data[0];const s=this.data[this.data.length-1];const i=[t,s];this.dom.scaleAxis.selectAll("*").remove();if(t<0&&s>0){i.splice(this.data.length/2,0,0);this.dom.scale=a().domain(i).range([0,this.barwidth/2,this.barwidth]);this.dom.gradientStart.attr("offset","0%").attr("stop-color",this.startColor);this.dom.gradientMid.attr("offset","50%").attr("stop-color",this.midColor);this.dom.gradientEnd.attr("offset","100%").attr("stop-color",this.endColor)}else{this.dom.scale=a().domain(i).range([0,this.barwidth]);this.dom.gradientStart.attr("offset","0%").attr("stop-color",this.startColor);this.dom.gradientMid.attr("offset",t>=0?"0%":"100%").attr("stop-color",t>=0?this.startColor:this.endColor);this.dom.gradientEnd.attr("offset","100%").attr("stop-color",this.endColor)}this.dom.scaleAxis.transition().duration(500).call(this.setAxis(i))}updateValueInColorBar(){if(!this.markedValue||this.topTicks==true)return;if(!this.dom.line||!this.dom.label)throw new Error("Missing dom elements to update value in color bar.");const t=Math.min(this.barwidth,this.dom.scale(this.markedValue));this.dom.line.attr("x1",t).attr("x2",t);this.dom.label.attr("x",t).text(Math.floor(this.markedValue))}updateScale(){this.updateColors();this.updateAxis();this.updateValueInColorBar()}}export{e as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./axisstyle-fac7f76b.js";import{M as t,K as a,h as s,H as l,bm as o,d as n,b as i}from"./app-f070f904.js";import{d as r,r as c}from"./table-8581b1c6.js";import{controlsInit as d}from"./controls-5545e307.js";import{b as p,a as g}from"./axis-747c801e.js";import"./tslib.es6-62bb2d8e.js";import"./controls.btns-49de730d.js";import"./controls.config-fb436d5d.js";import"./controls.overlay-9a2fd603.js";import"./roundValue-bdeca19e.js";import"path";import"./FilterRxComp-b2d92192.js";import"./termdb.bins-71788afb.js";import"./controls.term1-4f9c23d6.js";import"./controls.divide-4771c093.js";const u="#ffa200";const m=new t;class h{constructor(){this.type="DEanalysis"}async init(e){e.plots.find((e=>e.id===this.id));const t=this.opts.holder.append("div").style("display","inline-block");const a=this.opts.holder.append("div").style("display","inline-block").style("margin-left","50px");const s=a.append("div").style("display","inline-block");const l=a.append("div").style("display","inline-block").style("vertical-align","top").style("margin-top","50px");const o=this.opts.holder.append("div").style("margin-left","50px");this.dom={holder:s,header:this.opts.header,controlsDiv:t,detailsDiv:l,tableDiv:o}}async setControls(e){this.dom.controlsDiv.selectAll("*").remove();const t=[{label:"Minimum read count",type:"number",chartType:"DEanalysis",settingsKey:"min_count",title:"Relative cpm cutoff for filtering a gene compared to all samples and genes in dataset",min:0,max:1e4},{label:"Minimum total read count",type:"number",chartType:"DEanalysis",settingsKey:"min_total_count",title:"Minimum total read count required for each sample",min:0,max:1e4},{label:"P-value significance (linear scale)",type:"number",chartType:"DEanalysis",settingsKey:"pvalue",title:"P-value significance",min:0,max:1},{label:"Fold change (log scale)",type:"number",chartType:"DEanalysis",settingsKey:"foldchange",title:"Fold change",min:-10,max:10},{label:"P-value table",type:"checkbox",chartType:"DEanalysis",settingsKey:"pvaluetable",title:"Display table showing original and adjusted pvalues for all significant genes",boxLabel:""},{label:"P-value",type:"radio",chartType:"DEanalysis",settingsKey:"adjusted_original_pvalue",title:"Toggle between original and adjusted pvalues for volcano plot",options:[{label:"adjusted",value:"adjusted"},{label:"original",value:"original"}]}];if(e.mid_sample_size_cutoff>=e.sample_size1&&e.mid_sample_size_cutoff<e.sample_size2&&e.sample_size2<e.high_sample_size_cutoff||e.mid_sample_size_cutoff>=e.sample_size2&&e.mid_sample_size_cutoff<e.sample_size1&&e.sample_size1<e.high_sample_size_cutoff){t.push({label:"Method",type:"radio",chartType:"DEanalysis",settingsKey:"method",title:"Toggle between edgeR and wilcoxon test",options:[{label:"edgeR",value:"edgeR"},{label:"wilcoxon",value:"wilcoxon"}]});this.settings.method=e.method;this.state.config=e.method}if(this.app.opts.genome.termdbs){t.push({label:"Gene set overrepresentation analysis",type:"radio",chartType:"DEanalysis",settingsKey:"gene_ora",title:"Toggle between analyzing upregulated, downregulated or both genes",options:[{label:"upregulated",value:"upregulated"},{label:"downregulated",value:"downregulated"},{label:"both",value:"both"}]})}if(this.app.opts.genome.termdbs&&!this.settings.gsea){t.push({label:"Gene set enrichment analysis",type:"radio",chartType:"DEanalysis",settingsKey:"gsea",title:"Gene set enrichment analysis",options:[{label:"Submit",value:"Submit"}]})}if(this.settings.pvaluetable==true){t.push({label:"Hierarchial Clustering",type:"radio",chartType:"DEanalysis",settingsKey:"hierCluster",title:"Toggle between various methods for selecting genes for hierarchial clustering",options:[{label:"Top 100 genes",value:"top100"},{label:"Top 100 upregulated",value:"top100up"},{label:"Top 100 downregulated",value:"top100down"}]});this.settings.hierCluster="top100"}this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controlsDiv,inputs:t})};this.components.controls.on("downloadClick.DEanalysis",(()=>{r(this.table_rows,this.table_cols)}))}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t)throw`No plot with id='${this.id}' found`;return{config:t}}async main(){this.config=JSON.parse(JSON.stringify(this.state.config));this.settings=this.config.settings.DEanalysis;if(this.dom.detailsDiv){this.dom.detailsDiv.selectAll("*").remove()}if(this.dom.holder){this.dom.holder.selectAll("*").remove()}const e=this.dom.detailsDiv.append("div").text("Loading...");const t=await D(this);e.remove();t.mid_sample_size_cutoff=8;t.high_sample_size_cutoff=30;await this.setControls(t);this.dom.header.style("opacity",.6).style("padding-left","10px").style("font-size","0.75em").text("DIFFERENTIAL GENE EXPRESSION");f(this,t)}}async function f(t,a){const s=a.sample_size1;const n=a.sample_size2;const i=a.data;const r=t.dom.holder;r.selectAll("*").remove();t.dom.detailsDiv.selectAll("*").remove();let d=0,m=0,h=0,f=0;for(const e of i){d=Math.min(d,e.fold_change);m=Math.max(m,e.fold_change);if(e.adjusted_p_value==0){continue}else{h=Math.min(h,e.adjusted_p_value);f=Math.max(f,e.adjusted_p_value)}}let _,v,b,y,j,D,E=50,M=50,k;const z=r.append("svg");const T=z.append("g");const P=z.append("g");const A=z.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const K=z.append("text").text("-log10(adjusted P value)").attr("fill","black").attr("text-anchor","middle");i.vo_dotarea=z.append("g");const R=i.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const S=l().domain([d,m]);const C=l().domain([h,f]);const N=i.vo_dotarea.selectAll().data(i).enter().append("g").each((function(e){e.vo_g=this}));const G=t.settings.foldchange;if(t.settings.pvalue==0)throw"p-value significance cannot be zero";const F=-Math.log10(t.settings.pvalue);const O=t.settings.adjusted_original_pvalue;let L=0;let H=0;t.table_rows=[];const I=N.append("circle").attr("stroke",(e=>{let a;if(O=="adjusted"&&e.adjusted_p_value>F&&Math.abs(e.fold_change)>G){a="red";L+=1;t.table_rows.push([{value:e.gene_name},{value:e.gene_symbol},{value:e.fold_change.toPrecision(4)},{value:Math.pow(10,-e.original_p_value).toPrecision(4)},{value:Math.pow(10,-e.adjusted_p_value).toPrecision(4)}])}else if(O=="original"&&e.original_p_value>F&&Math.abs(e.fold_change)>G){a="red";L+=1;t.table_rows.push([{value:e.gene_name},{value:e.gene_symbol},{value:e.fold_change},{value:Math.pow(10,-e.original_p_value)},{value:Math.pow(10,-e.adjusted_p_value)}])}else{a="black";H+=1}return a})).attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",u).attr("fill-opacity",0).each((function(e){e.vo_circle=this})).on("mouseover",x).on("mouseout",w);t.table_rows.sort(((e,t)=>e[2].value-t[2].value)).reverse();const J=i.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function X(t,a){b=t;y=a;_=Math.max(50,b/8);v=Math.max(50,y/8);k=Math.max(b,y)/80;const s=k*3;I.each((e=>{e.vo_radius=k}));j=Math.max(s,b/50);D=Math.max(s,y/50);T.attr("transform","translate("+_+","+E+")");P.attr("transform","translate("+(_+j)+","+(E+y+D)+")");A.attr("x",_+j+b/2).attr("y",E+y+D+v-5);K.attr("transform","translate(15,"+(E+y/2)+") rotate(-90)");i.vo_dotarea.attr("transform","translate("+(_+j)+","+E+")");R.attr("width",b).attr("height",y);S.range([0,b]);C.range([y,0]);N.attr("transform",(e=>"translate("+S(e.fold_change)+","+C(e.adjusted_p_value)+")"));I.attr("r",(e=>e.vo_radius));J.attr("x1",S(0)).attr("x2",S(0)).attr("y2",y);z.attr("width",_+j+b+M).attr("height",E+y+D+v);e({axis:T.call(p().scale(C)),color:"black",showline:true});e({axis:P.call(g().scale(S)),color:"black",showline:true})}X(400,400);if(i[0].adjusted_p_value!=undefined){r.append("div").style("margin","20px");h=0;f=0;let l;for(const e of i){let t;if(O=="adjusted"){t=e.adjusted_p_value}else{t=e.original_p_value}if(t==0)continue;h=Math.min(h,t);f=Math.max(f,t)}C.domain([h,f]);e({axis:T.call(p().scale(C)),color:"black",showline:true});N.attr("transform",(e=>{let t;if(O=="adjusted"){t=e.adjusted_p_value}else{t=e.original_p_value}return"translate("+S(e.fold_change)+","+C(t)+")"}));if(O=="adjusted"){l="-log10(adjusted P value)"}else{l="-log10(original P value)"}K.text(l);const d=o({holder:t.dom.detailsDiv});const g=[{label:"Percentage of significant genes",value:(L*100/(L+H)).toPrecision(2)},{label:"Number of significant genes",value:L},{label:"Number of total genes",value:L+H},{label:"Group1 sample size",value:s},{label:"Group2 sample size",value:n}];for(const e of g){const[t,a]=d.addRow();t.text(e.label);a.style("text-align","end").text(e.value)}t.table_cols=[{label:"Gene Name"},{label:"Gene Symbol"},{label:"log2 Fold change"},{label:"Original p-value (linear scale)"},{label:"Adjusted p-value (linear scale)"}];if(t.settings.pvaluetable==true){const e=t.dom.tableDiv.append("div").html(`<br>DE analysis results`);c({columns:t.table_cols,rows:t.table_rows,div:e,showLines:true,maxHeight:"150vh",resize:true})}else{t.dom.tableDiv.selectAll("*").remove()}if(t.settings.gene_ora&&t.app.opts.genome.termdbs){const e=[];const s=[];if(t.settings.gene_ora=="upregulated"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)&&t.fold_change>0){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else if(t.settings.gene_ora=="downregulated"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)&&t.fold_change<0){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else if(t.settings.gene_ora=="both"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else{console.log("Unrecognized option")}const l={sample_genes:e.toString(),background_genes:s.toString(),genome:t.app.vocabApi.opts.state.vocab.genome};const o={chartType:"geneORA",geneORAparams:l};t.app.dispatch({type:"plot_create",config:o})}if(t.settings.gsea&&t.app.opts.genome.termdbs){const e={genes:a.data.map((e=>e.gene_symbol)),fold_change:a.data.map((e=>e.fold_change)),genome:t.app.vocabApi.opts.state.vocab.genome};const s={chartType:"gsea",gsea_params:e};t.app.dispatch({type:"plot_create",config:s})}}return z}async function _(e,t){try{if(e.samplelst.groups.length!=2)throw"opts.samplelst.groups[].length!=2";if(e.samplelst.groups[0].values?.length<1)throw"group 1 not having >1 samples";if(e.samplelst.groups[1].values?.length<1)throw"group 2 not having >1 samples";const t={settings:{DEanalysis:{pvalue:.05,foldchange:2,min_count:10,min_total_count:15,pvaluetable:false,adjusted_original_pvalue:"adjusted",method:undefined,gene_ora:undefined,gsea:undefined}}};return a(t,e)}catch(e){throw`${e} [DEanalysis getPlotConfig()]`}}const v=s(h);const b=v;function y(e,t){t.prepPlot({config:{chartType:"DEanalysis"}})}function x(e,t){m.clear().show(e.clientX,e.clientY);const a=[{k:"gene_name",v:t.gene_name},{k:"gene_symbol",v:t.gene_symbol},{k:"log fold change",v:t.fold_change.toPrecision(6)},{k:"log original p-value",v:t.original_p_value.toPrecision(6)},{k:"log adjusted p-value",v:t.adjusted_p_value.toPrecision(6)}];const s=o({holder:m.d});for(const e of a){const[t,a]=s.addRow();t.text(e.k);a.text(e.v)}if(!t.ma_label){n(t.ma_circle).attr("fill-opacity",.9);n(t.vo_circle).attr("fill-opacity",.9)}}function w(e,t){m.hide();if(!t.ma_label){n(t.ma_circle).attr("fill-opacity",0);n(t.vo_circle).attr("fill-opacity",0)}}async function j(e,t,a,s,l){e.term?e:{term:e};let o={chartType:"hierCluster",genes:["barchart",xxx]};if(s)o.insertBefore=s;if(l)o.id=l();await a.dispatch({type:"plot_create",config:o})}async function D(e){const t=await i("DEanalysis",{body:{genome:e.app.vocabApi.vocab.genome,dslabel:e.app.vocabApi.vocab.dslabel,samplelst:e.config.samplelst,min_count:e.settings.min_count,min_total_count:e.settings.min_total_count,method:e.settings.method}});if(t.error)console.log("server side error:",t.error);return t}export{v as DEanalysisInit,b as componentInit,_ as getPlotConfig,y as makeChartBtnMenu,j as openHiercluster};
|
|
1
|
+
import{a as e}from"./axisstyle-fac7f76b.js";import{M as t,K as a,h as s,H as l,bm as o,d as n,b as i}from"./app-f3a0804e.js";import{d as r,r as c}from"./table-57e17295.js";import{controlsInit as p}from"./controls-bffc3085.js";import{b as d,a as g}from"./axis-747c801e.js";import"./tslib.es6-62bb2d8e.js";import"./controls.btns-68ce0015.js";import"./controls.config-88b83e76.js";import"./controls.overlay-8317a391.js";import"./roundValue-9079d4c7.js";import"path";import"./FilterRxComp-b9222eca.js";import"./termdb.bins-2c125708.js";import"./controls.term1-9a366567.js";import"./controls.divide-42828e26.js";const u="#ffa200";const m=new t;class h{constructor(){this.type="DEanalysis"}async init(e){e.plots.find((e=>e.id===this.id));const t=this.opts.holder.append("div").style("display","inline-block");const a=this.opts.holder.append("div").style("display","inline-block").style("margin-left","50px");const s=a.append("div").style("display","inline-block");const l=a.append("div").style("display","inline-block").style("vertical-align","top").style("margin-top","50px");const o=this.opts.holder.append("div").style("margin-left","50px");this.dom={holder:s,header:this.opts.header,controlsDiv:t,detailsDiv:l,tableDiv:o}}async setControls(e){this.dom.controlsDiv.selectAll("*").remove();const t=[{label:"Minimum read count",type:"number",chartType:"DEanalysis",settingsKey:"min_count",title:"Relative cpm cutoff for filtering a gene compared to all samples and genes in dataset",min:0,max:1e4},{label:"Minimum total read count",type:"number",chartType:"DEanalysis",settingsKey:"min_total_count",title:"Minimum total read count required for each sample",min:0,max:1e4},{label:"P-value significance (linear scale)",type:"number",chartType:"DEanalysis",settingsKey:"pvalue",title:"P-value significance",min:0,max:1},{label:"Fold change (log scale)",type:"number",chartType:"DEanalysis",settingsKey:"foldchange",title:"Fold change",min:-10,max:10},{label:"P-value table",type:"checkbox",chartType:"DEanalysis",settingsKey:"pvaluetable",title:"Display table showing original and adjusted pvalues for all significant genes",boxLabel:""},{label:"P-value",type:"radio",chartType:"DEanalysis",settingsKey:"adjusted_original_pvalue",title:"Toggle between original and adjusted pvalues for volcano plot",options:[{label:"adjusted",value:"adjusted"},{label:"original",value:"original"}]}];if(e.mid_sample_size_cutoff>=e.sample_size1&&e.mid_sample_size_cutoff<e.sample_size2&&e.sample_size2<e.high_sample_size_cutoff||e.mid_sample_size_cutoff>=e.sample_size2&&e.mid_sample_size_cutoff<e.sample_size1&&e.sample_size1<e.high_sample_size_cutoff){t.push({label:"Method",type:"radio",chartType:"DEanalysis",settingsKey:"method",title:"Toggle between edgeR and wilcoxon test",options:[{label:"edgeR",value:"edgeR"},{label:"wilcoxon",value:"wilcoxon"}]});this.settings.method=e.method;this.state.config=e.method}if(this.app.opts.genome.termdbs){t.push({label:"Gene set overrepresentation analysis",type:"radio",chartType:"DEanalysis",settingsKey:"gene_ora",title:"Toggle between analyzing upregulated, downregulated or both genes",options:[{label:"upregulated",value:"upregulated"},{label:"downregulated",value:"downregulated"},{label:"both",value:"both"}]})}if(this.app.opts.genome.termdbs&&!this.settings.gsea){t.push({label:"Gene set enrichment analysis",type:"radio",chartType:"DEanalysis",settingsKey:"gsea",title:"Gene set enrichment analysis",options:[{label:"Submit",value:"Submit"}]})}if(this.settings.pvaluetable==true){t.push({label:"Hierarchial Clustering",type:"radio",chartType:"DEanalysis",settingsKey:"hierCluster",title:"Toggle between various methods for selecting genes for hierarchial clustering",options:[{label:"Top 100 genes",value:"top100"},{label:"Top 100 upregulated",value:"top100up"},{label:"Top 100 downregulated",value:"top100down"}]});this.settings.hierCluster="top100"}this.components={controls:await p({app:this.app,id:this.id,holder:this.dom.controlsDiv,inputs:t})};this.components.controls.on("downloadClick.DEanalysis",(()=>{r(this.table_rows,this.table_cols)}))}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t)throw`No plot with id='${this.id}' found`;return{config:t}}async main(){this.config=JSON.parse(JSON.stringify(this.state.config));this.settings=this.config.settings.DEanalysis;if(this.dom.detailsDiv){this.dom.detailsDiv.selectAll("*").remove()}if(this.dom.holder){this.dom.holder.selectAll("*").remove()}const e=this.dom.detailsDiv.append("div").text("Loading...");const t=await D(this);e.remove();t.mid_sample_size_cutoff=8;t.high_sample_size_cutoff=30;await this.setControls(t);this.dom.header.style("opacity",.6).style("padding-left","10px").style("font-size","0.75em").text("DIFFERENTIAL GENE EXPRESSION");f(this,t)}}async function f(t,a){const s=a.sample_size1;const n=a.sample_size2;const i=a.data;const r=t.dom.holder;r.selectAll("*").remove();t.dom.detailsDiv.selectAll("*").remove();let p=0,m=0,h=0,f=0;for(const e of i){p=Math.min(p,e.fold_change);m=Math.max(m,e.fold_change);if(e.adjusted_p_value==0){continue}else{h=Math.min(h,e.adjusted_p_value);f=Math.max(f,e.adjusted_p_value)}}let _,v,b,y,j,D,E=50,M=50,k;const z=r.append("svg");const T=z.append("g");const P=z.append("g");const A=z.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const K=z.append("text").text("-log10(adjusted P value)").attr("fill","black").attr("text-anchor","middle");i.vo_dotarea=z.append("g");const R=i.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const S=l().domain([p,m]);const C=l().domain([h,f]);const N=i.vo_dotarea.selectAll().data(i).enter().append("g").each((function(e){e.vo_g=this}));const G=t.settings.foldchange;if(t.settings.pvalue==0)throw"p-value significance cannot be zero";const F=-Math.log10(t.settings.pvalue);const O=t.settings.adjusted_original_pvalue;let L=0;let H=0;t.table_rows=[];const I=N.append("circle").attr("stroke",(e=>{let a;if(O=="adjusted"&&e.adjusted_p_value>F&&Math.abs(e.fold_change)>G){a="red";L+=1;t.table_rows.push([{value:e.gene_name},{value:e.gene_symbol},{value:e.fold_change.toPrecision(4)},{value:Math.pow(10,-e.original_p_value).toPrecision(4)},{value:Math.pow(10,-e.adjusted_p_value).toPrecision(4)}])}else if(O=="original"&&e.original_p_value>F&&Math.abs(e.fold_change)>G){a="red";L+=1;t.table_rows.push([{value:e.gene_name},{value:e.gene_symbol},{value:e.fold_change},{value:Math.pow(10,-e.original_p_value)},{value:Math.pow(10,-e.adjusted_p_value)}])}else{a="black";H+=1}return a})).attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",u).attr("fill-opacity",0).each((function(e){e.vo_circle=this})).on("mouseover",x).on("mouseout",w);t.table_rows.sort(((e,t)=>e[2].value-t[2].value)).reverse();const J=i.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function X(t,a){b=t;y=a;_=Math.max(50,b/8);v=Math.max(50,y/8);k=Math.max(b,y)/80;const s=k*3;I.each((e=>{e.vo_radius=k}));j=Math.max(s,b/50);D=Math.max(s,y/50);T.attr("transform","translate("+_+","+E+")");P.attr("transform","translate("+(_+j)+","+(E+y+D)+")");A.attr("x",_+j+b/2).attr("y",E+y+D+v-5);K.attr("transform","translate(15,"+(E+y/2)+") rotate(-90)");i.vo_dotarea.attr("transform","translate("+(_+j)+","+E+")");R.attr("width",b).attr("height",y);S.range([0,b]);C.range([y,0]);N.attr("transform",(e=>"translate("+S(e.fold_change)+","+C(e.adjusted_p_value)+")"));I.attr("r",(e=>e.vo_radius));J.attr("x1",S(0)).attr("x2",S(0)).attr("y2",y);z.attr("width",_+j+b+M).attr("height",E+y+D+v);e({axis:T.call(d().scale(C)),color:"black",showline:true});e({axis:P.call(g().scale(S)),color:"black",showline:true})}X(400,400);if(i[0].adjusted_p_value!=undefined){r.append("div").style("margin","20px");h=0;f=0;let l;for(const e of i){let t;if(O=="adjusted"){t=e.adjusted_p_value}else{t=e.original_p_value}if(t==0)continue;h=Math.min(h,t);f=Math.max(f,t)}C.domain([h,f]);e({axis:T.call(d().scale(C)),color:"black",showline:true});N.attr("transform",(e=>{let t;if(O=="adjusted"){t=e.adjusted_p_value}else{t=e.original_p_value}return"translate("+S(e.fold_change)+","+C(t)+")"}));if(O=="adjusted"){l="-log10(adjusted P value)"}else{l="-log10(original P value)"}K.text(l);const p=o({holder:t.dom.detailsDiv});const g=[{label:"Percentage of significant genes",value:(L*100/(L+H)).toPrecision(2)},{label:"Number of significant genes",value:L},{label:"Number of total genes",value:L+H},{label:"Group1 sample size",value:s},{label:"Group2 sample size",value:n}];for(const e of g){const[t,a]=p.addRow();t.text(e.label);a.style("text-align","end").text(e.value)}t.table_cols=[{label:"Gene Name"},{label:"Gene Symbol"},{label:"log2 Fold change"},{label:"Original p-value (linear scale)"},{label:"Adjusted p-value (linear scale)"}];if(t.settings.pvaluetable==true){const e=t.dom.tableDiv.append("div").html(`<br>DE analysis results`);c({columns:t.table_cols,rows:t.table_rows,div:e,showLines:true,maxHeight:"150vh",resize:true})}else{t.dom.tableDiv.selectAll("*").remove()}if(t.settings.gene_ora&&t.app.opts.genome.termdbs){const e=[];const s=[];if(t.settings.gene_ora=="upregulated"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)&&t.fold_change>0){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else if(t.settings.gene_ora=="downregulated"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)&&t.fold_change<0){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else if(t.settings.gene_ora=="both"){for(const t of a.data){if(t.gene_symbol.length>0){if(G<Math.abs(t.fold_change)){e.push(t.gene_symbol)}s.push(t.gene_symbol)}}}else{console.log("Unrecognized option")}const l={sample_genes:e.toString(),background_genes:s.toString(),genome:t.app.vocabApi.opts.state.vocab.genome};const o={chartType:"geneORA",geneORAparams:l};t.app.dispatch({type:"plot_create",config:o})}if(t.settings.gsea&&t.app.opts.genome.termdbs){const e={genes:a.data.map((e=>e.gene_symbol)),fold_change:a.data.map((e=>e.fold_change)),genome:t.app.vocabApi.opts.state.vocab.genome};const s={chartType:"gsea",gsea_params:e};t.app.dispatch({type:"plot_create",config:s})}}return z}async function _(e,t){try{if(e.samplelst.groups.length!=2)throw"opts.samplelst.groups[].length!=2";if(e.samplelst.groups[0].values?.length<1)throw"group 1 not having >1 samples";if(e.samplelst.groups[1].values?.length<1)throw"group 2 not having >1 samples";const t={settings:{DEanalysis:{pvalue:.05,foldchange:2,min_count:10,min_total_count:15,pvaluetable:false,adjusted_original_pvalue:"adjusted",method:undefined,gene_ora:undefined,gsea:undefined}}};return a(t,e)}catch(e){throw`${e} [DEanalysis getPlotConfig()]`}}const v=s(h);const b=v;function y(e,t){t.prepPlot({config:{chartType:"DEanalysis"}})}function x(e,t){m.clear().show(e.clientX,e.clientY);const a=[{k:"gene_name",v:t.gene_name},{k:"gene_symbol",v:t.gene_symbol},{k:"log fold change",v:t.fold_change.toPrecision(6)},{k:"log original p-value",v:t.original_p_value.toPrecision(6)},{k:"log adjusted p-value",v:t.adjusted_p_value.toPrecision(6)}];const s=o({holder:m.d});for(const e of a){const[t,a]=s.addRow();t.text(e.k);a.text(e.v)}if(!t.ma_label){n(t.ma_circle).attr("fill-opacity",.9);n(t.vo_circle).attr("fill-opacity",.9)}}function w(e,t){m.hide();if(!t.ma_label){n(t.ma_circle).attr("fill-opacity",0);n(t.vo_circle).attr("fill-opacity",0)}}async function j(e,t,a,s,l){e.term?e:{term:e};let o={chartType:"hierCluster",genes:["barchart",xxx]};if(s)o.insertBefore=s;if(l)o.id=l();await a.dispatch({type:"plot_create",config:o})}async function D(e){const t=await i("DEanalysis",{body:{genome:e.app.vocabApi.vocab.genome,dslabel:e.app.vocabApi.vocab.dslabel,samplelst:e.config.samplelst,min_count:e.settings.min_count,min_total_count:e.settings.min_total_count,method:e.settings.method}});if(t.error)console.log("server side error:",t.error);return t}export{v as DEanalysisInit,b as componentInit,_ as getPlotConfig,y as makeChartBtnMenu,j as openHiercluster};
|