@sjcrh/proteinpaint-client 2.26.0 → 2.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/{2dmaf-a12a3c3c.js → 2dmaf-ff3de498.js} +1 -1
  2. package/dist/DEanalysis-05fd31d9.js +1 -0
  3. package/dist/Disco-f33d1acc.js +1 -0
  4. package/dist/{app-5b6cae4a.js → app-1669dd30.js} +1 -1
  5. package/dist/app-20b1210c.js +1 -0
  6. package/dist/app-f59bb5db.js +1 -0
  7. package/dist/app.js +1 -1
  8. package/dist/{barchart-1491432d.js → barchart-0b0dd6ef.js} +1 -1
  9. package/dist/{barchart.events-8ad9a060.js → barchart.events-b69c9e6e.js} +1 -1
  10. package/dist/{bars.renderer-2adc741d.js → bars.renderer-7a3949dd.js} +1 -1
  11. package/dist/{block-e228f891.js → block-703241f3.js} +1 -1
  12. package/dist/{block.ds.gmcustomdata-23fc7bad.js → block.ds.gmcustomdata-b7acbff1.js} +1 -1
  13. package/dist/block.lazyload-c4107d03.js +1 -0
  14. package/dist/{block.legend-660536cd.js → block.legend-136d9998.js} +1 -1
  15. package/dist/{block.mds-d22faec0.js → block.mds-745ce550.js} +1 -1
  16. package/dist/{block.mds.cnv-a66e273a.js → block.mds.cnv-7e1dfb09.js} +1 -1
  17. package/dist/{block.mds.expressionrank-bb8daac8.js → block.mds.expressionrank-deae432c.js} +1 -1
  18. package/dist/{block.mds.expressionstat-21f53af1.js → block.mds.expressionstat-149d24ec.js} +1 -1
  19. package/dist/{block.mds.geneboxplot-9a5439ba.js → block.mds.geneboxplot-741b9918.js} +1 -1
  20. package/dist/{block.mds.junction-e06258a6.js → block.mds.junction-646d0396.js} +1 -1
  21. package/dist/block.mds.svcnv-511a9480.js +1 -0
  22. package/dist/{block.mds.svcnv.share-4c4b215e.js → block.mds.svcnv.share-940b8172.js} +1 -1
  23. package/dist/{block.mds2-0a90fbe8.js → block.mds2-feac5f4a.js} +1 -1
  24. package/dist/{block.svg-6cdc27c9.js → block.svg-341bfc2a.js} +1 -1
  25. package/dist/{block.tk.aicheck-424a055f.js → block.tk.aicheck-6f905bbd.js} +1 -1
  26. package/dist/{block.tk.ase-5d6d41e5.js → block.tk.ase-e49245da.js} +1 -1
  27. package/dist/block.tk.bam-2705f1e0.js +1 -0
  28. package/dist/{block.tk.bam.gdc-50680dcf.js → block.tk.bam.gdc-acf16e41.js} +1 -1
  29. package/dist/{block.tk.bedgraphdot-9ffe177c.js → block.tk.bedgraphdot-df2b9ca0.js} +1 -1
  30. package/dist/{block.tk.bigwig.ui-c6cbd0a7.js → block.tk.bigwig.ui-3570dcb4.js} +1 -1
  31. package/dist/block.tk.hicstraw-035acd8d.js +1 -0
  32. package/dist/{block.tk.junction-9c278631.js → block.tk.junction-e9ea1f26.js} +1 -1
  33. package/dist/{block.tk.junction.textmatrixui-d8901a61.js → block.tk.junction.textmatrixui-78b54e75.js} +1 -1
  34. package/dist/{block.tk.ld-152ef218.js → block.tk.ld-3b0dc5d0.js} +1 -1
  35. package/dist/{block.tk.menu-d1cdb615.js → block.tk.menu-190d23ec.js} +1 -1
  36. package/dist/{block.tk.pgv-34543961.js → block.tk.pgv-40fde19a.js} +1 -1
  37. package/dist/{boxplot-15733544.js → boxplot-4934789d.js} +1 -1
  38. package/dist/{brush-6000db10.js → brush-72bacd4b.js} +1 -1
  39. package/dist/categorical-59e36987.js +1 -0
  40. package/dist/condition-fc6d409c.js +1 -0
  41. package/dist/{controls-b7194f5f.js → controls-0f6eb6a0.js} +1 -1
  42. package/dist/controls.btns-9742a6e1.js +1 -0
  43. package/dist/controls.config-51b3bd20.js +1 -0
  44. package/dist/{controls.divide-ca5f05ba.js → controls.divide-c0a2c0a5.js} +1 -1
  45. package/dist/{controls.overlay-d8f8fcdb.js → controls.overlay-20ea61e7.js} +1 -1
  46. package/dist/{controls.term1-bcd7f371.js → controls.term1-3ffa1c62.js} +1 -1
  47. package/dist/cuminc-4134b79a.js +1 -0
  48. package/dist/{dataDownload-815f99b3.js → dataDownload-77e7436a.js} +1 -1
  49. package/dist/databrowser.ui-31db1c24.js +1 -0
  50. package/dist/density-c6dd6c93.js +1 -0
  51. package/dist/densityplot-5b2dda81.js +1 -0
  52. package/dist/{dictionary-eb532b96.js → dictionary-bcb233c1.js} +1 -1
  53. package/dist/{drag-8928b980.js → drag-e0a805bb.js} +1 -1
  54. package/dist/{e2pca-dd0a9978.js → e2pca-4ca94f8a.js} +1 -1
  55. package/dist/{ep-e3098299.js → ep-d2e5a3d4.js} +1 -1
  56. package/dist/filter-52e22fa5.js +1 -0
  57. package/dist/filter-eebd517b.js +1 -0
  58. package/dist/{fusion.parse-124efce4.js → fusion.parse-68e59428.js} +1 -1
  59. package/dist/gdc.maf-9d547ebf.js +1 -0
  60. package/dist/{geneExpression-c7ab294b.js → geneExpression-baacec97.js} +1 -1
  61. package/dist/{geneSearch4GDCmds3-6cb55dd4.js → geneSearch4GDCmds3-7d3d37f0.js} +1 -1
  62. package/dist/geneVariant-ef832d50.js +1 -0
  63. package/dist/genefusion.ui-69886308.js +1 -0
  64. package/dist/genomeBrowser-a689f805.js +1 -0
  65. package/dist/genomeBrowser.controls-c16e4a48.js +1 -0
  66. package/dist/groupsetting-0ac13787.js +1 -0
  67. package/dist/hic.straw-1a806979.js +1 -0
  68. package/dist/{hierCluster-ab925b73.js → hierCluster-05c02207.js} +1 -1
  69. package/dist/{html.legend-19497108.js → html.legend-a409bf5d.js} +1 -1
  70. package/dist/{lasso-36c8091a.js → lasso-a75feddb.js} +1 -1
  71. package/dist/launchGdcMatrix-d7f7d200.js +1 -0
  72. package/dist/{legacyDataset-9d655055.js → legacyDataset-c41fece8.js} +1 -1
  73. package/dist/{log-c4538058.js → log-1575514c.js} +1 -1
  74. package/dist/{maftimeline-c1e82a84.js → maftimeline-3a2ec2f4.js} +1 -1
  75. package/dist/matrix-91ec6faf.js +1 -0
  76. package/dist/matrix.cells-bcf24450.js +1 -0
  77. package/dist/matrix.cluster-24ea6061.js +1 -0
  78. package/dist/{matrix.config-216511b3.js → matrix.config-60886441.js} +1 -1
  79. package/dist/matrix.controls-76867892.js +1 -0
  80. package/dist/{matrix.dom-889a560d.js → matrix.dom-9917078b.js} +1 -1
  81. package/dist/matrix.interactivity-f1e2d78b.js +1 -0
  82. package/dist/matrix.renderers-c7ba6000.js +1 -0
  83. package/dist/{mavb-4ab110b3.js → mavb-30a830f6.js} +1 -1
  84. package/dist/{mds.fimo-c4333e7d.js → mds.fimo-cfe8d662.js} +1 -1
  85. package/dist/{mds.samplescatterplot-e76151d7.js → mds.samplescatterplot-244aa6d9.js} +1 -1
  86. package/dist/{mds.survivalplot-dbd81391.js → mds.survivalplot-c2e686d3.js} +1 -1
  87. package/dist/{mdsjsonform-707f579e.js → mdsjsonform-ff7482ed.js} +1 -1
  88. package/dist/nodrag-4b9465ab.js +1 -0
  89. package/dist/numeric-de470f79.js +1 -0
  90. package/dist/numeric.binary-64005a7d.js +1 -0
  91. package/dist/numeric.continuous-ad391f32.js +1 -0
  92. package/dist/numeric.discrete-5d32844b.js +1 -0
  93. package/dist/numeric.spline-5e4aaf9f.js +1 -0
  94. package/dist/numeric.toggle-06f86888.js +1 -0
  95. package/dist/{plot.2dvaf-a6d59b9a.js → plot.2dvaf-35ee1d6c.js} +1 -1
  96. package/dist/plot.app-bd22a31c.js +1 -0
  97. package/dist/{plot.barplot-56ee0dca.js → plot.barplot-7774133c.js} +1 -1
  98. package/dist/{plot.boxplot-e2df5f25.js → plot.boxplot-7ec9d603.js} +1 -1
  99. package/dist/{plot.disco-d3887d97.js → plot.disco-e5cb175a.js} +1 -1
  100. package/dist/{plot.ssgq-f2ff8409.js → plot.ssgq-2e94b7c7.js} +1 -1
  101. package/dist/{plot.vaf2cov-0eff7eb8.js → plot.vaf2cov-c681c94c.js} +1 -1
  102. package/dist/{polar-eedf3c8a.js → polar-a65e887b.js} +1 -1
  103. package/dist/{profileBarchart-7e64660e.js → profileBarchart-1cd0443b.js} +1 -1
  104. package/dist/profilePlot-cca94585.js +1 -0
  105. package/dist/{profilePolar-031a0482.js → profilePolar-c8877a09.js} +1 -1
  106. package/dist/recover-bf9610c6.js +1 -0
  107. package/dist/{regression.inputs-99df4337.js → regression.inputs-0855ab56.js} +1 -1
  108. package/dist/{regression.inputs.values.table-9875e9e7.js → regression.inputs.values.table-94fd24f5.js} +1 -1
  109. package/dist/{regression.results-01688bda.js → regression.results-344b7914.js} +1 -1
  110. package/dist/renderPvalueTable-8717fa1d.js +1 -0
  111. package/dist/sampleScatter-aa856896.js +1 -0
  112. package/dist/sampleScatter.interactivity-ed970850.js +1 -0
  113. package/dist/sampleView-f4ce7fdb.js +1 -0
  114. package/dist/samplelst-bc7fc3b7.js +1 -0
  115. package/dist/{samplematrix-1b50ea03.js → samplematrix-7d429230.js} +1 -1
  116. package/dist/{scatter-f9708431.js → scatter-b19147ad.js} +1 -1
  117. package/dist/{selectGenomeWithTklst-b3bd35f7.js → selectGenomeWithTklst-6eef4be5.js} +1 -1
  118. package/dist/{singlecell-d9e3789a.js → singlecell-ad76920b.js} +1 -1
  119. package/dist/snplocus-9c02de9a.js +1 -0
  120. package/dist/snplst-102d7965.js +1 -0
  121. package/dist/snplst.sampleSum-9fc1f4d1.js +1 -0
  122. package/dist/{spliceevent.a53ss.diagram-13b99dbe.js → spliceevent.a53ss.diagram-37e92e99.js} +1 -1
  123. package/dist/{spliceevent.exonskip.diagram-1d7e0a5d.js → spliceevent.exonskip.diagram-8e5bf93b.js} +1 -1
  124. package/dist/spliceevent.exonskip.getdefault-52a69f0e.js +1 -0
  125. package/dist/{spliceevent.noeventdiagram-5cbe2981.js → spliceevent.noeventdiagram-524917de.js} +1 -1
  126. package/dist/{spliceevent.phrase-470191a0.js → spliceevent.phrase-d0b81027.js} +1 -1
  127. package/dist/{stattable-b804f597.js → stattable-097f70c5.js} +1 -1
  128. package/dist/style.gdc-066d8f84.js +1 -0
  129. package/dist/summary-55bb2d25.js +1 -0
  130. package/dist/{sunburst-d668b409.js → sunburst-0539003c.js} +1 -1
  131. package/dist/survival-8ef12ba9.js +1 -0
  132. package/dist/survival-c7e6fed1.js +1 -0
  133. package/dist/{svg.download-e1282ee0.js → svg.download-08d57607.js} +1 -1
  134. package/dist/{svg.legend-a90add32.js → svg.legend-c024c261.js} +1 -1
  135. package/dist/{svgraph-0796a404.js → svgraph-a24f4d54.js} +1 -1
  136. package/dist/{svmr-b84f05f1.js → svmr-6098cfb8.js} +1 -1
  137. package/dist/{table-0c558ce8.js → table-1cf08d8a.js} +1 -1
  138. package/dist/{table-eac7bfb0.js → table-ae2c1821.js} +1 -1
  139. package/dist/{termInfo-db451d46.js → termInfo-6d2ab3c7.js} +1 -1
  140. package/dist/termsetting-a9c979f6.js +1 -0
  141. package/dist/tk-4f179dff.js +1 -0
  142. package/dist/{tp.ui-2344d8b8.js → tp.ui-c0155cc2.js} +1 -1
  143. package/dist/tslib.es6-9b8cb903.js +1 -0
  144. package/dist/{tvs.density-52180c67.js → tvs.density-a7c6bf7b.js} +1 -1
  145. package/dist/{tvs.geneVariant-a6edea50.js → tvs.geneVariant-a9e2cb4a.js} +1 -1
  146. package/dist/tvs.numeric-06604c94.js +1 -0
  147. package/dist/{tvs.samplelst-5b30f05b.js → tvs.samplelst-fc8f4f19.js} +1 -1
  148. package/dist/{uiUtils-05841afd.js → uiUtils-74e59233.js} +1 -1
  149. package/dist/{variantBrowser-344caa99.js → variantBrowser-8cf86a4d.js} +1 -1
  150. package/dist/{vcf-0bb8df29.js → vcf-45828908.js} +1 -1
  151. package/dist/{violin-4b6c0b1a.js → violin-f4ada7ed.js} +1 -1
  152. package/dist/{violin.interactivity-fec92301.js → violin.interactivity-0259f23d.js} +1 -1
  153. package/dist/{violin.renderer-5576fdfa.js → violin.renderer-bd04222b.js} +1 -1
  154. package/dist/{viridis-b3668425.js → viridis-c6e142a1.js} +1 -1
  155. package/dist/{y-fabf857f.js → y-5d1345ad.js} +1 -1
  156. package/dist/{zoom-dd44626e.js → zoom-89b6f249.js} +1 -1
  157. package/package.json +3 -2
  158. package/dist/Disco-10039f85.js +0 -1
  159. package/dist/app-91ecaaa4.js +0 -1
  160. package/dist/app-be35a323.js +0 -1
  161. package/dist/block.lazyload-91954a19.js +0 -1
  162. package/dist/block.mds.svcnv-c88ffd7c.js +0 -1
  163. package/dist/block.tk.bam-df8b79f8.js +0 -1
  164. package/dist/block.tk.hicstraw-7b45cd3d.js +0 -1
  165. package/dist/categorical-82963cee.js +0 -1
  166. package/dist/condition-6f28e596.js +0 -1
  167. package/dist/controls.btns-01b12df0.js +0 -1
  168. package/dist/controls.config-5becdfab.js +0 -1
  169. package/dist/cuminc-a5148ae3.js +0 -1
  170. package/dist/databrowser.ui-e5ed72bd.js +0 -1
  171. package/dist/density-f0772c36.js +0 -1
  172. package/dist/densityplot-299c7c87.js +0 -1
  173. package/dist/filter-7c632d31.js +0 -1
  174. package/dist/filter-b0fbf437.js +0 -1
  175. package/dist/geneVariant-9a53e51b.js +0 -1
  176. package/dist/genefusion.ui-220cc193.js +0 -1
  177. package/dist/genomeBrowser-56278d5a.js +0 -1
  178. package/dist/genomeBrowser.controls-30759159.js +0 -1
  179. package/dist/groupsetting-11f73f90.js +0 -1
  180. package/dist/hic.straw-930d6b38.js +0 -1
  181. package/dist/launchGdcMatrix-e0e6e304.js +0 -1
  182. package/dist/matrix-afe8b0dd.js +0 -1
  183. package/dist/matrix.cells-5b211a6e.js +0 -1
  184. package/dist/matrix.cluster-6a1f3f94.js +0 -1
  185. package/dist/matrix.controls-8fb9f155.js +0 -1
  186. package/dist/matrix.interactivity-feede6cc.js +0 -1
  187. package/dist/matrix.renderers-e3611f09.js +0 -1
  188. package/dist/nodrag-52d91543.js +0 -1
  189. package/dist/numeric-ba3a74ab.js +0 -1
  190. package/dist/numeric.binary-f6994f4a.js +0 -1
  191. package/dist/numeric.continuous-fe9d6f9a.js +0 -1
  192. package/dist/numeric.discrete-f0a7715f.js +0 -1
  193. package/dist/numeric.spline-a155e6ee.js +0 -1
  194. package/dist/numeric.toggle-b7b26642.js +0 -1
  195. package/dist/plot.app-afcbe839.js +0 -1
  196. package/dist/profilePlot-87a3949b.js +0 -1
  197. package/dist/recover-ceb0a034.js +0 -1
  198. package/dist/renderPvalueTable-c364b55b.js +0 -1
  199. package/dist/sampleScatter-5ddb7cb1.js +0 -1
  200. package/dist/sampleScatter.interactivity-0a11c793.js +0 -1
  201. package/dist/sampleScatter.renderer-24bb55a8.js +0 -1
  202. package/dist/samplelst-2e7de4bc.js +0 -1
  203. package/dist/sampletable-112b13ac.js +0 -1
  204. package/dist/snplocus-2e2e58c9.js +0 -1
  205. package/dist/snplst-e337d755.js +0 -1
  206. package/dist/snplst.sampleSum-e47d05f0.js +0 -1
  207. package/dist/spliceevent.exonskip.getdefault-193a72c4.js +0 -1
  208. package/dist/style.gdc-33f310c3.js +0 -1
  209. package/dist/summary-9d8a94ea.js +0 -1
  210. package/dist/survival-0ae8d497.js +0 -1
  211. package/dist/survival-625b800b.js +0 -1
  212. package/dist/termsetting-c738f206.js +0 -1
  213. package/dist/tk-e047e38c.js +0 -1
  214. package/dist/tslib.es6-62bb2d8e.js +0 -1
  215. package/dist/tvs.numeric-ba386ebc.js +0 -1
@@ -1 +1 @@
1
- import{M as t,bb as e,bc as s,o as a,E as n,b8 as i,p as r,l,f as o,a as c,ay as p,aL as h,q as d,w as f,$ as u}from"./app-91ecaaa4.js";import{d as m,c as y,b as g}from"./axis-6cb4f314.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-fc7cbd41.js";import"path";import"./math-2fb199c6.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:&nbsp;");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:&nbsp;");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:&nbsp;");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:&nbsp;");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 A(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 z(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 S(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,A=Math.min(20,12*v/500),z=v/40,C=z*.7,O=3;const S=l().domain([0,x]).range([z/2,z]);const W=t=>Math.PI*Math.pow(S(t),2);for(const t of f){t.radius=Math.max(t["TinD.D"]?S(t["TinD.D"]):0,t["TinD.R"]?S(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 U=q.append("div");U.append("button").text("Hide").on("click",(()=>{s.shown=false;if(s.handle){s.handle.attr("font-weight","normal")}E.remove()}));const P=new N({axiswidth:_,sp:M,sp2:X,sample1height:R,sample2height:I,shareheight:w,sharewidth:D,headerdiv:U});U.append("button").text("Screenshot").on("click",(()=>{h(Z.node(),"2dmaf_"+s.name)}));{const t=U.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 $=Z.append("g").attr("transform","translate("+M+","+M+")");P.setWrapper($.append("g"));const J=l().domain([0,1]).range([0,D]);const K=$.append("g").attr("transform","translate("+(_+M+I)+","+(w+R+M)+")").call(y().scale(J).tickSize(5));c({axis:K,showline:true,fontsize:A*.8});const Q=i.length+p.length;K.append("text").text(s.setname[1]+", n="+Q+(s.purity1?", purity="+s.purity1:"")).attr("x",D/2).attr("y",_-4).attr("text-anchor","middle").attr("font-size",A);const tt=l().domain([0,1]).range([w,0]);const et=$.append("g").attr("transform","translate("+_+",0)").call(g().scale(tt).tickSize(5));c({axis:et,showline:true,fontsize:A*.8});const st=o.length+p.length;et.append("text").text(s.setname[2]+", n="+st+(s.purity2?", purity="+s.purity2:"")).attr("transform","translate("+(A-_-10)+","+w/2+") rotate(-90)").attr("text-anchor","middle").attr("font-size",A);$.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=$.append("g").attr("transform","translate("+(_+M+I)+",0)").selectAll().data(p).enter().append("g").attr("transform",(t=>{t.posstring="translate("+J(t.maf1)+","+tt(t.maf2)+")";return t.posstring}));at.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);at.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(t["TinD.D"]))).attr("ry",(t=>t.symbol?null:S(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)=>j(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=$.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:A*.8});rt.append("g").attr("transform","translate(-"+A/2+","+(R-X)/2+")").append("text").text("D total").attr("font-size",A*.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("+J(t.maf1)+","+it(t["TinD.D"])+")";return t.posstring}));ot.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);ot.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(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)=>j(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=$.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:A*.8});pt.append("text").text("R total").attr("font-size",A*.8).attr("font-family",r).attr("fill","black").attr("x",(I-X)/2).attr("y",w+A).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?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);dt.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(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)=>j(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=$.append("g").attr("transform","translate(0,"+(w+X)+")");let ut=A;ft.append("text").text(u).attr("font-size",A).attr("y",ut);const mt=S(20),yt=S(x);ut+=A+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 j(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=S(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{z as d2mafparseinput,A as d2mafui};
1
+ import{M as t,bd as e,be as s,o as a,E as n,ba as i,p as r,l,f as o,a as c,ay as p,aN as h,q as d,w as f,$ as u}from"./app-20b1210c.js";import{d as m,c as y,b as g}from"./axis-6cb4f314.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-fc7cbd41.js";import"path";import"./math-2fb199c6.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:&nbsp;");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:&nbsp;");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:&nbsp;");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:&nbsp;");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 A(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 z(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 S(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,A=Math.min(20,12*v/500),z=v/40,C=z*.7,O=3;const S=l().domain([0,x]).range([z/2,z]);const W=t=>Math.PI*Math.pow(S(t),2);for(const t of f){t.radius=Math.max(t["TinD.D"]?S(t["TinD.D"]):0,t["TinD.R"]?S(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 U=q.append("div");U.append("button").text("Hide").on("click",(()=>{s.shown=false;if(s.handle){s.handle.attr("font-weight","normal")}E.remove()}));const P=new N({axiswidth:_,sp:M,sp2:X,sample1height:R,sample2height:I,shareheight:w,sharewidth:D,headerdiv:U});U.append("button").text("Screenshot").on("click",(()=>{h(Z.node(),"2dmaf_"+s.name)}));{const t=U.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 $=Z.append("g").attr("transform","translate("+M+","+M+")");P.setWrapper($.append("g"));const J=l().domain([0,1]).range([0,D]);const K=$.append("g").attr("transform","translate("+(_+M+I)+","+(w+R+M)+")").call(y().scale(J).tickSize(5));c({axis:K,showline:true,fontsize:A*.8});const Q=i.length+p.length;K.append("text").text(s.setname[1]+", n="+Q+(s.purity1?", purity="+s.purity1:"")).attr("x",D/2).attr("y",_-4).attr("text-anchor","middle").attr("font-size",A);const tt=l().domain([0,1]).range([w,0]);const et=$.append("g").attr("transform","translate("+_+",0)").call(g().scale(tt).tickSize(5));c({axis:et,showline:true,fontsize:A*.8});const st=o.length+p.length;et.append("text").text(s.setname[2]+", n="+st+(s.purity2?", purity="+s.purity2:"")).attr("transform","translate("+(A-_-10)+","+w/2+") rotate(-90)").attr("text-anchor","middle").attr("font-size",A);$.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=$.append("g").attr("transform","translate("+(_+M+I)+",0)").selectAll().data(p).enter().append("g").attr("transform",(t=>{t.posstring="translate("+J(t.maf1)+","+tt(t.maf2)+")";return t.posstring}));at.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);at.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(t["TinD.D"]))).attr("ry",(t=>t.symbol?null:S(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)=>j(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=$.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:A*.8});rt.append("g").attr("transform","translate(-"+A/2+","+(R-X)/2+")").append("text").text("D total").attr("font-size",A*.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("+J(t.maf1)+","+it(t["TinD.D"])+")";return t.posstring}));ot.filter((t=>t.Dcnvloh)).append("circle").attr("cy",(t=>t.issnv?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);ot.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(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)=>j(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=$.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:A*.8});pt.append("text").text("R total").attr("font-size",A*.8).attr("font-family",r).attr("fill","black").attr("x",(I-X)/2).attr("y",w+A).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?S(t["TinD.R"]):C/2)).attr("fill","#858585").attr("r",O);dt.filter((t=>t.Rcnvloh)).append("circle").attr("cx",(t=>t.issnv?-S(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:S(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)=>j(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=$.append("g").attr("transform","translate(0,"+(w+X)+")");let ut=A;ft.append("text").text(u).attr("font-size",A).attr("y",ut);const mt=S(20),yt=S(x);ut+=A+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 j(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=S(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{z as d2mafparseinput,A as d2mafui};
@@ -0,0 +1 @@
1
+ import{aL as t,az as s}from"./app-20b1210c.js";import"path";class o{constructor(){this.type="DEanalysis"}async init(t){const s=this.opts.holder.append("div");this.dom={holder:s,controlsDiv:s.append("div")}}getState(t){const s=t.plots.find((t=>t.id===this.id));if(!s)throw`No plot with id='${this.id}' found`;return{config:s}}async main(){const t=await this.app.vocabApi.runDEanalysis(this.state.config);console.log(t)}}async function n(s,o){try{if(s.samplelst.groups?.length!=2)throw"opts.samplelst.groups[].length!=2";if(s.samplelst.groups[0].values?.length<1)throw"group 1 not having >1 samples";if(s.samplelst.groups[1].values?.length<1)throw"group 2 not having >1 samples";const o={};return t(o,s)}catch(t){throw`${t} [DEanalysis getPlotConfig()]`}}const a=s(o);const i=a;function p(t,s){s.prepPlot({config:{chartType:"DEanalysis"}})}export{a as DEanalysisInit,i as componentInit,n as getPlotConfig,p as makeChartBtnMenu};
@@ -0,0 +1 @@
1
+ import{_ as t,a as n,b as e}from"./tslib.es6-9b8cb903.js";import{M as i,E as r,q as s,aL as a,az as o}from"./app-20b1210c.js";import"./transform-f2cc07e6.js";import{d as c}from"./arc-3d6751aa.js";import{c as l,p as h}from"./constant-426a1483.js";import{s as u}from"./svg.legend-c024c261.js";import{a as p,l as d}from"./line-264f8f9e.js";import{t as v}from"./math-2fb199c6.js";import"path";function f(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function g(t){return t}function m(){var t=g,n=f,e=null,i=l(0),r=l(v),s=l(0);function a(a){var o,c=(a=p(a)).length,l,h,u=0,d=new Array(c),f=new Array(c),g=+i.apply(this,arguments),m=Math.min(v,Math.max(-v,r.apply(this,arguments)-g)),A,x=Math.min(Math.abs(m)/c,s.apply(this,arguments)),y=x*(m<0?-1:1),R;for(o=0;o<c;++o){if((R=f[d[o]=o]=+t(a[o],o,a))>0){u+=R}}if(n!=null)d.sort((function(t,e){return n(f[t],f[e])}));else if(e!=null)d.sort((function(t,n){return e(a[t],a[n])}));for(o=0,h=u?(m-c*y)/u:0;o<c;++o,g=A){l=d[o],R=f[l],A=g+(R>0?R*h:0)+y,f[l]={data:a[l],index:o,value:R,startAngle:g,endAngle:A,padAngle:x}}return f}a.value=function(n){return arguments.length?(t=typeof n==="function"?n:l(+n),a):t};a.sortValues=function(t){return arguments.length?(n=t,e=null,a):n};a.sort=function(t){return arguments.length?(e=t,n=null,a):e};a.startAngle=function(t){return arguments.length?(i=typeof t==="function"?t:l(+t),a):i};a.endAngle=function(t){return arguments.length?(r=typeof t==="function"?t:l(+t),a):r};a.padAngle=function(t){return arguments.length?(s=typeof t==="function"?t:l(+t),a):s};return a}var A=Math.abs;var x=Math.cos;var y=Math.sin;var R=Math.PI;var b=R/2;var M=1e-12;var C=Array.prototype.slice;function I(t){return function(){return t}}function L(t){return t.source}function E(t){return t.target}function w(t){return t.radius}function O(t){return t.startAngle}function S(t){return t.endAngle}function N(){return 0}function V(t){var n=L,e=E,i=w,r=w,s=O,a=S,o=N,c=null;function l(){var l,u=n.apply(this,arguments),p=e.apply(this,arguments),d=o.apply(this,arguments)/2,v=C.call(arguments),f=+i.apply(this,(v[0]=u,v)),g=s.apply(this,v)-b,m=a.apply(this,v)-b,R=+r.apply(this,(v[0]=p,v)),I=s.apply(this,v)-b,L=a.apply(this,v)-b;if(!c)c=l=h();if(d>M){if(A(m-g)>d*2+M)m>g?(g+=d,m-=d):(g-=d,m+=d);else g=m=(g+m)/2;if(A(L-I)>d*2+M)L>I?(I+=d,L-=d):(I-=d,L+=d);else I=L=(I+L)/2}c.moveTo(f*x(g),f*y(g));c.arc(0,0,f,g,m);if(g!==I||m!==L){if(t){var E=+t.apply(this,arguments),w=R-E,O=(I+L)/2;c.quadraticCurveTo(0,0,w*x(I),w*y(I));c.lineTo(R*x(O),R*y(O));c.lineTo(w*x(L),w*y(L))}else{c.quadraticCurveTo(0,0,R*x(I),R*y(I));c.arc(0,0,R,I,L)}}c.quadraticCurveTo(0,0,f*x(g),f*y(g));c.closePath();if(l)return c=null,l+""||null}if(t)l.headRadius=function(n){return arguments.length?(t=typeof n==="function"?n:I(+n),l):t};l.radius=function(t){return arguments.length?(i=r=typeof t==="function"?t:I(+t),l):i};l.sourceRadius=function(t){return arguments.length?(i=typeof t==="function"?t:I(+t),l):i};l.targetRadius=function(t){return arguments.length?(r=typeof t==="function"?t:I(+t),l):r};l.startAngle=function(t){return arguments.length?(s=typeof t==="function"?t:I(+t),l):s};l.endAngle=function(t){return arguments.length?(a=typeof t==="function"?t:I(+t),l):a};l.padAngle=function(t){return arguments.length?(o=typeof t==="function"?t:I(+t),l):o};l.source=function(t){return arguments.length?(n=t,l):n};l.target=function(t){return arguments.length?(e=t,l):e};l.context=function(t){return arguments.length?(c=t==null?null:t,l):c};return l}function T(){return V()}var D=function(){function t(t,n,e){this.radius=t;this.width=n;this.color=e}t.prototype.render=function(t){var n=c();var e={startAngle:0,endAngle:Math.PI*2,innerRadius:this.radius,outerRadius:this.radius+this.width,color:this.color,text:"No label"};var i=[];i.push(e);var r=t.append("g");r.selectAll("path").data(i).enter().append("path").attr("d",(function(t){return n(t)})).attr("fill",(function(t){return t.color}))};return t}();var z=function(){function t(){}t.create=function(){var t=new i({padding:5});t.d.style("border","1px solid #FFF").style("position","absolute").style("z-index",1001);return t};return t}();var k;(function(t){t["Intrachromosomal"]="#1B9E77";t["Interchromosomal"]="#6A3D9A"})(k||(k={}));var P=function(){function t(){}t.getColor=function(t,n){if(t!=n){return k.Interchromosomal.valueOf()}else{return k.Intrachromosomal.valueOf()}};return t}();var B=function(){function t(){}t.prototype.render=function(t,n){var e=this;var i=0;if(n.length>0){i=n[0].target.radius;var r=new D(i,2,"#6464641A");r.render(t)}var s=T().radius(i);var a=t.selectAll(".chord").data(n);var o=z.create();a.enter().append("path").attr("class","chord").attr("d",s).attr("fill",(function(t){return P.getColor(t.source.positionInChromosome.chromosome,t.target.positionInChromosome.chromosome)})).on("mouseover",(function(t,n){o.d.style("padding","2px").html(e.getTooltip(n));o.show(t.x,t.y)})).on("mouseout",(function(){o.hide()}))};t.prototype.getTooltip=function(t){var n="";if(t.source.gene){n+=t.source.gene}var e=t.source.positionInChromosome;n+=" ".concat(e.chromosome,":").concat(e.position,"<br />");if(t.target.gene){n+=t.target.gene}var i=t.target.positionInChromosome;n+=" ".concat(i.chromosome,":").concat(i.position);return n};return t}();var G=function(){function t(t){this.downloadClickListener=t}t.prototype.render=function(t){var n=this;t.append("span").append("button").style("margin","2px 0 2px 30px").text("Download image").on("click",(function(){var e=t.selectAll("svg").node();n.downloadClickListener(e)}))};return t}();var W=function(){function t(t){this.checkBoxClickListener=t}t.prototype.render=function(t,n,e){var i=this;if(e){var r=t.append("span").append("input").attr("type","checkbox").attr("id","genes-checkbox").property("checked",n);t.append("label").attr("for","genes-checkbox").text("Prioritize Cancer Gene Census");r.on("change",(function(){i.checkBoxClickListener(r.property("checked"))}))}};return t}();var F=function(){function t(t,n,e,i){this.renders=t;this.legendRenderer=n;this.fusionRenderer=new B;this.downloadButtonRenderer=new G(e);this.prioritizeGenesCheckboxRenderer=new W(i)}t.prototype.render=function(t,n){var e=t.append("div");e.append("div");var i=e.append("div").style("display","inline-block").style("font-family","Arial");var r=i.append("div");this.downloadButtonRenderer.render(r);this.prioritizeGenesCheckboxRenderer.render(r,n.settings.label.prioritizeGeneLabelsByGeneSets,n.settings.label.showPrioritizeGeneLabelsByGeneSets);var s=i.append("svg").attr("width",n.width).attr("height",n.height+n.legendHeight);var a=s.append("g").attr("class","mainG").attr("transform","translate(".concat(n.settings.rings.labelLinesInnerRadius+n.settings.rings.labelsToLinesDistance+100,",").concat(n.height/2,")"));for(var o=0,c=this.renders;o<c.length;o++){var l=c[o],h=l[0],u=l[1];var p=n.getElements(h);var d=n.getCollisions(h);u.render(a,p,d)}this.fusionRenderer.render(a,n.fusions);this.legendRenderer.render(a,n.legend,-1*(n.settings.rings.labelLinesInnerRadius+n.settings.rings.labelsToLinesDistance+50),n.width,n.height/2)};return t}();var H=function(){function e(e){var i=this;this.cappingClickCallback=function(t,n){var i=e.app.tip;i.clear();var r=e.app.tip.d;var s=r.append("span").html("Capping:").append("input").attr("type","number").on("change",(function(){e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{settings:{cnv:{capping:Number(s.property("value"))}}}});i.hide()}));var a=n.node().getBoundingClientRect();var o=a.left-20;var c=a.top-40;i.show(o,c)};this.downloadClickListener=function(t){var n=document.createElement("a");document.body.appendChild(n);n.addEventListener("click",(function(){var e=new XMLSerializer;var i=new Blob([e.serializeToString(t)],{type:"image/svg+xml"});n.download="disco"+".svg";n.href=URL.createObjectURL(i);document.body.removeChild(n)}),false);n.click()};this.geneClickListener=function(r,s){return t(i,void 0,void 0,(function(){var t,i;return n(this,(function(n){switch(n.label){case 0:t={holder:e.app.opts.holder,genome:e.app.opts.state.args.genome,nobox:true,query:r,tklst:[{type:"mds3",dslabel:e.app.opts.state.dslabel,hlaachange:s.join(",")}]};return[4,import("./app-20b1210c.js").then((function(t){return t.bS}))];case 1:i=n.sent();return[4,i.default(t)];case 2:n.sent();return[2]}}))}))};this.prioritizeGenesCheckboxListener=function(t){e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{settings:{label:{prioritizeGeneLabelsByGeneSets:t}}}})}}return e}();var j=function(){function t(t,n,e){this.chromosomes=[];this.chromosomesOrder=[];this.keysArray=[];this.totalSizeArray=[];this.chrSizesArray=[];var i=e||n;this.settings=t;this.chromosomesOrder=[];var r=0;this.totalPadAngle=Object.keys(i).length*this.settings.padAngle;this.totalChromosomesAngle=2*Math.PI-this.totalPadAngle;for(var s in i){var a=s.slice(0,3)==="chr"?s.slice(3):s;this.chromosomesOrder.push(s);this.keysArray.push(a);this.totalSizeArray.push(r);this.chrSizesArray.push(i[s]);r+=i[s]}this.totalSize=r;var o=0;for(var c=0;c<this.keysArray.length;c++){var l=this.totalChromosomesAngle*(this.chrSizesArray[c]/r);var h=c==0?this.settings.padAngle/2:o+this.settings.padAngle;var u=c==0?this.settings.padAngle/2+l:o+this.settings.padAngle+l;var p={start:this.totalSizeArray[c],size:this.chrSizesArray[c],factor:1,startAngle:h,endAngle:u,angle:(h+u)/2,innerRadius:this.settings.chromosomeInnerRadius,outerRadius:this.settings.chromosomeInnerRadius+this.settings.chromosomeWidth,color:"#AAA",text:this.keysArray[c]};this.chromosomes.push(p);if(p.endAngle!=null){o=p.endAngle}}}return t}();var U=function(){function t(t,n){this.sampleName=t;this.prioritizedGenes=n}t.prototype.map=function(t){return{dt:t.dt,mname:t.mname,mClass:t.class,gene:t.gene,chr:t.chr,pos:t.pos,ref:t.ref,alt:t.alt,position:t.position,sample:this.sampleName,poschr:t.poschr,posbins:t.posbins,poslabel:t.poslabel,sampleName:this.sampleName,ssm_id:t.ssm_id,start:t.start,stop:t.stop,value:t.value,segmean:t.segmean,isPrioritized:this.prioritizedGenes.some((function(n){return n==t.gene})),chrA:t.chrA,chrB:t.chrB,geneA:t.geneA,geneB:t.geneB,posA:t.posA,posB:t.posB,strandA:t.strandA,strandB:t.strandB}};return t}();var q;(function(t){t[t["SNV"]=1]="SNV";t[t["FUSION"]=2]="FUSION";t[t["CNV"]=4]="CNV";t[t["SV"]=5]="SV";t[t["LOH"]=10]="LOH"})(q||(q={}));var X=function(){function t(t,n,e,i){if(i===void 0){i=[]}var r=this;this.labelData=[];this.nonExonicSnvData=[];this.nonExonicInnerRadius=0;this.snvRingDataMap=new Map;this.snvInnerRadius=0;this.snvData=[];this.bpx=0;this.onePxArcAngle=0;this.filteredSnvData=[];this.lohData=[];this.lohInnerRadius=0;this.cnvData=[];this.cnvInnerRadius=0;this.fusionData=[];this.fusionRadius=0;this.hasPrioritizedGenes=false;this.cnvMaxValue=undefined;this.cnvMinValue=undefined;this.lohMaxValue=undefined;this.lohMinValue=undefined;this.snvFilter=function(t){return t.dt==q.SNV};this.fusionFilter=function(t){return t.dt==q.FUSION||t.dt==q.SV};this.cnvFilter=function(t){return t.dt==q.CNV};this.lohFilter=function(t){return t.dt==q.LOH};this.compareData=function(t,n){var e=r.reference.chromosomesOrder.indexOf(t.chr)-r.reference.chromosomesOrder.indexOf(n.chr);if(e!=0){return e}var i=t.pos?t.pos:t.start;var s=n.pos?n.pos:n.start;return i-s};this.settings=t;this.reference=n;this.sample=e;this.lastInnerRadious=this.settings.rings.chromosomeInnerRadius;this.nonExonicFilter=function(n){return t.rings.nonExonicFilterValues.includes(mt.snvClassLayer[n.mClass])};this.snvRingFilter=function(n){return t.rings.snvRingFilters.includes(mt.snvClassLayer[n.mClass])};this.dataObjectMapper=new U(e,i)}t.prototype.map=function(t){var n=this;var e=[];t.forEach((function(t){var i=n.reference.chromosomesOrder.indexOf(t.chr);var r=n.reference.chromosomesOrder.indexOf(t.chrA);var s=n.reference.chromosomesOrder.indexOf(t.chrB);if(t.dt==q.SNV){if(i!=-1){n.addData(t,e)}}else if(t.dt==q.FUSION||t.dt==q.SV){if(r!=-1&&s!=-1){n.addData(t,e)}}else if([q.CNV,q.LOH].includes(Number(t.dt))){n.addData(t,e)}else{throw Error("Unknown mutation type!")}}));var i=e.sort(this.compareData);if(this.settings.rings.nonExonicRingEnabled){i.forEach((function(t){n.filterNonExonicSnvData(t)}))}if(this.nonExonicSnvData.length>0){this.nonExonicInnerRadius=this.lastInnerRadious-this.settings.rings.nonExonicRingWidth;this.lastInnerRadious=this.nonExonicInnerRadius}i.forEach((function(t){n.filterSnvs(t)}));i.forEach((function(t){n.filterLohs(t)}));if(this.lohData.length>0){this.lohInnerRadius=this.lastInnerRadious-this.settings.rings.lohRingWidth;this.lastInnerRadious=this.lohInnerRadius}i.forEach((function(t){n.filterCnvs(t)}));if(this.cnvData.length>0){this.cnvInnerRadius=this.lastInnerRadious-this.settings.rings.cnvRingWidth;this.lastInnerRadious=this.cnvInnerRadius}i.forEach((function(t){n.filterFusion(t)}));if(this.fusionData.length>0){this.fusionRadius=this.lastInnerRadious}var r={labelData:this.labelData,nonExonicSnvData:this.nonExonicSnvData,nonExonicInnerRadius:this.nonExonicInnerRadius,snvRingDataMap:this.snvRingDataMap,snvInnerRadius:this.snvInnerRadius,snvData:this.snvData,bpx:this.bpx,onePxArcAngle:this.onePxArcAngle,filteredSnvData:this.filteredSnvData,lohData:this.lohData,lohInnerRadius:this.lohInnerRadius,cnvData:this.cnvData,cnvInnerRadius:this.cnvInnerRadius,fusionData:this.fusionData,fusionRadius:this.fusionRadius,hasPrioritizedGenes:this.hasPrioritizedGenes,cnvMaxValue:this.cnvMaxValue,cnvMinValue:this.cnvMinValue,lohMaxValue:this.lohMaxValue,lohMinValue:this.lohMinValue};return r};t.prototype.addData=function(t,n){var e=this.dataObjectMapper.map(t);if(e.isPrioritized){this.hasPrioritizedGenes=true}n.push(e)};t.prototype.filterNonExonicSnvData=function(t){if(this.snvFilter(t)){if(this.settings.rings.nonExonicRingEnabled&&this.nonExonicFilter(t)){this.nonExonicSnvData.push(t)}}};t.prototype.filterSnvs=function(t){if(this.snvFilter(t)){this.snvData.push(t);if(this.snvRingFilter(t)){if(this.snvInnerRadius==0){this.snvInnerRadius=this.lastInnerRadious-this.settings.rings.snvRingWidth;this.lastInnerRadious=this.snvInnerRadius;this.bpx=Math.floor(this.reference.totalSize/(this.reference.totalChromosomesAngle*this.snvInnerRadius));this.onePxArcAngle=1/this.snvInnerRadius}this.filteredSnvData.push(t);this.labelData.push(t);var n=this.calculateArcAngle(t);var e=this.snvRingDataMap.get(n);if(!e){e=new Array}e.push(t);this.snvRingDataMap.set(n,e)}}};t.prototype.filterFusion=function(t){if(this.fusionFilter(t)){t.isPrioritized=true;this.fusionData.push(t);this.labelData.push(t)}};t.prototype.filterLohs=function(t){if(this.lohFilter(t)){if(this.lohMaxValue==undefined||this.lohMaxValue<t.value){this.lohMaxValue=t.segmean}if(this.lohMinValue==undefined||this.lohMinValue>t.value){this.lohMinValue=t.segmean}this.lohData.push(t)}};t.prototype.filterCnvs=function(t){if(this.cnvFilter(t)){if(this.cnvMaxValue==undefined||this.cnvMaxValue<t.value){this.cnvMaxValue=t.value}if(this.cnvMinValue==undefined||this.cnvMinValue>t.value){this.cnvMinValue=t.value}this.cnvData.push(t)}};t.prototype.calculateArcAngle=function(t){var n=this.reference.chromosomes[this.reference.chromosomesOrder.findIndex((function(n){return t.chr==n}))];var e=Math.floor(t.pos/this.bpx);return n.startAngle+e*this.onePxArcAngle};return t}();var _=function(){function t(t,n,e,i,r,s,a,o){this.snvTitle=t;this.cnvTitle=n;this.lohTitle=e;this.fusionTitle=i;this.snvClassMap=r;this.cnvClassMap=s;this.lohLegend=o;this.fusionLegend=a}t.prototype.legendCount=function(){return(this.snvClassMap.size>0?1:0)+(this.cnvClassMap.size>0?1:0)+(this.lohLegend?1:0)+(this.fusionLegend?1:0)};return t}();var J=function(){function t(t,n,e,i,r){this.source=t;this.target=n;this.genes=e;this.count=i;this.endpts=r}return t}();var K=function(){function t(t,n,e,i,r,s,a){this.startAngle=t;this.endAngle=n;this.radius=e;this.gene=i;this.value=r;this.genes=s;this.positionInChromosome=a}return t}();var Q=function(){function t(t,n,e){this.radius=t;this.sampleName=n;this.reference=e}t.prototype.map=function(t){var n=this;var e=[];t.forEach((function(t){var i=new Set;i.add(t.geneA);i.add(t.geneB);var r=new K(n.calculateStartAngle(t.chrA,t.posA),n.calculateEndAngle(t.chrA,t.posA),n.radius,t.geneA,t.value,i,{chromosome:t.chrA,position:t.posA});var s=new K(n.calculateStartAngle(t.chrB,t.posB),n.calculateEndAngle(t.chrB,t.posB),n.radius,t.geneB,t.value,i,{chromosome:t.chrB,position:t.posB});var a=new J(r,s,"genes",-1,"Endpoints");e.push(a)}));return e};t.prototype.calculateStartAngle=function(t,n){var e=this.reference.chromosomesOrder.indexOf(t);var i=this.reference.chromosomes[e];return i.startAngle+(i.endAngle-i.startAngle)*(Number(n)/i.size)-.01};t.prototype.calculateEndAngle=function(t,n){var e=this.reference.chromosomesOrder.indexOf(t);var i=this.reference.chromosomes[e];return.01+i.startAngle+(i.endAngle-i.startAngle)*(Number(n)/i.size)};return t}();var Y=function(){function t(){}t.provide=function(t){var n=Math.min(Math.max(t,0),1);var e=Math.round(n*255);return"rgb(".concat(e,", ").concat(e,", ").concat(e,")")};return t}();var Z=function(){function t(t,n){this.minValue=t;this.maxValue=n;this.colorStartValue=Y.provide(t);this.colorEndValue=Y.provide(n)}return t}();var $;(function(t){t[t["CHROMOSOME"]=0]="CHROMOSOME";t[t["LABEL"]=1]="LABEL";t[t["NONEXONICSNV"]=2]="NONEXONICSNV";t[t["SNV"]=3]="SNV";t[t["CNV"]=4]="CNV";t[t["LOH"]=5]="LOH";t[t["FUSION"]=6]="FUSION"})($||($={}));var tt=function(){function t(t,n,e,i){this.settings=t;this.rings=n;this.legend=e;this.fusions=i;this.width=1.2*(this.settings.horizontalPadding+this.settings.rings.labelLinesInnerRadius+this.settings.rings.labelsToLinesDistance);this.height=2*(this.settings.rings.labelLinesInnerRadius+this.settings.rings.labelsToLinesDistance+this.settings.verticalPadding);this.legendHeight=this.calculateLegendHeight(e)}t.prototype.getElements=function(t){switch(t){case $.CHROMOSOME:return this.rings.chromosomesRing?this.rings.chromosomesRing.elements:[];case $.LABEL:return this.rings.labelsRing.elementsToDisplay;case $.NONEXONICSNV:return this.rings.nonExonicArcRing?this.rings.nonExonicArcRing.elements:[];case $.SNV:return this.rings.snvArcRing?this.rings.snvArcRing.elements:[];case $.CNV:return this.rings.cnvArcRing?this.rings.cnvArcRing.elements:[];case $.LOH:return this.rings.lohArcRing?this.rings.lohArcRing.elements:[];default:throw new Error("ringType ".concat(t," not defined"))}};t.prototype.getCollisions=function(t){if(t==$.LABEL){return this.rings.labelsRing.collisions}else{return undefined}};t.prototype.calculateLegendHeight=function(t){var n=this.settings.legend.rowHeight;return n*t.legendCount()};return t}();var nt=function(){function t(t,n,e){this.innerRadius=t;this.outerRadius=t+n;this.width=n;this.elements=e}return t}();var et=function(){function t(){var t={};for(var n in r){t[r[n].label]=r[n];t[n]=r[n]}this.mlabel=t}t.getInstance=function(){if(!t.instance){t.instance=new t}return t.instance};return t}();var it=function(){function t(t,n,e){this.snvType=t;this.color=n;this.count=e}return t}();var rt=function(){function t(t,n,e,i){this.snvClassMap=new Map;this.svnInnerRadius=t;this.svnWidth=n;this.sampleName=e;this.reference=i;this.bpx=Math.floor(this.reference.totalSize/(this.reference.totalChromosomesAngle*t));this.onePxArcAngle=1/t}t.prototype.map=function(t){var n=[];for(var e=0,i=t.keys();e<i.length;e++){var r=i[e];var s=t.get(r);if(s){var a=s.length;for(var o=0;o<s.length;o++){var c=s[o];var l=this.snvClassMap.get(c.mClass);if(l){this.snvClassMap.set(c.mClass,this.createSnvLegend(c.mClass,++l.count))}else{this.snvClassMap.set(c.mClass,this.createSnvLegend(c.mClass,1))}var h=r;var u=r+this.onePxArcAngle;var p=et.getInstance().mlabel?et.getInstance().mlabel[c.mClass]:undefined;var d={startAngle:h,endAngle:u,innerRadius:this.svnInnerRadius+o*this.svnWidth/a,outerRadius:this.svnInnerRadius+(o+1)*this.svnWidth/a,color:p.color,text:c.gene,dataClass:p.label,mname:c.mname,chr:c.chr,pos:c.pos};n.push(d)}}}return n};t.prototype.createSnvLegend=function(t,n){var e=et.getInstance().mlabel[t];return new it(e.label,e.color,n)};return t}();var st=function(){function t(t,n,e,i){this.text=t;this.cnvType=n;this.color=e;this.value=i}return t}();var at;(function(t){t[t["Loss"]=0]="Loss";t[t["Gain"]=1]="Gain";t[t["Cap"]=2]="Cap"})(at||(at={}));var ot=function(){function t(){}t.getColor=function(t,n){var e=n.cnv;var i=n.cnv.capping;var r=-1*n.cnv.capping;if(t<r){return e.cappedLossColor}else if(t>=r&&t<=0){return e.lossColor}else if(t>0&&t<=i){return e.ampColor}else{return e.cappedAmpColor}};return t}();var ct=function(){function t(t,n,e,i,r,s,a,o){if(s===void 0){s=0}if(a===void 0){a=0}if(o===void 0){o=""}this.cnvClassMap=new Map;this.cnvInnerRadius=t;this.cnvWidth=n;this.settings=e;this.sampleName=i;this.reference=r;this.cnvMaxValue=s;this.cnvMinValue=a;this.cnvUnit=o;this.gainCapped=this.settings.cnv.capping;this.lossCapped=-1*this.settings.cnv.capping;this.lossOnly=s<=0;this.gainOnly=a>=0;this.onePxArcAngle=1/this.cnvInnerRadius;var c=new st("Max",s>0?at.Gain:at.Loss,this.getColor(s),s);var l=new st("Min",a>0?at.Gain:at.Loss,this.getColor(a),a);var h=new st("Capping",at.Loss,this.getColor(a>0?a:s),this.settings.cnv.capping);this.cnvClassMap.set(at.Gain,c);this.cnvClassMap.set(at.Loss,l);this.cnvClassMap.set(at.Cap,h);this.maxAbsValue=Math.max(Math.abs(this.capMaxValue(a)),Math.abs(this.capMaxValue(s)))}t.prototype.map=function(t){var n=this;var e=[];t.forEach((function(t){var i=n.calculateStartAngle(t);var r=n.calculateEndAngle(t);if(r-i<n.onePxArcAngle){var s=n.onePxArcAngle-(r-i);i=i-s/2;r=i+s/2}var a=n.calculateInnerRadius(t);var o=n.calculateOuterRadius(t);var c=n.getColor(t.value);var l={startAngle:i,endAngle:r,innerRadius:a,outerRadius:o,color:c,text:t.gene,chr:t.chr,start:t.start,stop:t.stop,value:t.value,unit:n.cnvUnit};e.push(l)}));return e};t.prototype.calculateStartAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return e.startAngle+(e.endAngle-e.startAngle)*(Number(t.start)/e.size)};t.prototype.calculateEndAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return e.startAngle+(e.endAngle-e.startAngle)*(Number(t.stop)/e.size)};t.prototype.getColor=function(t){return ot.getColor(t,this.settings)};t.prototype.calculateInnerRadius=function(t){if(this.gainOnly){return this.cnvInnerRadius}if(this.lossOnly){var n=this.cnvInnerRadius+this.cnvWidth;return n-this.capMinValue(this.cnvWidth*this.capMaxValue(t.value)/this.maxAbsValue)}var e=this.cnvInnerRadius+this.cnvWidth/2;if(Math.sign(t.value)==1){return e}if(Math.sign(t.value)==-1){return e+this.capMinValue(this.capMaxValue(t.value)/this.maxAbsValue*(this.cnvWidth/2))}return 1};t.prototype.calculateOuterRadius=function(t){var n=this.cnvInnerRadius+this.cnvWidth;if(this.gainOnly){return this.cnvInnerRadius+this.capMinValue(this.cnvWidth*this.capMaxValue(t.value)/this.maxAbsValue)}if(this.lossOnly){return n}var e=this.cnvInnerRadius+this.cnvWidth/2;if(Math.sign(t.value)==1){return e+this.capMinValue(this.capMaxValue(t.value)/this.maxAbsValue*(this.cnvWidth/2))}if(Math.sign(t.value)==-1){return e}return 1};t.prototype.capMaxValue=function(t){if(Math.sign(t)==1){return t>this.gainCapped?this.gainCapped:t}if(Math.sign(t)==-1){return t<this.lossCapped?this.lossCapped:t}return 0};t.prototype.capMinValue=function(t,n){if(n===void 0){n=1}if(Math.sign(t)==1){return t>n?t:n}if(Math.sign(t)==-1){return t<-1*n?t:-1*n}return 1};return t}();var lt=function(){function t(t,n){this.points=new Array;this.points=t;this.color=n}return t}();var ht=function(){function t(){}t.createLabel=function(t,n,e,i,r,s,a,o,c,l,h,u,p,d){if(h===void 0){h=false}var v=(t+n)/2;var f=v-Math.PI/2;var g="rotate(".concat(v*180/Math.PI-90,") translate(").concat(i,")").concat(v>Math.PI?"rotate(180)":"");var m=v>Math.PI?"end":"";var A=e;var x=i-u;var y=[];var R={x:A*Math.cos(f),y:A*Math.sin(f)};var b={x:x*Math.cos(f),y:x*Math.sin(f)};y.push(R);y.push(b);var M=new lt(y,a);var C={startAngle:t,endAngle:n,innerRadius:e,outerRadius:i,angle:v,value:r,text:s,color:a,transform:g,textAnchor:m,ccAngle:f,line:M,isPrioritized:h,start:l,stop:l,chr:c,mutationsTooltip:p?[p]:undefined,fusionTooltip:d?[d]:undefined};return C};t.createMovedLabel=function(t,n){var e=t.startAngle+n;var i=t.endAngle+n;var r=(e+i)/2;var s=r-Math.PI/2;var a=t.innerRadius;var o=t.outerRadius-2;var c=(o-a)/3;var l=Math.cos(t.ccAngle);var h=Math.sin(t.ccAngle);var u=Math.cos(t.ccAngle+n);var p=Math.sin(t.ccAngle+n);var d=[];var v={x:a*l,y:a*h};var f={x:(a+c)*l,y:(a+c)*h};var g={x:(a+2*c)*u,y:(a+2*c)*p};var m={x:(a+3*c)*u,y:(a+3*c)*p};d.push(v);d.push(f);d.push(g);d.push(m);var A=new lt(d,t.color);var x="rotate("+(r*180/Math.PI-90)+")"+"translate("+t.outerRadius+")"+(r>Math.PI?"rotate(180)":"");var y=r>Math.PI?"end":"";var R=t.mutationsTooltip?t.mutationsTooltip[0].color:t.fusionTooltip?t.fusionTooltip[0].color:undefined;var b={startAngle:e,endAngle:i,innerRadius:t.innerRadius,outerRadius:t.outerRadius,angle:r,value:t.value,text:t.text,transform:x,textAnchor:y,ccAngle:s,color:R,line:A,isPrioritized:t.isPrioritized,start:t.start,stop:t.stop,chr:t.chr,mutationsTooltip:t.mutationsTooltip,fusionTooltip:t.fusionTooltip};return b};return t}();var ut=function(){function t(t,n,e){this.labelMap=new Map;this.settings=t;this.sampleName=n;this.reference=e}t.prototype.map=function(t,n){var e=this;if(n===void 0){n=[]}var i=this.settings.rings.labelLinesInnerRadius;var r=i+this.settings.rings.labelsToLinesDistance;t.forEach((function(t){if(t.dt==q.SNV){var n=e.calculateStartAngle(t.chr,t.position);var s=e.calculateEndAngle(t.chr,t.position);var a=et.getInstance().mlabel?et.getInstance().mlabel[t.mClass]:undefined;e.addLabelOrMutation(t,t.gene,t.mname,n,s,i,r,a.color,a.label)}if(t.dt==q.FUSION){var o=P.getColor(t.chrA,t.chrB);if(t.geneA){var c=e.calculateStartAngle(t.chrA,t.posA);var l=e.calculateEndAngle(t.chrA,t.posA);e.addLabelOrFusion(t,t.geneA,t.posA,c,l,i,r,o)}if(t.geneB&&t.geneA!=t.geneB){var h=e.calculateStartAngle(t.chrB,t.posB);var u=e.calculateEndAngle(t.chrB,t.posB);e.addLabelOrFusion(t,t.geneB,t.posB,h,u,i,r,o)}}}));var s=Array.from(this.labelMap.values());s.forEach((function(t){n.forEach((function(n){if(t.stop>=n.start&&n.stop>=t.start&&t.chr==n.chr){var i={value:n.value,color:ot.getColor(n.value,e.settings),chr:n.chr,start:n.start,stop:n.stop};if(t.cnvTooltip){t.cnvTooltip.push(i)}else{t.cnvTooltip=[];t.cnvTooltip.push(i)}}}))}));return Array.from(this.labelMap.values())};t.prototype.addLabelOrMutation=function(t,n,e,i,r,s,a,o,c){var l=this.labelMap.get(n);var h={mname:e,color:o,dataClass:c,chr:t.chr,position:t.position};if(!l){this.labelMap.set(n,ht.createLabel(i,r,s,a,t.value,n,o,c,t.chr,t.position,t.isPrioritized,this.settings.rings.labelsToLinesGap,h))}else{if(l.mutationsTooltip){l.start=Math.min(l.start,t.position);l.stop=Math.max(l.stop,t.position);l.mutationsTooltip.push(h)}else{l.mutationsTooltip=[];l.start=Math.min(l.start,t.position);l.stop=Math.max(l.stop,t.position);l.mutationsTooltip.push(h)}}};t.prototype.addLabelOrFusion=function(t,n,e,i,r,s,a,o){var c=this.labelMap.get(n);var l={color:o,chrA:t.chrA,chrB:t.chrB,posA:t.posA,posB:t.posB,geneA:t.geneA,geneB:t.geneB,strandA:t.strandA,strandB:t.strandB};if(!c){this.labelMap.set(n,ht.createLabel(i,r,s,a,t.value,n,o,"Fusion transcript",t.chr,t.position,t.isPrioritized,this.settings.rings.labelsToLinesGap,undefined,l))}else{if(c.fusionTooltip){c.start=Math.min(c.start,e);c.stop=Math.max(c.stop,e);c.fusionTooltip.push(l)}else{c.fusionTooltip=[];c.start=Math.min(c.start,e);c.stop=Math.max(c.stop,e);c.fusionTooltip.push(l)}}};t.prototype.calculateStartAngle=function(t,n){var e=this.reference.chromosomesOrder.findIndex((function(n){return n==t}));var i=this.reference.chromosomes[e];return i.startAngle+(i.endAngle-i.startAngle)*(Number(n)/i.size)};t.prototype.calculateEndAngle=function(t,n){var e=this.reference.chromosomesOrder.findIndex((function(n){return n==t}));var i=this.reference.chromosomes[e];return i.startAngle+(i.endAngle-i.startAngle)*(Number(n)/i.size)};return t}();var pt=function(t){e(n,t);function n(n,e,i){var r=t.call(this,n.rings.labelLinesInnerRadius,n.rings.labelsToLinesDistance,e.sort((function(t,n){return t.startAngle<n.startAngle?-1:t.startAngle>n.startAngle?1:0})))||this;r.elementsToDisplay=[];r.filteredPrioritizedGenesList=[];r.settings=n;r.hasPrioritizedGenes=i;var s=2*Math.PI*(n.rings.labelLinesInnerRadius+n.rings.labelsToLinesDistance);r.overlapAngle=r.settings.label.overlapAngleFactor*r.settings.label.fontSize/s;r.calculateCollisions();return r}n.prototype.calculateCollisions=function(){this.collisions=[];var t=[];if(this.hasPrioritizedGenes){t=this.elements.filter((function(t){return t.isPrioritized}));this.filteredPrioritizedGenesList=this.getLabelsWithoutPrioritizedGenes(t);var n=this.elements.filter((function(t){return!t.isPrioritized}));var e=n.concat(this.filteredPrioritizedGenesList).sort((function(t,n){return t.startAngle<n.startAngle?-1:t.startAngle>n.startAngle?1:0}));this.elementsToDisplay=this.getAllLabels(e)}else{this.elementsToDisplay=this.getLabelsWithoutPrioritizedGenes(this.elements)}};n.prototype.getLabelsWithoutPrioritizedGenes=function(t){var n=this;var e=[];var i={endAngle:0};t.forEach((function(t,r){if(r==0){e.push(t);i=t}else{var s=i.endAngle-t.startAngle+n.overlapAngle;if(s>0&&s<n.settings.label.maxDeltaAngle){var a=ht.createMovedLabel(t,s);e===null||e===void 0?void 0:e.push(a);i=a}if(s<=0){e.push(t);i=t}}}));return e};n.prototype.getAllLabels=function(t){var n;var e=[];var i={endAngle:0};var r=t.length;var s=-1;for(var a=0;a<t.length;a++){var o=t[a];if(o.isPrioritized){e.push(o);s=a;i=o;continue}if(a==0){if(r>1){if(this.isElementOverlappingNextCancerGene(t,s,o,0)){continue}e.push(o);i=o}continue}var c=i.endAngle-o.startAngle+this.overlapAngle;if(c>0&&c<this.settings.label.maxDeltaAngle){if(a==length-1){e.push(o);continue}if(this.isElementOverlappingNextCancerGene(t,s,o,c)){continue}var l=ht.createMovedLabel(o,c);(n=this.collisions)===null||n===void 0?void 0:n.push(l);e.push(o);i=l}if(c<=0){if(this.isElementOverlappingNextCancerGene(t,s,o,0)){continue}e.push(o);i=o}}return e};n.prototype.isElementOverlappingNextCancerGene=function(t,n,e,i){var r=this.getNextLabelWithCancerGene(t,n);if(r){var s=e.endAngle+i-r.startAngle+this.overlapAngle;if(s>0){return true}}return false};n.prototype.getNextLabelWithCancerGene=function(t,n){return t.find((function(t,e){return t.isPrioritized&&e>n}))};return n}(nt);var dt=function(){function t(t,n,e,i){this.nonExonicInnerRadius=t;this.nonExonicWidht=n;this.sampleName=e;this.reference=i;this.onePxArcAngle=1/t}t.prototype.map=function(t){var n=this;var e=this.nonExonicInnerRadius;var i=e+this.nonExonicWidht;var r=[];t.forEach((function(t){var s=et.getInstance().mlabel?et.getInstance().mlabel[t.mClass]:undefined;var a=n.calculateStartAngle(t);var o=n.calculateEndAngle(t);var c={startAngle:a,endAngle:o,innerRadius:e,outerRadius:i,color:s.color,text:t.gene,dataClass:s.label,mname:t.mname,chr:t.chr,pos:t.pos};r.push(c)}));return r};t.prototype.calculateStartAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return e.startAngle+(e.endAngle-e.startAngle)*(Number(t.position)/e.size)-this.onePxArcAngle};t.prototype.calculateEndAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return this.onePxArcAngle+e.startAngle+(e.endAngle-e.startAngle)*(Number(t.position)/e.size)};return t}();var vt=function(){function t(t,n,e,i){this.lohInnerRadius=t;this.lohWidth=n;this.sampleName=e;this.reference=i}t.prototype.map=function(t){var n=this;var e=[];t.forEach((function(t){var i=n.calculateStartAngle(t);var r=n.calculateEndAngle(t);var s=n.lohInnerRadius;var a=s+n.lohWidth;var o=Y.provide(t.segmean);var c={startAngle:i,endAngle:r,innerRadius:s,outerRadius:a,color:o,text:t.gene,chr:t.chr,start:t.start,stop:t.stop,value:t.segmean};e.push(c)}));return e};t.prototype.calculateStartAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return e.startAngle+(e.endAngle-e.startAngle)*(Number(t.start)/e.size)};t.prototype.calculateEndAngle=function(t){var n=this.reference.chromosomesOrder.indexOf(t.chr);var e=this.reference.chromosomes[n];return e.startAngle+(e.endAngle-e.startAngle)*(Number(t.stop)/e.size)};return t}();var ft=function(){function t(t,n,e,i,r,s){this.labelsRing=t;this.chromosomesRing=n;this.nonExonicArcRing=e;this.snvArcRing=i;this.cnvArcRing=r;this.lohArcRing=s}return t}();var gt=function(){function t(t,n,e,i){this.nonExonicArcRing=undefined;this.settings=t;this.dataMapper=n;this.reference=e;this.sampleName=i}t.prototype.map=function(t){var n=this.dataMapper.map(t);var e=new ut(this.settings,this.sampleName,this.reference);var i=e.map(n.labelData,n.cnvData);var r=new pt(this.settings,i,n.hasPrioritizedGenes);var s=new nt(this.settings.rings.chromosomeInnerRadius,this.settings.rings.chromosomeWidth,this.reference.chromosomes);var a=new dt(n.nonExonicInnerRadius,this.settings.rings.nonExonicRingWidth,this.sampleName,this.reference);var o=a.map(n.nonExonicSnvData);if(o.length>0){this.nonExonicArcRing=new nt(n.nonExonicInnerRadius,this.settings.rings.nonExonicRingWidth,o)}this.snvArcsMapper=new rt(n.snvInnerRadius,this.settings.rings.snvRingWidth,this.sampleName,this.reference);var c=this.snvArcsMapper.map(n.snvRingDataMap);if(c.length>0){this.snvArcRing=new nt(n.snvInnerRadius,this.settings.rings.snvRingWidth,c)}var l=new vt(n.lohInnerRadius,this.settings.rings.lohRingWidth,this.sampleName,this.reference);var h=l.map(n.lohData);if(h.length>0){this.lohArcRing=new nt(n.lohInnerRadius,this.settings.rings.lohRingWidth,h)}this.cnvArcsMapper=new ct(n.cnvInnerRadius,this.settings.rings.cnvRingWidth,this.settings,this.sampleName,this.reference,n.cnvMaxValue,n.cnvMinValue,this.settings.cnv.unit);var u=this.cnvArcsMapper.map(n.cnvData);if(u.length>0){this.cnvArcRing=new nt(n.cnvInnerRadius,this.settings.rings.cnvRingWidth,u)}var p=new Q(n.fusionRadius,this.sampleName,this.reference);var d=p.map(n.fusionData);var v;if(this.settings.legend.lohLegendEnabled&&n.lohMinValue&&n.lohMaxValue){v=new Z(n.lohMinValue,n.lohMaxValue)}var f=new _(this.settings.legend.snvTitle,this.settings.legend.cnvTitle,this.settings.legend.lohTitle,this.settings.legend.fusionTitle,this.snvArcsMapper?this.snvArcsMapper.snvClassMap:new Map,this.cnvArcsMapper?this.cnvArcsMapper.cnvClassMap:new Map,d.length>0,v);var g=new ft(r,s,this.nonExonicArcRing,this.snvArcRing,this.cnvArcRing,this.lohArcRing);return new tt(this.settings,g,f,d)};return t}();var mt=function(){function t(t){this.settings=t}t.prototype.map=function(t){var n;var e=t.args.chromosomes;var i=t.args.genome.majorchr;var r=t.args.sampleName;var s=t.args.genome;var a=((n=s===null||s===void 0?void 0:s.geneset)===null||n===void 0?void 0:n[0])&&this.settings.label.prioritizeGeneLabelsByGeneSets?s.geneset[0].lst:[];var o=t.args.data;var c=new j(this.settings,i,e);var l=new X(this.settings,c,r,a);return new gt(this.settings,l,c,r).map(o)};t.dtNums=[2,5,4,10,1,"exonic","non-exonic"];t.dtAlias={1:"snv",2:"sv",3:"geneexpression",4:"cnv",5:"sv",6:"snv",7:"snv",8:"snv",9:"snv",10:"loh"};t.snvClassLayer={M:"exonic",E:"exonic",F:"exonic",N:"exonic",S:"exonic",D:"exonic",I:"exonic",P:"exonic",L:"exonic",Utr3:"exonic",Utr5:"exonic",mnv:"non-exonic",ITD:"non-exonic",insertion:"non-exonic",deletion:"non-exonic",Intron:"non-exonic",X:"non-exonic",noncoding:"non-exonic"};return t}();var At=function(){function t(t,n){this.cvnCapping=t;this.onClickCallback=n}t.prototype.map=function(t){var n=[];var e=0;if(t.snvClassMap){this.mapSnv(t,n,e++)}if(t.cnvClassMap){this.mapCnv(t,n,e++)}if(t.lohLegend){this.mapLoh(t,n,e++)}if(t.fusionLegend){this.mapFusion(t,n,e++)}return n};t.prototype.mapSnv=function(t,n,e){var i=[];var r=0;for(var s=0,a=t.snvClassMap;s<a.length;s++){var o=a[s],c=o[0],l=o[1];i.push({termid:t.snvTitle,key:c,text:"".concat(l.snvType," (").concat(l.count,")"),color:l.color,order:r++,border:"1px solid #ccc"})}n.push({name:t.snvTitle,order:e,items:i})};t.prototype.mapCnv=function(t,n,e){if(!t.cnvClassMap)return;var i=t.cnvClassMap.get(at.Gain);var r=t.cnvClassMap.get(at.Loss);var s=t.cnvClassMap.get(at.Cap);if(i&&r&&s){var a=0;var o=[];if(i.value>0){o.push({termid:t.cnvTitle,key:at.Gain,text:"Max: ".concat(i.value),color:i.color,order:a++,border:"1px solid #ccc"})}if(r.value<0){o.push({termid:t.cnvTitle,key:at.Loss,text:"Min: ".concat(r.value),color:r.color,order:a++,border:"1px solid #ccc"})}o.push({termid:t.cnvTitle,key:at.Cap,text:"Capping: ".concat(s.value),color:s.color,order:a++,border:"1px solid #ccc",onClickCallback:this.onClickCallback});n.push({name:t.cnvTitle,order:e,items:o})}};t.prototype.mapLoh=function(t,n,e){if(!t.lohLegend)return;var i=[];i.push({termid:t.lohTitle,key:"min",text:"min",color:t.lohLegend.colorStartValue,order:0,border:"1px solid #ccc"});i.push({termid:t.lohTitle,key:"max",text:"max",color:t.lohLegend.colorEndValue,order:1,border:"1px solid #ccc"});n.push({name:t.lohTitle,order:e,items:i})};t.prototype.mapFusion=function(t,n,e){var i=[];i.push({termid:t.fusionTitle,key:k.Interchromosomal,text:"Interchromosomal",color:k.Interchromosomal.valueOf(),order:0,border:"1px solid #ccc"});i.push({termid:t.fusionTitle,key:k.Intrachromosomal,text:"Intrachromosomal",color:k.Intrachromosomal.valueOf(),order:1,border:"1px solid #ccc"});n.push({name:t.fusionTitle,order:e,items:i})};return t}();var xt=function(){function t(t,n,e){this.fontSize=n;this.legendJSONMapper=new At(t,e)}t.prototype.render=function(t,n,e,i,r){var s=u({holder:t.append("g"),rectFillFxn:function(t){return t.color},iconStroke:"#aaa"});var a={xOffset:e};var o=this.legendJSONMapper.map(n);s(o,{settings:Object.assign({},{svgw:i,svgh:r,dimensions:a,fontsize:this.fontSize})})};return t}();var yt=function(){function t(t,n,e){this.padAngle=t;this.innerRadius=n;this.outerRadius=e}t.prototype.render=function(t,n){var e=m().padAngle(this.padAngle).value((function(t){return t.size})).sort(null);var i=e(n);var r=c().innerRadius(this.innerRadius).outerRadius(this.outerRadius);var s=t.append("g");s.selectAll("path").data(i).enter().append("path").attr("d",r).attr("fill","black");s.selectAll("text").data(i).enter().append("text").attr("transform",(function(t){return"translate(".concat(r.centroid(t),") rotate(").concat(t.data.angle*180/Math.PI-90,")").concat(t.data.angle>Math.PI?"rotate(180)":"")})).attr("dy","0.35em").attr("text-anchor","middle").text((function(t){return t.data.text})).style("fill","white")};return t}();var Rt=function(){function t(t,n){this.animationDuration=t;this.geneClickListener=n}t.prototype.render=function(t,n,e){var i=this;var r=t.append("g");var a=d().x((function(t){return t.x})).y((function(t){return t.y}));var o=z.create();r.selectAll(".group").data(n).enter().append("g").attr("class","group").each((function(t,n,e){var r=s(e[n]);r.append("text").attr("class","chord-text").attr("dy",".35em").attr("transform",t.transform).style("text-anchor",t.textAnchor).style("font-size","12px").style("fill",t.color).style("cursor","pointer").text(t.text).on("click",(function(){if(t.mutationsTooltip){i.geneClickListener(t.text,t.mutationsTooltip.map((function(t){return t.mname})))}})).on("mouseover",(function(n){o.d.style("padding","2px").html(i.createTooltipHtml(t));o.show(n.x,n.y)})).on("mouseout",(function(){o.hide()}));r.append("path").attr("class","chord-tick").datum(t.line.points).style("stroke",t.color).style("fill","none").attr("d",a)}));r.selectAll(".group").each((function(t,n,r){var o=e?e.find((function(n){return n.text===t.text})):undefined;if(o){var c=s(r[n]);c.selectAll(".chord-text").datum(o).transition().duration(i.animationDuration).attr("transform",o.transform).style("text-anchor",o.textAnchor);c.selectAll(".chord-tick").datum(o.line.points).transition().duration(i.animationDuration).style("fill","none").attr("d",a)}}))};t.prototype.createTooltipHtml=function(t){var n="";if(t.mutationsTooltip){n+="Gene: ".concat(t.text," <br />");t.mutationsTooltip.forEach((function(t){n+="Consequence: ".concat(t.mname,' <span style="color: ').concat(t.color,'" >').concat(t.dataClass,"</span> <br />Mutation: ").concat(t.chr,":").concat(t.position," <br />")}))}if(t.fusionTooltip){n+="Data type: Fusion transcript <br />";t.fusionTooltip.forEach((function(t){n+="Break points: ".concat(t.geneA?t.geneA:""," ").concat(t.chrA,":").concat(t.posA," ").concat(t.strandA=="+"?"forward":"reverse"," > ")+"".concat(t.geneB?t.geneB:""," ").concat(t.chrB,":").concat(t.posB," ").concat(t.strandB=="+"?"forward":"reverse"," <br /> ")}))}if(t.cnvTooltip){t.cnvTooltip.forEach((function(t){n+='CNV: <span style="color: '.concat(t.color,'">').concat(t.value,"</span> ").concat(t.chr,":").concat(t.start,"-").concat(t.stop)}))}return n};return t}();function bt(t){if(t===void 0){t={}}var n={rings:{nonExonicRingWidth:20,snvRingWidth:20,lohRingWidth:20,cnvRingWidth:30,snvRingFilters:["exonic"],chromosomeInnerRadius:190,chromosomeWidth:20,labelLinesInnerRadius:210,labelsToLinesDistance:30,labelsToLinesGap:2,nonExonicRingEnabled:true,nonExonicFilterValues:["non-exonic"]},verticalPadding:70,horizontalPadding:500,layerScaler:1,padAngle:.002,label:{fontSize:12,maxDeltaAngle:.05,animationDuration:1e3,overlapAngleFactor:5,prioritizeGeneLabelsByGeneSets:false,showPrioritizeGeneLabelsByGeneSets:false},cnv:{capping:5,ampColor:"#D6683C",lossColor:"#67a9cf",cappedAmpColor:"#8B0000",cappedLossColor:"#00008B",unit:"Unit"},legend:{snvTitle:"SNV",cnvTitle:"CNV",lohTitle:"LOH",fusionTitle:"SV",lohLegendEnabled:true,fontSize:12,rowHeight:40},menu:{padding:5}};return a(n,t)}var Mt=function(){function t(t){this.geneClickListener=t}t.prototype.render=function(t,n){var e=this;var i=c();var r=t.append("g");var s=z.create();r.selectAll("path").data(n).enter().append("path").attr("d",(function(t){return i(t)})).attr("fill",(function(t){return t.color})).on("mouseover",(function(t,n){s.d.style("padding","2px").html("Gene: ".concat(n.text," <br />").concat(n.mname,' <br /> <span style="color:').concat(n.color,'">').concat(n.dataClass,"</span> <br /> ").concat(n.chr,":").concat(n.pos));s.show(t.x,t.y)})).on("mouseout",(function(){s.hide()})).on("click",(function(t,n){e.geneClickListener(n.text,[n.mname])}))};return t}();var Ct=function(){function t(t,n){this.svnWidth=t;this.geneClickListener=n}t.prototype.render=function(t,n){var e=this;if(n.length>0){var i=n[0].innerRadius;var r=new D(i,this.svnWidth,"#6464641A");r.render(t)}var s=c();var a=t.append("g");var o=z.create();a.selectAll("path").data(n).enter().append("path").attr("d",(function(t){return s(t)})).attr("fill",(function(t){return t.color})).on("mouseover",(function(t,n){o.d.style("padding","2px").html("Gene: ".concat(n.text," <br />").concat(n.mname,' <br /> <span style="color:').concat(n.color,'">').concat(n.dataClass,"</span> <br /> ").concat(n.chr,":").concat(n.pos));o.show(t.x,t.y)})).on("mouseout",(function(){o.hide()})).on("click",(function(t,n){e.geneClickListener(n.text,[n.mname])}))};return t}();var It=function(){function t(){}t.prototype.render=function(t,n){var e=c();var i=t.append("g");var r=z.create();i.selectAll("path").data(n).enter().append("path").attr("d",(function(t){return e(t)})).attr("fill",(function(t){return t.color})).on("mouseover",(function(t,n){r.d.style("padding","2px").html("Loss of Heterozygosity <br /> ".concat(n.chr,":").concat(n.start,"-").concat(n.stop));r.show(t.x,t.y)})).on("mouseout",(function(){r.hide()}))};return t}();var Lt=function(){function t(t){this.menuPadding=t}t.prototype.render=function(t,n){var e=c();var i=t.append("g");var r=z.create();i.selectAll("path").data(n).enter().append("path").attr("d",(function(t){return e(t)})).attr("fill",(function(t){return t.color})).on("mouseover",(function(t,n){r.d.style("padding","2px").html("Copy Number Variation <br /> ".concat(n.chr,":").concat(n.start,"-").concat(n.stop," <br /> ").concat(n.unit,": ").concat(n.value," "));r.show(t.x,t.y)})).on("mouseout",(function(){r.hide()}))};return t}();var Et=function(){function e(t){this.type="Disco";this.opts=t;this.discoInteractions=new H(this)}e.prototype.getState=function(t){var n=this;return t.plots.find((function(t){return t.id===n.id}))};e.prototype.main=function(){return t(this,void 0,void 0,(function(){var t,e,i,r,s,a;return n(this,(function(n){t=this.state.settings;e=new mt(t);i=e.map(this.app.getState());r=this.opts.holder;r.selectAll("*").remove();s=new xt(t.cnv.capping,t.label.fontSize,this.discoInteractions.cappingClickCallback);a=new F(this.getRingRenderers(t,this.discoInteractions.geneClickListener),s,this.discoInteractions.downloadClickListener,this.discoInteractions.prioritizeGenesCheckboxListener);a.render(r,i);return[2]}))}))};e.prototype.getRingRenderers=function(t,n){var e=new yt(t.padAngle,t.rings.chromosomeInnerRadius,t.rings.chromosomeInnerRadius+t.rings.chromosomeWidth);var i=new Rt(t.label.animationDuration,n);var r=new Mt(n);var s=new Ct(t.rings.snvRingWidth,n);var a=new Lt(t.menu.padding);var o=new It;var c=new Map;c.set($.CHROMOSOME,e);c.set($.LABEL,i);c.set($.NONEXONICSNV,r);c.set($.SNV,s);c.set($.CNV,a);c.set($.LOH,o);return c};return e}();var wt=o(Et);var Ot=wt;function St(e){return t(this,void 0,void 0,(function(){return n(this,(function(t){return[2,{chartType:"Disco",subfolder:"disco",extension:"ts",settings:bt(e.overrides)}]}))}))}export{Ot as componentInit,wt as discoInit,St as getPlotConfig};
@@ -1 +1 @@
1
- import{az as e,q as t,aM as s,aD as i,ae as r,k as a,ac as o,aB as l,M as n,T as d,aA as c}from"./app-91ecaaa4.js";import{b as p,i as m,g as h,a as u,s as f,n as y,v as b}from"./filter-b0fbf437.js";import{termInfoInit as v}from"./termInfo-db451d46.js";import"path";import"./table-0c558ce8.js";const g="25px";const _="root";const x=20;const T="400px";const k="termdiv",C="termchilddiv",w="termbtn",I="termlabel",S="termloading",A="termcheck";class D{constructor(e){this.type="tree";V(this);B(this);this.loadingTermSet=new Set;this.termsByCohort={};this.expandAll="expandAll"in e?e.expandAll:false}init(){this.dom={holder:this.opts.holder.append("div")}}reactsTo(e){if(e.type.startsWith("tree_"))return true;if(e.type.startsWith("filter_"))return true;if(e.type.startsWith("cohort_"))return true;if(e.type.startsWith("info_"))return true;if(e.type.startsWith("submenu_"))return true;if(e.type=="app_refresh")return true}getState(e){const t=p(e.termfilter.filter);const s={isVisible:!e.submenu.term,activeCohort:e.activeCohort,expandedTermIds:e.tree.expandedTermIds,selectedTerms:e.selectedTerms,termfilter:{filter:t},usecase:e.tree.usecase};if(e.termdbConfig.selectCohort){s.toSelectCohort=true;const t=e.termdbConfig.selectCohort.values[e.activeCohort];if(t){s.cohortValuelst=t.keys}}return s}async main(){if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.state.toSelectCohort){if(!this.state.cohortValuelst){return}}this.termsById=this.getTermsById();const e=this.termsById[_];e.terms=await this.requestTermRecursive(e);this.dom.holder.style("display","block");this.renderBranch(e,this.dom.holder)}getTermsById(){if(!(this.state.activeCohort in this.termsByCohort)){this.termsByCohort[this.state.activeCohort]={[_]:{id:_,__tree_isroot:true}}}return this.termsByCohort[this.state.activeCohort]}async requestTermRecursive(e){const t=await this.app.vocabApi.getTermChildren(e,this.state.toSelectCohort?this.state.cohortValuelst:null);if(t.error)throw t.error;if(!t.lst||t.lst.length==0){return[]}const s=[];for(const e of t.lst){const t=Object.assign({},e);s.push(t);if(this.state.expandedTermIds.includes(t.id)){t.terms=await this.requestTermRecursive(t)}else{const e=this.termsById[t.id];if(e&&e.terms){t.terms=e.terms}}this.termsById[t.id]=t}return s}bindKey(e){return e.id}}const j=e(D);function B(e){e.renderBranch=(t,s,i)=>{if(!t||!t.terms)return;if(t.terms.length>=x){if(s.classed("sjpp_hide_scrollbar"));else{s.style("max-height",T).style("padding","10px").style("resize","vertical").classed("sjpp_hide_scrollbar",true)}}if(e.opts.disable_terms){t.terms.forEach((t=>{if(t.disabled)e.opts.disable_terms.push(t.id)}))}e.included_terms=[];if(e.state.usecase){for(const s of t.terms){if(m(s,e.state.usecase).size){e.included_terms.push(s)}}}else{e.included_terms.push(...t.terms)}if(!(t.id in e.termsById)||!e.included_terms.length){s.style("display","none");return}if(e.loadingTermSet.has(t.id)){e.loadingTermSet.delete(t.id);s.select("."+S).remove()}const r=e.state.expandedTermIds;if(!r.includes(t.id)){s.style("display","none");if(i)i.text("+");return}s.style("display","block");if(i)i.text("-");const a=s.selectAll("."+k).data(e.included_terms,e.bindKey);a.exit().each(e.hideTerm);a.each(e.updateTerm);a.enter().append("div").each(e.addTerm);for(const i of t.terms){if(r.includes(i.id)){e.renderBranch(i,s.selectAll("."+C).filter((e=>e.id==i.id)),s.selectAll("."+w).filter((e=>e.id==i.id)))}}};e.hideTerm=function(s){if(s.id in e.termsById&&e.state.expandedTermIds.includes(s.id))return;t(this).style("display","none")};e.updateTerm=function(s){const i=t(this);if(!(s.id in e.termsById)){i.style("display","none");return}const r=e.opts.disable_terms?.includes(s.id);const a=m(s,e.state.usecase);i.style("display","");const o=e.state.expandedTermIds.includes(s.id);i.select("."+w).text(o?"-":"+");i.select("."+C).style("display",o?"block":"none");const l=e.state.selectedTerms.find((e=>e.name===s.name&&e.type===s.type));i.select("."+I).style("background-color",!a.has("plot")||r?"":l?"rgba(255, 194, 10,0.5)":"#cfe2f3");i.select("."+A).style("display",a.has("plot")&&l&&!r?"inline-block":"none")};e.addTerm=async function(s){const i=e.opts.disable_terms?.includes(s.id);const r=m(s,e.state.usecase);const a=t(this).attr("class",k).style("margin",s.isleaf?"":"2px").style("padding","0px 5px");if(r.has("branch")){a.append("div").attr("class","sja_menuoption "+w).style("display","inline-block").style("padding","4px 9px").style("font-family","courier").text("+").on("click",(t=>{t.stopPropagation();e.toggleBranch(s)}));if(e.expandAll)e.toggleBranch(s)}const o=e.state.selectedTerms.find((e=>e.name===s.name&&e.type===s.type));const l=a.append("div").attr("class",I).style("display","inline-block").style("padding","5px").style("opacity",i?.4:null).text(s.name);let n;if(s.hashtmldetail){n=a.append("div").style("display","inline-block")}if(r.size>0){if(i){l.attr("class","sja_tree_click_term_disabled "+I).style("padding","5px 8px").style("margin","1px 0px").style("opacity",.4)}else if(r.has("plot")){l.attr("class","ts_pill sja_filter_tag_btn sja_tree_click_term "+I).style("color","black").style("padding","5px 8px").style("border-radius","6px").style("background-color",o?"rgba(255, 194, 10,0.5)":"#cfe2f3").style("margin","1px 0px").style("cursor","default").on("click",(()=>e.clickTerm(s)))}if(s.samplecount!==undefined){a.append("div").style("font-size",".8em").style("display","inline-block").style("margin-left","5px").style("color",s.samplecount?"#777":"#ddd").text("n="+s.samplecount)}}if(s.hashtmldetail){v({vocabApi:e.app.vocabApi,icon_holder:n,content_holder:a.append("div"),id:s.id,state:{term:s}})}if(e.opts.submit_lst){a.append("div").attr("class",A).style("color","#008000").style("display",o?"inline-block":"none").html("&check;")}if(!s.isleaf){a.append("div").attr("class",C).style("padding-left",g)}}}function V(e){e.toggleBranch=function(s){if(s.isleaf)return;const i=e.termsById[s.id];if(!i)throw"invalid term id";if(!i.terms){if(e.loadingTermSet.has(i.id))return;e.loadingTermSet.add(i.id);t(this.parentNode).selectAll("."+C).filter((e=>e.id===i.id)).style("display","block").append("div").text("Loading...").attr("class",S).style("opacity",.5).style("padding","5px")}const r=e.state.expandedTermIds.includes(s.id);const a=r?"tree_collapse":"tree_expand";e.app.dispatch({type:a,termId:s.id})};e.clickTerm=async t=>{if(e.opts.click_term2select_tvs){e.app.dispatch({type:"submenu_set",submenu:{term:t,type:"tvs"}});return}if(e.opts.click_term_wrapper){e.opts.click_term_wrapper(t);return}if(e.opts.submit_lst){const s=e.state.selectedTerms.findIndex((e=>e.name===t.name));if(s==-1){e.app.dispatch({type:"app_refresh",state:{selectedTerms:[...e.state.selectedTerms,t]}})}else{const t=e.state.selectedTerms.slice(0);t.splice(s,1);e.app.dispatch({type:"app_refresh",state:{selectedTerms:t}})}return}throw"missing term click callback"}}const N={header_mode:"search_only",activeCohort:0,tree:{usecase:{},expandedTermIds:[]},submenu:{},search:{isVisible:true},selectedTerms:[],termfilter:{filter:{type:"tvslst",in:true,join:"",lst:[]}}};class O{constructor(e){this.type="store";this.defaultState=N;s(this,e);this.prevGeneratedId=0}validateOpts(e){if(!e.state)throw".state{} missing";const t=e.state;if(t.vocab){if(t.vocab.dslabel){if(!t.vocab.genome)throw".state[.vocab].genome missing"}else if(t.vocab.genome){if(!t.vocab.dslabel)throw".state[.vocab].dslabel missing"}else{if(!Array.isArray(t.vocab.terms))throw"vocab.terms must be an array of objects"}}}validateState(){const e=this.state;if(e.tree.expandedTermIds.length==0){e.tree.expandedTermIds.push(_)}else{if(e.tree.expandedTermIds[0]!=_){e.tree.expandedTermIds.unshift(_)}}}async init(){this.state.termdbConfig=await this.app.vocabApi.getTermdbConfig();let e=h(this.state.termfilter.filter,"filterUiRoot");if(!e){this.state.termfilter.filter.tag="filterUiRoot";e=this.state.termfilter.filter}if(this.state.termdbConfig.selectCohort){let t=h(this.state.termfilter.filter,"cohortFilter");if(!t){t={tag:"cohortFilter",type:"tvs",tvs:{term:JSON.parse(JSON.stringify(this.state.termdbConfig.selectCohort.term)),values:this.state.activeCohort==-1?[]:this.state.termdbConfig.selectCohort.values[this.state.activeCohort].keys.map((e=>({key:e,label:e})))}};this.state.termfilter.filter={type:"tvslst",in:true,join:"and",lst:[t,e]}}else{const e=(e,t)=>e<t?-1:1;t.tvs.values.sort(((e,t)=>e.key<t.key?-1:1));const s=JSON.stringify(t.tvs.values.map((e=>e.key)).sort(e));const i=this.state.termdbConfig.selectCohort.values.findIndex((t=>s==JSON.stringify(t.keys.sort(e))));if(this.state.activeCohort!==-1&&this.state.activeCohort!==0&&i!==this.state.activeCohort){console.log("Warning: cohortFilter will override the state.activeCohort due to mismatch")}this.state.activeCohort=i}}else{this.state.activeCohort=-1;if(this.state.header_mode==="with_cohortHtmlSelect"){console.warn(`no termdbConfig.selectCohort to use for state.header_mode = 'with_cohortHtmlSelect'`);this.state.header_mode="search_only"}}}fromJson(e){const t=JSON.parse(e);return t}setId(e){e.$id=this.prevGeneratedId++;if(e.$lst){for(const t of e.$lst){this.setId(t)}}}}O.prototype.actions={app_refresh(e={}){this.state=this.copyMerge(this.toJson(this.state),e.state?e.state:{},this.replaceKeyVals)},cohort_set(e){this.state.activeCohort=e.activeCohort;const t=this.state.termdbConfig.selectCohort.values[e.activeCohort];const s=h(this.state.termfilter.filter,"cohortFilter");if(!s)throw`No item tagged with 'cohortFilter'`;s.tvs.values=t.keys.map((e=>({key:e,label:e})))},tree_expand(e){if(this.state.tree.expandedTermIds.includes(e.termId))return;this.state.tree.expandedTermIds.push(e.termId)},tree_collapse(e){const t=this.state.tree.expandedTermIds.indexOf(e.termId);if(t==-1)return;this.state.tree.expandedTermIds.splice(t,1)},filter_replace(e){const t=e.filter?e.filter:{type:"tvslst",join:"",in:1,lst:[]};if(!e.filter.tag){this.state.termfilter.filter=t}else{const s=h(this.state.termfilter.filter,e.filter.tag);if(!s)throw`cannot replace missing filter with tag '${e.filter.tag}'`;const i=u(this.state.termfilter.filter,s.$id);if(i==s){this.state.termfilter.filter=t}else{const e=i.lst.indexOf(s);i.lst[e]=t}}},submenu_set(e){const t=e.submenu&&e.submenu.term;if(!t){this.state.submenu={};this.state.tree.expandedTermIds=[_]}else{const s=[_];if(t.__ancestors){s.push(...t.__ancestors)}if(m(t).has("plot")){Object.assign(this.state.submenu,e.submenu)}else{s.push(t.id);delete this.state.submenu.term}this.state.tree.expandedTermIds=s}}};const E=i(O);class z{constructor(e){this.type="submenu";this.dom={holder:e.holder};P(this)}reactsTo(e){if(e.type.startsWith("submenu_"))return true;if(e.type=="app_refresh")return true}getState(e){return{type:e.submenu.type,term:e.submenu.term,termfilter:e.termfilter}}main(){if(!this.state.term){this.dom.holder.style("display","none");return}if(this.state.type=="tvs")this.showTvsMenu(this.state.term);else throw`unsupported submenu.type='${this.state.type}'`}}const R=e(z);function P(e){e.showTvsMenu=function(t){e.dom.holder.selectAll("*").remove();e.dom.holder.style("display","block").append("div").style("margin","20px").append("span").html("&laquo; Back to variable selection").attr("class","sja_clbtext").on("click",(()=>e.app.dispatch({type:"submenu_set",submenu:{}})));f({term:t,filter:e.state.termfilter.filter,holder:e.dom.holder.append("div"),vocabApi:e.app.vocabApi,debug:e.app.debug,getCategoriesArguments:e.app.opts.getCategoriesArguments,callback:e.app.opts.tree.click_term2select_tvs})}}class ${constructor(e){this.type="search";this.customEvents=["postSearch"];G(this);J(this);this.dom={holder:e.holder};this.isVisible="isVisible"in e?e.isVisible:true}async init(e){this.initUI(this.getState(e))}reactsTo(e){if(e.type=="app_refresh")return true;const t=e.type.split("_")[0];return["search","cohort","submenu"].includes(t)}getState(e){return{isVisible:!e.submenu.term&&this.isVisible,cohortStr:e.activeCohort==-1||!e.termdbConfig.selectCohort?"":e.termdbConfig.selectCohort.values[e.activeCohort].keys.slice().sort().join(","),allowedTermTypes:e.termdbConfig.allowedTermTypes||[],expandedTermIds:e.tree.expandedTermIds,selectedTerms:e.selectedTerms,usecase:e.tree.usecase,search:e.search,isGeneSetTermdb:e.termdbConfig.isGeneSetTermdb}}async main(){this.dom.holder.style("display",this.state.isVisible?"block":"none");this.renderSelectedNonDictTerms()}async doSearch(e,t){if(!e){this.clear();this.bus.emit("postSearch",[]);return}const s=await this.app.vocabApi.findTerm(e,this.state.cohortStr,this.state.usecase,t);if(!s.lst||s.lst.length==0){this.noResult()}else{this.showTerms(s)}this.bus.emit("postSearch",s)}}const q=e($);function G(e){e.initUI=t=>{e.dom.holder.style("display",e.search&&e.search.isVisible==false?"none":"block");e.dom.input=e.dom.holder.style("text-align","left").append("input").attr("type","search").attr("class","tree_search").attr("placeholder","Search"+e.getPrompt(t)).style("width","220px").style("margin","10px").style("display","block").on("input",r.debounce(e.onInput,300)).on("keyup",e.onKeyup);e.dom.input.node().focus();e.dom.resultDiv=(e.opts.resultsHolder||e.dom.holder).append("div").style("display","none").style("grid-template-columns","auto auto");const s=e.dom.resultDiv.append("div");const i=e.dom.resultDiv.append("div");e.dom.resultDiv_genes=s.append("div").style("border-left","solid 1px rgb(133,182,225)").style("margin","0px 0px 10px 10px").style("padding-left","5px");e.dom.resultDiv_terms=i.append("div").style("border-left",e.opts.resultsHolder?"":"solid 1px rgb(133,182,225)").style("margin","0px 0px 10px 10px").style("padding-left","5px");e.dom.nonDictDiv=e.dom.holder.append("div").style("margin","0px 0px 10px 10px").style("display","none");e.dom.nonDictDiv.append("div").style("font-weight",600).html("Selected genes");e.dom.selectedNonDictDiv=e.dom.nonDictDiv.append("div")};e.getPrompt=e=>{const t=e.allowedTermTypes.includes("geneVariant")&&m({type:"geneVariant"},e.usecase).has("plot");if(t)return" variables or genes";if(e.isGeneSetTermdb)return" gene sets";return" variables"};e.noResult=()=>{e.clear();e.dom.resultDiv.style("display","inline-grid");e.dom.resultDiv_terms.append("div").style("padding","3px 3px 3px 0px").style("opacity",.5).text("No match"+(e.app.vocabApi.termdbConfig?.queries?.snvindel?.allowSNPs?". Press ENTER to search SNP":""))};e.showTerms=t=>{if(e.opts.disable_terms){t.lst.forEach((t=>{if(t.disabled)e.opts.disable_terms.push(t.id)}))}e.clear();e.dom.resultDiv.style("display","inline-grid");const s=[],i=[];for(const e of t.lst){if(e.type=="geneVariant"){s.push(e)}else{i.push(e)}}if(s.length){e.dom.resultDiv_genes.append("table").selectAll().data(s).enter().append("tr").each(e.showTerm)}if(i.length){e.dom.resultDiv_terms.append("table").selectAll().data(i).enter().append("tr").each(e.showTerm)}};e.showTerm=function(s){const i=t(this);const r=i.append("td").text(s.name);const a=m(s,e.state.usecase);if((e.opts.click_term||e.app.opts?.tree?.click_term_wrapper)&&a.has("plot")){if("id"in s&&e.opts.disable_terms?.includes(s.id)){r.attr("class","sja_tree_click_term_disabled").style("display","block").style("padding","5px 8px").style("margin","1px 0px").style("opacity",.4)}else{r.attr("class","ts_pill sja_filter_tag_btn sja_tree_click_term").style("display","block").style("color","black").style("padding","5px 8px").style("border-radius","6px").style("background-color",s.type=="geneVariant"?"rgba(251,171,96,0.5)":"#cfe2f3").style("margin","1px 0px").style("cursor","default").on("click",(()=>{if(e.opts.click_term){e.opts.click_term(s)}else{e.app.opts.tree.click_term_wrapper(s)}e.clear();e.dom.input.property("value","")}))}if(s.samplecount!==undefined){i.append("td").append("div").style("font-size",".8em").style("display","inline-block").style("margin-left","5px").style("color",s.samplecount?"#777":"#ddd").text("n="+s.samplecount)}}else{r.attr("class","sja_menuoption").on("click",(()=>{e.clear();e.dom.input.property("value","");const t=[_];if(s.type=="geneVariant"&&e.opts.handleGeneVariant){e.opts.handleGeneVariant(s)}else if(y.has(s.type)){e.app.dispatch({type:"app_refresh",state:{selectedTerms:[...e.state.selectedTerms,s]}})}else{if(s.__ancestors){t.push(...s.__ancestors)}if(!e.app.vocabApi.graphable(s))t.push(s.id);e.app.dispatch({type:"app_refresh",state:{tree:{expandedTermIds:t}}})}}))}i.append("td").text(s.type=="geneVariant"?"gene variant":(s.__ancestorNames||[]).join(" > ")).style("opacity",.5).style("font-size",".7em")};e.clear=()=>{e.dom.resultDiv_genes.selectAll("*").remove();e.dom.resultDiv_terms.selectAll("*").remove();e.dom.resultDiv.style("display","none")};e.renderSelectedNonDictTerms=function(){const t=e.state.selectedTerms.filter((e=>y.has(e.type)));e.dom.nonDictDiv.style("display",t.length?"":"none");const s=e.dom.selectedNonDictDiv.selectAll("div").data(t,(e=>e.name));s.exit().remove();s.enter().append("div").style("display","inline-block").style("margin","1px").style("padding","5px 8px").style("background-color","rgba(255, 194, 10,0.5)").style("border-radius","6px").html((e=>e.name))}}function J(e){e.onKeyup=t=>{if(!a(t))return;if(!e.app.vocabApi.termdbConfig?.queries?.snvindel?.allowSNPs)return;e.onInput(t,"snp")};e.onInput=async(t,s)=>{const i=e.dom.input.property("value");try{await e.doSearch(i,s)}catch(t){e.clear();e.dom.resultDiv.style("display","inline-grid");o(e.dom.resultDiv_terms,"Error: "+(t.message||t));if(t.stack)console.log(t.stack)}}}class M{constructor(e){this.type="app";if(!e.holder)t("body").append("div");const s=e.holder.append("div").style("display",e.tree?.submit_lst?"":"none").style("text-align","center").style("margin","10px 5px");const i=s.append("button").property("disabled",true).text(this.noSelectionPrompt).on("click",(()=>this.opts.tree?.submit_lst(this.state.selectedTerms)));const r=e.holder.append("div");this.dom={holder:e.holder,treeDiv:e.holder.append("div"),customTermDiv:e.holder.append("div").style("margin","10px"),submitDiv:s,submitBtn:i,topbar:r,searchDiv:r.append("div").style("display","inline-block"),filterDiv:r.append("div").style("display","none"),errdiv:e.holder.append("div"),tip:new n({padding:"5px"})}}validateOpts(e){if(e.vocabApi);else if(e.state&&e.state.vocab){if(typeof e.state.vocab!="object")throw"opts.state.vocab{} is not an object"}else if(e.state&&e.state.genome){const t=e.state;if(!t.vocab)t.vocab={};t.vocab.genome=t.genome;delete t.genome;if(t.dslabel){t.vocab.dslabel=t.dslabel;delete t.dslabel}}else{throw"neither state.vocab{} or opts.vocabApi provided"}if(e.tree){if(e.tree.disable_terms&&!e.tree.click_term&&!e.tree.click_term2select_tvs&&(!e.barchart||!e.barchart.bar_click_override)){throw`opts.tree.disable_terms is used only when opts.tree.click_term, opts.tree.click_term2select_tvs, or opts.barchart.bar_click_override is set`}if(!e.search)e.search={};if(e.tree.click_term2select_tvs){e.search.click_term=e=>this.api.dispatch({type:"submenu_set",submenu:{term:e,type:"tvs"}})}if(e.tree.click_term){e.tree.click_term_wrapper=async t=>{if(this.state.termdbConfig.termMatch2geneSet){const e=await d("termdb",{body:{genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,genesetByTermId:t.id}});t._geneset=e}e.tree.click_term(t)}}if(e.tree.disable_terms)e.search.disable_terms=e.tree.disable_terms}return e}async preApiFreeze(e){try{if(this.opts.vocabApi){e.vocabApi=this.opts.vocabApi}else{const t={vocab:this.opts.state.vocab||{genome:this.opts.state.genome,dslabel:this.opts.state.dslabel}};e.vocabApi=await b({app:this.api,state:t,fetchOpts:this.opts.fetchOpts})}e.appInit=W}catch(e){console.log(e);throw e}}async init(){try{this.store=await E({app:this.api,state:this.opts.state});this.state=await this.store.copyState();await this.setComponents();await this.api.dispatch()}catch(e){this.printError(e)}}async setComponents(){try{const e=this.state.nav?.header_mode;const t={search:q({app:this.api,holder:this.dom.searchDiv,isVisible:e!=="hide_search"}),tree:j({app:this.api,holder:this.dom.treeDiv,expandAll:e=="hide_search"})};if(this.opts.tree&&this.opts.tree.click_term2select_tvs){t.submenu=R({app:this.api,holder:this.dom.holder.append("div").style("display","none")})}this.components=await c(t)}catch(e){throw e}}async main(){this.api.vocabApi.main();const e=this.state.selectedTerms.length;this.dom.submitBtn.property("disabled",!e).text(!e?"Search or click term(s)":`Submit ${e} term${e>1?"s":""}`);await this.mayShowCustomTerms()}printError(e){o(this.dom.errdiv,"Error: "+(e.message||e));if(e.stack)console.log(e.stack)}async mayShowCustomTerms(){const e=await this.api.vocabApi.getCustomTerms();if(!Array.isArray(e)||e.length==0)return this.dom.customTermDiv.style("display","none");const t=[];for(const s of e){const e=m(s.term,this.state.tree.usecase);if(e.has("plot"))t.push(s)}if(t.length==0)return this.dom.customTermDiv.style("display","none");this.dom.customTermDiv.selectAll("*").remove();this.dom.customTermDiv.append("div").text("CUSTOM VARIABLES").style("font-size",".7em");for(const e of t){this.dom.customTermDiv.append("div").style("margin-bottom","3px").append("div").text(e.term.name).attr("class","sja_filter_tag_btn").style("padding","3px 6px").style("border-radius","6px").on("click",(()=>{if(!this.opts.tree)return;if(this.opts.tree.click_term){this.opts.tree.click_term(e);return}if(this.opts.tree.click_term2select_tvs){this.api.dispatch({type:"submenu_set",submenu:{term:e.term,type:"tvs"}});return}}))}}}const W=l(M);export{W as appInit};
1
+ import{az as e,q as t,aP as s,aC as i,ae as r,k as a,ac as o,aA as l,M as n,T as d,aJ as c}from"./app-20b1210c.js";import{a as p,i as m,g as h,f as u,s as f,n as y,v as b}from"./filter-52e22fa5.js";import{termInfoInit as v}from"./termInfo-6d2ab3c7.js";import"path";import"./table-1cf08d8a.js";const g="25px";const _="root";const x=20;const T="400px";const k="termdiv",C="termchilddiv",w="termbtn",I="termlabel",S="termloading",A="termcheck";class D{constructor(e){this.type="tree";V(this);B(this);this.loadingTermSet=new Set;this.termsByCohort={};this.expandAll="expandAll"in e?e.expandAll:false}init(){this.dom={holder:this.opts.holder.append("div")}}reactsTo(e){if(e.type.startsWith("tree_"))return true;if(e.type.startsWith("filter_"))return true;if(e.type.startsWith("cohort_"))return true;if(e.type.startsWith("info_"))return true;if(e.type.startsWith("submenu_"))return true;if(e.type=="app_refresh")return true}getState(e){const t=p(e.termfilter.filter);const s={isVisible:!e.submenu.term,activeCohort:e.activeCohort,expandedTermIds:e.tree.expandedTermIds,selectedTerms:e.selectedTerms,termfilter:{filter:t},usecase:e.tree.usecase};if(e.termdbConfig.selectCohort){s.toSelectCohort=true;const t=e.termdbConfig.selectCohort.values[e.activeCohort];if(t){s.cohortValuelst=t.keys}}return s}async main(){if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.state.toSelectCohort){if(!this.state.cohortValuelst){return}}this.termsById=this.getTermsById();const e=this.termsById[_];e.terms=await this.requestTermRecursive(e);this.dom.holder.style("display","block");this.renderBranch(e,this.dom.holder)}getTermsById(){if(!(this.state.activeCohort in this.termsByCohort)){this.termsByCohort[this.state.activeCohort]={[_]:{id:_,__tree_isroot:true}}}return this.termsByCohort[this.state.activeCohort]}async requestTermRecursive(e){const t=await this.app.vocabApi.getTermChildren(e,this.state.toSelectCohort?this.state.cohortValuelst:null);if(t.error)throw t.error;if(!t.lst||t.lst.length==0){return[]}const s=[];for(const e of t.lst){const t=Object.assign({},e);s.push(t);if(this.state.expandedTermIds.includes(t.id)){t.terms=await this.requestTermRecursive(t)}else{const e=this.termsById[t.id];if(e&&e.terms){t.terms=e.terms}}this.termsById[t.id]=t}return s}bindKey(e){return e.id}}const j=e(D);function B(e){e.renderBranch=(t,s,i)=>{if(!t||!t.terms)return;if(t.terms.length>=x){if(s.classed("sjpp_hide_scrollbar"));else{s.style("max-height",T).style("padding","10px").style("resize","vertical").classed("sjpp_hide_scrollbar",true)}}if(e.opts.disable_terms){t.terms.forEach((t=>{if(t.disabled)e.opts.disable_terms.push(t.id)}))}e.included_terms=[];if(e.state.usecase){for(const s of t.terms){if(m(s,e.state.usecase).size){e.included_terms.push(s)}}}else{e.included_terms.push(...t.terms)}if(!(t.id in e.termsById)||!e.included_terms.length){s.style("display","none");return}if(e.loadingTermSet.has(t.id)){e.loadingTermSet.delete(t.id);s.select("."+S).remove()}const r=e.state.expandedTermIds;if(!r.includes(t.id)){s.style("display","none");if(i)i.text("+");return}s.style("display","block");if(i)i.text("-");const a=s.selectAll("."+k).data(e.included_terms,e.bindKey);a.exit().each(e.hideTerm);a.each(e.updateTerm);a.enter().append("div").each(e.addTerm);for(const i of t.terms){if(r.includes(i.id)){e.renderBranch(i,s.selectAll("."+C).filter((e=>e.id==i.id)),s.selectAll("."+w).filter((e=>e.id==i.id)))}}};e.hideTerm=function(s){if(s.id in e.termsById&&e.state.expandedTermIds.includes(s.id))return;t(this).style("display","none")};e.updateTerm=function(s){const i=t(this);if(!(s.id in e.termsById)){i.style("display","none");return}const r=e.opts.disable_terms?.includes(s.id);const a=m(s,e.state.usecase);i.style("display","");const o=e.state.expandedTermIds.includes(s.id);i.select("."+w).text(o?"-":"+");i.select("."+C).style("display",o?"block":"none");const l=e.state.selectedTerms.find((e=>e.name===s.name&&e.type===s.type));i.select("."+I).style("background-color",!a.has("plot")||r?"":l?"rgba(255, 194, 10,0.5)":"#cfe2f3");i.select("."+A).style("display",a.has("plot")&&l&&!r?"inline-block":"none")};e.addTerm=async function(s){const i=e.opts.disable_terms?.includes(s.id);const r=m(s,e.state.usecase);const a=t(this).attr("class",k).style("margin",s.isleaf?"":"2px").style("padding","0px 5px");if(r.has("branch")){a.append("div").attr("class","sja_menuoption "+w).style("display","inline-block").style("padding","4px 9px").style("font-family","courier").text("+").on("click",(t=>{t.stopPropagation();e.toggleBranch(s)}));if(e.expandAll)e.toggleBranch(s)}const o=e.state.selectedTerms.find((e=>e.name===s.name&&e.type===s.type));const l=a.append("div").attr("class",I).style("display","inline-block").style("padding","5px").style("opacity",i?.4:null).text(s.name);let n;if(s.hashtmldetail){n=a.append("div").style("display","inline-block")}if(r.size>0){if(i){l.attr("class","sja_tree_click_term_disabled "+I).style("padding","5px 8px").style("margin","1px 0px").style("opacity",.4)}else if(r.has("plot")){l.attr("class","ts_pill sja_filter_tag_btn sja_tree_click_term "+I).style("color","black").style("padding","5px 8px").style("border-radius","6px").style("background-color",o?"rgba(255, 194, 10,0.5)":"#cfe2f3").style("margin","1px 0px").style("cursor","default").on("click",(()=>e.clickTerm(s)))}if(s.samplecount!==undefined){a.append("div").style("font-size",".8em").style("display","inline-block").style("margin-left","5px").style("color",s.samplecount?"#777":"#ddd").text("n="+s.samplecount)}}if(s.hashtmldetail){v({vocabApi:e.app.vocabApi,icon_holder:n,content_holder:a.append("div"),id:s.id,state:{term:s}})}if(e.opts.submit_lst){a.append("div").attr("class",A).style("color","#008000").style("display",o?"inline-block":"none").html("&check;")}if(!s.isleaf){a.append("div").attr("class",C).style("padding-left",g)}}}function V(e){e.toggleBranch=function(s){if(s.isleaf)return;const i=e.termsById[s.id];if(!i)throw"invalid term id";if(!i.terms){if(e.loadingTermSet.has(i.id))return;e.loadingTermSet.add(i.id);t(this.parentNode).selectAll("."+C).filter((e=>e.id===i.id)).style("display","block").append("div").text("Loading...").attr("class",S).style("opacity",.5).style("padding","5px")}const r=e.state.expandedTermIds.includes(s.id);const a=r?"tree_collapse":"tree_expand";e.app.dispatch({type:a,termId:s.id})};e.clickTerm=async t=>{if(e.opts.click_term2select_tvs){e.app.dispatch({type:"submenu_set",submenu:{term:t,type:"tvs"}});return}if(e.opts.click_term_wrapper){e.opts.click_term_wrapper(t);return}if(e.opts.submit_lst){const s=e.state.selectedTerms.findIndex((e=>e.name===t.name));if(s==-1){e.app.dispatch({type:"app_refresh",state:{selectedTerms:[...e.state.selectedTerms,t]}})}else{const t=e.state.selectedTerms.slice(0);t.splice(s,1);e.app.dispatch({type:"app_refresh",state:{selectedTerms:t}})}return}throw"missing term click callback"}}const N={header_mode:"search_only",activeCohort:0,tree:{usecase:{},expandedTermIds:[]},submenu:{},search:{isVisible:true},selectedTerms:[],termfilter:{filter:{type:"tvslst",in:true,join:"",lst:[]}}};class O{constructor(e){this.type="store";this.defaultState=N;s(this,e);this.prevGeneratedId=0}validateOpts(e){if(!e.state)throw".state{} missing";const t=e.state;if(t.vocab){if(t.vocab.dslabel){if(!t.vocab.genome)throw".state[.vocab].genome missing"}else if(t.vocab.genome){if(!t.vocab.dslabel)throw".state[.vocab].dslabel missing"}else{if(!Array.isArray(t.vocab.terms))throw"vocab.terms must be an array of objects"}}}validateState(){const e=this.state;if(e.tree.expandedTermIds.length==0){e.tree.expandedTermIds.push(_)}else{if(e.tree.expandedTermIds[0]!=_){e.tree.expandedTermIds.unshift(_)}}}async init(){this.state.termdbConfig=await this.app.vocabApi.getTermdbConfig();let e=h(this.state.termfilter.filter,"filterUiRoot");if(!e){this.state.termfilter.filter.tag="filterUiRoot";e=this.state.termfilter.filter}if(this.state.termdbConfig.selectCohort){let t=h(this.state.termfilter.filter,"cohortFilter");if(!t){t={tag:"cohortFilter",type:"tvs",tvs:{term:JSON.parse(JSON.stringify(this.state.termdbConfig.selectCohort.term)),values:this.state.activeCohort==-1?[]:this.state.termdbConfig.selectCohort.values[this.state.activeCohort].keys.map((e=>({key:e,label:e})))}};this.state.termfilter.filter={type:"tvslst",in:true,join:"and",lst:[t,e]}}else{const e=(e,t)=>e<t?-1:1;t.tvs.values.sort(((e,t)=>e.key<t.key?-1:1));const s=JSON.stringify(t.tvs.values.map((e=>e.key)).sort(e));const i=this.state.termdbConfig.selectCohort.values.findIndex((t=>s==JSON.stringify(t.keys.sort(e))));if(this.state.activeCohort!==-1&&this.state.activeCohort!==0&&i!==this.state.activeCohort){console.log("Warning: cohortFilter will override the state.activeCohort due to mismatch")}this.state.activeCohort=i}}else{this.state.activeCohort=-1;if(this.state.header_mode==="with_cohortHtmlSelect"){console.warn(`no termdbConfig.selectCohort to use for state.header_mode = 'with_cohortHtmlSelect'`);this.state.header_mode="search_only"}}}fromJson(e){const t=JSON.parse(e);return t}setId(e){e.$id=this.prevGeneratedId++;if(e.$lst){for(const t of e.$lst){this.setId(t)}}}}O.prototype.actions={app_refresh(e={}){this.state=this.copyMerge(this.toJson(this.state),e.state?e.state:{},this.replaceKeyVals)},cohort_set(e){this.state.activeCohort=e.activeCohort;const t=this.state.termdbConfig.selectCohort.values[e.activeCohort];const s=h(this.state.termfilter.filter,"cohortFilter");if(!s)throw`No item tagged with 'cohortFilter'`;s.tvs.values=t.keys.map((e=>({key:e,label:e})))},tree_expand(e){if(this.state.tree.expandedTermIds.includes(e.termId))return;this.state.tree.expandedTermIds.push(e.termId)},tree_collapse(e){const t=this.state.tree.expandedTermIds.indexOf(e.termId);if(t==-1)return;this.state.tree.expandedTermIds.splice(t,1)},filter_replace(e){const t=e.filter?e.filter:{type:"tvslst",join:"",in:1,lst:[]};if(!e.filter.tag){this.state.termfilter.filter=t}else{const s=h(this.state.termfilter.filter,e.filter.tag);if(!s)throw`cannot replace missing filter with tag '${e.filter.tag}'`;const i=u(this.state.termfilter.filter,s.$id);if(i==s){this.state.termfilter.filter=t}else{const e=i.lst.indexOf(s);i.lst[e]=t}}},submenu_set(e){const t=e.submenu&&e.submenu.term;if(!t){this.state.submenu={};this.state.tree.expandedTermIds=[_]}else{const s=[_];if(t.__ancestors){s.push(...t.__ancestors)}if(m(t).has("plot")){Object.assign(this.state.submenu,e.submenu)}else{s.push(t.id);delete this.state.submenu.term}this.state.tree.expandedTermIds=s}}};const E=i(O);class z{constructor(e){this.type="submenu";this.dom={holder:e.holder};R(this)}reactsTo(e){if(e.type.startsWith("submenu_"))return true;if(e.type=="app_refresh")return true}getState(e){return{type:e.submenu.type,term:e.submenu.term,termfilter:e.termfilter}}main(){if(!this.state.term){this.dom.holder.style("display","none");return}if(this.state.type=="tvs")this.showTvsMenu(this.state.term);else throw`unsupported submenu.type='${this.state.type}'`}}const P=e(z);function R(e){e.showTvsMenu=function(t){e.dom.holder.selectAll("*").remove();e.dom.holder.style("display","block").append("div").style("margin","20px").append("span").html("&laquo; Back to variable selection").attr("class","sja_clbtext").on("click",(()=>e.app.dispatch({type:"submenu_set",submenu:{}})));f({term:t,filter:e.state.termfilter.filter,holder:e.dom.holder.append("div"),vocabApi:e.app.vocabApi,debug:e.app.debug,getCategoriesArguments:e.app.opts.getCategoriesArguments,callback:e.app.opts.tree.click_term2select_tvs})}}class J{constructor(e){this.type="search";this.customEvents=["postSearch"];q(this);G(this);this.dom={holder:e.holder};this.isVisible="isVisible"in e?e.isVisible:true}async init(e){this.initUI(this.getState(e))}reactsTo(e){if(e.type=="app_refresh")return true;const t=e.type.split("_")[0];return["search","cohort","submenu"].includes(t)}getState(e){return{isVisible:!e.submenu.term&&this.isVisible,cohortStr:e.activeCohort==-1||!e.termdbConfig.selectCohort?"":e.termdbConfig.selectCohort.values[e.activeCohort].keys.slice().sort().join(","),allowedTermTypes:e.termdbConfig.allowedTermTypes||[],expandedTermIds:e.tree.expandedTermIds,selectedTerms:e.selectedTerms,usecase:e.tree.usecase,search:e.search,isGeneSetTermdb:e.termdbConfig.isGeneSetTermdb}}async main(){this.dom.holder.style("display",this.state.isVisible?"block":"none");this.renderSelectedNonDictTerms()}async doSearch(e,t){if(!e){this.clear();this.bus.emit("postSearch",[]);return}const s=await this.app.vocabApi.findTerm(e,this.state.cohortStr,this.state.usecase,t);if(!s.lst||s.lst.length==0){this.noResult()}else{this.showTerms(s)}this.bus.emit("postSearch",s)}}const $=e(J);function q(e){e.initUI=t=>{e.dom.holder.style("display",e.search&&e.search.isVisible==false?"none":"block");e.dom.input=e.dom.holder.style("text-align","left").append("input").attr("type","search").attr("class","tree_search").attr("placeholder","Search"+e.getPrompt(t)).style("width","220px").style("margin","10px").style("display","block").on("input",r.debounce(e.onInput,300)).on("keyup",e.onKeyup);e.dom.input.node().focus();e.dom.resultDiv=(e.opts.resultsHolder||e.dom.holder).append("div").style("display","none").style("grid-template-columns","auto auto");const s=e.dom.resultDiv.append("div");const i=e.dom.resultDiv.append("div");e.dom.resultDiv_genes=s.append("div").style("border-left","solid 1px rgb(133,182,225)").style("margin","0px 0px 10px 10px").style("padding-left","5px");e.dom.resultDiv_terms=i.append("div").style("border-left",e.opts.resultsHolder?"":"solid 1px rgb(133,182,225)").style("margin","0px 0px 10px 10px").style("padding-left","5px");e.dom.nonDictDiv=e.dom.holder.append("div").style("margin","0px 0px 10px 10px").style("display","none");e.dom.nonDictDiv.append("div").style("font-weight",600).html("Selected genes");e.dom.selectedNonDictDiv=e.dom.nonDictDiv.append("div")};e.getPrompt=e=>{const t=e.allowedTermTypes.includes("geneVariant")&&m({type:"geneVariant"},e.usecase).has("plot");if(t)return" variables or genes";if(e.isGeneSetTermdb)return" gene sets";return" variables"};e.noResult=()=>{e.clear();e.dom.resultDiv.style("display","inline-grid");e.dom.resultDiv_terms.append("div").style("padding","3px 3px 3px 0px").style("opacity",.5).text("No match"+(e.app.vocabApi.termdbConfig?.queries?.snvindel?.allowSNPs?". Press ENTER to search SNP":""))};e.showTerms=t=>{if(e.opts.disable_terms){t.lst.forEach((t=>{if(t.disabled)e.opts.disable_terms.push(t.id)}))}e.clear();e.dom.resultDiv.style("display","inline-grid");const s=[],i=[];for(const e of t.lst){if(e.type=="geneVariant"){s.push(e)}else{i.push(e)}}if(s.length){e.dom.resultDiv_genes.append("table").selectAll().data(s).enter().append("tr").each(e.showTerm)}if(i.length){e.dom.resultDiv_terms.append("table").selectAll().data(i).enter().append("tr").each(e.showTerm)}};e.showTerm=function(s){const i=t(this);const r=i.append("td").text(s.name);const a=m(s,e.state.usecase);if((e.opts.click_term||e.app.opts?.tree?.click_term_wrapper)&&a.has("plot")){if("id"in s&&e.opts.disable_terms?.includes(s.id)){r.attr("class","sja_tree_click_term_disabled").style("display","block").style("padding","5px 8px").style("margin","1px 0px").style("opacity",.4)}else{r.attr("class","ts_pill sja_filter_tag_btn sja_tree_click_term").style("display","block").style("color","black").style("padding","5px 8px").style("border-radius","6px").style("background-color",s.type=="geneVariant"?"rgba(251,171,96,0.5)":"#cfe2f3").style("margin","1px 0px").style("cursor","default").on("click",(()=>{if(e.opts.click_term){e.opts.click_term(s)}else{e.app.opts.tree.click_term_wrapper(s)}e.clear();e.dom.input.property("value","")}))}if(s.samplecount!==undefined){i.append("td").append("div").style("font-size",".8em").style("display","inline-block").style("margin-left","5px").style("color",s.samplecount?"#777":"#ddd").text("n="+s.samplecount)}}else{r.attr("class","sja_menuoption").on("click",(()=>{e.clear();e.dom.input.property("value","");const t=[_];if(s.type=="geneVariant"&&e.opts.handleGeneVariant){e.opts.handleGeneVariant(s)}else if(y.has(s.type)){e.app.dispatch({type:"app_refresh",state:{selectedTerms:[...e.state.selectedTerms,s]}})}else{if(s.__ancestors){t.push(...s.__ancestors)}if(!e.app.vocabApi.graphable(s))t.push(s.id);e.app.dispatch({type:"app_refresh",state:{tree:{expandedTermIds:t}}})}}))}i.append("td").text(s.type=="geneVariant"?"gene variant":(s.__ancestorNames||[]).join(" > ")).style("opacity",.5).style("font-size",".7em")};e.clear=()=>{e.dom.resultDiv_genes.selectAll("*").remove();e.dom.resultDiv_terms.selectAll("*").remove();e.dom.resultDiv.style("display","none")};e.renderSelectedNonDictTerms=function(){const t=e.state.selectedTerms.filter((e=>y.has(e.type)));e.dom.nonDictDiv.style("display",t.length?"":"none");const s=e.dom.selectedNonDictDiv.selectAll("div").data(t,(e=>e.name));s.exit().remove();s.enter().append("div").style("display","inline-block").style("margin","1px").style("padding","5px 8px").style("background-color","rgba(255, 194, 10,0.5)").style("border-radius","6px").html((e=>e.name))}}function G(e){e.onKeyup=t=>{if(!a(t))return;if(!e.app.vocabApi.termdbConfig?.queries?.snvindel?.allowSNPs)return;e.onInput(t,"snp")};e.onInput=async(t,s)=>{const i=e.dom.input.property("value");try{await e.doSearch(i,s)}catch(t){e.clear();e.dom.resultDiv.style("display","inline-grid");o(e.dom.resultDiv_terms,"Error: "+(t.message||t));if(t.stack)console.log(t.stack)}}}class W{constructor(e){this.type="app";if(!e.holder)t("body").append("div");const s=e.holder.append("div").style("display",e.tree?.submit_lst?"":"none").style("text-align","center").style("margin","10px 5px");const i=s.append("button").property("disabled",true).text(this.noSelectionPrompt).on("click",(()=>this.opts.tree?.submit_lst(this.state.selectedTerms)));const r=e.holder.append("div");this.dom={holder:e.holder,treeDiv:e.holder.append("div"),customTermDiv:e.holder.append("div").style("margin","10px"),submitDiv:s,submitBtn:i,topbar:r,searchDiv:r.append("div").style("display","inline-block"),filterDiv:r.append("div").style("display","none"),errdiv:e.holder.append("div"),tip:new n({padding:"5px"})}}validateOpts(e){if(e.vocabApi);else if(e.state&&e.state.vocab){if(typeof e.state.vocab!="object")throw"opts.state.vocab{} is not an object"}else if(e.state&&e.state.genome){const t=e.state;if(!t.vocab)t.vocab={};t.vocab.genome=t.genome;delete t.genome;if(t.dslabel){t.vocab.dslabel=t.dslabel;delete t.dslabel}}else{throw"neither state.vocab{} or opts.vocabApi provided"}if(e.tree){if(e.tree.disable_terms&&!e.tree.click_term&&!e.tree.click_term2select_tvs&&(!e.barchart||!e.barchart.bar_click_override)){throw`opts.tree.disable_terms is used only when opts.tree.click_term, opts.tree.click_term2select_tvs, or opts.barchart.bar_click_override is set`}if(!e.search)e.search={};if(e.tree.click_term2select_tvs){e.search.click_term=e=>this.api.dispatch({type:"submenu_set",submenu:{term:e,type:"tvs"}})}if(e.tree.click_term){e.tree.click_term_wrapper=async t=>{if(this.state.termdbConfig.termMatch2geneSet){const e=await d("termdb",{body:{genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,genesetByTermId:t.id}});t._geneset=e}e.tree.click_term(t)}}if(e.tree.disable_terms)e.search.disable_terms=e.tree.disable_terms}return e}async preApiFreeze(e){try{if(this.opts.vocabApi){e.vocabApi=this.opts.vocabApi}else{const t={vocab:this.opts.state.vocab||{genome:this.opts.state.genome,dslabel:this.opts.state.dslabel}};e.vocabApi=await b({app:this.api,state:t,fetchOpts:this.opts.fetchOpts})}e.appInit=F}catch(e){console.log(e);throw e}}async init(){try{this.store=await E({app:this.api,state:this.opts.state});this.state=await this.store.copyState();await this.setComponents();await this.api.dispatch()}catch(e){this.printError(e)}}async setComponents(){try{const e=this.state.nav?.header_mode;const t={search:$({app:this.api,holder:this.dom.searchDiv,isVisible:e!=="hide_search"}),tree:j({app:this.api,holder:this.dom.treeDiv,headerDiv:this.dom.headerDiv,expandAll:e=="hide_search"})};if(this.opts.tree&&this.opts.tree.click_term2select_tvs){t.submenu=P({app:this.api,holder:this.dom.holder.append("div").style("display","none")})}this.components=await c(t)}catch(e){throw e}}async main(){this.api.vocabApi.main();const e=this.state.selectedTerms.length;this.dom.submitBtn.property("disabled",!e).text(!e?"Search or click term(s)":`Submit ${e} term${e>1?"s":""}`);await this.mayShowCustomTerms()}printError(e){o(this.dom.errdiv,"Error: "+(e.message||e));if(e.stack)console.log(e.stack)}async mayShowCustomTerms(){const e=await this.api.vocabApi.getCustomTerms();if(!Array.isArray(e)||e.length==0)return this.dom.customTermDiv.style("display","none");const t=[];for(const s of e){const e=m(s.term,this.state.tree.usecase);if(e.has("plot"))t.push(s)}if(t.length==0)return this.dom.customTermDiv.style("display","none");this.dom.customTermDiv.selectAll("*").remove();this.dom.customTermDiv.append("div").text("CUSTOM VARIABLES").style("font-size",".7em");for(const e of t){this.dom.customTermDiv.append("div").style("margin-bottom","3px").append("div").text(e.term.name).attr("class","sja_filter_tag_btn").style("padding","3px 6px").style("border-radius","6px").on("click",(()=>{if(!this.opts.tree)return;if(this.opts.tree.click_term){this.opts.tree.click_term(e);return}if(this.opts.tree.click_term2select_tvs){this.api.dispatch({type:"submenu_set",submenu:{term:e.term,type:"tvs"}});return}}))}}}const F=l(W);export{F as appInit};