@sjcrh/proteinpaint-client 2.42.0 → 2.42.1-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 (182) hide show
  1. package/dist/{2dmaf-4c8115cb.js → 2dmaf-7f12f347.js} +1 -1
  2. package/dist/{DEanalysis-ae8b793e.js → DEanalysis-4e97eae7.js} +1 -1
  3. package/dist/{Disco-4ead6c6f.js → Disco-2910f321.js} +1 -1
  4. package/dist/{Disco.UI-a765390e.js → Disco.UI-266c3c98.js} +1 -1
  5. package/dist/{DragControls-03718ca8.js → DragControls-934cfddb.js} +1 -1
  6. package/dist/{OrbitControls-0a1bcd3b.js → OrbitControls-379215f5.js} +1 -1
  7. package/dist/{app-db79376c.js → app-53b444fe.js} +1 -1
  8. package/dist/{app-64537b0c.js → app-9ef9a482.js} +1 -1
  9. package/dist/{app-f70d9a0b.js → app-f73edb78.js} +1 -1
  10. package/dist/app.js +1 -1
  11. package/dist/{barchart-a4a6b4b4.js → barchart-5755e4b5.js} +1 -1
  12. package/dist/{barchart.events-3fd64094.js → barchart.events-cb8547bb.js} +1 -1
  13. package/dist/{bars.renderer-7c9358aa.js → bars.renderer-ffddf5f5.js} +1 -1
  14. package/dist/{block-ec15b4b6.js → block-06e306e9.js} +1 -1
  15. package/dist/{block.ds.gmcustomdata-4944ece7.js → block.ds.gmcustomdata-a0f1fd3e.js} +1 -1
  16. package/dist/block.lazyload-e9a6e4fc.js +1 -0
  17. package/dist/{block.legend-ebe13fbd.js → block.legend-ae9c9047.js} +1 -1
  18. package/dist/{block.mds-52af63e1.js → block.mds-125e263c.js} +1 -1
  19. package/dist/{block.mds.cnv-a40ea2e4.js → block.mds.cnv-80691b84.js} +1 -1
  20. package/dist/{block.mds.expressionrank-7357fa79.js → block.mds.expressionrank-8a4c69bb.js} +1 -1
  21. package/dist/{block.mds.expressionstat-4c3dcb37.js → block.mds.expressionstat-7ac00a72.js} +1 -1
  22. package/dist/{block.mds.geneboxplot-ba99239a.js → block.mds.geneboxplot-ec043226.js} +1 -1
  23. package/dist/{block.mds.junction-6b881504.js → block.mds.junction-5d744e19.js} +1 -1
  24. package/dist/{block.mds.svcnv-5bd2e65b.js → block.mds.svcnv-8aec47ec.js} +1 -1
  25. package/dist/{block.mds.svcnv.share-ebe307d2.js → block.mds.svcnv.share-eb86d7b0.js} +1 -1
  26. package/dist/{block.mds2-a039e999.js → block.mds2-08b79c5e.js} +1 -1
  27. package/dist/{block.svg-742bcd6f.js → block.svg-ca8e74f1.js} +1 -1
  28. package/dist/{block.tk.aicheck-c16f7c33.js → block.tk.aicheck-8c8c74ca.js} +1 -1
  29. package/dist/{block.tk.ase-5bd73577.js → block.tk.ase-27f2e649.js} +1 -1
  30. package/dist/{block.tk.bam-f39283bf.js → block.tk.bam-5d0cc18f.js} +1 -1
  31. package/dist/{block.tk.bam.gdc-66964f1c.js → block.tk.bam.gdc-318db418.js} +1 -1
  32. package/dist/{block.tk.bedgraphdot-d05f27a0.js → block.tk.bedgraphdot-1b5d99db.js} +1 -1
  33. package/dist/{block.tk.bigwig.ui-964986f8.js → block.tk.bigwig.ui-bc0afbf9.js} +1 -1
  34. package/dist/{block.tk.hicstraw-972dd3d4.js → block.tk.hicstraw-64610b08.js} +1 -1
  35. package/dist/{block.tk.junction-4e33561e.js → block.tk.junction-0febb7c5.js} +1 -1
  36. package/dist/{block.tk.junction.textmatrixui-e9fe9446.js → block.tk.junction.textmatrixui-11649433.js} +1 -1
  37. package/dist/{block.tk.ld-880fe55f.js → block.tk.ld-2449943d.js} +1 -1
  38. package/dist/{block.tk.menu-16e5a387.js → block.tk.menu-f4e2c9a6.js} +1 -1
  39. package/dist/{block.tk.pgv-daf6e812.js → block.tk.pgv-ac78e412.js} +1 -1
  40. package/dist/{boxplot-28751534.js → boxplot-cf99d543.js} +1 -1
  41. package/dist/{brush-bc06febc.js → brush-33697636.js} +1 -1
  42. package/dist/{categorical-c86731fd.js → categorical-024a02d0.js} +1 -1
  43. package/dist/{condition-59895ac1.js → condition-4c5195a9.js} +1 -1
  44. package/dist/{controls-cd2ff09c.js → controls-93c1b3a5.js} +1 -1
  45. package/dist/{controls.btns-86a413d5.js → controls.btns-af5280bd.js} +1 -1
  46. package/dist/{controls.config-ae99bcd1.js → controls.config-d936ea41.js} +1 -1
  47. package/dist/{controls.divide-8f26abff.js → controls.divide-e988fa36.js} +1 -1
  48. package/dist/{controls.overlay-a72d72e4.js → controls.overlay-9bfc642f.js} +1 -1
  49. package/dist/{controls.term1-3c9e55b8.js → controls.term1-62150931.js} +1 -1
  50. package/dist/{cuminc-e7326248.js → cuminc-9c7ff331.js} +1 -1
  51. package/dist/{dataDownload-f3cdbc7c.js → dataDownload-1f61a3fd.js} +1 -1
  52. package/dist/{databrowser.ui-52855244.js → databrowser.ui-0803623f.js} +1 -1
  53. package/dist/{density-33ec5f83.js → density-4ca7f14f.js} +1 -1
  54. package/dist/{dictionary-578c63d9.js → dictionary-943a4cd2.js} +1 -1
  55. package/dist/{drag-e2fbde14.js → drag-19604a2e.js} +1 -1
  56. package/dist/{e2pca-fa8ce887.js → e2pca-e18c801f.js} +1 -1
  57. package/dist/{ep-b51b82d5.js → ep-708f0514.js} +1 -1
  58. package/dist/{filter-5a5a1166.js → filter-6b0bd66e.js} +1 -1
  59. package/dist/{fusion.parse-d20a9d3d.js → fusion.parse-206fa8af.js} +1 -1
  60. package/dist/{gdc.maf-ced4bc13.js → gdc.maf-84509ef3.js} +1 -1
  61. package/dist/{gdc.singleCell-1fc3a5b9.js → gdc.singleCell-350d7e63.js} +1 -1
  62. package/dist/{geneExpression-0d0e9692.js → geneExpression-ef1eda3f.js} +1 -1
  63. package/dist/{geneSearch4GDCmds3-b3a65ff2.js → geneSearch4GDCmds3-e9196a30.js} +1 -1
  64. package/dist/{geneVariant-1100ab96.js → geneVariant-4b5d3728.js} +1 -1
  65. package/dist/genefusion.ui-31ff953e.js +1 -0
  66. package/dist/{geneset-b37a8d83.js → geneset-48feba0c.js} +1 -1
  67. package/dist/{genesetEdit-15cec871.js → genesetEdit-34f2ee5d.js} +1 -1
  68. package/dist/{genomeBrowser-10004899.js → genomeBrowser-f175f471.js} +1 -1
  69. package/dist/{genomeBrowser.controls-2d794ff1.js → genomeBrowser.controls-674775c6.js} +1 -1
  70. package/dist/{groupsetting-eaf40465.js → groupsetting-a58e1f5a.js} +1 -1
  71. package/dist/{hic.straw-1ca9ddd0.js → hic.straw-3143889c.js} +1 -1
  72. package/dist/{hierCluster-6e93c3b2.js → hierCluster-130e5722.js} +1 -1
  73. package/dist/{hierCluster.config-9b8fa78e.js → hierCluster.config-d4fdfeac.js} +1 -1
  74. package/dist/{hierCluster.interactivity-e379aa01.js → hierCluster.interactivity-4b1534bc.js} +1 -1
  75. package/dist/{hierCluster.renderers-7b35f0cc.js → hierCluster.renderers-cd618c97.js} +1 -1
  76. package/dist/{html.legend-48cf5c03.js → html.legend-f44f18ab.js} +1 -1
  77. package/dist/{lasso-afa6b87e.js → lasso-22efae36.js} +1 -1
  78. package/dist/launch.adhoc-7639eb4a.js +1 -0
  79. package/dist/{launchGdcHierCluster-ab790040.js → launchGdcHierCluster-001bc76e.js} +1 -1
  80. package/dist/{launchGdcMatrix-48c56699.js → launchGdcMatrix-6c906351.js} +1 -1
  81. package/dist/{legacyDataset-21fdc0fe.js → legacyDataset-661691af.js} +1 -1
  82. package/dist/{log-9e964794.js → log-848ca156.js} +1 -1
  83. package/dist/{maftimeline-fc71d7a0.js → maftimeline-8b2d8513.js} +1 -1
  84. package/dist/{matrix-d644b099.js → matrix-af727a11.js} +1 -1
  85. package/dist/{matrix.cells-5db8ba9e.js → matrix.cells-7ea665f3.js} +1 -1
  86. package/dist/{matrix.cluster-88a2266e.js → matrix.cluster-33321b79.js} +1 -1
  87. package/dist/{matrix.config-85132ec9.js → matrix.config-d8efc6dc.js} +1 -1
  88. package/dist/{matrix.controls-4933c41c.js → matrix.controls-b2dc0e5b.js} +1 -1
  89. package/dist/{matrix.data-b798eb7d.js → matrix.data-7feb7104.js} +1 -1
  90. package/dist/{matrix.dom-6971ecb1.js → matrix.dom-7394bd2c.js} +1 -1
  91. package/dist/{matrix.interactivity-380a57f9.js → matrix.interactivity-ff7ed88a.js} +1 -1
  92. package/dist/{matrix.layout-3165a88a.js → matrix.layout-168399d4.js} +1 -1
  93. package/dist/{matrix.legend-f0ab9a34.js → matrix.legend-10a21caa.js} +1 -1
  94. package/dist/{matrix.renderers-48826412.js → matrix.renderers-3a992e66.js} +1 -1
  95. package/dist/{matrix.serieses-610f9bc4.js → matrix.serieses-43f86542.js} +1 -1
  96. package/dist/{mavb-54aeff14.js → mavb-dc006bd3.js} +1 -1
  97. package/dist/{mds.fimo-fa2b1d1a.js → mds.fimo-fcc96802.js} +1 -1
  98. package/dist/{mds.samplescatterplot-669b4e1d.js → mds.samplescatterplot-c8732bae.js} +1 -1
  99. package/dist/{mds.survivalplot-055a1274.js → mds.survivalplot-4e72eb4b.js} +1 -1
  100. package/dist/{mdsjsonform-8d72a884.js → mdsjsonform-cd7cbed1.js} +1 -1
  101. package/dist/{nodrag-094c4b10.js → nodrag-39389c59.js} +1 -1
  102. package/dist/{numeric-939729b0.js → numeric-28b1370d.js} +1 -1
  103. package/dist/{numeric.binary-d1ada20b.js → numeric.binary-de25c5cb.js} +1 -1
  104. package/dist/{numeric.continuous-cf4fb4c0.js → numeric.continuous-78ae5f51.js} +1 -1
  105. package/dist/{numeric.discrete-ea17f823.js → numeric.discrete-7976336c.js} +1 -1
  106. package/dist/{numeric.spline-2d40b041.js → numeric.spline-1adcbe86.js} +1 -1
  107. package/dist/{numeric.toggle-7e1ae903.js → numeric.toggle-ba85b972.js} +1 -1
  108. package/dist/{plot.2dvaf-12d6ace7.js → plot.2dvaf-d8eda179.js} +1 -1
  109. package/dist/plot.app-cf29de59.js +1 -0
  110. package/dist/{plot.barplot-ab82cad5.js → plot.barplot-469de952.js} +1 -1
  111. package/dist/{plot.boxplot-d4984beb.js → plot.boxplot-29ed0bcd.js} +1 -1
  112. package/dist/{plot.disco-7efd2855.js → plot.disco-15695284.js} +1 -1
  113. package/dist/{plot.ssgq-e41ca8ac.js → plot.ssgq-ab818820.js} +1 -1
  114. package/dist/{plot.vaf2cov-0cf0bfb0.js → plot.vaf2cov-646c89ff.js} +1 -1
  115. package/dist/{polar-86a9ecb8.js → polar-57ab248e.js} +1 -1
  116. package/dist/{profileBarchart-a41a1fd8.js → profileBarchart-5eda57dd.js} +1 -1
  117. package/dist/{profileHome-1ada0bb1.js → profileHome-98d3bd09.js} +1 -1
  118. package/dist/{profilePlot-69af5e30.js → profilePlot-c1bc4e3f.js} +1 -1
  119. package/dist/{profilePolar-7446e230.js → profilePolar-d6a3ef51.js} +1 -1
  120. package/dist/{profileRadar-d23d8ebe.js → profileRadar-61cd7e72.js} +1 -1
  121. package/dist/{profileRadarFacility-9f9a324e.js → profileRadarFacility-fd292b0d.js} +1 -1
  122. package/dist/{recover-791d56f8.js → recover-97602f64.js} +1 -1
  123. package/dist/{regression.inputs-ba7b7342.js → regression.inputs-87698b93.js} +1 -1
  124. package/dist/{regression.inputs.values.table-3f6f7f0f.js → regression.inputs.values.table-be00c818.js} +1 -1
  125. package/dist/{regression.results-9bd02fe0.js → regression.results-d67d5723.js} +1 -1
  126. package/dist/{renderPvalueTable-f34371aa.js → renderPvalueTable-8ee523f4.js} +1 -1
  127. package/dist/{sampleScatter-ef4e3347.js → sampleScatter-dc8bd1d4.js} +1 -1
  128. package/dist/sampleScatter.interactivity-6b31c51d.js +1 -0
  129. package/dist/{sampleScatter.rendererThree-b0ddac07.js → sampleScatter.rendererThree-df642763.js} +2 -2
  130. package/dist/{sampleView-836462bb.js → sampleView-0d819313.js} +1 -1
  131. package/dist/{samplelst-6512a752.js → samplelst-e4224495.js} +1 -1
  132. package/dist/{samplematrix-8583e240.js → samplematrix-d77014f0.js} +1 -1
  133. package/dist/{scatter-a24646d2.js → scatter-df455b44.js} +1 -1
  134. package/dist/{selectGenomeWithTklst-c0822ac4.js → selectGenomeWithTklst-f927c08a.js} +1 -1
  135. package/dist/singleCellPlot-f4f9f8ce.js +1 -0
  136. package/dist/{singlecell-fc57d3bd.js → singlecell-d21858f6.js} +1 -1
  137. package/dist/{snplocus-502738fa.js → snplocus-cdb05467.js} +1 -1
  138. package/dist/{snplst-1b5cd5d8.js → snplst-8027603b.js} +1 -1
  139. package/dist/{spliceevent.a53ss.diagram-d6a9ec18.js → spliceevent.a53ss.diagram-305210e8.js} +1 -1
  140. package/dist/{spliceevent.exonskip.diagram-122b34c8.js → spliceevent.exonskip.diagram-b818e745.js} +1 -1
  141. package/dist/spliceevent.exonskip.getdefault-b539bbf8.js +1 -0
  142. package/dist/{spliceevent.noeventdiagram-24239df6.js → spliceevent.noeventdiagram-b8520d70.js} +1 -1
  143. package/dist/{spliceevent.phrase-3f069dbd.js → spliceevent.phrase-9e487144.js} +1 -1
  144. package/dist/{stattable-f81097a3.js → stattable-706eb093.js} +1 -1
  145. package/dist/{style.gdc-58cdad5e.js → style.gdc-0f9b5225.js} +1 -1
  146. package/dist/{summary-af438607.js → summary-e42dbeea.js} +1 -1
  147. package/dist/{sunburst-562d787b.js → sunburst-23a46601.js} +1 -1
  148. package/dist/survival-e1f95639.js +1 -0
  149. package/dist/{survival-d8c8c5b5.js → survival-fa638d4f.js} +1 -1
  150. package/dist/{svg.download-89c31ee5.js → svg.download-60935a3f.js} +1 -1
  151. package/dist/{svg.legend-5ce6961b.js → svg.legend-404a03f8.js} +1 -1
  152. package/dist/{svgraph-c326dadb.js → svgraph-22fb937c.js} +1 -1
  153. package/dist/{svmr-7de419fb.js → svmr-33a9543a.js} +1 -1
  154. package/dist/{table-141e31d7.js → table-6354b788.js} +1 -1
  155. package/dist/{table-2310e41b.js → table-dba817a9.js} +1 -1
  156. package/dist/{termInfo-3ae67507.js → termInfo-fdb502e7.js} +1 -1
  157. package/dist/{termsetting-8476b5ab.js → termsetting-720557a3.js} +1 -1
  158. package/dist/{tk-fc2e6168.js → tk-fcd7514e.js} +1 -1
  159. package/dist/{tp.ui-a59142ec.js → tp.ui-ece56c46.js} +1 -1
  160. package/dist/{tvs.density-a177d69f.js → tvs.density-411c1792.js} +1 -1
  161. package/dist/{tvs.geneVariant-68b9ca25.js → tvs.geneVariant-a6e91f37.js} +1 -1
  162. package/dist/{tvs.numeric-5c6f5524.js → tvs.numeric-358c99a0.js} +1 -1
  163. package/dist/{tvs.samplelst-3ddd4435.js → tvs.samplelst-946d4a6c.js} +1 -1
  164. package/dist/{uiUtils-60f490b2.js → uiUtils-be9b8f1b.js} +1 -1
  165. package/dist/{variantBrowser-882cd310.js → variantBrowser-91d4eb10.js} +1 -1
  166. package/dist/{vcf-ee473671.js → vcf-d8c0a17a.js} +1 -1
  167. package/dist/{violin-f96e92c7.js → violin-84138ebc.js} +1 -1
  168. package/dist/{violin.interactivity-5a9e20f2.js → violin.interactivity-31eff8d9.js} +1 -1
  169. package/dist/{violin.renderer-687d2341.js → violin.renderer-3d0d8f17.js} +1 -1
  170. package/dist/{violinRenderer-e37d4065.js → violinRenderer-ee11b031.js} +1 -1
  171. package/dist/{viridis-98237589.js → viridis-98f22f29.js} +1 -1
  172. package/dist/{y-8e1e7dad.js → y-836a433e.js} +1 -1
  173. package/dist/{zoom-eade983c.js → zoom-f044afad.js} +1 -1
  174. package/package.json +1 -1
  175. package/dist/block.lazyload-b81d268c.js +0 -1
  176. package/dist/genefusion.ui-b1264dc8.js +0 -1
  177. package/dist/launch.adhoc-50d81ba2.js +0 -1
  178. package/dist/plot.app-72083fe7.js +0 -1
  179. package/dist/sampleScatter.interactivity-22035655.js +0 -1
  180. package/dist/singleCellPlot-7caa7fdd.js +0 -1
  181. package/dist/spliceevent.exonskip.getdefault-f1bf3d40.js +0 -1
  182. package/dist/survival-e500bc6e.js +0 -1
@@ -1 +1 @@
1
- import{w as newpane,O as dt2label,af as dtcnv,F as dtdel,G as dtcloss,H as dtnloss,I as dtitd,J as dtfusionrna,K as dtsv,L as dtsnvindel,E as mclass,$ as make_table_2col,g as appear,h as disappear,ag as may_findmatchingsnp,ah as snp_printhtml,B as fillbar,c as dofetch,ai as contigNameNoChr,o as sayerror,aj as coloroutframe,ak as colorinframe,d as dofetch2,t as genomic2gm,al as vcfcopymclass,am as ordinal,an as schemeCategory10,A as stratinput,z as stratify,S as rgb,X as textlensf,q as d3select,n as gmmode,l as linear,p as font,f as format,a as axisstyle,C as tkt,ao as morigin,x as rna2gmcoord,ap as aa2gmcoord,aq as duplicate,ar as gmmode$1,as as alleleInGenotypeStr,m as bplen,M as Menu}from"./app-f70d9a0b.js";import{v as vcfparsemeta,a as vcfparseline}from"./vcf-ee473671.js";import*as path from"path";import{p as partition}from"./partition-db811f6b.js";import{d as d3arc}from"./arc-3d6751aa.js";import{b as axisLeft}from"./axis-6cb4f314.js";import{s as schemeCategory20}from"./legacy-d3-polyfill-bdb2d792.js";const separatorvp="__";function itemtable(t){const{mlst:e,tk:s,block:a}=t;if(!e||e.length==0)return;let o;if(t.pane){const s=newpane({x:t.x,y:t.y});s.header.html(mlst2headerhtml(e));o=s.body}else{o=t.holder}if(!o){console.error("no holder provided for showing table");return}const n=new Map;for(const t of e){if(!n.has(t.dt)){n.set(t.dt,[])}n.get(t.dt).push(t)}delete s.__singlevariant_table;for(const[t,e]of n){const r=o.append("div").style("margin","10px");if(n.size>1){r.append("p").text(dt2label[t]).style("color","#858585")}switch(t){case dtsnvindel:table_snvindel(e,r,s,a);break;case dtsv:case dtfusionrna:table_sv(e,r,s,a);break;case dtitd:table_itd(e,r,s,a.genome);break;case dtnloss:case dtcloss:table_truncation(e,r,s,a.genome);break;case dtdel:table_del(e,r,s,a.genome);break;case dtcnv:r.append("p").text("cnv not supported yet");break;default:r.append("p").text("unknown dt: "+t)}}handle_samplecart(e,o,s,a)}function mlst2headerhtml(t){if(t.length==1){const e=t[0];const s=mclass[e.class];if(e.dt==dtsnvindel){return'<span style="font-weight:bold;color:'+s.color+'">'+(e.mname?e.mname:e.pos?e.chr+":"+(e.pos+1):"")+'</span> <span style="font-size:80%">'+s.label+"</span>"}if(e.dt==dtsv||e.dt==dtfusionrna){const t=[];for(let s=0;s<e.pairlst.length;s++){if(s==0)t.push(e.pairlst[s].a.name?e.pairlst[s].a.name:e.pairlst[s].a.chr);t.push(e.pairlst[s].b.name?e.pairlst[s].b.name:e.pairlst[s].b.chr)}return t.join(" - ")+'&nbsp;&nbsp;<span style="font-size:80%">'+s.label+"</span>"}if(e.dt==dtnloss||e.dt==dtcloss||e.dt==dtitd||e.dt==dtdel||e.dt==dtcnv){return'<span style="font-size:80%">'+s.label+"</span>"}return"unknown dt "+e.dt}const e=new Set;for(const s of t){e.add(s.dt)}if(e.size==1){const s=[...e][0];return t.length+" "+dt2label[s]}return t.length+" mutations"}function table_snvindel(t,e,s,a){if(s.ds&&s.ds.id2vcf){if(t.length==1){const o=s.ds.id2vcf[t[0].vcfid];if(!o){e.append("p").text("No vcf config file (id: "+t[0].vcfid+")");return}vcfmdetail(t[0],o,e,s,a);return}for(const o of t){const t=s.ds.id2vcf[o.vcfid];if(!t){e.append("p").text("No vcf config file (id: "+o.vcfid+")");continue}const n=e.append("div").attr("class","sja_menuoption").on("click",(e=>{const n=newpane({x:e.clientX+100,y:Math.max(100,e.clientY-100)});vcfmdetail(o,t,n.body,s,a)}));if(o.mname){n.append("span").html(o.mname+'\t<span style="font-size:80%;color:#858585">'+mclass[o.class].label+"</span>")}else if(o.csq){n.append("span").html(o.csq[0]._mname+'\t<span style="font-size:80%;color:#858585">'+o.csq[0].Consequence+"</span>")}n.append("span").html("&nbsp;&nbsp;"+o.chr+":"+(o.pos+1)+' <span style="font-size:70%">REF</span> '+o.ref+' <span style="font-size:70%">ALT</span> '+o.alt)}return}const o=a.genome.hasSNP;const n={chr:null,bprange:[],holder:null,says:null};const r={set:new Map,butholder:null};for(const e of t){if(o&&e.chr&&e.pos){n.chr=e.chr;let t=true;for(const s of n.bprange){if(s.start<=e.pos&&s.stop>=e.pos){t=false;break}}if(t){n.bprange.push({start:e.pos,stop:e.pos+1})}}}if(!s.snvindelattr){runtimeattr_snvindel(s,t)}if(a.variantPageCall_snv){r.butholder=e.append("div").style("margin","10px")}if(t.length==1){const i=t[0];n.alleleLst=[i.ref,i.alt];if(a.variantPageCall_snv){if(i.chr!=undefined&&i.pos!=undefined&&i.ref!=undefined&&i.alt!=undefined){r.set.set(i.chr+separatorvp+i.pos+separatorvp+i.ref+separatorvp+i.alt,{mname:i.mname,class:i.class})}}const l=[];for(const t of s.snvindelattr){if(t.lst){const e=[];for(const s of t.lst){if(s.ismaf){const t=s.get(i);e.push({k:s.label,v:t?Number.isFinite(t.f)?'<span style="color:'+s.fill+'">'+(t.f*100).toFixed(0)+"% ("+t.v1+"/"+t.v2+")</span>":"n/a":""})}else{e.push({k:s.label,v:s.get(i)})}}if(e.length){l.push({k:t.label,kvlst:e})}}else if(t.ismaf){const e=t.get(i);l.push({k:t.label,v:e?Number.isFinite(e.f)?'<span style="color:'+t.fill+'">'+(e.f*100).toFixed(0)+"% ("+e.v1+"/"+e.v2+")</span>":"n/a":""})}else{let e=t.get(i);if(t.hover){const s=t.hover(i);if(s){e+=' <span style="color:#aaa;font-size:80%">'+s+"</span>"}}l.push({k:t.label,v:e})}}const c=make_table_2col(e,l);if(o){const t=c.append("tr");t.append("td").attr("colspan",2).style("color","#9e9e9e").text("dbSNP");n.says=t.append("td").text("loading...")}const f=e.append("div").style("margin-top","10px");if(s.eplst){for(const e of s.eplst){mayephl_butt(e,f,t)}}if(s.ds&&s.ds.snvindel_legend){f.append("button").text("Legend").on("click",(()=>{if(t.style("display")=="none"){appear(t)}else{disappear(t)}}));const t=f.append("div").style("display","none").style("margin","10px").style("width","400px").html(s.ds.snvindel_legend)}}else{if(a.variantPageCall_snv){for(const e of t){if(e.chr!=undefined&&e.pos!=undefined&&e.ref!=undefined&&e.alt!=undefined){r.set.set(e.chr+separatorvp+e.pos+separatorvp+e.ref+separatorvp+e.alt,{mname:e.mname,class:e.class})}}}const i=e.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","0px 7px 7px 0px").style("font-size","90%").style("color","black").style("background-color","white");table_sort(t,i,s.snvindelattr,s);const l=e.append("div").style("margin","10px 5px");let c,f,d;l.append("button").text("Table columns").on("click",(function(){if(c.style("display")=="block"){this.style.color="black";disappear(c)}else{this.style.color="red";appear(c)}}));if(o&&n.bprange.length){n.button=l.append("button").text("loading...").on("click",(function(){if(f.style("display")=="block"){this.style.color="black";disappear(f)}else{this.style.color="red";appear(f)}}))}if(s.eplst){for(const e of s.eplst){mayephl_butt(e,l,t)}}if(s.ds&&s.ds.snvindel_legend){l.append("button").text("Legend").on("click",(function(){if(d.style("display")=="block"){this.style.color="black";disappear(d)}else{this.style.color="red";appear(d)}}))}c=e.append("div").style("margin","10px").style("display","none");for(const e of s.snvindelattr){const a=Math.random();const o=c.append("input").attr("type","checkbox").attr("id",a);if(!e.hide)o.attr("checked",true);o.on("change",(()=>{e.hide=!o.node().checked;table_sort(t,i,s.snvindelattr,s)}));c.append("label").attr("for",a).text(e.label);c.append("br")}if(o){f=e.append("div").style("margin","10px").style("display","none");n.holder=f;n.says=f}if(s.ds&&s.ds.snvindel_legend){d=e.append("div").style("display","none").style("width","300px").html(s.ds.snvindel_legend)}}if(o&&n.bprange.length){may_findmatchingsnp(n.chr,n.bprange,a.genome,n.alleleLst).then((t=>{if(!t||t.length==0)throw{message:"no SNP"};n.says.text("");if(n.button){n.button.text(t.length+" SNP"+(t.length>1?"s":""))}for(const e of t){const t=n.says.append("div");snp_printhtml(e,t)}})).catch((t=>{n.says.text(t.message);if(n.button){n.button.attr("disabled",true)}if(t.stack)console.log(t.stack)}))}if(a.variantPageCall_snv){const t=[];for(const[e,s]of r.set){const a=e.split(separatorvp);t.push({chr:a[0],position:Number.parseInt(a[1])+1,refallele:a[2],altallele:a[3],class:s.class,aachange:s.mname})}if(t.length==1){const e=t[0];e.container=r.butholder;a.variantPageCall_snv(e)}else if(t.length>1){r.butholder.append("div").classed("sja_variantpagesnv",true).text("Variant Page").on("click",(e=>{const o=s.tktip.clear().showunder(e.target).d.append("table");for(const e of t){const t=o.append("tr");t.append("td").text(e.aachange);t.append("td").text(mclass[e.class].label).style("font-size",".7em").style("color",mclass[e.class].color);t.append("td").text(e.chr+":"+e.position+" "+e.refallele+">"+e.altallele).attr("font-size",".7em");e.container=t.append("td");a.variantPageCall_snv(e)}}))}}}function table_sort(t,e,s,a,o){e.selectAll("*").remove();let n=null;for(const t of s){if(t.lst){for(const e of t.lst){if(e.sort)n=e}}else if(t.sort)n=t}if(n){t.sort(((t,e)=>{const s=n.get(t);const a=n.get(e);if(n.ismaf){if(s==undefined){if(a==undefined)return 0;return 1}else{if(a==undefined)return-1;return n.descend?a.f-s.f:s.f-a.f}}if(s==undefined||s===""){if(a==undefined||a==="")return 0;return 1}if(a==undefined||a==="")return-1;if(typeof s=="string"){if(s<a)return n.descend?1:-1;if(s>a)return n.descend?-1:1}if(typeof s=="number")return n.descend?a-s:s-a;return 0}))}const r=e.append("tr");const i=e.append("tr");r.append("td").attr("rowspan",2);for(const n of s){if(n.hide)continue;if(n.lst){r.append("td").attr("colspan",n.lst.length).style("color","#aaa").style("border-bottom","solid 1px #ccc").style("text-align","center").html(n.label);for(const r of n.lst){i.append("td").attr("class","sja_clbtext").html(r.label+(r.sort?r.descend?" &#9660;":" &#9650;":"")).on("click",(()=>{if(r.sort){r.descend=!r.descend}for(const t of s){if(t.lst){for(const e of t.lst)e.sort=false}else{t.sort=false}}r.sort=true;table_sort(t,e,s,a,o)}))}}else{r.append("td").attr("rowspan",2).attr("class","sja_clbtext").html(n.label+(n.sort?n.descend?" &#9660;":" &#9650;":"")).on("click",(()=>{if(n.sort){n.descend=!n.descend}for(const t of s){if(t.lst){for(const e of t.lst)e.sort=false}else{t.sort=false}}n.sort=true;table_sort(t,e,s,a,o)}))}}const l=t.length>1e3?900:t.length;for(let n=0;n<l;n++){const r=t[n];const i=e.append("tr").attr("class","sja_tr");if(o){i.on("click",(()=>o(r)))}if(a.eplst){i.on("mouseover",((t,e)=>{for(const t of a.eplst)t.may_hl([r],true)})).on("mouseout",((t,e)=>{for(const t of a.eplst)t.may_hl([r],false)}))}i.append("td").style("font-size",".8em").text(n+1);for(const t of s){if(t.hide)continue;if(t.lst){for(const e of t.lst){const t=i.append("td");if(e.ismaf){const s=e.get(r);if(s&&typeof s=="object"){if(s.v2==0){t.text("0/0");t.attr("title","No coverage")}else{fillbar(t,s,e)}}}else{t.html(e.get(r))}}}else{const e=i.append("td");if(t.hover){const s=t.hover(r);if(s!=undefined){e.attr("title",s)}}if(t.tablecellwidth){e.style("width",t.tablecellwidth).style("word-break","break-all")}if(t.ismaf){const s=t.get(r);if(s){if(s.v2==0){e.text("0/0");e.attr("title","No coverage")}else{fillbar(e,s,t)}}}else{e.html(t.get(r))}}}}}function tinylab(t){return'<span style="font-size:70%;color:#858585">'+t+"</span>"}function vcfmdetail(t,e,s,a,o){if(!e){s.append("p").text("vcfobj config object missing");return}const n=s.append("div").style("margin-top","10px");n.append("span").text(t.type).style("padding-right","10px");n.append("span").text(t.chr+":"+(t.pos+1)).style("padding-right","10px");if(t.dt==dtsnvindel){n.append("span").style("padding-right","10px").html(tinylab("REF")+" "+t.ref+" "+tinylab("ALT")+" "+t.alt);if(o.variantPageCall_snv){const e={chr:t.chr,position:t.pos+1,refallele:t.ref,altallele:t.alt,container:n.append("span").style("padding-left","20px")};o.variantPageCall_snv(e)}if(a.button4variant){make_button4variant(n,t,a.button4variant)}if(a.url4variant){make_url4variant(n,t,a.url4variant)}}if(e.info&&e.info.CSQ&&e.info.CSQ.csqheader&&t.csq){vcfvepbutton(t.csq,n,a,e.info.CSQ.csqheader)}if(e.info&&e.info.ANN&&e.info.ANN.annheader&&t.ann){vcfannbutton(t.ann,n,a,e.info.ANN.annheader)}if(a.variant2img){variant2imgbutton(t,n,s.append("div"),a)}const r=s.append("div");if(mayshowgenotype2boxplot(t,a,r)){r.style("margin-top","10px")}else if(t.sampledata){const e=r.append("div");Promise.resolve().then((()=>{if(t.sampledata.length==0&&a.ds.vcfcohorttrack){e.text("Loading ...");return query_vcfcohorttrack(t,a,o).then((e=>{if(!e){return}t.sampledata=e.sampledata;return}))}return})).then((()=>{e.remove();if(t.sampledata.length==0){return}if(t.sampledata.length==1){singleSample2table(t,a,r);return}if(mayshowgermline2dvaf(t,a,r)){r.style("margin-top","10px")}else if(mayshowcovmafplot(t,a,r)){r.style("margin-top","10px")}else if(mayshowgenotype2boxplot(t,a,r)){r.style("margin-top","10px")}else{vcfsamplelistbutton(t,n,a)}})).catch((t=>{e.text(t)}))}if(e.infopipejoin){const a=[];if(t.altinfo){for(const s of e.infopipejoin){const e=t.altinfo[s.key];if(e){if(Array.isArray(e)){a.push(e)}else{a.push(e.split(/[,|]/))}}else{a.push([])}}}if(a.length){const t=s.append("div");for(let s=0;s<a[0].length;s++){const o=[];for(let t=0;t<e.infopipejoin.length;t++){const n=e.infopipejoin[t];o.push({k:n.label,v:n.values?n.values[a[t][s]]:a[t][s]})}make_table_2col(t,o).style("display","inline-block").style("border","solid 1px black").style("margin","20px")}}}may_info2singletable(t,s,a);may_info2table(t,s,a);const i={};const l={};if(a.vcfinfofilter){for(const t of a.vcfinfofilter.lst){if(t.categories){if(t.altalleleinfo){i[t.altalleleinfo.key]=t.categories}else if(t.locusinfo){l[t.locusinfo.key]=t.categories}}}}{const a=[];for(const s in t.altinfo){const o=Array.isArray(t.altinfo[s])?t.altinfo[s]:[t.altinfo[s]];let n;if(i[s]){n=o.map((t=>{const e=i[s][t];if(e){return'<span style="padding:1px 3px;background:'+e.color+";color:"+(e.textcolor||"black")+';">'+t+"</span>"}return t}))}else{n=o}a.push({k:s,v:n.join(", ")+(e.info&&e.info[s]?' <span style="font-size:70%;color:#858585">'+e.info[s].Description+"</span>":"")})}if(a.length){s.append("h3").text("Alternative allele:");make_table_2col(s,a)}}{const o=[];for(const s in t.info){if(a.info2table&&a.info2table[s]){continue}const n=Array.isArray(t.info[s])?t.info[s]:[t.info[s]];let r;if(l[s]){r=n.map((t=>{const e=l[s][t];if(e){return'<span style="padding:1px 3px;background:'+e.color+";color:"+(e.textcolor||"black")+';">'+t+"</span>"}return t}))}else{r=n}o.push({k:s,v:r.join(", ")+(e.info&&e.info[s]?' <span style="font-size:70%;color:#858585">'+e.info[s].Description+"</span>":"")})}if(o.length){s.append("h3").text("This locus:");make_table_2col(s,o)}}}function may_info2singletable(t,e,s){if(!s.info2singletable)return;for(const a in s.info2singletable){const o=s.info2singletable[a];const n=t.info[a];if(!n||!n[0])continue;const r=[];const i=n[0].split(o.col_separator);for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;r.push({k:o.fields[t].name,v:info2table_value(o,i,t)})}make_table_2col(e,r)}}function may_info2table(t,e,s){if(!s.info2table)return;for(const a in s.info2table){const o=s.info2table[a];const n=t.info[a];if(!n)continue;if(o.separate_tables){const t=JSON.parse(JSON.stringify(o.separate_tables));t.forEach((t=>t.rows=[]));for(const e of n){const s=e.split(o.col_separator);const a=new Map;for(let t=0;t<o.fields.length;t++){a.set(o.fields[t].name,s[t])}for(const e of t){if(e.groupers.reduce(((t,e)=>a.get(e.field)==e.value?t:false),true)){e.rows.push(a)}}}for(const s of t){if(s.rows.length==0)continue;e.append("h3").html(s.headhtml);const t=e.append("table").style("border-spacing","2px").style("border-collapse","separate").style("font-size","90%");const a=t.append("tr");for(const t of o.fields){if(t.hide)continue;a.append("td").text(t.name)}for(const e of s.rows){const s=t.append("tr").attr("class","sja_tr");const a=o.fields.map((t=>e.get(t.name)));for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;const e=s.append("td");e.html(info2table_value(o,a,t))}}}continue}const r=e.append("table").style("border-spacing","2px").style("border-collapse","separate").style("font-size","90%");const i=r.append("tr");for(const t of o.fields){if(t.hide)continue;i.append("td").text(t.name)}for(const t of n){const e=r.append("tr").attr("class","sja_tr");const s=t.split(o.col_separator);for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;const a=e.append("td");a.html(info2table_value(o,s,t))}}}}function info2table_value(icfg,lst,i){const field=icfg.fields[i];if(field.hide)return;let value=lst[i];if(value==undefined)return;if(field.eval){value=eval('"'+value+'"')}if(field.isurl)return"<a href="+value+" target=_blank>"+value+"</a>";if(field.appendUrl){if(field.separator){return value.split(field.separator).map((t=>"<a href="+field.appendUrl+t+" target=_blank>"+t+"</a>")).join(", ")}return"<a href="+field.appendUrl+value+" target=_blank>"+value+"</a>"}if(field.insert2url){return"<a href="+field.insert2url.left+value+field.insert2url.right+" target=_blank>"+value+"</a>"}if(field.ampersand2br)return value.replace(/&/g,"<br>");if(field.urlMatchLst){const t=value.toLowerCase();const e=t.split(field.urlMatchLst.separator)[field.urlMatchLst.idIndex];if(e){for(const s of field.urlMatchLst.types){if(t.indexOf(s.type)!=-1){if(s.appendUrl){return'<span style="font-size:.7em">'+s.type.toUpperCase()+"</span> <a href="+s.appendUrl+e+" target=_blank>"+e+"</a>"}}}}}return value}function mayephl_butt(t,e,s){let a=true;for(const e of s){if(e[t.p.sampletype]in t.sampletype2value){a=false;break}}if(a){return}let o=false;e.append("button").text("Highlight in "+t.p.name).on("click",(()=>{o=!o;t.may_hl(s,o)}))}function table_sv(t,e,s,a){const o=e.append("div").style("margin-bottom","10px");tosvgraph(t[0].pairlst,a,o);if(!s.svattr){runtimeattr_sv(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.svattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const n=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const r=n.append("tr");for(const t of s.svattr){r.append("td").text(t.label)}table_sort(t,n,s.svattr,s,(t=>{o.selectAll("*").remove();tosvgraph(t.pairlst,a,o)}));if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function tosvgraph(t,e,s){for(const e of t){if(e.a.isoform){e.a.gm={isoform:e.a.isoform}}if(e.b.isoform){e.b.gm={isoform:e.b.isoform}}}const a={jwt:e.jwt,hostURL:e.hostURL,pairlst:t,genome:e.genome,holder:s};import("./svgraph-c326dadb.js").then((t=>{t.default(a)}))}function table_itd(t,e,s,a){if(!s.itdattr){runtimeattr_itd(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.itdattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.itdattr){n.append("td").text(t.label)}table_sort(t,o,s.itdattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function table_del(t,e,s,a){if(!s.delattr){runtimeattr_del(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.delattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.delattr){n.append("td").text(t.label)}table_sort(t,o,s.delattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function table_truncation(t,e,s,a){if(!s.truncattr){runtimeattr_trunc(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.truncattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.truncattr){n.append("td").text(t.label)}table_sort(t,o,s.truncattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function runtimeattr_snvindel(t,e){t.snvindelattr=[];if(t.ds&&t.ds.snvindel_attributes){for(const e of t.ds.snvindel_attributes){t.snvindelattr.push(e)}}else{const s=new Set(["pos","aapos","rnapos","dt","vcfid","isrim1","isrim2","alt","__x"]);if(t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k)}}const a=[];for(const t in e[0]){if(s.has(t))continue;switch(t){case"chr":a.push({label:"Genome pos.",get:t=>t.chr+":"+(t.pos+1)});break;case"class":a.push({label:"Class",get:t=>mclass[t.class].label});break;case"mname":a.push({label:"Mutation",get:t=>t.mname});break;case"ref":a.push({label:"Allele",lst:[{label:"Ref",get:t=>t.ref},{label:"Alt",get:t=>t.alt}]});break;case"pmid":a.push(caller_pmid());break;case"maf_tumor":a.push({get:t=>t.maf_tumor,ismaf:true,width:40,height:12,label:"Tumor MAF",fill:"#ff4d4d",fillbg:"#ffcccc"});break;case"maf_normal":a.push({get:t=>t.maf_normal,ismaf:true,width:40,height:12,label:"Germline MAF",fill:"#4d4dff",fillbg:"#ccccff"});break;default:a.push({label:t,get:e=>e[t]})}}t.snvindelattr=a}if(t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){t.snvindelattr.push({label:e.label||e.k,hide:e.hide,get:t=>{if(t[e.k])return t[e.k]+(e.full?t[e.full]?' <span style="font-size:.8em;color:#858585">'+t[e.full]+"</span>":"":"");return""}})}}if(t.eplst){for(const e of t.eplst){if(!e.p){console.error("no config object for epaint");continue}if(e.p.maf){t.snvindelattr.push({label:e.p.name,lst:[{label:e.p.datatype,get:t=>{const s=t[e.p.sampletype];if(!s)return"";return e.sampletype2value[s]}},{label:e.p.maf.label,width:40,height:12,fill:e.p.hlcolor,fillbg:e.p.hlcolor2,get:e.p.maf.get,readcountcredible:e.p.maf.readcountcredible,ismaf:true}]})}else{t.snvindelattr.push({label:e.p.name+" "+e.p.datatype,get:t=>{const s=t[e.p.sampletype];if(!s)return"";return e.sampletype2value[s]}})}}}}function runtimeattr_trunc(t,e){const s=new Set(["__x","mname","gene","strand","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","partner"]);t.truncattr=[];for(const a of e){if(a.sample){t.truncattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.truncattr.push({label:"Position",get:t=>t.chr+":"+t.pos});const a=new Set;for(const t of e){a.add(t.dt)}if(a.size>1){t.truncattr.push({label:"Truncated",get:t=>t.dt==dtnloss?"N-term":"C-term"})}for(const a of e){if(a.pmid){t.truncattr.push(caller_pmid());s.add("pmid");break}}for(const s of e){if(s.partner){t.truncattr.push({get:t=>{const e=[];for(const s in t.partner){e.push(s+": "+t.partner[s])}return e.join("&nbsp;&nbsp;")},label:"Translocation"});break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.truncattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.truncattr.push({label:a,get:t=>t[a]})}}function runtimeattr_del(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnadellength","a","b"]);t.delattr=[];for(const a of e){if(a.sample){t.delattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.delattr.push({label:"Position",get:t=>t.chr+":"+t.pos});t.delattr.push({label:"Del. length",get:t=>t.rnadellength+" bp"});for(const a of e){if(a.pmid){t.delattr.push(caller_pmid());s.add("pmid");break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.delattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.delattr.push({label:a,get:t=>t[a]})}}function runtimeattr_itd(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnaduplength","a","b"]);t.itdattr=[];for(const a of e){if(a.sample){t.itdattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.itdattr.push({label:"Position",get:t=>t.chr+":"+t.pos});t.itdattr.push({label:"Dup. length",get:t=>t.rnaduplength+" bp"});for(const a of e){if(a.pmid){t.itdattr.push(caller_pmid());s.add("pmid");break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.itdattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.itdattr.push({label:a,get:t=>t[a]})}}function runtimeattr_sv(t,e){const s=new Set(["__x","mname","aapos","chr","class","dt","inframe","origin","pos","rnapos","strand","useNterm","pairlst"]);t.svattr=[];for(const a of e){if(a.sample){t.svattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.svattr.push({label:"Genomic breakpoint",get:t=>{if(!t.pairlst)return"no pairlst";const e=t.pairlst.map((t=>(t.a.name?"<strong>"+t.a.name+"</strong> ":"")+(t.a.chr?'<span style="color:#858585">'+t.a.chr+":"+(t.a.position+1)+" "+(t.a.strand=="+"?"forward":"reverse")+"</span> &#10140; ":"")+(t.b.name?"<strong>"+t.b.name+"</strong> ":"")+(t.b.chr?'<span style="color:#858585">'+t.b.chr+":"+(t.b.position+1)+" "+(t.b.strand=="+"?"forward":"reverse")+"</span>":"")));return e.join("<br>")}});for(const s of e){if(s.pairlst[0].a.rnaposition!=undefined){t.svattr.push({label:"RNA breakpoint",get:t=>{if(!t.pairlst)return"no pairlst";const e=t.pairlst.map((t=>(t.a.name?"<strong>"+t.a.name+"</strong> ":"")+'<span style="color:#858585">r.'+(t.a.rnaposition+1)+"</span> &#10140; "+(t.b.name?"<strong>"+t.b.name+"</strong> ":"")+'<span style="color:#858585">r.'+(t.b.rnaposition+1)+"</span>"));return e.join("<br>")}});break}}for(const a of e){if(a.pmid){t.svattr.push(caller_pmid());s.add("pmid");break}}let a=false;for(const s of e){if(a)break;for(const e of s.pairlst){if(e.translocationname){t.svattr.push({get:t=>t.pairlst.map((t=>t.translocationname?t.translocationname:"")).join("_"),label:"Translocation name"});a=true;break}}}if(e[0].pairlst[0].a.ratio!=undefined){t.svattr.push({label:"Chimeric reads ratio",get:t=>{const e=[];const s=40,a=12,o="#FF850A",n="#FFCF9E";for(const r of t.pairlst){e.push((r.a.name?r.a.name:r.a.chr)+" <svg width="+s+" height="+a+"><g><title>"+r.a.ratio+"</title><rect width="+s+" height="+a+' fill="'+n+'"></rect>'+"<rect width="+s*r.a.ratio+" height="+a+' fill="'+o+'"></rect>'+"</g></svg>"+"&nbsp;&nbsp;"+(r.b.name?r.b.name:r.b.chr)+" <svg width="+s+" height="+a+"><g><title>"+r.b.ratio+"</title><rect width="+s+" height="+a+' fill="'+n+'"></rect>'+"<rect width="+s*r.b.ratio+" height="+a+' fill="'+o+'"></rect>'+"</g></svg>")}return e.join("<br>")}})}t.svattr.push({label:"Frame",get:t=>{function e(t){if(t==0)return'<span style="white-space:nowrap;background-color:'+coloroutframe+';font-size:80%;color:white;padding:1px 3px">OUT of frame</span>';if(t==1)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span>';if(t==2)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span> <span style="font-size:80%;color:#858585">promoter fusion</span>';if(t==3)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span> <span style="font-size:80%;color:#858585">alternative promoter</span>';return"err ("+t+")"}const s=[];for(const e of t.pairlst){if(e.frame!=undefined){s.push({frame:e.frame,a:e.a.name?e.a.name:e.a.chr,b:e.b.name?e.b.name:e.b.chr})}}if(s.length==1)return e(s[0].frame);return s.map((t=>t.a+"-"+t.b+": "+e(t.frame))).join("<br>")}});if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.svattr.push({label:e.label||e.k,hide:e.hide,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.svattr.push({label:a,get:t=>t[a]})}}function caller_pmid(t){return{get:t=>{if(!t.pmid){return""}if(typeof t.pmid=="number"){return"<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/"+t.pmid+">"+t.pmid+"</a>"}const e=t.pmid.split(",");const s=[];for(const t of e){if(t=="")continue;const e=Number.parseInt(t);if(Number.isNaN(e)){s.push(t)}else{s.push("<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/"+t+">"+t+"</a>")}}return s.join(" ")},label:"PubMed"}}function vcfsamplelistbutton(t,e,s){let a=t.sampledata;if(s.ds&&s.ds.cohort&&s.ds.cohort.annotation&&s.ds.cohort.key4annotation&&s.ds.cohort.sampleattribute&&s.ds.cohort.sampleattribute.runtimelst){a=[];for(const e of t.sampledata){const t=e.sampleobj[s.ds.cohort.key4annotation];if(!t)continue;const o=s.ds.cohort.annotation[t];if(o){let t=false;for(const e of s.ds.cohort.sampleattribute.runtimelst){if(e.key&&e.key.k&&e.key.hiddenvalues&&e.key.hiddenvalues.size){const s=o[e.key.k];if(e.key.hiddenvalues.has(s)){t=true;break}}}if(t)continue}a.push(e)}}e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text(a.length+" sample"+(a.length>1?"s":"")).on("click",(t=>{s.tktip.showunder(t.target).clear();const e=s.tktip.d.append("table");const o=e.append("tr").style("font-size",".8em").style("color","#858585");o.append("td").text("Name");o.append("td").text("Genotype");let n=false;if(a[0].DP!=undefined){o.append("td").text("Read depth");n=true}let r=false;if(a[0].allele2readcount){o.append("td").text("Allele read count");r=true}for(const t of a){const s=e.append("tr");s.append("td").text(t.sampleobj.name);s.append("td").style("padding-left","10px").text(t.genotype);if(n){s.append("td").style("padding-left","10px").text(t.DP||"")}if(r){const e=[];for(const s in t.allele2readcount){e.push(s+":"+t.allele2readcount[s])}s.append("td").style("padding-left","10px").text(e.join(", "))}}}))}function vcfvepbutton(t,e,s,a){e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("VEP annotation").on("click",(e=>{s.tktip.clear();s.tktip.showunder(e.target);for(const e of t){let t=false;let o;{const t=[];if(e.HGVSp){t.push('<span style="font-size:.7em;color:#858585">HGVSp</span> '+e.HGVSp)}else if(e.HGVSc){t.push('<span style="font-size:.7em;color:#858585">HGVSc</span> '+e.HGVSc)}else{t.push("no_HGVS")}if(e.Consequence){t.push('<span style="font-size:.7em;color:#858585">CONSEQUENCE</span> '+e.Consequence)}else{t.push("no_consequence")}o=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(o).on("click",(()=>{if(t){t=false;n.html(o)}else{t=true;n.text("");const s=[];for(const t of a){const a=e[t.name];if(a){s.push({k:t.name,v:a})}}make_table_2col(n,s)}}))}}))}function vcfannbutton(t,e,s,a){e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("Annotation").on("click",(e=>{s.tktip.clear();s.tktip.showunder(e.target);for(const e of t){let t=false;let o;{const t=[];if(e["HGVS.p"]){t.push('<span style="font-size:.7em;color:#858585">HGVS.p</span> '+e["HGVS.p"])}else if(e["HGVS.c"]){t.push('<span style="font-size:.7em;color:#858585">HGVS.c</span> '+e["HGVS.c"])}else{t.push("no_HGVS")}if(e.Annotation){t.push('<span style="font-size:.7em;color:#858585">Annotation</span> '+e.Annotation)}else{t.push("no_annotation")}o=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(o).on("click",(()=>{if(t){t=false;n.html(o)}else{t=true;n.text("");const s=[];for(const t of a){const a=e[t.name];if(a){s.push({k:t.name,v:a})}}make_table_2col(n,s)}}))}}))}function variant2imgbutton(t,e,s,a,o){let n=false;e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("Image").on("click",(async()=>{if(n)return;n=true;const e=s.append("div").style("margin","20px").text("Loading...");try{const o=await dofetch("img",{file:path.join(a.variant2img.path,t.chr+"."+(t.pos+1)+"."+t.ref+"."+t.alt+"."+a.variant2img.ext)});if(o.error)throw o.error;e.remove();s.append("img").attr("src",o.src).style("width",o.size.width+"px").style("height",o.size.height+"px")}catch(t){e.text("Error loading image")}}))}function mayshowcovmafplot(t,e,s){if(!e.ds.vaf2coverageplot){return false}if(!t.sampledata){return false}const a=[];const o={};const n=new Map;let r=0;for(const s of t.sampledata){if(!s.allele2readcount){r++;continue}if(s.DP==undefined){s.DP=0;for(const t in s.allele2readcount){s.DP+=s.allele2readcount[t]}}const i=s.allele2readcount[t.alt]||0;if(i>s.DP){console.log("alt coverage > DP: "+i+" "+s.DP);continue}const l={sampleobj:{},mut:i,total:s.DP,maf:s.DP==0?0:i/s.DP,genotype:s.genotype};if(s.sampleobj){if(e.ds.cohort&&e.ds.cohort.annotation&&e.ds.cohort.key4annotation){const t=s.sampleobj[e.ds.cohort.key4annotation];if(t){const s=e.ds.cohort.annotation[t];if(s){if(e.ds.cohort.levels){for(const t of e.ds.cohort.levels){if(!s[t.k])continue;l.sampleobj[t.label||t.k]=s[t.k]+(t.full&&s[t.full]?' <span style="font-size:.8em;color:#858585">'+s[t.full]+"</span>":"")}l.sampleobj[e.ds.cohort.key4annotation]=t}else{for(const t in s){l.sampleobj[t]=s[t]}}}}}else{for(const t in s.sampleobj){l.sampleobj[t]=s.sampleobj[t]}}}if(e.ds.vaf2coverageplot.categorykey&&e.ds.vaf2coverageplot.categories){const t=l.sampleobj[e.ds.vaf2coverageplot.categorykey];if(t&&e.ds.vaf2coverageplot.categories[t]){l.color=e.ds.vaf2coverageplot.categories[t].color;if(!n.has(t)){n.set(t,0)}n.set(t,n.get(t)+1);delete l.sampleobj[e.ds.vaf2coverageplot.categorykey];l.sampleobj[e.ds.vaf2coverageplot.categorylabel]=t}}if(e.ds.vaf2coverageplot.samplegroupkey){if(l.sampleobj&&l.sampleobj[e.ds.vaf2coverageplot.samplegroupkey]){const t=l.sampleobj[e.ds.vaf2coverageplot.samplegroupkey];if(!o[t]){o[t]=[]}o[t].push(l)}else{a.push(l)}}else{a.push(l)}}if(r){console.log("skipped "+r+" items")}const i=[];if(a.length){i.push({name:"no "+(e.ds.vaf2coverageplot.samplegroupkey||"sampletype"),lst:a})}for(const t in o){i.push({name:t,lst:o[t]})}if(i.length==0){return false}if(n.size>0){const t=s.append("div").style("margin","20px 20px 0px 20px");for(const[s,a]of n){const a=e.ds.vaf2coverageplot.categories[s];const o=t.append("div").style("margin-bottom","3px");o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("margin-right","5px").style("background-color",a.color).html("&nbsp;&nbsp;");o.append("span").style("color",a.color).text(a.label||s)}}const l=s.append("div").style("margin-bottom","10px");import("./plot.vaf2cov-0cf0bfb0.js").then((t=>{const s={};for(const a of i){let o=l.append("div").style("display","inline-block").style("vertical-align","top");if(i.length>1){o.style("margin-right","30px").append("div").style("margin-top","10px").style("padding","3px 10px").style("background-color","#aaa").style("color","white").style("display","inline-block").style("font-size",".8em").style("font-weight","bold").text(a.name.toUpperCase());o=o.append("div").style("border","solid 1px #aaa")}const n={holder:o,data:a.lst,name:a.name,tip:e.tktip,automax:true,mouseover:t=>{if(!t.sampleobj)return;for(const e in s){if(e==a.name)continue;s[e].filter((e=>e.sampleobj.patient==t.sampleobj.patient)).each((t=>{t.crosshair1.attr("transform","scale(2.5)");t.crosshair2.attr("transform","scale(2.5)")}))}},mouseout:t=>{if(!t.sampleobj)return;for(const e in s){if(e==a.name)continue;s[e].filter((e=>e.sampleobj.patient==t.sampleobj.patient)).each((t=>{t.crosshair1.attr("transform","scale(1)");t.crosshair2.attr("transform","scale(1)")}))}}};s[a.name]=t.default(n)}}));return true}function query_vcfcohorttrack(t,e,s){const a=e.ds.vcfcohorttrack;return Promise.resolve().then((()=>{if(a.info){return null}const t={jwt:s.jwt,file:a.file,url:a.url,indexURL:a.indexURL,header:1};return fetch(new Request(s.hostURL+"/vcf",{method:"POST",body:JSON.stringify(t)})).then((t=>t.json()))})).then((t=>{if(t==null)return;if(!t.metastr)throw{message:"no meta lines for the cohort vcf file "};if(!t.chrstr)throw{message:"no chromosome names found for the cohort vcf file"};const[e,o,n,r]=vcfparsemeta(t.metastr.split("\n"));if(r)throw{message:"vcf meta error for the cohort vcf file: "+r.join("; ")};a.info=e;a.format=o;if(a.samplenamemap){a.samples=n.map(a.samplenamemap)}else{a.samples=n}a.nochr=contigNameNoChr(s.genome,t.chrstr.split("\n"));return})).then((()=>{const e={jwt:s.jwt,file:a.file,url:a.url,indexURL:a.indexURL,rglst:[{chr:a.nochr?t.chr.replace("chr",""):t.chr,start:t.pos+1,stop:t.pos+1}]};return fetch(new Request(s.hostURL+"/vcf",{method:"POST",body:JSON.stringify(e)})).then((t=>t.json())).then((e=>{if(e.error)throw{message:"Error querying vcf file: "+e.error};const s=e.linestr?e.linestr.trim().split("\n"):[];for(const e of s){const[s,o,n]=vcfparseline(e,a);for(const e of o){if(e.pos==t.pos&&e.ref==t.ref&&e.alt==t.alt){return e}}}return null}))}))}function make_url4variant(t,e,s){for(const a of s){if(!a.makeurl)continue;const s=a.makeurl(e);if(!s){continue}t.append("a").attr("href",s).attr("target","_blank").text(a.makelabel?a.makelabel(e):a.label||"link").style("margin-right","10px")}}function make_button4variant(t,e,s){s.forEach((s=>{if(!s.makebutton)return;const a=t.append("div").style("display","inline-block").style("margin","0px 10px 2px 3px");s.makebutton(e,a.node())}))}function mayshowgermline2dvaf(t,e,s){const a=e.ds.germline2dvafplot;if(!a)return false;const o=a.individualkey;const n=new Map;let r=0;for(const e of t.sampledata){if(e.DP==undefined||!e.allele2readcount){r++;continue}const s=e.allele2readcount[t.alt]||0;if(s>e.DP){console.log("alt coverage > DP: "+s+" "+e.DP);continue}const i=e.sampleobj[o];if(!i){continue}const l=e.sampleobj[a.sampletypekey];if(!l){continue}if(!n.has(i)){const t={sampletypes:{}};for(const s in e.sampleobj){t[s]=e.sampleobj[s]}n.set(i,t)}n.get(i).sampletypes[l]={total:e.DP,vaf:e.DP==0?0:s/e.DP}}if(r){console.log(r+" samples has no valid DP/allele2readcount")}const i=[];for(const[t,e]of n){if(!e.sampletypes[a.xsampletype]){continue}if(e.sampletypes[a.yleftsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[a.xsampletype]=e.sampletypes[a.xsampletype];t.sampletypes[a.yleftsampletype]=e.sampletypes[a.yleftsampletype];i.push(t)}if(a.yrightsampletype&&e.sampletypes[a.yrightsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[a.xsampletype]=e.sampletypes[a.xsampletype];t.sampletypes[a.yrightsampletype]=e.sampletypes[a.yrightsampletype];i.push(t)}}if(i.length){const t=s.append("div").style("display","inline-block");import("./plot.2dvaf-12d6ace7.js").then((e=>{e.default(i,a,t)}));return true}return false}function mayshowgenotype2boxplot(t,e,s){const a=e.ds.genotype2boxplot;if(!a)return false;if(a.boxplotvaluekey){const e=t.info[a.boxplotvaluekey];if(!e)return false;const o=e.split("|");const n=[];for(const t of o){const e=t.split("/");const s=Number.parseFloat(e[1]);const a=Number.parseFloat(e[2]);const o=Number.parseFloat(e[3]);const r=Number.parseFloat(e[4]);const i=Number.parseFloat(e[5]);if(Number.isNaN(s)||Number.isNaN(a)||Number.isNaN(o)||Number.isNaN(r)||Number.isNaN(i)){continue}n.push({label:e[0],color:"#4F8F38",minvalue:s,maxvalue:i,percentile:{p05:s,p25:a,p50:o,p75:r,p95:i}})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-d4984beb.js").then((t=>{const e=t.default({holder:r,axislabel:a.axislabel,list:n});if(e){sayerror(r,"Boxplot: "+e)}}));return true}if(!e.ds.cohort||!e.ds.cohort.annotation||!e.ds.cohort.key4annotation){console.log("genotype2boxplot but ds.cohort is incomplete");return false}const o=new Map;t.sampledata.forEach((t=>{if(!t.genotype)return;const s=t.sampleobj[e.ds.cohort.key4annotation];if(!s)return;const n=e.ds.cohort.annotation[s];if(!n)return;const r=n[a.sampleannotationkey];if(!Number.isFinite(r))return;if(!o.has(t.genotype)){o.set(t.genotype,[])}o.get(t.genotype).push({value:r,key:s})}));if(o.size==0){return false}const n=[];for(const[t,e]of o){n.push({label:t,color:"#4F8F38",samples:e})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-d4984beb.js").then((t=>{const e=t.default({holder:r,axislabel:a.axislabel,list:n});if(e){sayerror(r,"Boxplot: "+e)}}));return true}function singleSample2table(t,e,s){const a=t.sampledata[0];const o=[];if(a.genotype){o.push({k:"genotype",v:a.genotype})}if(a.DP!=undefined){o.push({k:"total reads",v:a.DP})}if(a.allele2readcount&&a.allele2readcount[t.alt]!=undefined){o.push({k:"alt reads",v:a.allele2readcount[t.alt]})}else{may_addformat_singlesample(o,t,e)}if(a.sampleobj){if(e.ds.cohort&&e.ds.cohort.annotation&&e.ds.cohort.key4annotation){const t=a.sampleobj[e.ds.cohort.key4annotation];if(t){o.push({k:e.ds.cohort.key4annotation,v:t});const s=e.ds.cohort.annotation[t];if(s){if(e.ds.cohort.levels){for(const t of e.ds.cohort.levels){if(!s[t.k])continue;o.push({k:t.label||t.k,v:s[t.k]+(t.full&&s[t.full]?' <span style="font-size:.8em;color:#858585">'+s[t.full]+"</span>":"")})}}else{for(const t in s){if(t=="color")continue;o.push({k:t,v:s[t]})}}}}}else if(a.sampleobj.name){o.push({k:"name",v:a.sampleobj.name})}}make_table_2col(s,o)}function may_addformat_singlesample(t,e,s){let a;if(e.vcfid&&s.ds&&s.ds.id2vcf)a=s.ds.id2vcf[e.vcfid];if(!a)return;if(!a.format)return;const o=e.sampledata[0];for(const s in a.format){const n=a.format[s];if(!(s in o))continue;let r=n.Number=="R"||n.Number=="A";if(!r){if(s=="AD"){r=true}}if(r){const a=[];const r=[];let i;for(const t in o[s]){if(t==e.ref)continue;a.push(t);i=o[s][t];r.push(i)}const l=o[s][e.ref];if(l!=undefined){a.push(e.ref);r.push(l)}let c;if(l+i>0){c=fillbar(null,{f:i/(i+l)})}t.push({k:s,v:(c?c+" ":"")+'<span style="font-size:.8em;opacity:.5">'+a.join(" / ")+"</span> "+r.join(" / ")+(n.Description?' <span style="font-size:.7em;opacity:.5">'+n.Description+"</span>":"")})}else{t.push({k:s,v:o[s]})}}}function handle_samplecart(t,e,s,a){if(!a.samplecart||!s.ds||!s.ds.sampleselectable)return;const o=new Set;for(const e of t){if(e.sample){o.add(e.sample)}}if(o.size==0){return}const n=new Set;for(const e of t){const t=mclass[e.class].label;let s;if(e.dt==dtfusionrna||e.dt==dtsv){if(e.mname){if(e.useNterm){s=(a.usegm?a.usegm.name+"-":"")+e.mname+" "+t}else{s=e.mname+(a.usegm?"-"+a.usegm.name:"")+" "+t}}else{s=(a.usegm?a.usegm.name:"")+" "+t}}else{s=(e.mname?e.mname+" ":"")+t+(a.usegm?" in "+a.usegm.name:"")}n.add(s)}if(n.size==1){"having "+[...n][0]}else{"having mutations"+(a.usegm?" in "+a.usegm.name:"")}a.samplecart.setBtns({samplelst:[...o],id:n.size?[...n][0]:a.usegm?a.usegm.name:"",basket:"Gene Mutation",container:e.append("div").style("margin-left","10px").append("div")})}function loadvcftk(t,e){let s=null;for(const t in e.ds.id2vcf){s=e.ds.id2vcf[t]}if(!s){t.tkcloakoff(e,{error:"no vcf config found"});return}Promise.resolve().then((()=>{if(!s.headernotloaded)return;delete s.headernotloaded;const a=["genome="+t.genome.name];if(s.file){a.push("file="+s.file)}else{a.push("url="+s.url);if(s.indexURL)a.push("indexURL="+s.indexURL)}return dofetch2("vcfheader?"+a.join("&")).then((t=>{if(t.error)throw{message:t.error};if(!t.metastr)throw{message:"no meta lines for vcf file "+e.name};const[a,o,n,r]=vcfparsemeta(t.metastr.split("\n"));if(r)throw{error:"vcf meta error for file "+e.name+": "+r.join("; ")};s.info=a;s.format=o;if(s.samplenamemap){s.samples=n.map(s.samplenamemap)}else{s.samples=n}s.nochr=t.nochr}))})).then((()=>{const a={file:s.file,url:s.url,indexURL:s.indexURL,rglst:t.tkarg_maygm(e)};if(s.nochr){for(const t of a.rglst){t.chr=t.chr.replace("chr","")}}return dofetch2("vcf",{method:"POST",body:JSON.stringify(a)}).then((a=>{if(a.error)throw{message:a.error};const o=a.linestr?a.linestr.trim().split("\n"):[];load2tk([{vcfid:s.vcfid,lines:o}],t,e);return}))})).catch((t=>{if(t.stack)console.log(t.stack);return t.message})).then((s=>{t.tkcloakoff(e,{error:s})}))}function data2tk(t,e,s){const a=e.ds.id2vcf[t.vcfid];if(!a){s.error("vcf not found by id: "+t.vcfid);return}if(!t.lines){s.error("no vcf lines from vcf file "+t.vcfid);return}const o=[];for(const n of t.lines){const[r,i,l]=vcfparseline(n,a);if(r){o.push(r)}if(!i){continue}for(const a of i){if(a.alt=="NON_REF"){continue}if(e.ds.discardsymbolicallele&&a.issymbolicallele){continue}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);a.rnapos=t.rnapos;a.aapos=t.aapos}a.vcfid=t.vcfid;vcfcopymclass(a,s);e.mlst.push(a)}}if(!e.dstk_novcferror&&o.length){s.error(o[0]+(o.length==1?"":" and "+(o.length-1)+" more errors with the VCF track"))}}function sun1(t,e,s){if(!s.cohort){console.error("arg.cohort missing");return}if(!s.cohort.levels){console.error("arg.cohort.levels missing");return}if(!s.cohort.key2color&&!s.cohort.suncolor){s.cohort.suncolor=ordinal(schemeCategory10)}let a;if(!s.cohort.annotation){a=s.mlst}else{if(!s.cohort.key4annotation){console.error("arg.cohort.key4annotation missing");return}a=[];if(s.mlst[0].sampledata){for(const t of s.mlst){if(!t.sampledata){continue}for(const e of t.sampledata){const t=e.sampleobj[s.cohort.key4annotation];if(!t){continue}const o=s.cohort.annotation[t];if(!o){continue}const n={k4a:t};for(const t of s.cohort.levels){n[t.k]=o[t.k];if(t.full){n[t.full]=o[t.full]}}a.push(n)}}}else{for(const t of s.mlst){const e=t[s.cohort.key4annotation];if(!e){continue}const o=s.cohort.annotation[e];if(!o){continue}const n={k4a:e};for(const t of s.cohort.levels){n[t.k]=o[t.k];if(t.full){n[t.full]=o[t.full]}}a.push(n)}}if(a.length==0){if(s.m2detail){itemtable({mlst:[s.m2detail],pane:true,x:s.cx,y:s.cy,tk:t,block:e})}else{itemtable({mlst:s.mlst,pane:true,x:s.cx,y:s.cy,tk:t,block:e})}return}}let o=s.cx,n=s.cy,r=500,i=250;const l=t.glider.append("g").attr("transform","translate("+o+","+n+")");const c=t.pica;const f=l.append("g");const d=l.append("g");const p={g:l,eye:f,ring:d,pica:c,busy:false};let m=Math.log(a.length)*24;if(m>t.height*.42){m=t.height*.42}else if(m<t.height*.2){m=t.height*.2}let u=o,h=n;if(o-m<0){u=m}else if(o+m>e.width){u=e.width-m}if(n-m<0){h=m}else if(n+m>t.height){h=t.height-m}if(u!=o||h!=n){l.transition().delay(r+i).attr("transform","translate("+u+","+h+")");o=u;n=h}const g=stratinput(a,s.cohort.levels);const b=stratify()(g);b.sum((t=>t.value));b.sort(((t,e)=>e.value-t.value));partition().size([1,Math.pow(m,2)])(b);f.append("circle").attr("r",m).attr("fill","white").attr("fill-opacity",0);let y;const k=d3arc().startAngle((t=>Math.PI*2*t.x0)).endAngle((t=>Math.PI*2*t.x1)).innerRadius((t=>{if(!t.parent){y=Math.sqrt(t.y1)-m/15;return y}return Math.sqrt(t.y0)})).outerRadius((t=>{t.outradius=Math.sqrt(t.y1);return t.outradius}));d.selectAll().data(b.descendants()).enter().append("path").attr("d",k).attr("stroke","white").attr("fill",(t=>{if(!t.parent){return"white"}let e;if(t.children){e=t.id}else{if(!t.parent.parent){e=t.id}else{e=t.parent.id}}let a;if(s.cohort.key2color){a=s.cohort.key2color[e];if(!a){console.log(e);a="#858585"}}else{a=s.cohort.suncolor(e)}t._color=a;return a})).on("mouseover",((a,r)=>{if(!r.parent)return;if(p.busy)return;a.target.setAttribute("fill",rgb(r._color).darker(.5).toString());slicemouseover(r,c,s,o,n,t,e)})).on("mouseout",((t,e)=>{c.g.selectAll("*").remove();if(!e.parent)return;t.target.setAttribute("fill",e._color)})).on("click",((a,o)=>{if(s.noclickring){return}if(!o.parent){return}if(s.cohort.annotation){if(o.data.lst.length==1){showsinglesample(o.data.lst[0].k4a,s.cohort.annotation[o.data.lst[0].k4a],a.clientX,a.clientY);return}showmanysample(o.data.lst,s.cohort,a.clientX,a.clientY);return}itemtable({mlst:o.data.lst,x:a.clientX,y:a.clientY,tk:t,block:e,pane:true})}));const x=y*2;d.attr("transform","scale(.3,.3)").attr("fill-opacity",0).transition().duration(r).attr("transform","scale(1,1)").attr("fill-opacity",1).on("end",(()=>{f.shutter=f.append("rect").attr("x",-y).attr("y",-y).attr("width",y*2).attr("height",0).attr("fill","#ededed").on("click",(()=>remove(p)));f.shutter.transition().duration(i).attr("height",y*2).on("end",(()=>{f.fore=f.append("g");const r=Math.min(x/(s.label.length*textlensf),y*.6);f.fore.append("text").text(s.label).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","#858585").attr("font-weight","bold").attr("font-family","Arial").attr("font-size",r);const i=Math.min(18,Math.min(y*.7/(a.length.toString().length*textlensf),(y-r/2)*.7));f.fore.append("text").text(a.length).attr("text-anchor","middle").attr("fill","#858585").attr("y",-r/2-2).attr("font-family","Arial").attr("font-size",i);f.append("rect").attr("x",-y).attr("y",-y).attr("width",y*2).attr("height",y*2).attr("fill","black").attr("fill-opacity",0).on("click",(()=>{if(p.busy)return;remove(p)})).on("mousedown",(t=>{t.preventDefault();t.stopPropagation();let e=o,s=n,a=t.clientX,r=t.clientY,i=d3select(document.body);i.on("mousemove",(t=>{p.busy=true;o=e+t.clientX-a;n=s+t.clientY-r;l.attr("transform","translate("+o+","+n+")")})).on("mouseup",(()=>{setTimeout((()=>p.busy=false),10);i.on("mousemove",null).on("mouseup",null)}))}));p.listbutt=f.append("g").attr("transform","translate(0,"+r/2+")");const c=p.listbutt.append("rect").attr("x",-x/2).attr("width",x).attr("height",y-r/2).attr("fill","#d9d9d9");const d=p.listbutt.append("text").text(s.m2detail?"Show":"List").attr("y",(y-r/2)/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-family","Arial").attr("fill","#858585").attr("font-size",Math.min(18,i));p.listbutt.append("rect").attr("x",-x/2).attr("width",x).attr("height",y-r/2).attr("fill-opacity",0).on("mouseover",(()=>{c.attr("fill","#bababa");d.attr("fill","white")})).on("mouseout",(()=>{c.attr("fill","#d9d9d9");d.attr("fill","#858585")})).on("click",(a=>{if(s.m2detail){remove(p);itemtable({mlst:[s.m2detail],pane:true,x:a.clientX-m,y:a.clientY-m*2,tk:t,block:e});return}const o=a.target.getBoundingClientRect();remove(p);setTimeout((()=>itemtable({mlst:s.mlst,x:o.left,y:o.top,tk:t,block:e,pane:true})),500)}))}))}))}function remove(t){t.busy=true;if(t.eye.fore){t.eye.fore.remove()}if(t.listbutt){t.listbutt.remove()}if(t.eye.shutter){t.eye.shutter.transition().attr("height",0).on("end",(()=>{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}))}else{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}t.pica.g.selectAll("*").remove()}function slicemouseover(t,e,s,a,o,n,r){const i=s.cohort;const l=13;const c=10;const f=1;let d=(t.x0+t.x1)/2;if(d>=.375&&d<=.625){const e=n.yoff+o+t.outradius;const s=Number.parseFloat(r.svg.attr("height"));l+f+l+(i&&i.root?f+c+5:0);if(e>=s-30){if(d<=.5){d=Math.max(.25,t.x0)}else{d=Math.min(.75,t.x1)}}}e.g.selectAll("*").remove();const p=a+(t.outradius+5)*Math.sin(Math.PI*2*d);const m=o-(t.outradius+5)*Math.cos(Math.PI*2*d);e.g.attr("transform","translate("+p+","+m+")");const u=60;let h=null,g=0;if(i&&i.root){h=e.g.append("g");h.append("rect").attr("width",u+4).attr("height",c+4).attr("fill","white").attr("shape-rendering","crispEdges");h.append("rect").attr("x",2).attr("y",2).attr("width",u).attr("height",c).attr("fill",i.fbarbg||"#ededed").attr("shape-rendering","crispEdges");i.root.each((e=>{if(e.id==t.id){g=e.value}}));if(g>0){h.append("rect").attr("x",2).attr("y",2).attr("width",u*t.value/g).attr("height",c).attr("fill",i.fbarfg||"#858585").attr("shape-rendering","crispEdges")}}const b=e.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",l).attr("font-family","Arial");const y=e.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",l).attr("font-family","Arial");t.data.name+", "+t.value+" sample"+(t.value>1?"s":"");b.text(t.data.name);y.text(t.data.name);const k=e.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",l).attr("font-family","Arial");const x=e.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",l).attr("font-family","Arial");const v=t.value+" sample"+(t.value>1?"s":"")+(h?" ("+g+" total)":"");k.text(v);x.text(v);Math.max(y.node().getBBox().width,x.node().getBBox().width);if(d<.25){k.attr("y",h?-3-c-f:0);x.attr("y",h?-3-c-f:0);b.attr("y",(h?-3-c-f:0)-l-f);y.attr("y",(h?-3-c-f:0)-l-f);if(h){h.attr("transform","translate(0,-"+c+")")}}else if(d<.5){b.attr("dominant-baseline","hanging").attr("y",0);y.attr("dominant-baseline","hanging").attr("y",0);k.attr("dominant-baseline","hanging").attr("y",f+l);x.attr("dominant-baseline","hanging").attr("y",f+l);if(h){h.attr("transform","translate(0,"+(l+f)*2+")")}}else if(d<.75){b.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);y.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);k.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);x.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);if(h){h.attr("transform","translate(-"+u+","+(l+f)*2+")")}}else{k.attr("text-anchor","end").attr("y",h?-3-c-f:0);x.attr("text-anchor","end").attr("y",h?-3-c-f:0);b.attr("text-anchor","end").attr("y",(h?-3-c-f:0)-l-f);y.attr("text-anchor","end").attr("y",(h?-3-c-f:0)-l-f);if(h){h.attr("transform","translate(-"+u+",-"+c+")")}}}function showsinglesample(t,e,s,a){const o=[];for(const t in e){o.push({k:t,v:e[t]})}const n=newpane({x:s,y:a});n.header.text(t);make_table_2col(n.body,o)}function showmanysample(t,e,s,a){const o=new Set;for(const s of t){const t=e.annotation[s.k4a];for(const e in t){o.add(e)}}const n=newpane({x:s,y:a});n.header.text(t.length+" "+e.key4annotation+"s");const r=n.body.append("table");const i=[...o];{const t=r.append("tr");for(const e of i){t.append("td").text(e).style("color","#858585").style("font-size",".7em")}}for(const s of t){const t=r.append("tr").attr("class","sja_tr");const a=e.annotation[s.k4a];for(const e of i){t.append("td").text(a[e]==undefined?"":a[e])}}}async function may_sunburst(t,e,s,a,o,n){if(o.ds){if(o.ds.cohort){let t=false;if(o.ds.cohort.annotation){if(o.ds.cohort.variantsunburst){t=true}}else{t=true}if(t){sun1(o,n,{cx:s,cy:a,mlst:e,label:e[0].mname,cohort:o.ds.cohort});return true}}}return false}const clustercrowdlimit=7;const mnamegetter=t=>{if(!t)return"";if(t.length>25){return t.substr(0,20)+"..."}return t};function rendernumerictk(t,e,s){const a=t.numericmode;if(!a.axisheight){a.axisheight=100}t.glider.selectAll("*").remove();delete t.skewer;const o=mlst_pretreat(t,e,s);const n=new Map;for(const t of o){if(t.__x==undefined){continue}if(!n.has(t.__x)){n.set(t.__x,[])}n.get(t.__x).push(t)}const r=[];if(e.exonsf>=minbpwidth){for(const[t,e]of n){r.push({chr:e[0].chr,pos:e[0].pos,mlst:e,x:t})}}else{if(e.usegm&&e.usegm.coding&&e.gmmode!=gmmode.genomic){const t=new Map;for(const[s,a]of n){if(a[0].chr!=e.usegm.chr){continue}let o=undefined;for(const t of a){if(Number.isFinite(t.aapos))o=t.aapos}if(o==undefined){o=genomic2gm(a[0].pos,e.usegm).aapos}if(o==undefined){console.error("data item cannot map to aaposition");console.log(a[0]);continue}n.delete(s);if(!t.has(o)){t.set(o,[])}let r=true;for(const s of t.get(o)){if(Math.abs(s[0].__x-a[0].__x)<=e.exonsf*3){for(const t of a){s.push(t)}r=false;break}}if(r){t.get(o).push(a)}}e.usegm.utr5?e.usegm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0;for(const e of t.values()){for(const t of e){let e=null;for(const s of t){if(Number.isFinite(s.rnapos))e=s}if(e==null){console.log("trying to map mlst to codon, but no rnapos found");for(const e of t){console.log(e)}continue}r.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x})}}}const t=[];const s=2;for(const[e,a]of n){const o=Math.floor(e/s);if(!t[o]){t[o]=[]}t[o]=[...t[o],...a]}for(const e of t){if(!e)continue;const t=e.reduce(((t,e)=>t+e.__x),0);r.push({isbin:true,chr:e[0].chr,pos:e[0].pos,mlst:e,x:t/e.length})}}r.sort(((t,e)=>t.x-e.x));if(t.data&&e.pannedpx!=undefined&&(!e.usegm||e.gmmode==gmmode.genomic)){const e={};for(const s of t.data){e[s.chr+"."+s.pos]={xoffset:s.xoffset}}for(const t of r){const s=t.chr+"."+t.pos;if(e[s]){t.xoffset=e[s].xoffset}}}t.data=r;numeric_make(t,e);t.height_main=t.toppad+a.toplabelheight+a.maxradius+a.axisheight+a.maxradius+t.stem1+t.stem2+t.stem3+a.bottomlabelheight+t.bottompad;if(!t.data||t.data.length==0){done_tknodata(t,e);return}}function color4disc(t,e){if(e.vcfinfofilter&&e.vcfinfofilter.setidx4mclass!=undefined){const s=e.vcfinfofilter.lst[e.vcfinfofilter.setidx4mclass];const[a,o]=getter_mcset_key(s,t);if(a||o==undefined)return"black";for(const t of o){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(mclass[t.class]){return mclass[t.class].color}return"black"}function numeric_make(t,e){const s=t.numericmode;const a=[];for(const e of t.data){e.x0=e.x;if(e.xoffset!=undefined){e.x=e.x0+e.xoffset}continue}let o=0;if(a.length>0){let t=1;for(let e=0;e<a.length;e++){const s=a[e];const n=[];for(let t=0;t<e;t++){const e=a[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){n.push(e)}}s.y=2;for(const e of n){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}o=Math.max(o,s.y+s.height)}}const n=Math.max(14,e.width/110);s.dotwidth=n;s.maxradius=0;for(const e of t.data){for(const t of e.mlst){t.radius=n/2;s.maxradius=Math.max(t.radius,s.maxradius);t.rimwidth=0;t.aa=e}}const r=adjustview(t,e);s.showsamplebar=r&&t.ds&&t.ds.samplebynumericvalue;if(!s.showsamplebar){s.showgenotypebyvalue=r&&t.ds&&t.ds.genotypebynumericvalue}t.genotype2color.legend.style("display",s.showsamplebar||s.showgenotypebyvalue?"block":"none");let i;let l=null;let c=null;let f=0;let d=null;if(s.showsamplebar){i={name:t.ds.samplebynumericvalue.axislabel};for(const e of t.data){for(const s of e.mlst){if(!s.sampledata)continue;for(const e of s.sampledata){const s=e.sampleobj[t.ds.cohort.key4annotation];if(!s)continue;const a=t.ds.cohort.annotation[s];if(!a)continue;const o=a[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(o))continue;if(l==null){l=o;c=o}else{l=Math.min(l,o);c=Math.max(c,o)}}}}}else if(s.showgenotypebyvalue){i={name:t.ds.genotypebynumericvalue.axislabel};for(const e of t.data){for(const s of e.mlst){let e=s.info[t.ds.genotypebynumericvalue.refref.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}e=s.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}e=s.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}let a=0,o=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){let e=s.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];if(Number.isFinite(e)){a=e}e=s.info[t.ds.genotypebynumericvalue.refalt.genotypeCountInfokey];if(Number.isFinite(e)){n=e}e=s.info[t.ds.genotypebynumericvalue.altalt.genotypeCountInfokey];if(Number.isFinite(e)){o=e}}else{if(!s.sampledata)continue;for(const t of s.sampledata){if(!t.allele2readcount)continue;if(t.allele2readcount[s.alt]){if(t.allele2readcount[s.ref]){n++}else{o++}}else{a++}}}f=Math.max(f,a,n,o)}}const e=Math.pow(12/2,2)*Math.PI;const s=e*10;d=linear().domain([1,f*.1,f*.3,f*.6,f*.8,f]).range([e,e+(s-e)*.8,e+(s-e)*.85,e+(s-e)*.9,e+(s-e)*.95,s])}else{i=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4numeric];for(const e of t.data){for(const t of e.mlst){t._v=0;const[e,s]=getter_mcset_key(i,t);if(e){console.log(e)}else if(s==undefined||s.length==0);else{if(!Number.isFinite(s[0])){console.log("invalid numerical value for variant: "+s[0])}else{t._v=s[0]}}if(l==null){l=t._v;c=t._v}else{l=Math.min(t._v,l);c=Math.max(t._v,c)}}}}const p=linear().domain([l,c]).range([0,s.axisheight]);for(const e of t.data){for(const t of e.mlst){t._y=p(t._v)}}if(r){t.stem1=5;t.stem2=20;t.stem3=10}else{t.stem1=0;t.stem2=0;t.stem3=0}for(const e of t.data){for(const s of e.mlst){t.glider.append("text").text(mnamegetter(s.mname)).attr("font-family",font).attr("font-size",s.radius*2-2).each((function(){s.labwidth=this.getBBox().width})).remove()}}for(const e of t.data){for(const t of e.mlst){delete t.labattop;delete t.labatbottom}}if(r){for(const e of t.data){if(e.mlst.length==1){const t=e.mlst[0];t.labattop=true}else{if((e.width-e.fixedgew)/(e.mlst.length-1)<clustercrowdlimit);else{for(const t of e.mlst){t.labattop=true}}}}}else{verticallabplace(t)}s.toplabelheight=0;s.bottomlabelheight=0;if(s.showsamplebar||s.showgenotypebyvalue){for(const e of t.data){for(const t of e.mlst){s.toplabelheight=Math.max(s.toplabelheight,t.labwidth)}}}else{for(const e of t.data){for(const t of e.mlst){if(t.labattop){s.toplabelheight=Math.max(s.toplabelheight,t._y+t.labwidth-s.axisheight)}else if(t.labatbottom){s.bottomlabelheight=Math.max(s.bottomlabelheight,t.labwidth-t._y)}}}}{let a=e.labelfontsize+t.labyspace+e.labelfontsize;if(t.label_stratify){a+=t.label_stratify.length*(t.labyspace+e.labelfontsize)}s.toplabelheight=Math.max(s.toplabelheight,a)}t.leftaxis.attr("transform","translate(-"+n/2+","+(s.toplabelheight+s.maxradius)+")").selectAll("*").remove();{const a=linear().domain([l,c]).range([s.axisheight,0]);const o=axisLeft().scale(a).ticks(4);if(i.numberIsInteger){o.tickFormat(format("d"));if(c-l<3){o.ticks(c-l)}}axisstyle({axis:t.leftaxis.call(o),showline:true,fontsize:n});if(l==c){t.leftaxis.append("text").attr("text-anchor","end").attr("font-size",n).attr("dominant-baseline","central").attr("x",e.tkleftlabel_xshift).attr("y",s.axisheight).text(l).attr("fill","black")}{let e=0;t.leftaxis.selectAll("text").each((function(){e=Math.max(e,this.getBBox().width)}));const a=i.name.split(" ");const o=(s.axisheight-a.length*(n+1))/2;let r=0;a.forEach(((s,a)=>{t.leftaxis.append("text").attr("fill","black").attr("font-size",n).attr("dominant-baseline","central").attr("text-anchor","end").attr("y",o+(n+1)*a).attr("x",-(e+15)).text(s).each((function(){r=Math.max(r,this.getBBox().width+15+e)}))}));t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,r)}}const m=t.glider.append("g").attr("transform","translate(0,0)");m.append("line").attr("y1",s.toplabelheight+s.maxradius).attr("y2",s.toplabelheight+s.maxradius).attr("x2",e.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");m.append("line").attr("y1",s.toplabelheight+s.maxradius+s.axisheight).attr("y2",s.toplabelheight+s.maxradius+s.axisheight).attr("x2",e.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");t.skewer2=m.selectAll().data(t.data).enter().append("g").attr("class","sja_skg2").each((function(t){t.g=this}));t.skewer2.attr("transform",(t=>"translate("+t.x+","+(s.toplabelheight+disclabelspacing+s.maxradius+s.axisheight+s.maxradius)+")"));if(r){t.skewer2.append("path").attr("class","sja_aa_stem").attr("d",(e=>skewer2_setstem(e,t))).attr("stroke",(e=>color4disc(e.mlst[0],t))).attr("fill",(t=>t.mlst.length==1?"none":"#ededed"))}const u=t.skewer2.selectAll().data((t=>t.mlst)).enter().append("g").attr("class","sja_aa_discg").each((function(t){t.g=this}));if(s.showsamplebar){u.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const a of e.mlst){if(!a.sampledata)continue;const e=d3select(a.g);for(const o of a.sampledata){const n=o.sampleobj[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(i))continue;const l=-p(i)-s.maxradius;const c=o.allele2readcount[a.ref];const f=o.allele2readcount[a.alt];if(f)continue;e.append("line").attr("x1",-a.radius).attr("x2",a.radius).attr("y1",l).attr("y2",l).attr("stroke",c?f?t.genotype2color.ra:t.genotype2color.rr:t.genotype2color.aa).attr("shape-rendering","crispEdges").on("mouseover",(e=>{const s=[{k:t.ds.cohort.key4annotation,v:n}];for(const t in r){s.push({k:t,v:r[t]})}s.push({k:"genotype",v:o.genotype});t.tktip.clear().show(e.clientX,e.clientY);make_table_2col(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-a.radius-3);e.target.setAttribute("x2",a.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-a.radius);e.target.setAttribute("x2",a.radius)}))}for(const o of a.sampledata){const n=o.sampleobj[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(i))continue;const l=-p(i)-s.maxradius;const c=o.allele2readcount[a.ref];const f=o.allele2readcount[a.alt];if(!f)continue;e.append("line").attr("x1",-a.radius).attr("x2",a.radius).attr("y1",l).attr("y2",l).attr("stroke",c?f?t.genotype2color.ra:t.genotype2color.rr:t.genotype2color.aa).attr("shape-rendering","crispEdges").on("mouseover",(e=>{const s=[{k:t.ds.cohort.key4annotation,v:n}];for(const t in r){s.push({k:t,v:r[t]})}s.push({k:"genotype",v:o.genotype});t.tktip.clear().show(e.clientX,e.clientY);make_table_2col(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-a.radius-3);e.target.setAttribute("x2",a.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-a.radius);e.target.setAttribute("x2",a.radius)}))}}}}else if(s.showgenotypebyvalue){u.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const a of e.mlst){let e=0,o=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){e=a.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];o=a.info[t.ds.genotypebynumericvalue.altalt.genotypeCountInfokey];n=a.info[t.ds.genotypebynumericvalue.refalt.genotypeCountInfokey]}else{if(!a.sampledata)continue;for(const t of a.sampledata){if(!t.allele2readcount)continue;if(t.allele2readcount[a.alt]){if(t.allele2readcount[a.ref]){n++}else{o++}}else{e++}}}const r=d3select(a.g);if(e){const o=a.info[t.ds.genotypebynumericvalue.refref.infokey];if(o!=undefined){const n=-p(o)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(d(e))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.refref.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const n=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Ref/Ref"},{k:"#sample",v:e},{k:t.ds.genotypebynumericvalue.axislabel,v:o}];make_table_2col(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(n){const e=a.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){const o=-p(e)-s.maxradius;r.append("circle").attr("cy",o).attr("r",Math.sqrt(d(n))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.refalt.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const o=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Ref/Alt"},{k:"#sample",v:n},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];make_table_2col(t.tktip.d,o)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(o){const e=a.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){const n=-p(e)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(d(o))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.altalt.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const n=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Alt/Alt"},{k:"#sample",v:o},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];make_table_2col(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}}}}else{u.attr("transform",(t=>"translate("+t.xoff+","+(t._y+s.maxradius)*-1+")"));const a=u.append("circle");a.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtnloss||t.dt==dtcloss)).attr("fill","white").attr("stroke-width",2).attr("stroke",(e=>color4disc(e,t))).attr("r",(t=>t.radius-2));a.filter((t=>t.dt==dtsnvindel||t.dt==dtsv||t.dt==dtfusionrna)).attr("fill",(e=>color4disc(e,t))).attr("stroke","white").attr("r",(t=>t.radius-.5));u.filter((t=>t.dt==dtfusionrna||t.dt==dtsv)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>d3arc()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));u.append("circle").attr("r",(t=>t.radius-.5)).attr("stroke",(e=>color4disc(e,t))).attr("class","sja_aa_disckick").attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>{m_mouseover(s,t);if(t.disc_mouseover){t.disc_mouseover(s,e.target)}else{epaint_may_hl(t,[s],true)}})).on("mouseout",((e,s)=>{m_mouseout(s,t);if(t.disc_mouseout){t.disc_mouseout(s)}else{epaint_may_hl(t,[s],false)}})).on("click",((s,a)=>{const o=s.target.getBoundingClientRect();m_click(a,o,t,e)}))}const h=u.filter((t=>t.labattop||t.labatbottom)).append("text").each((function(t){t.textlabel=this})).text((t=>mnamegetter(t.mname))).attr("font-family",font).attr("font-size",(t=>{t._labfontsize=Math.max(12,t.radius*1.2);return t._labfontsize})).attr("fill",(e=>color4disc(e,t))).attr("x",(t=>s.showsamplebar||s.showgenotypebyvalue?s.axisheight+s.maxradius+4:t.radius+t.rimwidth+disclabelspacing)).attr("y",(t=>t._labfontsize*middlealignshift)).attr("class","sja_aa_disclabel").attr("transform",(t=>"rotate("+(t.labattop?"-":"")+"90)")).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>m_mouseover(s,t))).on("mouseout",((e,s)=>m_mouseout(s,t))).on("click",((s,a)=>{m_click(a,{left:s.clientX,top:s.clientY},t,e)}));if(t.hlaachange){h.filter((e=>t.hlaachange.has(e.mname))).classed("sja_pulse",true)}}function m_mouseover(t,e){if(t.textlabel){d3select(t.textlabel).attr("font-size",t._labfontsize*1.1)}const s=e.numericmode;if(s.showsamplebar)return;if(s.showgenotypebyvalue)return;e.pica.g.attr("transform","translate("+(t.aa.x+t.xoff)+","+(s.toplabelheight+s.maxradius+s.axisheight-t._y)+")");const a=10;const o=4;const n=t._labfontsize||13;const r=color4disc(t,e);let i=0,l=false;e.pica.g.append("text").attr("font-size",n).attr("font-family",font).text(t._v).each((function(){i=this.getBBox().width})).remove();if(!t.labattop&&!t.labatbottom){l=true;e.pica.g.append("text").attr("font-size",n).attr("font-family",font).text(t.mname).each((function(){i=Math.max(i,this.getBBox().width)})).remove()}const c=o*2+i;let f,d,p=true;if(c+a>t.aa.x+t.xoff){p=false;d=t.radius+t.rimwidth;f=d+a}else{d=-t.radius-t.rimwidth-a;f=d-c}e.pica.g.append("rect").attr("x",f-2).attr("y",-2-o-(l?n:n/2)).attr("width",4+c).attr("height",4+o*2+n*(l?2:1)).attr("fill","white");e.pica.g.append("line").attr("x1",d).attr("x2",d+a).attr("stroke","white").attr("stroke-width",3).attr("shape-rendering","crispEdges");e.pica.g.append("line").attr("x1",d).attr("x2",d+a).attr("stroke",r).attr("shape-rendering","crispEdges");e.pica.g.append("rect").attr("x",f).attr("y",-o-(l?n:n/2)).attr("width",c).attr("height",o*2+n*(l?2:1)).attr("fill","none").attr("stroke",r).attr("shape-rendering","crispEdges");e.pica.g.append("text").text(t._v).attr("text-anchor",p?"end":"start").attr("font-size",n).attr("font-family",font).attr("x",p?d-o:f+o).attr("y",l?-n/2:0).attr("fill",r).attr("dominant-baseline","central");if(l){e.pica.g.append("text").text(t.mname).attr("text-anchor",p?"end":"start").attr("font-size",n).attr("font-family",font).attr("x",p?d-o:f+o).attr("y",l?n/2:0).attr("fill",r).attr("dominant-baseline","central")}}function m_mouseout(t,e){if(t.textlabel){d3select(t.textlabel).attr("font-size",t._labfontsize)}e.pica.g.selectAll("*").remove()}async function m_click(t,e,s,a){if(t.dt==dtfusionrna||t.dt==dtsv){itemtable({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:a,svgraph:true});return}if(t.occurrence>1){if(await may_sunburst(t.occurrence,[t],t.aa.x+t.xoff,s.numericmode.toplabelheight+s.numericmode.axisheight-t._y,s,a))return}itemtable({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:a})}function verticallabplace(t){const e=[];for(const s of t.data){for(const t of s.mlst){e.push({m:t,w:2*(t.radius+t.rimwidth),x:s.x0,y:t._y})}}e.sort(((t,e)=>e.y-t.y));for(let t=0;t<e.length;t++){const s=e[t];let a=false;for(let o=0;o<t;o++){const t=e[o];if(Math.abs(s.x-t.x)<(s.w+t.w)/2-2){a=true;break}}if(!a){s.m.labattop=true}}for(let t=e.length-1;t>=0;t--){const s=e[t];if(s.m.labattop)continue;let a=false;for(let o=e.length-1;o>t;o--){const t=e[o];if(t.m.labatbottom&&Math.abs(t.x-s.x)<(t.w+s.w)/2-2){a=true;break}}if(!a){s.m.labatbottom=true}}}function skewer2_setstem(t,e){if(t.mlst.length==1){return"M0,0v"+e.stem1+"l"+-t.xoffset+","+e.stem2+"v"+e.stem3}return"M0,0"+"v"+e.stem1+"l"+-t.xoffset+","+e.stem2+"v"+e.stem3+"v-"+e.stem3+"l"+(t.stemw+t.xoffset-1)+",-"+e.stem2+"v-"+e.stem1}function adjustview(t,e){t.numericmode;const s=100;let a=0;for(const e of t.data){let t=0;for(const s of e.mlst){t+=2*(s.radius+s.rimwidth)}if(e.mlst.length==1){e.width=t}else{e.width=Math.min(s,t);const a=e.mlst[0];const o=e.mlst[e.mlst.length-1];e.fixedgew=a.radius+a.rimwidth+o.radius+o.rimwidth}a+=e.width}if(a<=e.width){let s=0;for(const e of t.data){e.x=s+e.mlst[0].radius+e.mlst[0].rimwidth;s+=e.width;if(e.mlst.length==1){e.stemw=0}else{e.stemw=e.width-e.fixedgew}}horiplace1(t.data,e.width);for(const e of t.data){e.xoffset=e.x-e.x0;if(e.mlst.length==1){e.mlst[0].xoff=0;e.stemw=0}else{e.stemw=e.width-e.fixedgew;const t=e.stemw/(e.mlst.length-1);for(let s=0;s<e.mlst.length;s++){e.mlst[s].xoff=t*s}}}return true}else{for(const e of t.data){e.x=e.x0;e.xoffset=0;for(const t of e.mlst){t.xoff=0}}return false}}function horiplace1(t,e){for(let s=0;s<t.length;s++){if(t[s].x0<0)continue;if(t[s].x0>e)break;while(1){let a=0,o=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}a+=Math.abs(s.x-s.x0-s.stemw/2);s.x++;o+=Math.abs(s.x-s.x0-s.stemw/2)}if(t[s].x>t[s].x0-t[s].stemw/2){for(let e=s;e<t.length;e++){t[e].x--}break}const n=t[t.length-1];if(n.x+n.width/2>=e){return}if(o<=a);else{for(let a=s;a<t.length;a++){if(t[a].x0>e){break}t[a].x--}break}}}}const vcfnotannotated_label="Not annotated";const middlealignshift=.3;const disclabelspacing=1;const minbpwidth=4;const modefold=0;const modeshow=1;async function dstkload(t,e){try{if(!t)throw"no tk";if(!t.ds)throw"no ds";if(!e.gmmode||e.gmmode==gmmode.genomic){if(e.viewrangeabovelimit(t.viewrangeupperlimit)){t.mlst=[];t.viewrangeupperlimit_above=true;dstkrender(t,e);return}}delete t.viewrangeupperlimit_above;if(t.isvcf){e.tkcloakon(t);loadvcftk(e,t);return}if(e.ds2handle[t.ds.label]){t.__handlesays=e.ds2handle[t.ds.label].handlesays}if(t.ds.bulkdata||t.ds.mlst){return await dstkload_fromclientdata(t,e)}await dstkload_fromdsquery(t,e);mayAddSubtk_legacyDsFilter(t,e);t.ds.busy=false;e.tkcloakoff(t,{})}catch(s){if(s.stack)console.log(s.stack);t.ds.busy=false;e.tkcloakoff(t,{error:s.message||s});e.setllabel(t);e.block_setheight()}}function mayAddSubtk_legacyDsFilter(t,e){if(!t.legacyDsFilter)return;if(!t.legacyDsFilter.key||!t.legacyDsFilter.value)throw"legacyDsFilter is not {key,value}";const s=t.mlst.filter((e=>e[t.legacyDsFilter.key]==t.legacyDsFilter.value));const a={label:t.ds.label+" - "+t.legacyDsFilter.value,bulkdata:{},parentname:t.ds.label,iscustom:true,sampleselectable:t.ds.sampleselectable};a.bulkdata[e.usegm.name.toUpperCase()]=s;e.addchilddsnoload(a);const o=e.block_addtk_template({type:tkt.ds,ds:a});dstkload(o,e)}async function dstkload_fromclientdata(t,e){if(e.usegm){if(t.__handlesays){t.__handlesays.style("background-color","#ddd").style("color","black")}let s=[];if(t.ds.bulkdata){const a=t.ds.bulkdata[e.usegm.name.toUpperCase()];if(a){s=[...a]}}if(t.ds.mlst){for(const a of t.ds.mlst){if(a.gene.toUpperCase()==e.usegm.name.toUpperCase()){s.push(a)}}}if(s.length){const a=[];for(const t of s){if(t.isoform&&t.isoform==e.usegm.isoform){a.push(t)}}if(a.length){load2tk([{lst:a}],e,t)}else{throw"No data from "+t.ds.label+" for "+e.usegm.isoform}}else{throw"No data from "+t.ds.label+" for "+e.usegm.name}if(t.ds.dbexpression&&(!t.eplst||t.eplst.length==0)){const s={jwt:e.jwt,db:t.ds.dbexpression.dbfile,tablename:t.ds.dbexpression.tablename,keyname:t.ds.dbexpression.keyname,key:e.usegm.name};const a=await dofetch2("dbdata",{method:"POST",body:JSON.stringify(s)});if(a.error)throw a.error;if(!t.eplst)t.eplst=[];if(t.ds.dbexpression.tidy)t.ds.dbexpression.tidy(a.rows);const o={data:a.rows,expp:t.ds.dbexpression.config,block:e,genome:e.genome,genename:e.usegm.name,dsname:t.ds.label};const n=await import("./ep-b51b82d5.js");t.eplst.push(new n.default(o))}}else{const s=[];const a=new Map;for(const t of e.rglst){if(!a.has(t.chr)){a.set(t.chr,[])}a.get(t.chr).push(t)}const o=[];if(t.ds.bulkdata){for(const e in t.ds.bulkdata){o.push(...t.ds.bulkdata[e])}}if(t.ds.mlst){o.push(...t.ds.mlst)}for(const t of o){switch(t.dt){case dtsnvindel:case dtitd:case dtdel:case dtnloss:case dtcloss:if(!t.pos){break}if(!t.chr&&!a.has(t.chr)){break}for(const e of a.get(t.chr)){if(t.pos>=e.start&&t.pos<e.stop){s.push(t);break}}break;case dtsv:case dtfusionrna:if(!t.pairlst){break}let e=false;for(const s of t.pairlst){if(s.a.chr&&a.has(s.a.chr)){const t=s.a.position||s.a.pos;if(t){for(const o of a.get(s.a.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}if(s.b.chr&&a.has(s.b.chr)){const t=s.b.position||s.b.pos;if(t){for(const o of a.get(s.b.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}}if(e){s.push(t)}break}}if(s.length){load2tk([{lst:s}],e,t)}}}async function dstkload_fromdsquery(t,e){if(t.__handlesays)t.__handlesays.text("Loading...");t.ds.busy=true;e.tkcloakon(t);const s={genome:e.genome.name,dsname:t.ds.label,range:e.tkarg_maygm(t)[0]};if(e.usegm){s.genename=e.usegm.name;s.isoform=e.usegm.isoform}if(t.eplst){s.noexpression=1}if(e.hidedatasetexpression){s.noexpression=1}const a=await dofetch2("dsdata",{method:"POST",body:JSON.stringify(s)});if(t.__handlesays){t.__handlesays.text(t.ds.label).style("background-color","#ddd").style("color","black")}if(a.error)throw a.error;load2tk(a.data,e,t)}function load2tk(t,e,s){if(s.dsuninitiated){for(let t=0;t<e.tklst.length;t++){if(e.tklst[t].tkid==s.tkid){e.tklst.splice(t,1);break}}delete s.dsuninitiated;let t=-1;for(let s=0;s<e.tklst.length;s++){const a=e.tklst[s];if(a.type==tkt.usegm&&!a.hidden){t=s;break}}let a=true;if(t==-1){a=true;e.tklst.push(s)}else{let o=false;for(let s=0;s<t;s++){const t=e.tklst[s];if(!t.hidden&&t.type==tkt.ds){o=true;break}}if(o){a=false;e.tklst.splice(t+1,0,s)}else{a=true;if(t==0){e.tklst.unshift(s)}else{e.tklst.splice(t-1,0,s)}}}if(s.aboveprotein==undefined){s.aboveprotein=a}s.eplst=[]}s.mlst=[];const a=[];for(const o of t){if(o.isgeneexpression){a.push(dsqueryresult_geneexpression(o,s,e));continue}if(o.vcfid){data2tk(o,s,e);continue}if(o.lst){dsqueryresult_snvindelfusionitd(o.lst,s,e);may_print_stratifycountfromserver(o,s);continue}e.error("unknown data/query type from "+s.ds.label);return}Promise.all(a).then((()=>{if(s.eplst.length>1){for(let t=1;t<s.eplst.length;t++){const e=s.eplst[t];e.pane.pane.style("left",Number.parseInt(s.eplst[0].pane.pane.style("left"))+50*t+"px");e.pane.pane.style("top",Number.parseInt(s.eplst[0].pane.pane.style("top"))+50*t+"px")}}}));dstkrender(s,e)}function dstkrender(t,e){e.tkcloakoff(t,{});mlst_set_occurrence(t);if(t.vcfinfofilter&&t.vcfinfofilter.setidx4numeric!=undefined){if(!t.numericmode){t.numericmode={axisheight:t.axisheight}}}else{delete t.numericmode}const s=new Set;for(const t in morigin){if(morigin[t].hidden){s.add(t)}}vcfinfofilter_mayupdateautocategory(t);if(t.numericmode){rendernumerictk(t,e,s)}else{renderskewertk(t,e,s)}e.setllabel(t);e.block_setheight();e.tkchangeaffectlegend(t);showlegend_vcfinfofilter(t,e);showlegend_populationfrequencyfilter(t,e);{const s=showlegend_sampleattribute(t,e);if(s)console.log("showlegend_sampleattribute: "+s)}}function mlst_set_occurrence(t){if(t.vcfinfofilter&&t.vcfinfofilter.setidx4occurrence!=undefined){const e=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4occurrence];if(!e)throw"mcset not found by setidx4occurrence";for(const s of t.mlst){const[t,a]=getter_mcset_key(e,s);if(t||a==undefined){s.occurrence=1}else{s.occurrence=a[0]}}}else{for(const e of t.mlst){e.occurrence=1}}}function renderskewertk(t,e,s){t.leftaxis.selectAll("*").remove();if(e.usegm&&e.gmmode!=gmmode.genomic&&e.pannedpx!=undefined&&t.skewer){tkdata_update_x(t,e);t.skewer.attr("transform",(t=>"translate("+t.x+","+t.y+")"));settle_glyph(t,e)}else{t.glider.selectAll("*").remove();mlst_pretreat(t,e,s);const a=new Map;for(const e of t.mlst){if(e.__x==undefined){continue}if(!a.has(e.__x)){a.set(e.__x,[])}a.get(e.__x).push(e)}const o=[];if(e.exonsf>=minbpwidth){for(const[t,e]of a){o.push({chr:e[0].chr,pos:e[0].pos,mlst:e,x:t,groups:mlst2disc(e)})}}else{if(e.usegm&&e.usegm.coding&&e.gmmode!=gmmode.genomic){const t=new Map;for(const[s,o]of a){if(o[0].chr!=e.usegm.chr){continue}let n=undefined;for(const t of o){if(Number.isFinite(t.aapos))n=t.aapos}if(n==undefined){n=genomic2gm(o[0].pos,e.usegm).aapos}if(n==undefined){console.error("data item cannot map to aaposition");console.log(o[0]);continue}a.delete(s);if(!t.has(n)){t.set(n,[])}let r=true;for(const s of t.get(n)){if(Math.abs(s[0].__x-o[0].__x)<=e.exonsf*3){for(const t of o){s.push(t)}r=false;break}}if(r){t.get(n).push(o)}}e.usegm.utr5?e.usegm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0;for(const e of t.values()){for(const t of e){let e=null;for(const s of t){if(Number.isFinite(s.rnapos))e=s}if(e==null){console.log("trying to map mlst to codon, but no rnapos found");for(const e of t){console.log(e)}continue}o.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x,groups:mlst2disc(t)})}}}const t=[];const s=2;for(const[e,o]of a){const a=Math.floor(e/s);if(!t[a]){t[a]=[]}t[a]=[...t[a],...o]}for(const e of t){if(!e)continue;const t=e.reduce(((t,e)=>t+e.__x),0);o.push({isbin:true,chr:e[0].chr,pos:e[0].pos,mlst:e,x:t/e.length,groups:mlst2disc(e)})}}o.sort(((t,e)=>t.x-e.x));if(t.data&&e.pannedpx!=undefined&&(!e.usegm||e.gmmode==gmmode.genomic)){const e={};for(const s of t.data){e[s.chr+"."+s.pos]={mode:s.showmode,xoffset:s.xoffset,slabelrotate:s.slabelrotate}}for(const t of o){const s=t.chr+"."+t.pos;if(e[s]){t.showmode=e[s].mode;t.xoffset=e[s].xoffset;t.slabelrotate=e[s].slabelrotate}}}t.data=o;for(const e of t.data){e.occurrence=e.groups.reduce(((t,e)=>t+e.occurrence),0)}skewer_make(t,e);t.height_main=t.toppad+t.maxskewerheight+t.stem1+t.stem2+t.stem3+t.bottompad}if(!t.data||t.data.length==0){done_tknodata(t,e);return}if(t.hlaachange||t.hlvariants){const s=[];const a=[];if(t.hlaachange){for(const e of t.data){let o=false;for(const s of e.groups){if(t.hlaachange.has(s.mlst[0].mname)){o=true;t.hlaachange.delete(s.mlst[0].mname);break}}if(o){a.push(e)}else{s.push(e)}}if(t.hlaachange.size){if(!e.usegm){e.error("cannot add items from hlaachange: not in gene-mode")}else{hlaachange_addnewtrack(t,e)}}delete t.hlaachange}if(t.hlvariants){const e={};for(const s of t.hlvariants){e[s.chr+"."+s.pos+"."+s.ref+"."+s.alt]=1}for(const o of t.data){let t=false;for(const s of o.groups){if(t){break}for(const a of s.mlst){if(e[a.chr+"."+a.pos+"."+a.ref+"."+a.alt]){t=true;break}}}if(t){a.push(o)}else{s.push(o)}}}fold_glyph(s,t);unfold_glyph(a,t,e)}else{settle_glyph(t,e)}}function mlst2disc(t,e){const s=new Map;for(const e of t){switch(e.dt){case dtsnvindel:if(!s.has(e.dt)){s.set(e.dt,new Map)}if(!s.get(e.dt).has(e.class)){s.get(e.dt).set(e.class,new Map)}const t=e.mname||"";if(!s.get(e.dt).get(e.class).has(t)){s.get(e.dt).get(e.class).set(t,[])}s.get(e.dt).get(e.class).get(t).push(e);break;case dtsv:case dtfusionrna:if(!s.has(e.dt)){s.set(e.dt,new Map)}if(!s.get(e.dt).has(e.class)){s.get(e.dt).set(e.class,{use5:new Map,use3:new Map})}if(e.useNterm){if(!s.get(e.dt).get(e.class).use5.has(e.mname)){s.get(e.dt).get(e.class).use5.set(e.mname,[])}s.get(e.dt).get(e.class).use5.get(e.mname).push(e)}else{if(!s.get(e.dt).get(e.class).use3.has(e.mname)){s.get(e.dt).get(e.class).use3.set(e.mname,[])}s.get(e.dt).get(e.class).use3.get(e.mname).push(e)}break;case dtitd:case dtdel:case dtnloss:case dtcloss:if(!s.has(e.dt)){s.set(e.dt,[])}s.get(e.dt).push(e);break;default:console.log("unknown datatype: "+e.dt);console.log(e);return}}const a=[];for(const[t,e]of s){switch(t){case dtsnvindel:for(const s of e.values()){for(const e of s.values()){a.push({dt:t,mlst:e})}}break;case dtsv:case dtfusionrna:for(const s of e.values()){for(const e of s.use5.values()){a.push({dt:t,useNterm:true,mlst:e})}for(const e of s.use3.values()){a.push({dt:t,useNterm:false,mlst:e})}}break;case dtitd:case dtdel:case dtnloss:case dtcloss:a.push({dt:t,mlst:e})}}for(const t of a){let e=0,s=0;for(const a of t.mlst){if(a.isrim1)e++;else if(a.isrim2)s++}t.rim1count=e;t.rim2count=s;t.occurrence=t.mlst.reduce(((t,e)=>t+e.occurrence),0)}a.sort(((t,e)=>e.occurrence-t.occurrence));return a}function skewer_make(t,e){delete t.skewer2;const s=e=>{if(t.vcfinfofilter&&t.vcfinfofilter.setidx4mclass!=undefined){const s=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4mclass];const[a,o]=getter_mcset_key(s,e);if(a||o==undefined)return"black";for(const t of o){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(mclass[e.class]){return mclass[e.class].color}return"black"};const a=[];for(const s of t.data){s.x0=s.x;if(s.xoffset!=undefined){s.x=s.x0+s.xoffset}for(const t of s.groups){t.aa=s;let o=null;if(t.dt==dtitd){o=t.mlst[0].rnaduplength;for(const e of t.mlst){o=Math.max(o,e.rnaduplength)}}else if(t.dt==dtdel){o=t.mlst[0].rnadellength;for(const e of t.mlst){o=Math.max(o,e.rnadellength)}}else{continue}if(!Number.isFinite(o)||o<0){console.log("no rnaspan for stack bar from itd/del");console.log(t.mlst);continue}let n=null;if(e.usegm){const a=t.mlst[0].rnapos;const r=rna2gmcoord(a+o,e.usegm);const i=e.seekcoord(e.usegm.chr,r);if(i.length>0){n=i[0].x-s.x}else{console.log(r+" no hit on rglst")}}if(!Number.isFinite(n)){console.log("no pxspan for stack bar from itd/del");console.log(t.mlst);continue}t.stackbar={aa:s.mlst[0].aapos,pxspan:n,height:4,grp:t};s.hasstackbar=true;a.push(t.stackbar)}}let o=0;if(a.length>0){let t=1;for(let e=0;e<a.length;e++){const s=a[e];const n=[];for(let t=0;t<e;t++){const e=a[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){n.push(e)}}s.y=2;for(const e of n){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}o=Math.max(o,s.y+s.height)}}const n=Math.max(14,e.width/110);let r=0;for(const e of t.data){for(const t of e.groups){r=Math.max(r,t.occurrence)}}let i=0;const l=Math.pow(n/2,2)*Math.PI;if(r<=10)i=l*r*.9;else if(r<=100)i=l*10;else if(r<=1e3)i=l*14;else i=l*20;const c=linear().domain([1,r*.5,r*.6,r*.7,r*.8,r]).range([l,l+(i-l)*.8,l+(i-l)*.85,l+(i-l)*.9,l+(i-l)*.95,i]);let f=n/2;t.maxskewerheight=0;t.skewer=t.glider.selectAll().data(t.data).enter().append("g").attr("class","sja_skg").each((function(e){e.skewer=this;if(e.showmode==undefined){e.showmode=modefold}e.maxradius=0;e.maxrimwidth=0;e.width=0;e.slabelrotate=false;e.slabelwidth=0;for(const t of e.groups){if(t.occurrence==1){t.radius=n/2}else{const e=t.occurrence.toString().length;t.radius=Math.max(Math.sqrt(c(t.occurrence)/Math.PI),e*5)}e.maxradius=Math.max(e.maxradius,t.radius);f=Math.max(f,t.radius);t.rimwidth=t.rim1count+t.rim2count==0?0:Math.max(2,t.radius/6);e.maxrimwidth=Math.max(e.maxrimwidth,t.rimwidth)}let s=0;for(const t of e.groups){t.yoffset=s+t.radius+t.rimwidth;s+=(t.radius+t.rimwidth)*2}t.maxskewerheight=Math.max(t.maxskewerheight,s)}));const d=t.skewer.selectAll().data((t=>t.groups)).enter().append("g").attr("transform",(e=>"translate(0,"+(e.aa.showmode==modefold?0:e.yoffset*(t.aboveprotein?-1:1))+")")).attr("class","sja_aa_discg").each((function(t){t.g=this}));const p=d.append("circle");p.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtnloss||t.dt==dtcloss)).attr("fill","white").attr("stroke-width",2).attr("stroke",(t=>s(t.mlst[0]))).attr("r",(t=>t.radius-2));p.filter((t=>t.dt==dtsnvindel||t.dt==dtsv||t.dt==dtfusionrna)).attr("fill",(t=>s(t.mlst[0]))).attr("stroke","white").attr("r",(t=>t.radius-.5));d.filter((t=>t.dt==dtfusionrna||t.dt==dtsv)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>d3arc()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));const m=d.filter((t=>t.occurrence>1)).append("text").text((t=>t.occurrence)).attr("font-family",font).attr("class","sja_aa_discnum").attr("fill-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("stroke-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("text-anchor","middle").each((t=>{const e=t.radius*1.5;t.discnumfontsize=Math.min(e/(t.occurrence.toString().length*textlensf),e)})).attr("font-size",(t=>t.discnumfontsize)).attr("y",(t=>t.discnumfontsize*middlealignshift));m.filter((t=>t.dt==dtsnvindel)).attr("fill","white");m.filter((t=>t.dt==dtsv||t.dt==dtfusionrna)).attr("stroke",(t=>s(t.mlst[0]))).attr("stroke-width",.8).attr("font-weight","bold").attr("fill","white");m.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtcloss||t.dt==dtnloss)).attr("fill",(t=>s(t.mlst[0])));const u=d.append("text").text((t=>t.mlst[0].mname)).attr("font-size",(t=>{t._labfontsize=Math.max(12,t.radius*1.2);return t._labfontsize})).each((function(e){const s=this.getBBox().width;e._label_width=s;if(e.aa.groups.length==1){e.aa.slabelrotate=true;e.aa.slabelwidth=s;t.maxskewerheight=Math.max(t.maxskewerheight,(e.radius+e.rimwidth)*2+2+s)}})).attr("fill",(t=>s(t.mlst[0]))).attr("x",(t=>t.radius+t.rimwidth+1)).attr("y",(t=>t._labfontsize*middlealignshift)).attr("font-family",font).classed("sja_aa_disclabel",true).attr("fill-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("transform","scale(1) rotate(0)").on("mousedown",(t=>{t.stopPropagation()})).on("click",((s,a)=>{fold_glyph([a.aa],t);unfold_update(t,e);if(e.debugmode){console.log(a.aa)}}));if(t.hlaachange){u.filter((e=>t.hlaachange.has(e.mlst[0].mname))).classed("sja_pulse",true)}for(const e of t.data){let t=0,s=0;for(const a of e.groups){t=Math.max(t,a.radius+a.rimwidth);s=Math.max(s,a.radius+a.rimwidth+disclabelspacing+a._label_width)}e.width=t+s}d.append("circle").attr("r",(t=>t.radius-.5)).attr("stroke",(t=>s(t.mlst[0]))).attr("class","sja_aa_disckick").attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>{if(t.disc_mouseover){t.disc_mouseover(s,e.target)}else{epaint_may_hl(t,s.mlst,true)}})).on("mouseout",((e,s)=>{if(t.disc_mouseout){t.disc_mouseout(s)}else{epaint_may_hl(t,s.mlst,false)}})).on("click",(async(s,a)=>{const o=s.target.getBoundingClientRect();if(a.dt==dtfusionrna||a.dt==dtsv){itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e,svgraph:true});return}if(a.occurrence==1){itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e});return}if(await may_sunburst(a.occurrence,a.mlst,a.aa.x,skewer_sety(a,t)+a.yoffset*(t.aboveprotein?-1:1),t,e)){return}itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e})}));const h=d3arc().innerRadius((t=>t.radius)).outerRadius((t=>t.radius+t.rimwidth)).startAngle(0).endAngle((t=>{t.rim1_startangle=Math.PI*2*t.rim1count/t.occurrence;return t.rim1_startangle}));d.append("path").attr("d",h).attr("fill",(t=>s(t.mlst[0]))).attr("class","sja_aa_discrim").attr("fill-opacity",0);const g=d3arc().innerRadius((t=>t.radius+.5)).outerRadius((t=>t.radius+.5+t.rimwidth)).startAngle((t=>t.rim1_startangle)).endAngle((t=>t.rim1_startangle+Math.PI*2*t.rim2count/t.occurrence));d.filter((t=>t.rim2count>0)).append("path").attr("d",g).attr("stroke",(t=>s(t.mlst[0]))).attr("fill","none").attr("class","sja_aa_discrim").attr("stroke-opacity",0);{let e=0;let s=0;for(const a of t.data){if(a.x-a.maxradius-a.maxrimwidth<s){e++}s=Math.max(s,a.x+a.width-a.maxradius-a.maxrimwidth)}t.stem1=e==0?0:n;t.stem2=linear().domain([0,1,t.data.length]).range([0,n,n*3])(e)}const b=n*.7;let y=0;for(const e of t.data){for(const t of e.groups){y=Math.max(y,t.occurrence)}}t.stem3=Math.max(o+2,b+n*Math.min(5,y));t.skewer.append("circle").attr("class","sja_aa_skkick").attr("fill","white").attr("fill-opacity",0).attr("stroke","none").attr("r",(t=>t.maxradius+1)).attr("cy",(e=>(t.aboveprotein?-1:1)*e.maxradius)).attr("transform",(t=>"scale("+(t.showmode==modefold?1:0)+")")).on("mouseover",((e,a)=>{epaint_may_hl(t,a.mlst,true);const o=t.aboveprotein;let n=0;let r=0;const i=5;const l=o?7:14;for(const e of a.groups){e.pica_fontsize=Math.max(11,e.radius);n+=e.pica_fontsize+1;t.pica.g.append("text").text(e.mlst[0].mname+(e.occurrence>1?" x"+e.occurrence:"")).attr("font-size",e.pica_fontsize).each((function(){r=Math.max(r,this.getBBox().width)})).remove()}r+=i*2;const c=n+5;t.pica.g.append("rect").attr("y",o?-c:0).attr("width",r).attr("height",c).attr("fill","white").attr("fill-opacity",.8).attr("stroke","#ccc").attr("shape-rendering","crispEdges");n=0;const f=t.pica.g.selectAll().data(a.groups).enter().append("g").attr("transform",((t,e)=>{n+=t.pica_fontsize+1;return"translate("+i+","+n*(o?-1:1)+")"}));f.append("text").text((t=>t.mlst[0].mname)).attr("font-size",(t=>t.pica_fontsize)).each((function(t){t.pica_mlabelwidth=this.getBBox().width})).attr("fill",(t=>s(t.mlst[0]))).attr("dominant-baseline",o?"hanging":"auto");const d=a.groups[0].pica_mlabelwidth;t.pica.x=a.x-i-d/2;t.pica.y=a.y+(o?-1:1)*(a.maxradius*2+l+2);t.pica.g.attr("transform","translate("+t.pica.x+","+t.pica.y+")");f.filter((t=>t.occurrence>1)).append("text").text((t=>"x"+t.occurrence)).attr("x",(t=>t.pica_mlabelwidth+5)).attr("font-size",(t=>t.pica_fontsize)).attr("dominant-baseline",o?"hanging":"auto").attr("fill","#9e9e9e");const p=t.pica.g.append("g").attr("transform","translate("+(i+d/2)+","+(o?1:-1)+")");p.append("line").attr("y2",(o?1:-1)*l).attr("stroke","#858585").attr("shape-rendering","crispEdges");p.append("line").attr("x1",-1).attr("x2",-1).attr("y2",(o?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges");p.append("line").attr("x1",1).attr("x2",1).attr("y2",(o?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges")})).on("mouseout",((e,s)=>{t.pica.g.selectAll("*").remove();epaint_may_hl(t,s.mlst,false)})).on("click",((s,a)=>{t.pica.g.selectAll("*").remove();unfold_glyph([a],t,e)}));let k=0;for(const e of t.data){k=Math.max(k,e.occurrence)}const x=linear().domain([1,k]).range([b,t.stem3-f]);t.skewer.attr("transform",(e=>{e.foldyoffset=x(e.occurrence);e.y=skewer_sety(e,t);return"translate("+e.x+","+e.y+")"}));if(a.length>0){t.skewer.filter((t=>t.hasstackbar)).selectAll().data((t=>{const e=[];for(const s of t.groups){if(s.stackbar){e.push(s.stackbar)}}return e})).enter().append("g").attr("class","sja_aa_stackbar_g").attr("transform",(e=>"translate(0,"+(t.aboveprotein?1:-1)*(t.stem1-e.y)+")")).append("rect").attr("y",(e=>t.aboveprotein?-e.height:0)).attr("class","sja_aa_stackbar_rect").attr("width",0).attr("shape-rendering","crispEdges").attr("fill-opacity",.5).attr("stroke","none").attr("stroke-width",1).attr("height",(t=>t.height)).attr("fill",(t=>s(t.grp.mlst[0]))).on("mouseover",((e,a)=>{const o=s(a.grp.mlst[0]);d3select(e.target).attr("stroke",o);const n=t.pica;let r="wrong label";let i="wrong label, ";switch(a.grp.mlst[0].dt){case dtitd:r=mclass[a.grp.mlst[0].class].desc;i=Math.ceil(a.grp.mlst[0].rnaduplength/3)+" aa, ";break;case dtdel:r=mclass[a.grp.mlst[0].class].label;i=Math.ceil(a.grp.mlst[0].rnadellength/3)+" aa, ";break}if(a.grp.occurrence==1){const t=a.grp.mlst[0];if(t.sample){i+=t.sample}else if(t.patient){i+=t.patient}else{i+="1 sample"}}else{i+=a.grp.occurrence+" samples"}const l=14,c=10,f=2,d=4;let p=0;n.g.append("text").text(r).attr("font-size",l).attr("font-family",font).each((function(){p=this.getBBox().width})).remove();n.g.append("text").text(i).attr("font-size",c).attr("font-family",font).each((function(){p=Math.max(p,this.getBBox().width)})).remove();const m=f*3+l+c;n.x=a.grp.aa.x0+3;n.y=t.aboveprotein?t.height_main-t.toppad-t.bottompad-a.y-a.height-3-m:a.y+a.height+3;n.g.attr("transform","translate("+n.x+","+n.y+")");n.g.append("rect").attr("width",p+d*2).attr("height",m).attr("stroke",o).attr("stroke-width",1).attr("shape-rendering","crispEdges").attr("fill","white").attr("fill-opacity",.8);n.g.append("text").text(r).attr("x",d).attr("y",f+l/2).attr("dominant-baseline","middle").attr("font-size",l).attr("font-family",font).attr("fill",o);n.g.append("text").text(i).attr("x",d).attr("y",f*2+l+c/2).attr("dominant-baseline","middle").attr("font-size",c).attr("font-family",font).attr("fill","#858585")})).on("mouseout",((e,s)=>{d3select(e.target).attr("stroke","none");t.pica.g.selectAll("*").remove()})).on("click",((s,a)=>{itemtable({mlst:a.grp.mlst,pane:true,x:s.clientX,y:s.clientY,tk:t,block:e})}))}t.skewer.append("path").attr("class","sja_aa_stem").attr("d",(e=>skewer_setstem(e,t))).attr("stroke",(t=>s(t.groups[0].mlst[0]))).attr("fill","none");const v=t.skewer.filter((t=>t.groups.length>1));v.append("rect").attr("class","sja_aa_ssk_bg").attr("shape-rendering","crispEdges").attr("fill-opacity",0).attr("height",t.stem1).attr("fill",(t=>s(t.groups[0].mlst[0]))).attr("width",(t=>{t.ssk_width=Math.max(t.occurrence.toString().length*8+6,2*(t.maxradius+t.maxrimwidth));return t.ssk_width})).attr("x",(t=>-t.ssk_width/2));v.append("text").attr("class","sja_aa_ssk_text").attr("fill","white").attr("fill-opacity",0).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","central").text((t=>t.occurrence)).each((e=>{e.ssk_fontsize=Math.min(t.stem1,e.ssk_width/(e.occurrence.toString().length*textlensf))})).attr("font-size",(t=>t.ssk_fontsize));v.append("rect").attr("class","sja_aa_ssk_kick").attr("fill","white").attr("fill-opacity",0).attr("stroke","none").attr("height",t.stem1).attr("x",(t=>-t.ssk_width/2)).attr("width",(t=>t.ssk_width)).on("mouseover",((e,s)=>{const a=d3select(e.target.parentNode);a.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",1);a.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",1).attr("stroke-opacity",1);a.select(".sja_aa_ssk_text").transition().attr("fill-opacity",1);epaint_may_hl(t,s.mlst,true)})).on("mouseout",(function(e,s){const a=d3select(e.target.parentNode);a.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",0);a.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",0).attr("stroke-opacity",0);a.select(".sja_aa_ssk_text").transition().attr("fill-opacity",0);epaint_may_hl(t,s.mlst,false)})).on("click",(async(s,a)=>{const o=s.target.getBoundingClientRect();if(a.occurrence>1){if(await may_sunburst(a.occurrence,a.mlst,a.x,a.y+(t.aboveprotein?1:-1)*t.stem1/2,t,e))return}itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e})}))}function skewer_flip(t){t.aboveprotein=!t.aboveprotein;if(t.numericmode){return}const e=t.aboveprotein;const s=1e3;const a=t.skewer.filter((t=>t.hasstackbar));a.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(s=>{const a=s.grp.aa;return"translate("+(a.showmode==modefold?0:a.x0-a.x)+","+(e?1:-1)*(a.showmode==modefold?t.stem1-s.y:t.stem1+t.stem2+t.stem3-s.y)+")"}));a.filter((t=>t.showmode==modeshow)).selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("y",(t=>e?-t.height:0));t.skewer.transition().duration(s).attr("transform",(e=>{e.y=skewer_sety(e,t);return"translate("+e.x+","+e.y+")"}));t.skewer.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(e=>skewer_setstem(e,t)));t.skewer.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>{t.y=(e?-1:1)*(t.aa.showmode==modefold?t.aa.maxradius:t.yoffset);return"translate(0,"+t.y+")"}));t.skewer.selectAll(".sja_aa_ssk_kick").attr("y",e?0:-t.stem1);t.skewer.selectAll(".sja_aa_ssk_bg").attr("y",e?0:-t.stem1);t.skewer.selectAll(".sja_aa_ssk_text").attr("y",(e?1:-1)*t.stem1/2);t.skewer.selectAll(".sja_aa_skkick").attr("cy",(t=>(e?-1:1)*t.maxradius));t.skewer.filter((t=>t.showmode==modeshow&&t.groups.length==1)).selectAll(".sja_aa_disclabel").transition().duration(s).attr("transform",(t=>"scale(1) rotate("+(t.aa.slabelrotate?(e?"-":"")+"90":"0")+")"))}function skewer_sety(t,e){if(e.aboveprotein){if(t.showmode==modefold){return e.maxskewerheight+e.stem1+e.stem2+e.stem3-t.foldyoffset}return e.maxskewerheight}if(t.showmode==modefold)return t.foldyoffset;return e.stem1+e.stem2+e.stem3}function skewer_setstem(t,e){if(e.aboveprotein){if(t.showmode==modefold){return"M0,0v0l0,0v"+t.foldyoffset}return"M0,0v"+e.stem1+"l"+(t.x0-t.x)+","+e.stem2+"v"+e.stem3}if(t.showmode==modefold){return"M0,0v0l0,0v-"+t.foldyoffset}return"M0,0v-"+e.stem1+"l"+(t.x0-t.x)+",-"+e.stem2+"v-"+e.stem3}function settle_glyph(t,e){if(t.data.length==0){return}const s=0;const a=e.width;let o=0;const n=[];const r=[];for(const e of t.data){if(e.x0<s||e.x0>a){delete e.xoffset;r.push(e)}else{o+=e.slabelrotate?(e.groups[0].radius+e.groups[0].rimwidth)*2:e.width;n.push(e)}}fold_glyph(r,t);let i=[];const l=[];if(o<a-s){i=n}else{n.sort(((t,e)=>{if(e.occurrence==t.occurrence){if(e.groups.length==t.groups.length){return Math.abs(t.x0*2-s-a)-Math.abs(e.x0*2-s-a)}else{return e.groups.length-t.groups.length}}return e.occurrence-t.occurrence}));let t=0;let e=(a-s)*.8;let o=false;for(const s of n){if(o){delete s.xoffset;l.push(s);s.showmode=modefold}else{if(t+s.width<e){i.push(s);t+=s.width}else{o=true;delete s.xoffset;l.push(s);s.showmode=modefold}}}}fold_glyph(l,t);unfold_glyph(i,t,e)}function unfold_glyph(t,e,s){const a=1e3;const o=e.aboveprotein;const n=new Set;const r=new Set;let i=false;for(const s of t){if(s.showmode==modeshow){n.add(s.x0)}else{s.showmode=modeshow;r.add(s.x0);i=true;s.y=skewer_sety(s,e)}}if(i){const t=e.skewer.filter((t=>r.has(t.x0)));t.transition().duration(a).attr("transform",(t=>"translate("+t.x+","+t.y+")"));t.selectAll(".sja_aa_discg").transition().duration(a).attr("transform",(t=>{t.y=t.yoffset*(o?-1:1);return"translate(0,"+t.y+")"}));setTimeout((function(){t.selectAll(".sja_aa_disckick").attr("transform","scale(1)")}),a);t.selectAll(".sja_aa_discnum").transition().duration(a).attr("fill-opacity",1).attr("stroke-opacity",1);t.filter((t=>t.groups.length>1)).selectAll(".sja_aa_disclabel").transition().duration(a).attr("fill-opacity",1).attr("transform","scale(1)");t.selectAll(".sja_aa_discrim").transition().duration(a).attr("fill-opacity",1).attr("stroke-opacity",1);t.selectAll(".sja_aa_ssk_kick").attr("transform","scale(1)").attr("y",o?0:-e.stem1);t.selectAll(".sja_aa_ssk_bg").attr("transform","scale(1)").attr("y",o?0:-e.stem1);t.selectAll(".sja_aa_ssk_text").attr("transform","scale(1)").attr("y",(o?1:-1)*e.stem1/2);t.selectAll(".sja_aa_skkick").attr("transform","scale(0)");t.filter((t=>t.hasstackbar)).selectAll(".sja_aa_stackbar_g").attr("transform",(t=>"translate(0,"+(o?1:-1)*(e.stem1+e.stem2+e.stem3-t.y)+")"));let n=0;t.selectAll(".sja_aa_stem").transition().duration(a).attr("d",(t=>skewer_setstem(t,e))).each((()=>++n)).on("end",(()=>{if(!--n){unfold_update(e,s)}}))}else{unfold_update(e,s)}}function unfold_update(t,e){const s=1e3;const a=t.aboveprotein;const o=[];const n=new Set;const r=0;const i=e.width;for(const e of t.data){if(e.x0<r||e.x0>i)continue;if(e.showmode==modeshow){e.x=e.x0;o.push(e);n.add(e.x0)}}if(o.length==0){return}horiplace(o,t,e);for(const t of o){t.xoffset=t.x-t.x0}for(let e=0;e<o.length;e++){const s=o[e];if(s.groups.length>1)continue;const a=s.groups[0];if(t.slabel_forcerotate){s.slabelrotate=true}else{const t=o[e+1];const n=t?t.x-t.maxradius-t.maxrimwidth:i;s.slabelrotate=n-s.x-a.radius-a.rimwidth-1<s.slabelwidth}s.width=(a.radius+a.rimwidth)*2+(s.slabelrotate?0:2+s.slabelwidth)}const l=t.skewer.filter((t=>n.has(t.x0)));l.transition().duration(s).attr("transform",(t=>"translate("+t.x+","+t.y+")"));l.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(e=>skewer_setstem(e,t)));l.filter((t=>t.groups.length==1)).selectAll(".sja_aa_disclabel").transition().duration(s).attr("fill-opacity",1).attr("transform",(t=>"scale(1) rotate("+(t.aa.slabelrotate?(a?"-":"")+"90":"0")+")"));t.slabel_forcerotate=false;const c=l.filter((t=>t.hasstackbar));c.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(e=>"translate("+(e.grp.aa.x0-e.grp.aa.x)+","+(a?1:-1)*(t.stem1+t.stem2+t.stem3-e.y)+")"));c.selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("width",(t=>t.pxspan)).attr("y",(t=>a?-t.height:0))}function horiplace(t,e,s){const a=0;const o=s.width;let n=a;let r=false;for(const e of t){if(e.x0<a||e.x0>o)continue;if(e.groups.length==1){e.slabelrotate=true;const t=e.groups[0];e.width=(t.radius+t.rimwidth)*2}const t=e.x-e.maxradius-e.maxrimwidth;if(t<n){r=true}if(t+e.width>o){r=true}n=Math.max(n,t+e.width)}if(!r){return false}n=a;for(const e of t){if(e.x0<a||e.x0>o)continue;e.x=n+e.maxradius+e.maxrimwidth;n+=e.width}horiplace0(t,s.width)}function horiplace0(t,e){for(let s=0;s<t.length;s++){if(t[s].x0<0)continue;if(t[s].x0>e)break;while(1){let a=0,o=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}a+=Math.abs(s.x-s.x0);s.x++;o+=Math.abs(s.x-s.x0)}if(t[s].x>=t[s].x0){for(let e=s;e<t.length;e++){t[e].x--}break}const n=t[t.length-1];if(n.x+n.width/2>=e){return}if(o<=a);else{for(let a=s;a<t.length;a++){if(t[a].x0>e){break}t[a].x--}break}}}}function fold_glyph(t,e){if(t.length==0)return;const s=1e3;const a=e.aboveprotein;const o=new Set;for(const s of t){s.x=s.x0;o.add(s.x0);s.showmode=modefold;s.y=skewer_sety(s,e)}const n=e.skewer.filter((t=>o.has(t.x0)));n.transition().duration(s).attr("transform",(t=>"translate("+t.x+","+t.y+")"));n.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(t=>skewer_setstem(t,e)));n.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>"translate(0,"+(a?"-":"")+t.aa.maxradius+")"));n.selectAll(".sja_aa_disckick").attr("transform","scale(0)");n.selectAll(".sja_aa_discnum").transition().duration(s).attr("fill-opacity",0).attr("stroke-opacity",0);n.selectAll(".sja_aa_disclabel").transition().duration(s).attr("fill-opacity",0).attr("transform","scale(0)");n.selectAll(".sja_aa_discrim").transition().duration(s).attr("fill-opacity",0).attr("stroke-opacity",0);n.selectAll(".sja_aa_ssk_kick").attr("transform","scale(0)");n.selectAll(".sja_aa_ssk_bg").attr("transform","scale(0)");n.selectAll(".sja_aa_ssk_text").attr("transform","scale(0)");n.selectAll(".sja_aa_skkick").transition().duration(s).attr("transform","scale(1)");const r=n.filter((t=>t.hasstackbar));r.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(t=>"translate(0,"+(a?1:-1)*(e.stem1-t.y)+")"));r.selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("width",0)}function epaint_may_hl(t,e,s){if(!t.eplst)return;for(const a of t.eplst){a.may_hl(e,s)}}function dsqueryresult_geneexpression(data,tk,block){if(!data.config){block.error("config missing for expression data in "+tk.ds.label);return}if(data.config.maf){try{data.config.maf.get=eval("("+data.config.maf.get+")")}catch(t){block.error("invalid javascript for config.maf.get of "+tk.ds.label);return}}const config=data.config;if(config.usecohort){config.cohort=tk.ds.cohort}const eparg={data:data.lst,expp:config,block:block,genome:block.genome,genename:block.usegm.name,dsname:tk.ds.label};if(block.samplecart){if(tk.ds.sampleselectable){eparg.samplecart=block.samplecart}}return import("./ep-b51b82d5.js").then((t=>{tk.eplst.push(new t.default(eparg))}))}function dsqueryresult_snvindelfusionitd(t,e,s){for(const a of t){switch(a.dt){case dtsnvindel:if(s.usegm){const t=genomic2gm(a.pos,s.usegm);a.rnapos=t.rnapos;a.aapos=t.aapos}e.mlst.push(a);break;case dtsv:case dtfusionrna:if(!a.pairlst){console.error("pairlst missing from sv/fusion");break}if(s.usegm&&a.dt==dtsv){if(a.pairlst.length==1){const t=a.pairlst[0].a;const e=a.pairlst[0].b;if(t.chr!=null&&e.chr!=null&&t.chr==e.chr&&t.position!=null&&e.position!=null){if(t.position<e.position){if(s.usegm.strand=="+"){t.strand="+";e.strand="+"}else{t.strand="-";e.strand="-";a.pairlst[0].a=e;a.pairlst[0].b=t}}}}}if(s.usegm&&s.gmmode!=gmmode.genomic){a.isoform=s.usegm.isoform;let t=true;for(let e=0;e<a.pairlst.length;e++){const o=a.pairlst[e];if(s.usegm.isoform==(o.a.isoform||o.a.name)){a.useNterm=e==0;a.chr=s.usegm.chr;a.strand=o.a.strand;if(o.a.position==undefined){if(o.a.rnaposition==undefined){if(o.a.codon==undefined){console.error("no position/rnaposition/codon available for "+s.usegm.isoform);break}else{a.pos=aa2gmcoord(o.a.codon,s.usegm);o.a.position=a.pos}}else{a.pos=rna2gmcoord(o.a.rnaposition-1,s.usegm);if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+o.a.rnaposition);break}o.a.position=a.pos}}else{a.pos=o.a.position}const n=genomic2gm(a.pos,s.usegm);a.rnapos=n.rnapos;a.aapos=n.aapos;if(o.a.codon){a.aapos=o.a.codon}a.mname=o.b.name;t=false;break}if(s.usegm.isoform==(o.b.isoform||o.b.name)){a.useNterm=false;a.chr=s.usegm.chr;a.strand=o.b.strand;if(o.b.position==undefined){if(o.b.rnaposition==undefined){if(o.b.codon==undefined){console.error("no position/rnaposition/codon available for "+s.usegm.isoform);break}else{a.pos=aa2gmcoord(o.b.codon,s.usegm);o.b.position=a.pos}}else{a.pos=rna2gmcoord(o.b.rnaposition-1,s.usegm);if(a.pos==null){console.error("failed to convert rnaposition to genomic");break}o.b.position=a.pos}}else{a.pos=o.b.position}const e=genomic2gm(a.pos,s.usegm);a.rnapos=e.rnapos;a.aapos=e.aapos;if(o.b.codon){a.aapos=o.b.codon}a.mname=o.a.name;t=false;break}}if(t){console.error("sv/fusion isoform no match to gm isoform: "+s.usegm.isoform)}else{e.mlst.push(a)}}else{for(const t of a.pairlst){let o=false,n=false;for(let e=s.startidx;e<=s.stopidx;e++){const a=s.rglst[e];if(t.a.chr==a.chr&&t.a.position>=a.start&&t.a.position<=a.stop){o=true}if(t.b.chr==a.chr&&t.b.position>=a.start&&t.b.position<=a.stop){n=true}}if(o){const s=duplicate(a);const o=t.a;s.chr=o.chr;s.strand=o.strand;s.useNterm=o.strand=="+";s.pos=o.pos||o.position;s.mname=t.b.name||t.b.chr;if(!Number.isFinite(s.pos)){console.error("no genomic pos for breakend a")}else if(!s.chr){console.error("no chromosome for breakend a")}else{e.mlst.push(s)}}if(n){const s=duplicate(a);const o=t.b;s.chr=o.chr;s.strand=o.strand;s.useNterm=o.strand=="+";s.pos=o.pos||o.position;s.mname=t.a.name||t.a.chr;if(!Number.isFinite(s.pos)){console.error("no genomic pos for breakend b")}else if(!s.chr){console.error("no chromosome for breakend b")}else{e.mlst.push(s)}}}}break;case dtitd:case dtdel:if(a.chrpos1&&a.chrpos2){let t=genomic2gm(a.chrpos1,s.usegm);const e=t.rnapos;t=genomic2gm(a.chrpos2,s.usegm);const o=t.rnapos;if(e<o){a.pos=a.chrpos1}else{a.pos=a.chrpos2}delete a.chrpos1;delete a.chrpos2;const n=Math.abs(e-o);if(a.dt==dtitd){a.rnaduplength=n}else if(a.dt==dtdel){a.rnadellength=n}}if(a.position){a.pos=a.position;delete a.position}if(!a.pos){if(a.dt==dtitd){if(a.b){if(a.b.position){a.pos=a.b.position;a.chr=a.b.chr}}}}if(!a.pos){if(a.rnaposition){if(s.usegm){a.pos=rna2gmcoord(a.rnaposition-1,s.usegm);a.chr=s.usegm.chr;if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+a.rnaposition);break}}}else if(a.aapos);}if(!a.pos){console.error("no genomic pos for itd");break}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);if(a.rnaposition){a.rnapos=a.rnaposition}else{a.rnapos=t.rnapos}a.aapos=t.aapos}if(a.dt==dtitd){if(!a.rnaduplength){console.error("itd has no rnaduplength");a.rnaduplength=1}}else{if(!a.rnadellength){console.error("deletion has no rnadellength");a.rnadellength=1}}e.mlst.push(a);break;case dtnloss:case dtcloss:if(a.position){a.pos=a.position;delete a.position}if(!a.pos){if(a.rnaposition){if(s.usegm){a.pos=rna2gmcoord(a.rnaposition-1,s.usegm);a.chr=s.usegm.chr;if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+a.rnaposition);break}}}else if(a.aapos);}if(!a.pos){console.error("no genomic pos for truncation");break}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);if(a.rnaposition){a.rnapos=a.rnaposition}else{a.rnapos=t.rnapos}a.aapos=t.aapos}e.mlst.push(a);break;default:console.error("unknown dt: "+a.dt)}}}function hlaachange_addnewtrack(t,e){const s=new Map;for(const t in mclass){s.set(mclass[t].label.toUpperCase(),t)}const a=[];for(const[o,n]of t.hlaachange){if(n==false){continue}if(!n.name){e.error("hlaachange item .name missing");continue}if(n.codon==undefined||!Number.isFinite(n.codon)){e.error("hlaachange invalid codon for "+n.name);continue}if(!n.class){e.error("hlaachange .class missing");continue}const t=mclass[n.class]?n.class:s.get(n.class.toUpperCase());if(!t){e.error("hlaachange invalid class: "+n.class);continue}n.class=t;n.mname=n.name;delete n.name;n.chr=e.usegm.chr;n.pos=aa2gmcoord(n.codon,e.usegm);delete n.codon;n.dt=dtsnvindel;n.isoform=e.usegm.isoform;a.push(n)}if(a.length){const t={label:"Highlight",type:tkt.ds,iscustom:true,bulkdata:{}};t.bulkdata[e.usegm.name.toUpperCase()]=a;e.ownds[t.label]=t;const s=e.block_addtk_template({type:tkt.ds,ds:t});dstkload(s,e)}}function showlegend_vcfinfofilter(t,e){if(!t.vcfinfofilter)return;for(const s of t.vcfinfofilter.lst){s.holder.selectAll("*").remove();if(s.numericfilter){for(const t of s.numericfilter){t.count=0}for(const e of t.mlst){const[t,a]=getter_mcset_key(s,e);if(t){continue}if(!a)continue;const o=a[0];if(!Number.isFinite(o))continue;for(const t of s.numericfilter){if(t.side=="<"){if(o<t.value){t.count++}}else{if(o>t.value){t.count++}}}}for(const a of s.numericfilter){const o=s.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{if(s.numericCutoff==a.value&&s.numericCutoffSide==a.side){delete s.numericCutoff}else{s.numericCutoff=a.value;s.numericCutoffSide=a.side}dstkrender(t,e)}));if(s.numericCutoff==a.value&&s.numericCutoffSide==a.side){o.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}if(a.count>0){o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color","#ccc").style("color","white").html(a.count>1?a.count:"&nbsp;").style("margin-right","5px")}o.append("span").text(a.side+a.value)}continue}if(!s.categories){continue}const a=new Map;let o=0;for(const e of t.mlst){const[t,n]=getter_mcset_key(s,e);if(t){continue}if(n==undefined){o++}else{for(const t of n){if(!a.has(t)){a.set(t,0)}a.set(t,a.get(t)+1)}}}const n=[...a];if(o){n.push([vcfnotannotated_label,o])}n.sort(((t,e)=>e[1]-t[1]));for(const[a,o]of n){const n=s.categories[a]||{color:"black",label:a};const r=s.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{t.vcfinfofilter.tip.showunder(r.node());legendmenu_vcfinfo(s,a,t,e)}));r.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color",n.color).style("color","white").html(o>1?o:"&nbsp;").style("margin-right","5px");const i=r.append("span").text(n.label).style("color",n.color);if(s.categoryhidden[a]){i.style("text-decoration","line-through")}}}}function vcfinfofilter_mayupdateautocategory(t,e){if(!t.vcfinfofilter)return;for(const e of t.vcfinfofilter.lst){if(e.numericfilter){continue}if(!e.autocategory){continue}const s=new Map;for(const a of t.mlst){const[t,o]=getter_mcset_key(e,a);if(t){continue}if(o!=undefined){for(const t of o){if(!s.has(t)){s.set(t,0)}s.set(t,s.get(t)+1)}}}const a=[...s];a.sort(((t,e)=>e[1]-t[1]));const o=ordinal(schemeCategory20);e.categories={};for(const[t,s]of a){e.categories[t]={label:t,color:o(t)}}}}function getter_mcset_key(t,e){if(t.altalleleinfo){if(!e.altinfo)return["no .altinfo"];const s=e.altinfo[t.altalleleinfo.key];if(s==undefined){if(t.numericfilter){return[null,[0]]}return[null,undefined]}let a=Array.isArray(s)?s:[s];if(t.altalleleinfo.separator){a=a[0].split(t.altalleleinfo.separator)}return[null,a]}if(t.locusinfo){if(!e.info)return["no .info"];const s=e.info[t.locusinfo.key];if(s==undefined){if(t.numericfilter){return[null,[0]]}return[null,undefined]}let a=Array.isArray(s)?s:[s];if(t.locusinfo.separator){a=a[0].split(t.locusinfo.separator)}return[null,a]}return["no trigger"]}function legendmenu_vcfinfo(t,e,s,a){const o=s.vcfinfofilter.tip;o.clear();const n=t.categoryhidden[e];o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{o.hide();t.categoryhidden={};for(const s in t.categories){if(s!=e){t.categoryhidden[s]=1}}if(e!=vcfnotannotated_label){t.categoryhidden[vcfnotannotated_label]=1}dstkrender(s,a)}));if(n){o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{o.hide();delete t.categoryhidden[e];dstkrender(s,a)}))}else{o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{o.hide();t.categoryhidden[e]=1;dstkrender(s,a)}))}let r=0;for(const e in t.categoryhidden){r++}if(r>1){o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{o.hide();t.categoryhidden={};dstkrender(s,a)}))}}function getter_pfrequency(t,e){if(!t.vcfid)return[".vcfid missing"];if(!t.sampledata)return[".sampledata missing"];const s=e.ds.id2vcf[t.vcfid];if(!s)return["no vcf"];if(!s.samples||s.samples.length==0)return["vcf no samples"];let a=0;for(const e of t.sampledata){if(!e.gtallref)a++}return[null,a/s.samples.length]}function showlegend_populationfrequencyfilter(t,e){if(!t.populationfrequencyfilter)return;for(const e of t.populationfrequencyfilter.lst){e.count=0}for(const e of t.mlst){const[s,a]=getter_pfrequency(e,t);if(s){continue}for(const e of t.populationfrequencyfilter.lst){if(a<e.value){e.count++}}}t.populationfrequencyfilter.holder.selectAll("*").remove();for(const s of t.populationfrequencyfilter.lst){const a=t.populationfrequencyfilter.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{if(t.populationfrequencyfilter.cutoff==s.value){delete t.populationfrequencyfilter.cutoff}else{t.populationfrequencyfilter.cutoff=s.value}dstkrender(t,e)}));if(t.populationfrequencyfilter.cutoff==s.value){a.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color","#ccc").style("color","white").html(s.count>1?s.count:"&nbsp;").style("margin-right","5px");a.append("span").text("< "+s.value)}}function showlegend_sampleattribute(t,e){if(!t.ds||!t.ds.cohort||!t.ds.cohort.sampleattribute)return;if(!t.ds.cohort.annotation)return".ds.cohort.annotation missing";if(!t.ds.cohort.key4annotation)return".ds.cohort.key4annotation missing";const s=t.ds.cohort.sampleattribute;if(!s.lst)return".lst missing";if(!s.holder)return".holder missing";s.holder.selectAll("*").remove();if(t.mlst.length==0){return}for(const t of s.lst){if(!t.k)return".k missing for an attribute";if(!t.hiddenvalues)t.hiddenvalues=new Set}const a=[];if(t.mlst[0].sampledata){for(const e of s.lst){let s=0;const o=new Map;for(const a of t.mlst){if(!a.sampledata)continue;for(const n of a.sampledata){const a=n.sampleobj[t.ds.cohort.key4annotation];if(!a)continue;const r=t.ds.cohort.annotation[a];if(!r)continue;const i=r[e.k];if(i==undefined)continue;s++;if(!o.has(i)){o.set(i,0)}o.set(i,o.get(i)+1)}}if(s==0){continue}a.push({samplecount:s,key:e,lst:[...o].sort(((t,e)=>e[1]-t[1])).map((t=>({value:t[0],count:t[1]})))})}}else{for(const e of s.lst){let s=0;const o=new Map;for(const a of t.mlst){const n=a[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[e.k];if(i==undefined)continue;s++;if(!o.has(i)){o.set(i,0)}o.set(i,o.get(i)+1)}if(s==0){continue}a.push({samplecount:s,key:e,lst:[...o].sort(((t,e)=>e[1]-t[1])).map((t=>({value:t[0],count:t[1]})))})}}if(a.length==0){delete s.runtimelst;return}s.runtimelst=a;const o=s.holder.append("table").style("border-spacing","5px");for(const n of a){const a=o.append("tr");a.append("td").style("color","#858585").style("text-align","right").text(n.key.label||n.key.k);const r=a.append("td");for(const a of n.lst){const o=r.append("div").style("display","inline-block").style("padding","5px").attr("class","sja_clb").on("click",(()=>{s.tip.showunder(o.node());legendmenu_sampleattribute(a,n,s.tip,t,e)}));o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 3px").style("background-color","#858585").style("color","white").html(a.count>1?a.count:"&nbsp;").style("margin-right","5px");const i=o.append("span").text(a.value);if(n.key.hiddenvalues.has(a.value)){i.style("text-decoration","line-through")}}}return null}function legendmenu_sampleattribute(t,e,s,a,o){s.clear();s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{s.hide();for(const t of e.lst){e.key.hiddenvalues.add(t.value)}e.key.hiddenvalues.delete(t.value);dstkrender(a,o)}));if(e.key.hiddenvalues.has(t.value)){s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{s.hide();e.key.hiddenvalues.delete(t.value);dstkrender(a,o)}))}else{s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{s.hide();e.key.hiddenvalues.add(t.value);dstkrender(a,o)}))}if(e.key.hiddenvalues.size>1){s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{s.hide();e.key.hiddenvalues.clear();dstkrender(a,o)}))}}function mlst_pretreat(t,e,s){let a=0;let o=0;let n=[];let r=[];for(const i of t.mlst){delete i.__x;if(e.legend&&e.legend.mclasses.has(i.class)&&e.legend.mclasses.get(i.class).hidden){continue}if(e.legend&&e.legend.morigins.has(i.origin)&&e.legend.morigins.get(i.origin).hidden){continue}if(i.origin&&s.has(i.origin)){continue}if(e.gmmode==gmmode$1.protein&&e.usegm.codingstart&&e.usegm.codingstop){if(i.pos<e.usegm.codingstart||i.pos>e.usegm.codingstop)continue}if(t.vcfinfofilter){let e=false;for(const s of t.vcfinfofilter.lst){const[t,a]=getter_mcset_key(s,i);if(t){continue}const o=a==undefined?[vcfnotannotated_label]:a;if(s.numericCutoff!=undefined){const t=Number.parseFloat(o[0]);if(Number.isNaN(t)){e=true;break}if(s.numericCutoffSide=="<"){if(t>=s.numericCutoff){e=true;break}}else if(s.numericCutoffSide==">"){if(t<=s.numericCutoff){e=true;break}}}else if(s.categoryhidden){let t=false;for(const e of o){if(!s.categoryhidden[e]){t=true;break}}if(!t){e=true;break}}}if(e){continue}}if(t.populationfrequencyfilter&&t.populationfrequencyfilter.cutoff){const[e,s]=getter_pfrequency(i,t);if(e);else{if(s>t.populationfrequencyfilter.cutoff){continue}}}if(t.ds&&t.ds.cohort&&t.ds.cohort.annotation&&t.ds.cohort.key4annotation&&t.ds.cohort.sampleattribute&&t.ds.cohort.sampleattribute.runtimelst){let e=0;for(const s of t.ds.cohort.sampleattribute.runtimelst){if(s.key&&s.key.hiddenvalues){e+=s.key.hiddenvalues.size}}if(e>0){if(t.ds.vcfcohorttrack);else if(i.sampledata){let e=0;for(const s of i.sampledata){if(!alleleInGenotypeStr(s.genotype,i.alt)){continue}const a=s.sampleobj[t.ds.cohort.key4annotation];if(a){const e=t.ds.cohort.annotation[a];if(e){let s=false;for(const a of t.ds.cohort.sampleattribute.runtimelst){const t=e[a.key.k];if(t!=undefined){if(a.key.hiddenvalues.has(t)){s=true;break}}}if(s){continue}}}e++}if(e==0){continue}}else{const e=i[t.ds.cohort.key4annotation];if(e){const s=t.ds.cohort.annotation[e];if(s){let e=false;for(const a of t.ds.cohort.sampleattribute.runtimelst){const t=s[a.key.k];if(t!=undefined){if(a.key.hiddenvalues.has(t)){e=true;break}}}if(e){continue}}}}}}if(!i.chr){o++;continue}if(!Number.isInteger(i.pos)){a++;continue}const l=e.seekcoord(i.chr,i.pos);if(l.length==0){n.push(i);continue}if(l.length==1){i.__x=l[0].x}else{i.__x=l[0].x}if(i.__x<-1||i.__x>e.width+1){continue}r.push(i)}const i=[];t.tklabel.each((function(){i.push(this.getBBox().width)}));if(r.length==0){t.label_mcount.text("")}else{t.label_mcount.text(r.length<t.mlst.length?r.length+" of "+t.mlst.length+" "+t.itemlabelname+"s":r.length+" "+t.itemlabelname+(r.length>1?"s":"")).each((function(){i.push(this.getBBox().width)}))}if(t.label_stratify){for(const e of t.label_stratify){let s;if(e.bycohort){const e=new Set;for(const s of r){let a="";for(const e of t.ds.cohort.levels){const t=s[e.k];if(t){a+=t}}e.add(a)}s=e.size}else{const t=new Set;for(const s of r){let a=s[e.attr1.k];if(!a)continue;if(e.attr2){const t=s[e.attr2.k];if(t){a+=t}}if(e.attr3){const t=s[e.attr3.k];if(t){a+=t}}t.add(a)}s=t.size}if(s==0){e.svglabel.text("")}else{e.svglabel.text(s+" "+e.label+(s>1?"s":"")).each((function(){i.push(this.getBBox().width)}))}}}t.leftLabelMaxwidth=Math.max(...i);if(a+o>0){e.tkerror(t,a+o+" items have no chromosome or genomic position")}if(n.length){console.error(n.length+" items not mapped to any region");for(const t of n)console.log(t)}return r}function tkdata_update_x(t,e){for(const s of t.data){if(s.isbin){let t=0;for(const a of s.mlst){const s=e.seekcoord(a.chr,a.pos);if(a.usehitidx!=undefined&&s[a.usehitidx]){t+=s[a.usehitidx].x}else if(s.length==1){t+=s[0].x}else{console.log("cannot map item");console.log(a)}}s.x0=t/s.mlst.length;s.x=s.x0+(s.xoffset!=undefined?s.xoffset:0)}else{const t=e.seekcoord(s.chr,s.pos);if(t.length>0){s.x0=t[0].x;s.x=s.x0+(s.xoffset!=undefined?s.xoffset:0)}else{console.log("cannot map group of item");console.log(s)}}}}function done_tknodata(t,e){t.height_main=t.toppad+e.labelfontsize+t.bottompad;if(t.label_mcount&&t.label_mcount.text().length>0){t.height_main+=t.labyspace+e.labelfontsize}if(t.label_stratify){for(const s of t.label_stratify){if(s.svglabel.text().length>0){t.height_main+=t.labyspace+e.labelfontsize}}}t.glider.selectAll("*").remove();t.leftaxis.selectAll("*").remove();if(t.viewrangeupperlimit_above){e.tkerror(t,t.name+": zoom in under "+bplen(t.viewrangeupperlimit)+" to view data")}else{let s;if(!t.skewer.data||t.skewer.data.length==0){if(e.pannedpx!=undefined||e.zoomedin==true){s="view range"}else if(e.usegm&&e.gmmode!="genomic"){s=e.usegm.name||e.usegm.isoform}}e.tkerror(t,t.name+": no mutation in "+s)}if(t.hlaachange){hlaachange_addnewtrack(t,e);delete t.hlaachange}}function may_print_stratifycountfromserver(t,e){if(!t.stratifycount)return;for(const[s,a]of t.stratifycount){const t=e.label_stratify.find((t=>t.label==s));if(!t){console.error("unknown strat label: "+s);continue}t.servercount=a}}const tip=new Menu({padding:"0px"});function legend_newrow(t,e){const s=t.legend.holder.append("tr");const a=s.append("td").text(e).style("padding-right","10px").style("text-align","right").style("color","#555").style("border-right","solid 1px "+t.legend.legendcolor);const o=s.append("td");return[s,o,a]}function legend_mclass(t){if(!t.legend){return}const e=new Set;for(const[s,a]of t.legend.mclasses){if(a.hidden){e.add(s)}}const s=new Map;for(const e of t.tklst){if(e.hidden||e.type!=tkt.ds)continue;if(!e.mlst){continue}for(const t of e.mlst){if(t.class){if(!s.has(t.class)){s.set(t.class,{count:0})}s.get(t.class).count++}}}const a=[];for(const[t,o]of s){if(e.has(t)){s.get(t).hidden=true}a.push({key:t,count:o.count})}t.legend.mclasses=s;if(s.size==0){t.legend.tr_mclass.style("display","none");return}t.legend.tr_mclass.style("display","table-row");a.sort(((t,e)=>e.count-t.count));t.legend.td_mclass.selectAll("*").remove();for(const s of a){const a=t.legend.td_mclass.append("div").style("display","inline-block").style("white-space","nowrap").style("padding",t.legend.vpad+" 20px "+t.legend.vpad+" 0px").classed("sja_clb",true).on("click",(()=>{tip.clear();tip.showunder(a.node());tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.mclasses.values()){e.hidden=true}t.legend.mclasses.get(s.key).hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}));if(t.legend.mclasses.get(s.key).hidden){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}else{tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}if(e.size>1){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.mclasses.values()){e.hidden=false}for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}const o=tip.d.append("div").style("margin","20px");o.append("div").text(mclass[s.key].label.toUpperCase()).style("color",mclass[s.key].color).style("font-size",".8em");o.append("div").html(mclass[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));a.append("div").style("display","inline-block").style("background-color",mclass[s.key].color).style("margin-right","5px").style("border-radius","15px").style("padding","4px 8px").style("color","white").style("font-size",".8em").text(s.count);const o=a.append("div").style("display","inline-block").style("color",mclass[s.key].color).text(mclass[s.key].label);if(e.has(s.key)){o.style("text-decoration","line-through")}}}function legend_morigin(t){if(!t.legend){return}const e=new Set;for(const[s,a]of t.legend.morigins){if(a.hidden){e.add(s)}}const s=new Map;for(const a of t.tklst){if(a.hidden||a.type!=tkt.ds)continue;if(!a.mlst){continue}for(const t of a.mlst){if(!t.origin)continue;if(!s.has(t.origin)){let a=false;if(morigin[t.origin]&&morigin[t.origin].hidden){a=true;e.add(t.origin)}s.set(t.origin,{count:0,hidden:a})}s.get(t.origin).count++}}const a=[];for(const[t,o]of s){if(e.has(t)){s.get(t).hidden=true}a.push({key:t,count:o.count})}t.legend.morigins=s;if(s.size==0){t.legend.tr_morigin.style("display","none");return}t.legend.tr_morigin.style("display","table-row");a.sort(((t,e)=>e.count-t.count));t.legend.td_morigin.selectAll("*").remove();for(const s of a){const a=t.legend.td_morigin.append("div").style("display","inline-block").style("white-space","nowrap").style("padding",t.legend.vpad+" 20px "+t.legend.vpad+" 0px").classed("sja_clb",true).on("click",(()=>{tip.clear();tip.showunder(a.node());tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.morigins.values()){e.hidden=true}t.legend.morigins.get(s.key).hidden=false;morigin[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}));if(t.legend.morigins.get(s.key).hidden){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=false;morigin[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}else{tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}if(e.size>1){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.morigins.values()){e.hidden=false}for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}const o=tip.d.append("div").style("margin","20px");o.append("div").text(morigin[s.key].label.toUpperCase()).style("color",morigin[s.key].color).style("font-size",".8em");o.append("div").html(morigin[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));a.append("svg").style("margin-right","5px").attr("width",19).attr("height",19).html(morigin[s.key].legend);const o=a.append("div").style("display","inline-block").style("color","#858585").text(morigin[s.key].label+", "+s.count);if(e.has(s.key)){o.style("text-decoration","line-through")}}}export{dstkrender as a,runtimeattr_trunc as b,runtimeattr_itd as c,dstkload as d,runtimeattr_sv as e,fold_glyph as f,runtimeattr_snvindel as g,skewer_flip as h,itemtable as i,legend_mclass as j,legend_morigin as k,legend_newrow as l,may_sunburst as m,runtimeattr_del as r,settle_glyph as s};
1
+ import{w as newpane,O as dt2label,af as dtcnv,F as dtdel,G as dtcloss,H as dtnloss,I as dtitd,J as dtfusionrna,K as dtsv,L as dtsnvindel,E as mclass,$ as make_table_2col,g as appear,h as disappear,ag as may_findmatchingsnp,ah as snp_printhtml,B as fillbar,c as dofetch,ai as contigNameNoChr,o as sayerror,aj as coloroutframe,ak as colorinframe,d as dofetch2,t as genomic2gm,al as vcfcopymclass,am as ordinal,an as schemeCategory10,A as stratinput,z as stratify,S as rgb,X as textlensf,q as d3select,n as gmmode,l as linear,p as font,f as format,a as axisstyle,C as tkt,ao as morigin,x as rna2gmcoord,ap as aa2gmcoord,aq as duplicate,ar as gmmode$1,as as alleleInGenotypeStr,m as bplen,M as Menu}from"./app-f73edb78.js";import{v as vcfparsemeta,a as vcfparseline}from"./vcf-d8c0a17a.js";import*as path from"path";import{p as partition}from"./partition-db811f6b.js";import{d as d3arc}from"./arc-3d6751aa.js";import{b as axisLeft}from"./axis-6cb4f314.js";import{s as schemeCategory20}from"./legacy-d3-polyfill-bdb2d792.js";const separatorvp="__";function itemtable(t){const{mlst:e,tk:s,block:a}=t;if(!e||e.length==0)return;let o;if(t.pane){const s=newpane({x:t.x,y:t.y});s.header.html(mlst2headerhtml(e));o=s.body}else{o=t.holder}if(!o){console.error("no holder provided for showing table");return}const n=new Map;for(const t of e){if(!n.has(t.dt)){n.set(t.dt,[])}n.get(t.dt).push(t)}delete s.__singlevariant_table;for(const[t,e]of n){const r=o.append("div").style("margin","10px");if(n.size>1){r.append("p").text(dt2label[t]).style("color","#858585")}switch(t){case dtsnvindel:table_snvindel(e,r,s,a);break;case dtsv:case dtfusionrna:table_sv(e,r,s,a);break;case dtitd:table_itd(e,r,s,a.genome);break;case dtnloss:case dtcloss:table_truncation(e,r,s,a.genome);break;case dtdel:table_del(e,r,s,a.genome);break;case dtcnv:r.append("p").text("cnv not supported yet");break;default:r.append("p").text("unknown dt: "+t)}}handle_samplecart(e,o,s,a)}function mlst2headerhtml(t){if(t.length==1){const e=t[0];const s=mclass[e.class];if(e.dt==dtsnvindel){return'<span style="font-weight:bold;color:'+s.color+'">'+(e.mname?e.mname:e.pos?e.chr+":"+(e.pos+1):"")+'</span> <span style="font-size:80%">'+s.label+"</span>"}if(e.dt==dtsv||e.dt==dtfusionrna){const t=[];for(let s=0;s<e.pairlst.length;s++){if(s==0)t.push(e.pairlst[s].a.name?e.pairlst[s].a.name:e.pairlst[s].a.chr);t.push(e.pairlst[s].b.name?e.pairlst[s].b.name:e.pairlst[s].b.chr)}return t.join(" - ")+'&nbsp;&nbsp;<span style="font-size:80%">'+s.label+"</span>"}if(e.dt==dtnloss||e.dt==dtcloss||e.dt==dtitd||e.dt==dtdel||e.dt==dtcnv){return'<span style="font-size:80%">'+s.label+"</span>"}return"unknown dt "+e.dt}const e=new Set;for(const s of t){e.add(s.dt)}if(e.size==1){const s=[...e][0];return t.length+" "+dt2label[s]}return t.length+" mutations"}function table_snvindel(t,e,s,a){if(s.ds&&s.ds.id2vcf){if(t.length==1){const o=s.ds.id2vcf[t[0].vcfid];if(!o){e.append("p").text("No vcf config file (id: "+t[0].vcfid+")");return}vcfmdetail(t[0],o,e,s,a);return}for(const o of t){const t=s.ds.id2vcf[o.vcfid];if(!t){e.append("p").text("No vcf config file (id: "+o.vcfid+")");continue}const n=e.append("div").attr("class","sja_menuoption").on("click",(e=>{const n=newpane({x:e.clientX+100,y:Math.max(100,e.clientY-100)});vcfmdetail(o,t,n.body,s,a)}));if(o.mname){n.append("span").html(o.mname+'\t<span style="font-size:80%;color:#858585">'+mclass[o.class].label+"</span>")}else if(o.csq){n.append("span").html(o.csq[0]._mname+'\t<span style="font-size:80%;color:#858585">'+o.csq[0].Consequence+"</span>")}n.append("span").html("&nbsp;&nbsp;"+o.chr+":"+(o.pos+1)+' <span style="font-size:70%">REF</span> '+o.ref+' <span style="font-size:70%">ALT</span> '+o.alt)}return}const o=a.genome.hasSNP;const n={chr:null,bprange:[],holder:null,says:null};const r={set:new Map,butholder:null};for(const e of t){if(o&&e.chr&&e.pos){n.chr=e.chr;let t=true;for(const s of n.bprange){if(s.start<=e.pos&&s.stop>=e.pos){t=false;break}}if(t){n.bprange.push({start:e.pos,stop:e.pos+1})}}}if(!s.snvindelattr){runtimeattr_snvindel(s,t)}if(a.variantPageCall_snv){r.butholder=e.append("div").style("margin","10px")}if(t.length==1){const i=t[0];n.alleleLst=[i.ref,i.alt];if(a.variantPageCall_snv){if(i.chr!=undefined&&i.pos!=undefined&&i.ref!=undefined&&i.alt!=undefined){r.set.set(i.chr+separatorvp+i.pos+separatorvp+i.ref+separatorvp+i.alt,{mname:i.mname,class:i.class})}}const l=[];for(const t of s.snvindelattr){if(t.lst){const e=[];for(const s of t.lst){if(s.ismaf){const t=s.get(i);e.push({k:s.label,v:t?Number.isFinite(t.f)?'<span style="color:'+s.fill+'">'+(t.f*100).toFixed(0)+"% ("+t.v1+"/"+t.v2+")</span>":"n/a":""})}else{e.push({k:s.label,v:s.get(i)})}}if(e.length){l.push({k:t.label,kvlst:e})}}else if(t.ismaf){const e=t.get(i);l.push({k:t.label,v:e?Number.isFinite(e.f)?'<span style="color:'+t.fill+'">'+(e.f*100).toFixed(0)+"% ("+e.v1+"/"+e.v2+")</span>":"n/a":""})}else{let e=t.get(i);if(t.hover){const s=t.hover(i);if(s){e+=' <span style="color:#aaa;font-size:80%">'+s+"</span>"}}l.push({k:t.label,v:e})}}const c=make_table_2col(e,l);if(o){const t=c.append("tr");t.append("td").attr("colspan",2).style("color","#9e9e9e").text("dbSNP");n.says=t.append("td").text("loading...")}const f=e.append("div").style("margin-top","10px");if(s.eplst){for(const e of s.eplst){mayephl_butt(e,f,t)}}if(s.ds&&s.ds.snvindel_legend){f.append("button").text("Legend").on("click",(()=>{if(t.style("display")=="none"){appear(t)}else{disappear(t)}}));const t=f.append("div").style("display","none").style("margin","10px").style("width","400px").html(s.ds.snvindel_legend)}}else{if(a.variantPageCall_snv){for(const e of t){if(e.chr!=undefined&&e.pos!=undefined&&e.ref!=undefined&&e.alt!=undefined){r.set.set(e.chr+separatorvp+e.pos+separatorvp+e.ref+separatorvp+e.alt,{mname:e.mname,class:e.class})}}}const i=e.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","0px 7px 7px 0px").style("font-size","90%").style("color","black").style("background-color","white");table_sort(t,i,s.snvindelattr,s);const l=e.append("div").style("margin","10px 5px");let c,f,d;l.append("button").text("Table columns").on("click",(function(){if(c.style("display")=="block"){this.style.color="black";disappear(c)}else{this.style.color="red";appear(c)}}));if(o&&n.bprange.length){n.button=l.append("button").text("loading...").on("click",(function(){if(f.style("display")=="block"){this.style.color="black";disappear(f)}else{this.style.color="red";appear(f)}}))}if(s.eplst){for(const e of s.eplst){mayephl_butt(e,l,t)}}if(s.ds&&s.ds.snvindel_legend){l.append("button").text("Legend").on("click",(function(){if(d.style("display")=="block"){this.style.color="black";disappear(d)}else{this.style.color="red";appear(d)}}))}c=e.append("div").style("margin","10px").style("display","none");for(const e of s.snvindelattr){const a=Math.random();const o=c.append("input").attr("type","checkbox").attr("id",a);if(!e.hide)o.attr("checked",true);o.on("change",(()=>{e.hide=!o.node().checked;table_sort(t,i,s.snvindelattr,s)}));c.append("label").attr("for",a).text(e.label);c.append("br")}if(o){f=e.append("div").style("margin","10px").style("display","none");n.holder=f;n.says=f}if(s.ds&&s.ds.snvindel_legend){d=e.append("div").style("display","none").style("width","300px").html(s.ds.snvindel_legend)}}if(o&&n.bprange.length){may_findmatchingsnp(n.chr,n.bprange,a.genome,n.alleleLst).then((t=>{if(!t||t.length==0)throw{message:"no SNP"};n.says.text("");if(n.button){n.button.text(t.length+" SNP"+(t.length>1?"s":""))}for(const e of t){const t=n.says.append("div");snp_printhtml(e,t)}})).catch((t=>{n.says.text(t.message);if(n.button){n.button.attr("disabled",true)}if(t.stack)console.log(t.stack)}))}if(a.variantPageCall_snv){const t=[];for(const[e,s]of r.set){const a=e.split(separatorvp);t.push({chr:a[0],position:Number.parseInt(a[1])+1,refallele:a[2],altallele:a[3],class:s.class,aachange:s.mname})}if(t.length==1){const e=t[0];e.container=r.butholder;a.variantPageCall_snv(e)}else if(t.length>1){r.butholder.append("div").classed("sja_variantpagesnv",true).text("Variant Page").on("click",(e=>{const o=s.tktip.clear().showunder(e.target).d.append("table");for(const e of t){const t=o.append("tr");t.append("td").text(e.aachange);t.append("td").text(mclass[e.class].label).style("font-size",".7em").style("color",mclass[e.class].color);t.append("td").text(e.chr+":"+e.position+" "+e.refallele+">"+e.altallele).attr("font-size",".7em");e.container=t.append("td");a.variantPageCall_snv(e)}}))}}}function table_sort(t,e,s,a,o){e.selectAll("*").remove();let n=null;for(const t of s){if(t.lst){for(const e of t.lst){if(e.sort)n=e}}else if(t.sort)n=t}if(n){t.sort(((t,e)=>{const s=n.get(t);const a=n.get(e);if(n.ismaf){if(s==undefined){if(a==undefined)return 0;return 1}else{if(a==undefined)return-1;return n.descend?a.f-s.f:s.f-a.f}}if(s==undefined||s===""){if(a==undefined||a==="")return 0;return 1}if(a==undefined||a==="")return-1;if(typeof s=="string"){if(s<a)return n.descend?1:-1;if(s>a)return n.descend?-1:1}if(typeof s=="number")return n.descend?a-s:s-a;return 0}))}const r=e.append("tr");const i=e.append("tr");r.append("td").attr("rowspan",2);for(const n of s){if(n.hide)continue;if(n.lst){r.append("td").attr("colspan",n.lst.length).style("color","#aaa").style("border-bottom","solid 1px #ccc").style("text-align","center").html(n.label);for(const r of n.lst){i.append("td").attr("class","sja_clbtext").html(r.label+(r.sort?r.descend?" &#9660;":" &#9650;":"")).on("click",(()=>{if(r.sort){r.descend=!r.descend}for(const t of s){if(t.lst){for(const e of t.lst)e.sort=false}else{t.sort=false}}r.sort=true;table_sort(t,e,s,a,o)}))}}else{r.append("td").attr("rowspan",2).attr("class","sja_clbtext").html(n.label+(n.sort?n.descend?" &#9660;":" &#9650;":"")).on("click",(()=>{if(n.sort){n.descend=!n.descend}for(const t of s){if(t.lst){for(const e of t.lst)e.sort=false}else{t.sort=false}}n.sort=true;table_sort(t,e,s,a,o)}))}}const l=t.length>1e3?900:t.length;for(let n=0;n<l;n++){const r=t[n];const i=e.append("tr").attr("class","sja_tr");if(o){i.on("click",(()=>o(r)))}if(a.eplst){i.on("mouseover",((t,e)=>{for(const t of a.eplst)t.may_hl([r],true)})).on("mouseout",((t,e)=>{for(const t of a.eplst)t.may_hl([r],false)}))}i.append("td").style("font-size",".8em").text(n+1);for(const t of s){if(t.hide)continue;if(t.lst){for(const e of t.lst){const t=i.append("td");if(e.ismaf){const s=e.get(r);if(s&&typeof s=="object"){if(s.v2==0){t.text("0/0");t.attr("title","No coverage")}else{fillbar(t,s,e)}}}else{t.html(e.get(r))}}}else{const e=i.append("td");if(t.hover){const s=t.hover(r);if(s!=undefined){e.attr("title",s)}}if(t.tablecellwidth){e.style("width",t.tablecellwidth).style("word-break","break-all")}if(t.ismaf){const s=t.get(r);if(s){if(s.v2==0){e.text("0/0");e.attr("title","No coverage")}else{fillbar(e,s,t)}}}else{e.html(t.get(r))}}}}}function tinylab(t){return'<span style="font-size:70%;color:#858585">'+t+"</span>"}function vcfmdetail(t,e,s,a,o){if(!e){s.append("p").text("vcfobj config object missing");return}const n=s.append("div").style("margin-top","10px");n.append("span").text(t.type).style("padding-right","10px");n.append("span").text(t.chr+":"+(t.pos+1)).style("padding-right","10px");if(t.dt==dtsnvindel){n.append("span").style("padding-right","10px").html(tinylab("REF")+" "+t.ref+" "+tinylab("ALT")+" "+t.alt);if(o.variantPageCall_snv){const e={chr:t.chr,position:t.pos+1,refallele:t.ref,altallele:t.alt,container:n.append("span").style("padding-left","20px")};o.variantPageCall_snv(e)}if(a.button4variant){make_button4variant(n,t,a.button4variant)}if(a.url4variant){make_url4variant(n,t,a.url4variant)}}if(e.info&&e.info.CSQ&&e.info.CSQ.csqheader&&t.csq){vcfvepbutton(t.csq,n,a,e.info.CSQ.csqheader)}if(e.info&&e.info.ANN&&e.info.ANN.annheader&&t.ann){vcfannbutton(t.ann,n,a,e.info.ANN.annheader)}if(a.variant2img){variant2imgbutton(t,n,s.append("div"),a)}const r=s.append("div");if(mayshowgenotype2boxplot(t,a,r)){r.style("margin-top","10px")}else if(t.sampledata){const e=r.append("div");Promise.resolve().then((()=>{if(t.sampledata.length==0&&a.ds.vcfcohorttrack){e.text("Loading ...");return query_vcfcohorttrack(t,a,o).then((e=>{if(!e){return}t.sampledata=e.sampledata;return}))}return})).then((()=>{e.remove();if(t.sampledata.length==0){return}if(t.sampledata.length==1){singleSample2table(t,a,r);return}if(mayshowgermline2dvaf(t,a,r)){r.style("margin-top","10px")}else if(mayshowcovmafplot(t,a,r)){r.style("margin-top","10px")}else if(mayshowgenotype2boxplot(t,a,r)){r.style("margin-top","10px")}else{vcfsamplelistbutton(t,n,a)}})).catch((t=>{e.text(t)}))}if(e.infopipejoin){const a=[];if(t.altinfo){for(const s of e.infopipejoin){const e=t.altinfo[s.key];if(e){if(Array.isArray(e)){a.push(e)}else{a.push(e.split(/[,|]/))}}else{a.push([])}}}if(a.length){const t=s.append("div");for(let s=0;s<a[0].length;s++){const o=[];for(let t=0;t<e.infopipejoin.length;t++){const n=e.infopipejoin[t];o.push({k:n.label,v:n.values?n.values[a[t][s]]:a[t][s]})}make_table_2col(t,o).style("display","inline-block").style("border","solid 1px black").style("margin","20px")}}}may_info2singletable(t,s,a);may_info2table(t,s,a);const i={};const l={};if(a.vcfinfofilter){for(const t of a.vcfinfofilter.lst){if(t.categories){if(t.altalleleinfo){i[t.altalleleinfo.key]=t.categories}else if(t.locusinfo){l[t.locusinfo.key]=t.categories}}}}{const a=[];for(const s in t.altinfo){const o=Array.isArray(t.altinfo[s])?t.altinfo[s]:[t.altinfo[s]];let n;if(i[s]){n=o.map((t=>{const e=i[s][t];if(e){return'<span style="padding:1px 3px;background:'+e.color+";color:"+(e.textcolor||"black")+';">'+t+"</span>"}return t}))}else{n=o}a.push({k:s,v:n.join(", ")+(e.info&&e.info[s]?' <span style="font-size:70%;color:#858585">'+e.info[s].Description+"</span>":"")})}if(a.length){s.append("h3").text("Alternative allele:");make_table_2col(s,a)}}{const o=[];for(const s in t.info){if(a.info2table&&a.info2table[s]){continue}const n=Array.isArray(t.info[s])?t.info[s]:[t.info[s]];let r;if(l[s]){r=n.map((t=>{const e=l[s][t];if(e){return'<span style="padding:1px 3px;background:'+e.color+";color:"+(e.textcolor||"black")+';">'+t+"</span>"}return t}))}else{r=n}o.push({k:s,v:r.join(", ")+(e.info&&e.info[s]?' <span style="font-size:70%;color:#858585">'+e.info[s].Description+"</span>":"")})}if(o.length){s.append("h3").text("This locus:");make_table_2col(s,o)}}}function may_info2singletable(t,e,s){if(!s.info2singletable)return;for(const a in s.info2singletable){const o=s.info2singletable[a];const n=t.info[a];if(!n||!n[0])continue;const r=[];const i=n[0].split(o.col_separator);for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;r.push({k:o.fields[t].name,v:info2table_value(o,i,t)})}make_table_2col(e,r)}}function may_info2table(t,e,s){if(!s.info2table)return;for(const a in s.info2table){const o=s.info2table[a];const n=t.info[a];if(!n)continue;if(o.separate_tables){const t=JSON.parse(JSON.stringify(o.separate_tables));t.forEach((t=>t.rows=[]));for(const e of n){const s=e.split(o.col_separator);const a=new Map;for(let t=0;t<o.fields.length;t++){a.set(o.fields[t].name,s[t])}for(const e of t){if(e.groupers.reduce(((t,e)=>a.get(e.field)==e.value?t:false),true)){e.rows.push(a)}}}for(const s of t){if(s.rows.length==0)continue;e.append("h3").html(s.headhtml);const t=e.append("table").style("border-spacing","2px").style("border-collapse","separate").style("font-size","90%");const a=t.append("tr");for(const t of o.fields){if(t.hide)continue;a.append("td").text(t.name)}for(const e of s.rows){const s=t.append("tr").attr("class","sja_tr");const a=o.fields.map((t=>e.get(t.name)));for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;const e=s.append("td");e.html(info2table_value(o,a,t))}}}continue}const r=e.append("table").style("border-spacing","2px").style("border-collapse","separate").style("font-size","90%");const i=r.append("tr");for(const t of o.fields){if(t.hide)continue;i.append("td").text(t.name)}for(const t of n){const e=r.append("tr").attr("class","sja_tr");const s=t.split(o.col_separator);for(let t=0;t<o.fields.length;t++){if(o.fields[t].hide)continue;const a=e.append("td");a.html(info2table_value(o,s,t))}}}}function info2table_value(icfg,lst,i){const field=icfg.fields[i];if(field.hide)return;let value=lst[i];if(value==undefined)return;if(field.eval){value=eval('"'+value+'"')}if(field.isurl)return"<a href="+value+" target=_blank>"+value+"</a>";if(field.appendUrl){if(field.separator){return value.split(field.separator).map((t=>"<a href="+field.appendUrl+t+" target=_blank>"+t+"</a>")).join(", ")}return"<a href="+field.appendUrl+value+" target=_blank>"+value+"</a>"}if(field.insert2url){return"<a href="+field.insert2url.left+value+field.insert2url.right+" target=_blank>"+value+"</a>"}if(field.ampersand2br)return value.replace(/&/g,"<br>");if(field.urlMatchLst){const t=value.toLowerCase();const e=t.split(field.urlMatchLst.separator)[field.urlMatchLst.idIndex];if(e){for(const s of field.urlMatchLst.types){if(t.indexOf(s.type)!=-1){if(s.appendUrl){return'<span style="font-size:.7em">'+s.type.toUpperCase()+"</span> <a href="+s.appendUrl+e+" target=_blank>"+e+"</a>"}}}}}return value}function mayephl_butt(t,e,s){let a=true;for(const e of s){if(e[t.p.sampletype]in t.sampletype2value){a=false;break}}if(a){return}let o=false;e.append("button").text("Highlight in "+t.p.name).on("click",(()=>{o=!o;t.may_hl(s,o)}))}function table_sv(t,e,s,a){const o=e.append("div").style("margin-bottom","10px");tosvgraph(t[0].pairlst,a,o);if(!s.svattr){runtimeattr_sv(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.svattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const n=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const r=n.append("tr");for(const t of s.svattr){r.append("td").text(t.label)}table_sort(t,n,s.svattr,s,(t=>{o.selectAll("*").remove();tosvgraph(t.pairlst,a,o)}));if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function tosvgraph(t,e,s){for(const e of t){if(e.a.isoform){e.a.gm={isoform:e.a.isoform}}if(e.b.isoform){e.b.gm={isoform:e.b.isoform}}}const a={jwt:e.jwt,hostURL:e.hostURL,pairlst:t,genome:e.genome,holder:s};import("./svgraph-22fb937c.js").then((t=>{t.default(a)}))}function table_itd(t,e,s,a){if(!s.itdattr){runtimeattr_itd(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.itdattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.itdattr){n.append("td").text(t.label)}table_sort(t,o,s.itdattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function table_del(t,e,s,a){if(!s.delattr){runtimeattr_del(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.delattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.delattr){n.append("td").text(t.label)}table_sort(t,o,s.delattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function table_truncation(t,e,s,a){if(!s.truncattr){runtimeattr_trunc(s,t)}if(t.length==1){const a=t[0];const o=[];for(const t of s.truncattr){o.push({k:t.label,v:t.get(a)})}make_table_2col(e,o);if(s.eplst){const a=e.append("div").style("margin-top","10px");for(const e of s.eplst){mayephl_butt(e,a,t)}}return}const o=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=o.append("tr");for(const t of s.truncattr){n.append("td").text(t.label)}table_sort(t,o,s.truncattr,s);if(s.eplst){const a=e.append("div").style("margin-top","5px");for(const e of s.eplst){mayephl_butt(e,a,t)}}}function runtimeattr_snvindel(t,e){t.snvindelattr=[];if(t.ds&&t.ds.snvindel_attributes){for(const e of t.ds.snvindel_attributes){t.snvindelattr.push(e)}}else{const s=new Set(["pos","aapos","rnapos","dt","vcfid","isrim1","isrim2","alt","__x"]);if(t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k)}}const a=[];for(const t in e[0]){if(s.has(t))continue;switch(t){case"chr":a.push({label:"Genome pos.",get:t=>t.chr+":"+(t.pos+1)});break;case"class":a.push({label:"Class",get:t=>mclass[t.class].label});break;case"mname":a.push({label:"Mutation",get:t=>t.mname});break;case"ref":a.push({label:"Allele",lst:[{label:"Ref",get:t=>t.ref},{label:"Alt",get:t=>t.alt}]});break;case"pmid":a.push(caller_pmid());break;case"maf_tumor":a.push({get:t=>t.maf_tumor,ismaf:true,width:40,height:12,label:"Tumor MAF",fill:"#ff4d4d",fillbg:"#ffcccc"});break;case"maf_normal":a.push({get:t=>t.maf_normal,ismaf:true,width:40,height:12,label:"Germline MAF",fill:"#4d4dff",fillbg:"#ccccff"});break;default:a.push({label:t,get:e=>e[t]})}}t.snvindelattr=a}if(t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){t.snvindelattr.push({label:e.label||e.k,hide:e.hide,get:t=>{if(t[e.k])return t[e.k]+(e.full?t[e.full]?' <span style="font-size:.8em;color:#858585">'+t[e.full]+"</span>":"":"");return""}})}}if(t.eplst){for(const e of t.eplst){if(!e.p){console.error("no config object for epaint");continue}if(e.p.maf){t.snvindelattr.push({label:e.p.name,lst:[{label:e.p.datatype,get:t=>{const s=t[e.p.sampletype];if(!s)return"";return e.sampletype2value[s]}},{label:e.p.maf.label,width:40,height:12,fill:e.p.hlcolor,fillbg:e.p.hlcolor2,get:e.p.maf.get,readcountcredible:e.p.maf.readcountcredible,ismaf:true}]})}else{t.snvindelattr.push({label:e.p.name+" "+e.p.datatype,get:t=>{const s=t[e.p.sampletype];if(!s)return"";return e.sampletype2value[s]}})}}}}function runtimeattr_trunc(t,e){const s=new Set(["__x","mname","gene","strand","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","partner"]);t.truncattr=[];for(const a of e){if(a.sample){t.truncattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.truncattr.push({label:"Position",get:t=>t.chr+":"+t.pos});const a=new Set;for(const t of e){a.add(t.dt)}if(a.size>1){t.truncattr.push({label:"Truncated",get:t=>t.dt==dtnloss?"N-term":"C-term"})}for(const a of e){if(a.pmid){t.truncattr.push(caller_pmid());s.add("pmid");break}}for(const s of e){if(s.partner){t.truncattr.push({get:t=>{const e=[];for(const s in t.partner){e.push(s+": "+t.partner[s])}return e.join("&nbsp;&nbsp;")},label:"Translocation"});break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.truncattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.truncattr.push({label:a,get:t=>t[a]})}}function runtimeattr_del(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnadellength","a","b"]);t.delattr=[];for(const a of e){if(a.sample){t.delattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.delattr.push({label:"Position",get:t=>t.chr+":"+t.pos});t.delattr.push({label:"Del. length",get:t=>t.rnadellength+" bp"});for(const a of e){if(a.pmid){t.delattr.push(caller_pmid());s.add("pmid");break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.delattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.delattr.push({label:a,get:t=>t[a]})}}function runtimeattr_itd(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnaduplength","a","b"]);t.itdattr=[];for(const a of e){if(a.sample){t.itdattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.itdattr.push({label:"Position",get:t=>t.chr+":"+t.pos});t.itdattr.push({label:"Dup. length",get:t=>t.rnaduplength+" bp"});for(const a of e){if(a.pmid){t.itdattr.push(caller_pmid());s.add("pmid");break}}if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.itdattr.push({label:e.label||e.k,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.itdattr.push({label:a,get:t=>t[a]})}}function runtimeattr_sv(t,e){const s=new Set(["__x","mname","aapos","chr","class","dt","inframe","origin","pos","rnapos","strand","useNterm","pairlst"]);t.svattr=[];for(const a of e){if(a.sample){t.svattr.push({label:"Sample",get:t=>t.sample});s.add("sample");break}}t.svattr.push({label:"Genomic breakpoint",get:t=>{if(!t.pairlst)return"no pairlst";const e=t.pairlst.map((t=>(t.a.name?"<strong>"+t.a.name+"</strong> ":"")+(t.a.chr?'<span style="color:#858585">'+t.a.chr+":"+(t.a.position+1)+" "+(t.a.strand=="+"?"forward":"reverse")+"</span> &#10140; ":"")+(t.b.name?"<strong>"+t.b.name+"</strong> ":"")+(t.b.chr?'<span style="color:#858585">'+t.b.chr+":"+(t.b.position+1)+" "+(t.b.strand=="+"?"forward":"reverse")+"</span>":"")));return e.join("<br>")}});for(const s of e){if(s.pairlst[0].a.rnaposition!=undefined){t.svattr.push({label:"RNA breakpoint",get:t=>{if(!t.pairlst)return"no pairlst";const e=t.pairlst.map((t=>(t.a.name?"<strong>"+t.a.name+"</strong> ":"")+'<span style="color:#858585">r.'+(t.a.rnaposition+1)+"</span> &#10140; "+(t.b.name?"<strong>"+t.b.name+"</strong> ":"")+'<span style="color:#858585">r.'+(t.b.rnaposition+1)+"</span>"));return e.join("<br>")}});break}}for(const a of e){if(a.pmid){t.svattr.push(caller_pmid());s.add("pmid");break}}let a=false;for(const s of e){if(a)break;for(const e of s.pairlst){if(e.translocationname){t.svattr.push({get:t=>t.pairlst.map((t=>t.translocationname?t.translocationname:"")).join("_"),label:"Translocation name"});a=true;break}}}if(e[0].pairlst[0].a.ratio!=undefined){t.svattr.push({label:"Chimeric reads ratio",get:t=>{const e=[];const s=40,a=12,o="#FF850A",n="#FFCF9E";for(const r of t.pairlst){e.push((r.a.name?r.a.name:r.a.chr)+" <svg width="+s+" height="+a+"><g><title>"+r.a.ratio+"</title><rect width="+s+" height="+a+' fill="'+n+'"></rect>'+"<rect width="+s*r.a.ratio+" height="+a+' fill="'+o+'"></rect>'+"</g></svg>"+"&nbsp;&nbsp;"+(r.b.name?r.b.name:r.b.chr)+" <svg width="+s+" height="+a+"><g><title>"+r.b.ratio+"</title><rect width="+s+" height="+a+' fill="'+n+'"></rect>'+"<rect width="+s*r.b.ratio+" height="+a+' fill="'+o+'"></rect>'+"</g></svg>")}return e.join("<br>")}})}t.svattr.push({label:"Frame",get:t=>{function e(t){if(t==0)return'<span style="white-space:nowrap;background-color:'+coloroutframe+';font-size:80%;color:white;padding:1px 3px">OUT of frame</span>';if(t==1)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span>';if(t==2)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span> <span style="font-size:80%;color:#858585">promoter fusion</span>';if(t==3)return'<span style="white-space:nowrap;background-color:'+colorinframe+';font-size:80%;color:white;padding:1px 3px">IN frame</span> <span style="font-size:80%;color:#858585">alternative promoter</span>';return"err ("+t+")"}const s=[];for(const e of t.pairlst){if(e.frame!=undefined){s.push({frame:e.frame,a:e.a.name?e.a.name:e.a.chr,b:e.b.name?e.b.name:e.b.chr})}}if(s.length==1)return e(s[0].frame);return s.map((t=>t.a+"-"+t.b+": "+e(t.frame))).join("<br>")}});if(t.ds&&t.ds.cohort&&t.ds.cohort.levels){for(const e of t.ds.cohort.levels){s.add(e.k);s.add(e.full);t.svattr.push({label:e.label||e.k,hide:e.hide,get:t=>t[e.k]?t[e.k]+(e.full?' <span style="color:#858585;font-size:.8em">'+t[e.full]+"</span>":""):""})}}for(const a in e[0]){if(s.has(a))continue;t.svattr.push({label:a,get:t=>t[a]})}}function caller_pmid(t){return{get:t=>{if(!t.pmid){return""}if(typeof t.pmid=="number"){return"<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/"+t.pmid+">"+t.pmid+"</a>"}const e=t.pmid.split(",");const s=[];for(const t of e){if(t=="")continue;const e=Number.parseInt(t);if(Number.isNaN(e)){s.push(t)}else{s.push("<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/"+t+">"+t+"</a>")}}return s.join(" ")},label:"PubMed"}}function vcfsamplelistbutton(t,e,s){let a=t.sampledata;if(s.ds&&s.ds.cohort&&s.ds.cohort.annotation&&s.ds.cohort.key4annotation&&s.ds.cohort.sampleattribute&&s.ds.cohort.sampleattribute.runtimelst){a=[];for(const e of t.sampledata){const t=e.sampleobj[s.ds.cohort.key4annotation];if(!t)continue;const o=s.ds.cohort.annotation[t];if(o){let t=false;for(const e of s.ds.cohort.sampleattribute.runtimelst){if(e.key&&e.key.k&&e.key.hiddenvalues&&e.key.hiddenvalues.size){const s=o[e.key.k];if(e.key.hiddenvalues.has(s)){t=true;break}}}if(t)continue}a.push(e)}}e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text(a.length+" sample"+(a.length>1?"s":"")).on("click",(t=>{s.tktip.showunder(t.target).clear();const e=s.tktip.d.append("table");const o=e.append("tr").style("font-size",".8em").style("color","#858585");o.append("td").text("Name");o.append("td").text("Genotype");let n=false;if(a[0].DP!=undefined){o.append("td").text("Read depth");n=true}let r=false;if(a[0].allele2readcount){o.append("td").text("Allele read count");r=true}for(const t of a){const s=e.append("tr");s.append("td").text(t.sampleobj.name);s.append("td").style("padding-left","10px").text(t.genotype);if(n){s.append("td").style("padding-left","10px").text(t.DP||"")}if(r){const e=[];for(const s in t.allele2readcount){e.push(s+":"+t.allele2readcount[s])}s.append("td").style("padding-left","10px").text(e.join(", "))}}}))}function vcfvepbutton(t,e,s,a){e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("VEP annotation").on("click",(e=>{s.tktip.clear();s.tktip.showunder(e.target);for(const e of t){let t=false;let o;{const t=[];if(e.HGVSp){t.push('<span style="font-size:.7em;color:#858585">HGVSp</span> '+e.HGVSp)}else if(e.HGVSc){t.push('<span style="font-size:.7em;color:#858585">HGVSc</span> '+e.HGVSc)}else{t.push("no_HGVS")}if(e.Consequence){t.push('<span style="font-size:.7em;color:#858585">CONSEQUENCE</span> '+e.Consequence)}else{t.push("no_consequence")}o=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(o).on("click",(()=>{if(t){t=false;n.html(o)}else{t=true;n.text("");const s=[];for(const t of a){const a=e[t.name];if(a){s.push({k:t.name,v:a})}}make_table_2col(n,s)}}))}}))}function vcfannbutton(t,e,s,a){e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("Annotation").on("click",(e=>{s.tktip.clear();s.tktip.showunder(e.target);for(const e of t){let t=false;let o;{const t=[];if(e["HGVS.p"]){t.push('<span style="font-size:.7em;color:#858585">HGVS.p</span> '+e["HGVS.p"])}else if(e["HGVS.c"]){t.push('<span style="font-size:.7em;color:#858585">HGVS.c</span> '+e["HGVS.c"])}else{t.push("no_HGVS")}if(e.Annotation){t.push('<span style="font-size:.7em;color:#858585">Annotation</span> '+e.Annotation)}else{t.push("no_annotation")}o=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(o).on("click",(()=>{if(t){t=false;n.html(o)}else{t=true;n.text("");const s=[];for(const t of a){const a=e[t.name];if(a){s.push({k:t.name,v:a})}}make_table_2col(n,s)}}))}}))}function variant2imgbutton(t,e,s,a,o){let n=false;e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text("Image").on("click",(async()=>{if(n)return;n=true;const e=s.append("div").style("margin","20px").text("Loading...");try{const o=await dofetch("img",{file:path.join(a.variant2img.path,t.chr+"."+(t.pos+1)+"."+t.ref+"."+t.alt+"."+a.variant2img.ext)});if(o.error)throw o.error;e.remove();s.append("img").attr("src",o.src).style("width",o.size.width+"px").style("height",o.size.height+"px")}catch(t){e.text("Error loading image")}}))}function mayshowcovmafplot(t,e,s){if(!e.ds.vaf2coverageplot){return false}if(!t.sampledata){return false}const a=[];const o={};const n=new Map;let r=0;for(const s of t.sampledata){if(!s.allele2readcount){r++;continue}if(s.DP==undefined){s.DP=0;for(const t in s.allele2readcount){s.DP+=s.allele2readcount[t]}}const i=s.allele2readcount[t.alt]||0;if(i>s.DP){console.log("alt coverage > DP: "+i+" "+s.DP);continue}const l={sampleobj:{},mut:i,total:s.DP,maf:s.DP==0?0:i/s.DP,genotype:s.genotype};if(s.sampleobj){if(e.ds.cohort&&e.ds.cohort.annotation&&e.ds.cohort.key4annotation){const t=s.sampleobj[e.ds.cohort.key4annotation];if(t){const s=e.ds.cohort.annotation[t];if(s){if(e.ds.cohort.levels){for(const t of e.ds.cohort.levels){if(!s[t.k])continue;l.sampleobj[t.label||t.k]=s[t.k]+(t.full&&s[t.full]?' <span style="font-size:.8em;color:#858585">'+s[t.full]+"</span>":"")}l.sampleobj[e.ds.cohort.key4annotation]=t}else{for(const t in s){l.sampleobj[t]=s[t]}}}}}else{for(const t in s.sampleobj){l.sampleobj[t]=s.sampleobj[t]}}}if(e.ds.vaf2coverageplot.categorykey&&e.ds.vaf2coverageplot.categories){const t=l.sampleobj[e.ds.vaf2coverageplot.categorykey];if(t&&e.ds.vaf2coverageplot.categories[t]){l.color=e.ds.vaf2coverageplot.categories[t].color;if(!n.has(t)){n.set(t,0)}n.set(t,n.get(t)+1);delete l.sampleobj[e.ds.vaf2coverageplot.categorykey];l.sampleobj[e.ds.vaf2coverageplot.categorylabel]=t}}if(e.ds.vaf2coverageplot.samplegroupkey){if(l.sampleobj&&l.sampleobj[e.ds.vaf2coverageplot.samplegroupkey]){const t=l.sampleobj[e.ds.vaf2coverageplot.samplegroupkey];if(!o[t]){o[t]=[]}o[t].push(l)}else{a.push(l)}}else{a.push(l)}}if(r){console.log("skipped "+r+" items")}const i=[];if(a.length){i.push({name:"no "+(e.ds.vaf2coverageplot.samplegroupkey||"sampletype"),lst:a})}for(const t in o){i.push({name:t,lst:o[t]})}if(i.length==0){return false}if(n.size>0){const t=s.append("div").style("margin","20px 20px 0px 20px");for(const[s,a]of n){const a=e.ds.vaf2coverageplot.categories[s];const o=t.append("div").style("margin-bottom","3px");o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("margin-right","5px").style("background-color",a.color).html("&nbsp;&nbsp;");o.append("span").style("color",a.color).text(a.label||s)}}const l=s.append("div").style("margin-bottom","10px");import("./plot.vaf2cov-646c89ff.js").then((t=>{const s={};for(const a of i){let o=l.append("div").style("display","inline-block").style("vertical-align","top");if(i.length>1){o.style("margin-right","30px").append("div").style("margin-top","10px").style("padding","3px 10px").style("background-color","#aaa").style("color","white").style("display","inline-block").style("font-size",".8em").style("font-weight","bold").text(a.name.toUpperCase());o=o.append("div").style("border","solid 1px #aaa")}const n={holder:o,data:a.lst,name:a.name,tip:e.tktip,automax:true,mouseover:t=>{if(!t.sampleobj)return;for(const e in s){if(e==a.name)continue;s[e].filter((e=>e.sampleobj.patient==t.sampleobj.patient)).each((t=>{t.crosshair1.attr("transform","scale(2.5)");t.crosshair2.attr("transform","scale(2.5)")}))}},mouseout:t=>{if(!t.sampleobj)return;for(const e in s){if(e==a.name)continue;s[e].filter((e=>e.sampleobj.patient==t.sampleobj.patient)).each((t=>{t.crosshair1.attr("transform","scale(1)");t.crosshair2.attr("transform","scale(1)")}))}}};s[a.name]=t.default(n)}}));return true}function query_vcfcohorttrack(t,e,s){const a=e.ds.vcfcohorttrack;return Promise.resolve().then((()=>{if(a.info){return null}const t={jwt:s.jwt,file:a.file,url:a.url,indexURL:a.indexURL,header:1};return fetch(new Request(s.hostURL+"/vcf",{method:"POST",body:JSON.stringify(t)})).then((t=>t.json()))})).then((t=>{if(t==null)return;if(!t.metastr)throw{message:"no meta lines for the cohort vcf file "};if(!t.chrstr)throw{message:"no chromosome names found for the cohort vcf file"};const[e,o,n,r]=vcfparsemeta(t.metastr.split("\n"));if(r)throw{message:"vcf meta error for the cohort vcf file: "+r.join("; ")};a.info=e;a.format=o;if(a.samplenamemap){a.samples=n.map(a.samplenamemap)}else{a.samples=n}a.nochr=contigNameNoChr(s.genome,t.chrstr.split("\n"));return})).then((()=>{const e={jwt:s.jwt,file:a.file,url:a.url,indexURL:a.indexURL,rglst:[{chr:a.nochr?t.chr.replace("chr",""):t.chr,start:t.pos+1,stop:t.pos+1}]};return fetch(new Request(s.hostURL+"/vcf",{method:"POST",body:JSON.stringify(e)})).then((t=>t.json())).then((e=>{if(e.error)throw{message:"Error querying vcf file: "+e.error};const s=e.linestr?e.linestr.trim().split("\n"):[];for(const e of s){const[s,o,n]=vcfparseline(e,a);for(const e of o){if(e.pos==t.pos&&e.ref==t.ref&&e.alt==t.alt){return e}}}return null}))}))}function make_url4variant(t,e,s){for(const a of s){if(!a.makeurl)continue;const s=a.makeurl(e);if(!s){continue}t.append("a").attr("href",s).attr("target","_blank").text(a.makelabel?a.makelabel(e):a.label||"link").style("margin-right","10px")}}function make_button4variant(t,e,s){s.forEach((s=>{if(!s.makebutton)return;const a=t.append("div").style("display","inline-block").style("margin","0px 10px 2px 3px");s.makebutton(e,a.node())}))}function mayshowgermline2dvaf(t,e,s){const a=e.ds.germline2dvafplot;if(!a)return false;const o=a.individualkey;const n=new Map;let r=0;for(const e of t.sampledata){if(e.DP==undefined||!e.allele2readcount){r++;continue}const s=e.allele2readcount[t.alt]||0;if(s>e.DP){console.log("alt coverage > DP: "+s+" "+e.DP);continue}const i=e.sampleobj[o];if(!i){continue}const l=e.sampleobj[a.sampletypekey];if(!l){continue}if(!n.has(i)){const t={sampletypes:{}};for(const s in e.sampleobj){t[s]=e.sampleobj[s]}n.set(i,t)}n.get(i).sampletypes[l]={total:e.DP,vaf:e.DP==0?0:s/e.DP}}if(r){console.log(r+" samples has no valid DP/allele2readcount")}const i=[];for(const[t,e]of n){if(!e.sampletypes[a.xsampletype]){continue}if(e.sampletypes[a.yleftsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[a.xsampletype]=e.sampletypes[a.xsampletype];t.sampletypes[a.yleftsampletype]=e.sampletypes[a.yleftsampletype];i.push(t)}if(a.yrightsampletype&&e.sampletypes[a.yrightsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[a.xsampletype]=e.sampletypes[a.xsampletype];t.sampletypes[a.yrightsampletype]=e.sampletypes[a.yrightsampletype];i.push(t)}}if(i.length){const t=s.append("div").style("display","inline-block");import("./plot.2dvaf-d8eda179.js").then((e=>{e.default(i,a,t)}));return true}return false}function mayshowgenotype2boxplot(t,e,s){const a=e.ds.genotype2boxplot;if(!a)return false;if(a.boxplotvaluekey){const e=t.info[a.boxplotvaluekey];if(!e)return false;const o=e.split("|");const n=[];for(const t of o){const e=t.split("/");const s=Number.parseFloat(e[1]);const a=Number.parseFloat(e[2]);const o=Number.parseFloat(e[3]);const r=Number.parseFloat(e[4]);const i=Number.parseFloat(e[5]);if(Number.isNaN(s)||Number.isNaN(a)||Number.isNaN(o)||Number.isNaN(r)||Number.isNaN(i)){continue}n.push({label:e[0],color:"#4F8F38",minvalue:s,maxvalue:i,percentile:{p05:s,p25:a,p50:o,p75:r,p95:i}})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-29ed0bcd.js").then((t=>{const e=t.default({holder:r,axislabel:a.axislabel,list:n});if(e){sayerror(r,"Boxplot: "+e)}}));return true}if(!e.ds.cohort||!e.ds.cohort.annotation||!e.ds.cohort.key4annotation){console.log("genotype2boxplot but ds.cohort is incomplete");return false}const o=new Map;t.sampledata.forEach((t=>{if(!t.genotype)return;const s=t.sampleobj[e.ds.cohort.key4annotation];if(!s)return;const n=e.ds.cohort.annotation[s];if(!n)return;const r=n[a.sampleannotationkey];if(!Number.isFinite(r))return;if(!o.has(t.genotype)){o.set(t.genotype,[])}o.get(t.genotype).push({value:r,key:s})}));if(o.size==0){return false}const n=[];for(const[t,e]of o){n.push({label:t,color:"#4F8F38",samples:e})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-29ed0bcd.js").then((t=>{const e=t.default({holder:r,axislabel:a.axislabel,list:n});if(e){sayerror(r,"Boxplot: "+e)}}));return true}function singleSample2table(t,e,s){const a=t.sampledata[0];const o=[];if(a.genotype){o.push({k:"genotype",v:a.genotype})}if(a.DP!=undefined){o.push({k:"total reads",v:a.DP})}if(a.allele2readcount&&a.allele2readcount[t.alt]!=undefined){o.push({k:"alt reads",v:a.allele2readcount[t.alt]})}else{may_addformat_singlesample(o,t,e)}if(a.sampleobj){if(e.ds.cohort&&e.ds.cohort.annotation&&e.ds.cohort.key4annotation){const t=a.sampleobj[e.ds.cohort.key4annotation];if(t){o.push({k:e.ds.cohort.key4annotation,v:t});const s=e.ds.cohort.annotation[t];if(s){if(e.ds.cohort.levels){for(const t of e.ds.cohort.levels){if(!s[t.k])continue;o.push({k:t.label||t.k,v:s[t.k]+(t.full&&s[t.full]?' <span style="font-size:.8em;color:#858585">'+s[t.full]+"</span>":"")})}}else{for(const t in s){if(t=="color")continue;o.push({k:t,v:s[t]})}}}}}else if(a.sampleobj.name){o.push({k:"name",v:a.sampleobj.name})}}make_table_2col(s,o)}function may_addformat_singlesample(t,e,s){let a;if(e.vcfid&&s.ds&&s.ds.id2vcf)a=s.ds.id2vcf[e.vcfid];if(!a)return;if(!a.format)return;const o=e.sampledata[0];for(const s in a.format){const n=a.format[s];if(!(s in o))continue;let r=n.Number=="R"||n.Number=="A";if(!r){if(s=="AD"){r=true}}if(r){const a=[];const r=[];let i;for(const t in o[s]){if(t==e.ref)continue;a.push(t);i=o[s][t];r.push(i)}const l=o[s][e.ref];if(l!=undefined){a.push(e.ref);r.push(l)}let c;if(l+i>0){c=fillbar(null,{f:i/(i+l)})}t.push({k:s,v:(c?c+" ":"")+'<span style="font-size:.8em;opacity:.5">'+a.join(" / ")+"</span> "+r.join(" / ")+(n.Description?' <span style="font-size:.7em;opacity:.5">'+n.Description+"</span>":"")})}else{t.push({k:s,v:o[s]})}}}function handle_samplecart(t,e,s,a){if(!a.samplecart||!s.ds||!s.ds.sampleselectable)return;const o=new Set;for(const e of t){if(e.sample){o.add(e.sample)}}if(o.size==0){return}const n=new Set;for(const e of t){const t=mclass[e.class].label;let s;if(e.dt==dtfusionrna||e.dt==dtsv){if(e.mname){if(e.useNterm){s=(a.usegm?a.usegm.name+"-":"")+e.mname+" "+t}else{s=e.mname+(a.usegm?"-"+a.usegm.name:"")+" "+t}}else{s=(a.usegm?a.usegm.name:"")+" "+t}}else{s=(e.mname?e.mname+" ":"")+t+(a.usegm?" in "+a.usegm.name:"")}n.add(s)}if(n.size==1){"having "+[...n][0]}else{"having mutations"+(a.usegm?" in "+a.usegm.name:"")}a.samplecart.setBtns({samplelst:[...o],id:n.size?[...n][0]:a.usegm?a.usegm.name:"",basket:"Gene Mutation",container:e.append("div").style("margin-left","10px").append("div")})}function loadvcftk(t,e){let s=null;for(const t in e.ds.id2vcf){s=e.ds.id2vcf[t]}if(!s){t.tkcloakoff(e,{error:"no vcf config found"});return}Promise.resolve().then((()=>{if(!s.headernotloaded)return;delete s.headernotloaded;const a=["genome="+t.genome.name];if(s.file){a.push("file="+s.file)}else{a.push("url="+s.url);if(s.indexURL)a.push("indexURL="+s.indexURL)}return dofetch2("vcfheader?"+a.join("&")).then((t=>{if(t.error)throw{message:t.error};if(!t.metastr)throw{message:"no meta lines for vcf file "+e.name};const[a,o,n,r]=vcfparsemeta(t.metastr.split("\n"));if(r)throw{error:"vcf meta error for file "+e.name+": "+r.join("; ")};s.info=a;s.format=o;if(s.samplenamemap){s.samples=n.map(s.samplenamemap)}else{s.samples=n}s.nochr=t.nochr}))})).then((()=>{const a={file:s.file,url:s.url,indexURL:s.indexURL,rglst:t.tkarg_maygm(e)};if(s.nochr){for(const t of a.rglst){t.chr=t.chr.replace("chr","")}}return dofetch2("vcf",{method:"POST",body:JSON.stringify(a)}).then((a=>{if(a.error)throw{message:a.error};const o=a.linestr?a.linestr.trim().split("\n"):[];load2tk([{vcfid:s.vcfid,lines:o}],t,e);return}))})).catch((t=>{if(t.stack)console.log(t.stack);return t.message})).then((s=>{t.tkcloakoff(e,{error:s})}))}function data2tk(t,e,s){const a=e.ds.id2vcf[t.vcfid];if(!a){s.error("vcf not found by id: "+t.vcfid);return}if(!t.lines){s.error("no vcf lines from vcf file "+t.vcfid);return}const o=[];for(const n of t.lines){const[r,i,l]=vcfparseline(n,a);if(r){o.push(r)}if(!i){continue}for(const a of i){if(a.alt=="NON_REF"){continue}if(e.ds.discardsymbolicallele&&a.issymbolicallele){continue}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);a.rnapos=t.rnapos;a.aapos=t.aapos}a.vcfid=t.vcfid;vcfcopymclass(a,s);e.mlst.push(a)}}if(!e.dstk_novcferror&&o.length){s.error(o[0]+(o.length==1?"":" and "+(o.length-1)+" more errors with the VCF track"))}}function sun1(t,e,s){if(!s.cohort){console.error("arg.cohort missing");return}if(!s.cohort.levels){console.error("arg.cohort.levels missing");return}if(!s.cohort.key2color&&!s.cohort.suncolor){s.cohort.suncolor=ordinal(schemeCategory10)}let a;if(!s.cohort.annotation){a=s.mlst}else{if(!s.cohort.key4annotation){console.error("arg.cohort.key4annotation missing");return}a=[];if(s.mlst[0].sampledata){for(const t of s.mlst){if(!t.sampledata){continue}for(const e of t.sampledata){const t=e.sampleobj[s.cohort.key4annotation];if(!t){continue}const o=s.cohort.annotation[t];if(!o){continue}const n={k4a:t};for(const t of s.cohort.levels){n[t.k]=o[t.k];if(t.full){n[t.full]=o[t.full]}}a.push(n)}}}else{for(const t of s.mlst){const e=t[s.cohort.key4annotation];if(!e){continue}const o=s.cohort.annotation[e];if(!o){continue}const n={k4a:e};for(const t of s.cohort.levels){n[t.k]=o[t.k];if(t.full){n[t.full]=o[t.full]}}a.push(n)}}if(a.length==0){if(s.m2detail){itemtable({mlst:[s.m2detail],pane:true,x:s.cx,y:s.cy,tk:t,block:e})}else{itemtable({mlst:s.mlst,pane:true,x:s.cx,y:s.cy,tk:t,block:e})}return}}let o=s.cx,n=s.cy,r=500,i=250;const l=t.glider.append("g").attr("transform","translate("+o+","+n+")");const c=t.pica;const f=l.append("g");const d=l.append("g");const p={g:l,eye:f,ring:d,pica:c,busy:false};let m=Math.log(a.length)*24;if(m>t.height*.42){m=t.height*.42}else if(m<t.height*.2){m=t.height*.2}let u=o,h=n;if(o-m<0){u=m}else if(o+m>e.width){u=e.width-m}if(n-m<0){h=m}else if(n+m>t.height){h=t.height-m}if(u!=o||h!=n){l.transition().delay(r+i).attr("transform","translate("+u+","+h+")");o=u;n=h}const g=stratinput(a,s.cohort.levels);const b=stratify()(g);b.sum((t=>t.value));b.sort(((t,e)=>e.value-t.value));partition().size([1,Math.pow(m,2)])(b);f.append("circle").attr("r",m).attr("fill","white").attr("fill-opacity",0);let y;const k=d3arc().startAngle((t=>Math.PI*2*t.x0)).endAngle((t=>Math.PI*2*t.x1)).innerRadius((t=>{if(!t.parent){y=Math.sqrt(t.y1)-m/15;return y}return Math.sqrt(t.y0)})).outerRadius((t=>{t.outradius=Math.sqrt(t.y1);return t.outradius}));d.selectAll().data(b.descendants()).enter().append("path").attr("d",k).attr("stroke","white").attr("fill",(t=>{if(!t.parent){return"white"}let e;if(t.children){e=t.id}else{if(!t.parent.parent){e=t.id}else{e=t.parent.id}}let a;if(s.cohort.key2color){a=s.cohort.key2color[e];if(!a){console.log(e);a="#858585"}}else{a=s.cohort.suncolor(e)}t._color=a;return a})).on("mouseover",((a,r)=>{if(!r.parent)return;if(p.busy)return;a.target.setAttribute("fill",rgb(r._color).darker(.5).toString());slicemouseover(r,c,s,o,n,t,e)})).on("mouseout",((t,e)=>{c.g.selectAll("*").remove();if(!e.parent)return;t.target.setAttribute("fill",e._color)})).on("click",((a,o)=>{if(s.noclickring){return}if(!o.parent){return}if(s.cohort.annotation){if(o.data.lst.length==1){showsinglesample(o.data.lst[0].k4a,s.cohort.annotation[o.data.lst[0].k4a],a.clientX,a.clientY);return}showmanysample(o.data.lst,s.cohort,a.clientX,a.clientY);return}itemtable({mlst:o.data.lst,x:a.clientX,y:a.clientY,tk:t,block:e,pane:true})}));const x=y*2;d.attr("transform","scale(.3,.3)").attr("fill-opacity",0).transition().duration(r).attr("transform","scale(1,1)").attr("fill-opacity",1).on("end",(()=>{f.shutter=f.append("rect").attr("x",-y).attr("y",-y).attr("width",y*2).attr("height",0).attr("fill","#ededed").on("click",(()=>remove(p)));f.shutter.transition().duration(i).attr("height",y*2).on("end",(()=>{f.fore=f.append("g");const r=Math.min(x/(s.label.length*textlensf),y*.6);f.fore.append("text").text(s.label).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","#858585").attr("font-weight","bold").attr("font-family","Arial").attr("font-size",r);const i=Math.min(18,Math.min(y*.7/(a.length.toString().length*textlensf),(y-r/2)*.7));f.fore.append("text").text(a.length).attr("text-anchor","middle").attr("fill","#858585").attr("y",-r/2-2).attr("font-family","Arial").attr("font-size",i);f.append("rect").attr("x",-y).attr("y",-y).attr("width",y*2).attr("height",y*2).attr("fill","black").attr("fill-opacity",0).on("click",(()=>{if(p.busy)return;remove(p)})).on("mousedown",(t=>{t.preventDefault();t.stopPropagation();let e=o,s=n,a=t.clientX,r=t.clientY,i=d3select(document.body);i.on("mousemove",(t=>{p.busy=true;o=e+t.clientX-a;n=s+t.clientY-r;l.attr("transform","translate("+o+","+n+")")})).on("mouseup",(()=>{setTimeout((()=>p.busy=false),10);i.on("mousemove",null).on("mouseup",null)}))}));p.listbutt=f.append("g").attr("transform","translate(0,"+r/2+")");const c=p.listbutt.append("rect").attr("x",-x/2).attr("width",x).attr("height",y-r/2).attr("fill","#d9d9d9");const d=p.listbutt.append("text").text(s.m2detail?"Show":"List").attr("y",(y-r/2)/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-family","Arial").attr("fill","#858585").attr("font-size",Math.min(18,i));p.listbutt.append("rect").attr("x",-x/2).attr("width",x).attr("height",y-r/2).attr("fill-opacity",0).on("mouseover",(()=>{c.attr("fill","#bababa");d.attr("fill","white")})).on("mouseout",(()=>{c.attr("fill","#d9d9d9");d.attr("fill","#858585")})).on("click",(a=>{if(s.m2detail){remove(p);itemtable({mlst:[s.m2detail],pane:true,x:a.clientX-m,y:a.clientY-m*2,tk:t,block:e});return}const o=a.target.getBoundingClientRect();remove(p);setTimeout((()=>itemtable({mlst:s.mlst,x:o.left,y:o.top,tk:t,block:e,pane:true})),500)}))}))}))}function remove(t){t.busy=true;if(t.eye.fore){t.eye.fore.remove()}if(t.listbutt){t.listbutt.remove()}if(t.eye.shutter){t.eye.shutter.transition().attr("height",0).on("end",(()=>{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}))}else{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}t.pica.g.selectAll("*").remove()}function slicemouseover(t,e,s,a,o,n,r){const i=s.cohort;const l=13;const c=10;const f=1;let d=(t.x0+t.x1)/2;if(d>=.375&&d<=.625){const e=n.yoff+o+t.outradius;const s=Number.parseFloat(r.svg.attr("height"));l+f+l+(i&&i.root?f+c+5:0);if(e>=s-30){if(d<=.5){d=Math.max(.25,t.x0)}else{d=Math.min(.75,t.x1)}}}e.g.selectAll("*").remove();const p=a+(t.outradius+5)*Math.sin(Math.PI*2*d);const m=o-(t.outradius+5)*Math.cos(Math.PI*2*d);e.g.attr("transform","translate("+p+","+m+")");const u=60;let h=null,g=0;if(i&&i.root){h=e.g.append("g");h.append("rect").attr("width",u+4).attr("height",c+4).attr("fill","white").attr("shape-rendering","crispEdges");h.append("rect").attr("x",2).attr("y",2).attr("width",u).attr("height",c).attr("fill",i.fbarbg||"#ededed").attr("shape-rendering","crispEdges");i.root.each((e=>{if(e.id==t.id){g=e.value}}));if(g>0){h.append("rect").attr("x",2).attr("y",2).attr("width",u*t.value/g).attr("height",c).attr("fill",i.fbarfg||"#858585").attr("shape-rendering","crispEdges")}}const b=e.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",l).attr("font-family","Arial");const y=e.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",l).attr("font-family","Arial");t.data.name+", "+t.value+" sample"+(t.value>1?"s":"");b.text(t.data.name);y.text(t.data.name);const k=e.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",l).attr("font-family","Arial");const x=e.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",l).attr("font-family","Arial");const v=t.value+" sample"+(t.value>1?"s":"")+(h?" ("+g+" total)":"");k.text(v);x.text(v);Math.max(y.node().getBBox().width,x.node().getBBox().width);if(d<.25){k.attr("y",h?-3-c-f:0);x.attr("y",h?-3-c-f:0);b.attr("y",(h?-3-c-f:0)-l-f);y.attr("y",(h?-3-c-f:0)-l-f);if(h){h.attr("transform","translate(0,-"+c+")")}}else if(d<.5){b.attr("dominant-baseline","hanging").attr("y",0);y.attr("dominant-baseline","hanging").attr("y",0);k.attr("dominant-baseline","hanging").attr("y",f+l);x.attr("dominant-baseline","hanging").attr("y",f+l);if(h){h.attr("transform","translate(0,"+(l+f)*2+")")}}else if(d<.75){b.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);y.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);k.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);x.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);if(h){h.attr("transform","translate(-"+u+","+(l+f)*2+")")}}else{k.attr("text-anchor","end").attr("y",h?-3-c-f:0);x.attr("text-anchor","end").attr("y",h?-3-c-f:0);b.attr("text-anchor","end").attr("y",(h?-3-c-f:0)-l-f);y.attr("text-anchor","end").attr("y",(h?-3-c-f:0)-l-f);if(h){h.attr("transform","translate(-"+u+",-"+c+")")}}}function showsinglesample(t,e,s,a){const o=[];for(const t in e){o.push({k:t,v:e[t]})}const n=newpane({x:s,y:a});n.header.text(t);make_table_2col(n.body,o)}function showmanysample(t,e,s,a){const o=new Set;for(const s of t){const t=e.annotation[s.k4a];for(const e in t){o.add(e)}}const n=newpane({x:s,y:a});n.header.text(t.length+" "+e.key4annotation+"s");const r=n.body.append("table");const i=[...o];{const t=r.append("tr");for(const e of i){t.append("td").text(e).style("color","#858585").style("font-size",".7em")}}for(const s of t){const t=r.append("tr").attr("class","sja_tr");const a=e.annotation[s.k4a];for(const e of i){t.append("td").text(a[e]==undefined?"":a[e])}}}async function may_sunburst(t,e,s,a,o,n){if(o.ds){if(o.ds.cohort){let t=false;if(o.ds.cohort.annotation){if(o.ds.cohort.variantsunburst){t=true}}else{t=true}if(t){sun1(o,n,{cx:s,cy:a,mlst:e,label:e[0].mname,cohort:o.ds.cohort});return true}}}return false}const clustercrowdlimit=7;const mnamegetter=t=>{if(!t)return"";if(t.length>25){return t.substr(0,20)+"..."}return t};function rendernumerictk(t,e,s){const a=t.numericmode;if(!a.axisheight){a.axisheight=100}t.glider.selectAll("*").remove();delete t.skewer;const o=mlst_pretreat(t,e,s);const n=new Map;for(const t of o){if(t.__x==undefined){continue}if(!n.has(t.__x)){n.set(t.__x,[])}n.get(t.__x).push(t)}const r=[];if(e.exonsf>=minbpwidth){for(const[t,e]of n){r.push({chr:e[0].chr,pos:e[0].pos,mlst:e,x:t})}}else{if(e.usegm&&e.usegm.coding&&e.gmmode!=gmmode.genomic){const t=new Map;for(const[s,a]of n){if(a[0].chr!=e.usegm.chr){continue}let o=undefined;for(const t of a){if(Number.isFinite(t.aapos))o=t.aapos}if(o==undefined){o=genomic2gm(a[0].pos,e.usegm).aapos}if(o==undefined){console.error("data item cannot map to aaposition");console.log(a[0]);continue}n.delete(s);if(!t.has(o)){t.set(o,[])}let r=true;for(const s of t.get(o)){if(Math.abs(s[0].__x-a[0].__x)<=e.exonsf*3){for(const t of a){s.push(t)}r=false;break}}if(r){t.get(o).push(a)}}e.usegm.utr5?e.usegm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0;for(const e of t.values()){for(const t of e){let e=null;for(const s of t){if(Number.isFinite(s.rnapos))e=s}if(e==null){console.log("trying to map mlst to codon, but no rnapos found");for(const e of t){console.log(e)}continue}r.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x})}}}const t=[];const s=2;for(const[e,a]of n){const o=Math.floor(e/s);if(!t[o]){t[o]=[]}t[o]=[...t[o],...a]}for(const e of t){if(!e)continue;const t=e.reduce(((t,e)=>t+e.__x),0);r.push({isbin:true,chr:e[0].chr,pos:e[0].pos,mlst:e,x:t/e.length})}}r.sort(((t,e)=>t.x-e.x));if(t.data&&e.pannedpx!=undefined&&(!e.usegm||e.gmmode==gmmode.genomic)){const e={};for(const s of t.data){e[s.chr+"."+s.pos]={xoffset:s.xoffset}}for(const t of r){const s=t.chr+"."+t.pos;if(e[s]){t.xoffset=e[s].xoffset}}}t.data=r;numeric_make(t,e);t.height_main=t.toppad+a.toplabelheight+a.maxradius+a.axisheight+a.maxradius+t.stem1+t.stem2+t.stem3+a.bottomlabelheight+t.bottompad;if(!t.data||t.data.length==0){done_tknodata(t,e);return}}function color4disc(t,e){if(e.vcfinfofilter&&e.vcfinfofilter.setidx4mclass!=undefined){const s=e.vcfinfofilter.lst[e.vcfinfofilter.setidx4mclass];const[a,o]=getter_mcset_key(s,t);if(a||o==undefined)return"black";for(const t of o){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(mclass[t.class]){return mclass[t.class].color}return"black"}function numeric_make(t,e){const s=t.numericmode;const a=[];for(const e of t.data){e.x0=e.x;if(e.xoffset!=undefined){e.x=e.x0+e.xoffset}continue}let o=0;if(a.length>0){let t=1;for(let e=0;e<a.length;e++){const s=a[e];const n=[];for(let t=0;t<e;t++){const e=a[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){n.push(e)}}s.y=2;for(const e of n){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}o=Math.max(o,s.y+s.height)}}const n=Math.max(14,e.width/110);s.dotwidth=n;s.maxradius=0;for(const e of t.data){for(const t of e.mlst){t.radius=n/2;s.maxradius=Math.max(t.radius,s.maxradius);t.rimwidth=0;t.aa=e}}const r=adjustview(t,e);s.showsamplebar=r&&t.ds&&t.ds.samplebynumericvalue;if(!s.showsamplebar){s.showgenotypebyvalue=r&&t.ds&&t.ds.genotypebynumericvalue}t.genotype2color.legend.style("display",s.showsamplebar||s.showgenotypebyvalue?"block":"none");let i;let l=null;let c=null;let f=0;let d=null;if(s.showsamplebar){i={name:t.ds.samplebynumericvalue.axislabel};for(const e of t.data){for(const s of e.mlst){if(!s.sampledata)continue;for(const e of s.sampledata){const s=e.sampleobj[t.ds.cohort.key4annotation];if(!s)continue;const a=t.ds.cohort.annotation[s];if(!a)continue;const o=a[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(o))continue;if(l==null){l=o;c=o}else{l=Math.min(l,o);c=Math.max(c,o)}}}}}else if(s.showgenotypebyvalue){i={name:t.ds.genotypebynumericvalue.axislabel};for(const e of t.data){for(const s of e.mlst){let e=s.info[t.ds.genotypebynumericvalue.refref.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}e=s.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}e=s.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){if(l==null){l=e;c=e}else{l=Math.min(l,e);c=Math.max(c,e)}}let a=0,o=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){let e=s.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];if(Number.isFinite(e)){a=e}e=s.info[t.ds.genotypebynumericvalue.refalt.genotypeCountInfokey];if(Number.isFinite(e)){n=e}e=s.info[t.ds.genotypebynumericvalue.altalt.genotypeCountInfokey];if(Number.isFinite(e)){o=e}}else{if(!s.sampledata)continue;for(const t of s.sampledata){if(!t.allele2readcount)continue;if(t.allele2readcount[s.alt]){if(t.allele2readcount[s.ref]){n++}else{o++}}else{a++}}}f=Math.max(f,a,n,o)}}const e=Math.pow(12/2,2)*Math.PI;const s=e*10;d=linear().domain([1,f*.1,f*.3,f*.6,f*.8,f]).range([e,e+(s-e)*.8,e+(s-e)*.85,e+(s-e)*.9,e+(s-e)*.95,s])}else{i=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4numeric];for(const e of t.data){for(const t of e.mlst){t._v=0;const[e,s]=getter_mcset_key(i,t);if(e){console.log(e)}else if(s==undefined||s.length==0);else{if(!Number.isFinite(s[0])){console.log("invalid numerical value for variant: "+s[0])}else{t._v=s[0]}}if(l==null){l=t._v;c=t._v}else{l=Math.min(t._v,l);c=Math.max(t._v,c)}}}}const p=linear().domain([l,c]).range([0,s.axisheight]);for(const e of t.data){for(const t of e.mlst){t._y=p(t._v)}}if(r){t.stem1=5;t.stem2=20;t.stem3=10}else{t.stem1=0;t.stem2=0;t.stem3=0}for(const e of t.data){for(const s of e.mlst){t.glider.append("text").text(mnamegetter(s.mname)).attr("font-family",font).attr("font-size",s.radius*2-2).each((function(){s.labwidth=this.getBBox().width})).remove()}}for(const e of t.data){for(const t of e.mlst){delete t.labattop;delete t.labatbottom}}if(r){for(const e of t.data){if(e.mlst.length==1){const t=e.mlst[0];t.labattop=true}else{if((e.width-e.fixedgew)/(e.mlst.length-1)<clustercrowdlimit);else{for(const t of e.mlst){t.labattop=true}}}}}else{verticallabplace(t)}s.toplabelheight=0;s.bottomlabelheight=0;if(s.showsamplebar||s.showgenotypebyvalue){for(const e of t.data){for(const t of e.mlst){s.toplabelheight=Math.max(s.toplabelheight,t.labwidth)}}}else{for(const e of t.data){for(const t of e.mlst){if(t.labattop){s.toplabelheight=Math.max(s.toplabelheight,t._y+t.labwidth-s.axisheight)}else if(t.labatbottom){s.bottomlabelheight=Math.max(s.bottomlabelheight,t.labwidth-t._y)}}}}{let a=e.labelfontsize+t.labyspace+e.labelfontsize;if(t.label_stratify){a+=t.label_stratify.length*(t.labyspace+e.labelfontsize)}s.toplabelheight=Math.max(s.toplabelheight,a)}t.leftaxis.attr("transform","translate(-"+n/2+","+(s.toplabelheight+s.maxradius)+")").selectAll("*").remove();{const a=linear().domain([l,c]).range([s.axisheight,0]);const o=axisLeft().scale(a).ticks(4);if(i.numberIsInteger){o.tickFormat(format("d"));if(c-l<3){o.ticks(c-l)}}axisstyle({axis:t.leftaxis.call(o),showline:true,fontsize:n});if(l==c){t.leftaxis.append("text").attr("text-anchor","end").attr("font-size",n).attr("dominant-baseline","central").attr("x",e.tkleftlabel_xshift).attr("y",s.axisheight).text(l).attr("fill","black")}{let e=0;t.leftaxis.selectAll("text").each((function(){e=Math.max(e,this.getBBox().width)}));const a=i.name.split(" ");const o=(s.axisheight-a.length*(n+1))/2;let r=0;a.forEach(((s,a)=>{t.leftaxis.append("text").attr("fill","black").attr("font-size",n).attr("dominant-baseline","central").attr("text-anchor","end").attr("y",o+(n+1)*a).attr("x",-(e+15)).text(s).each((function(){r=Math.max(r,this.getBBox().width+15+e)}))}));t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,r)}}const m=t.glider.append("g").attr("transform","translate(0,0)");m.append("line").attr("y1",s.toplabelheight+s.maxradius).attr("y2",s.toplabelheight+s.maxradius).attr("x2",e.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");m.append("line").attr("y1",s.toplabelheight+s.maxradius+s.axisheight).attr("y2",s.toplabelheight+s.maxradius+s.axisheight).attr("x2",e.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");t.skewer2=m.selectAll().data(t.data).enter().append("g").attr("class","sja_skg2").each((function(t){t.g=this}));t.skewer2.attr("transform",(t=>"translate("+t.x+","+(s.toplabelheight+disclabelspacing+s.maxradius+s.axisheight+s.maxradius)+")"));if(r){t.skewer2.append("path").attr("class","sja_aa_stem").attr("d",(e=>skewer2_setstem(e,t))).attr("stroke",(e=>color4disc(e.mlst[0],t))).attr("fill",(t=>t.mlst.length==1?"none":"#ededed"))}const u=t.skewer2.selectAll().data((t=>t.mlst)).enter().append("g").attr("class","sja_aa_discg").each((function(t){t.g=this}));if(s.showsamplebar){u.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const a of e.mlst){if(!a.sampledata)continue;const e=d3select(a.g);for(const o of a.sampledata){const n=o.sampleobj[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(i))continue;const l=-p(i)-s.maxradius;const c=o.allele2readcount[a.ref];const f=o.allele2readcount[a.alt];if(f)continue;e.append("line").attr("x1",-a.radius).attr("x2",a.radius).attr("y1",l).attr("y2",l).attr("stroke",c?f?t.genotype2color.ra:t.genotype2color.rr:t.genotype2color.aa).attr("shape-rendering","crispEdges").on("mouseover",(e=>{const s=[{k:t.ds.cohort.key4annotation,v:n}];for(const t in r){s.push({k:t,v:r[t]})}s.push({k:"genotype",v:o.genotype});t.tktip.clear().show(e.clientX,e.clientY);make_table_2col(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-a.radius-3);e.target.setAttribute("x2",a.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-a.radius);e.target.setAttribute("x2",a.radius)}))}for(const o of a.sampledata){const n=o.sampleobj[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(i))continue;const l=-p(i)-s.maxradius;const c=o.allele2readcount[a.ref];const f=o.allele2readcount[a.alt];if(!f)continue;e.append("line").attr("x1",-a.radius).attr("x2",a.radius).attr("y1",l).attr("y2",l).attr("stroke",c?f?t.genotype2color.ra:t.genotype2color.rr:t.genotype2color.aa).attr("shape-rendering","crispEdges").on("mouseover",(e=>{const s=[{k:t.ds.cohort.key4annotation,v:n}];for(const t in r){s.push({k:t,v:r[t]})}s.push({k:"genotype",v:o.genotype});t.tktip.clear().show(e.clientX,e.clientY);make_table_2col(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-a.radius-3);e.target.setAttribute("x2",a.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-a.radius);e.target.setAttribute("x2",a.radius)}))}}}}else if(s.showgenotypebyvalue){u.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const a of e.mlst){let e=0,o=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){e=a.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];o=a.info[t.ds.genotypebynumericvalue.altalt.genotypeCountInfokey];n=a.info[t.ds.genotypebynumericvalue.refalt.genotypeCountInfokey]}else{if(!a.sampledata)continue;for(const t of a.sampledata){if(!t.allele2readcount)continue;if(t.allele2readcount[a.alt]){if(t.allele2readcount[a.ref]){n++}else{o++}}else{e++}}}const r=d3select(a.g);if(e){const o=a.info[t.ds.genotypebynumericvalue.refref.infokey];if(o!=undefined){const n=-p(o)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(d(e))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.refref.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const n=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Ref/Ref"},{k:"#sample",v:e},{k:t.ds.genotypebynumericvalue.axislabel,v:o}];make_table_2col(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(n){const e=a.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){const o=-p(e)-s.maxradius;r.append("circle").attr("cy",o).attr("r",Math.sqrt(d(n))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.refalt.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const o=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Ref/Alt"},{k:"#sample",v:n},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];make_table_2col(t.tktip.d,o)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(o){const e=a.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){const n=-p(e)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(d(o))/Math.PI).attr("stroke",t.ds.genotypebynumericvalue.altalt.color).attr("fill","white").attr("fill-opacity",0).on("mouseover",(s=>{t.tktip.show(s.clientX,s.clientY).clear();const n=[{k:"Variant",v:a.chr+":"+(a.pos+1)+" "+a.ref+">"+a.alt},{k:"Genotype",v:"Alt/Alt"},{k:"#sample",v:o},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];make_table_2col(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}}}}else{u.attr("transform",(t=>"translate("+t.xoff+","+(t._y+s.maxradius)*-1+")"));const a=u.append("circle");a.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtnloss||t.dt==dtcloss)).attr("fill","white").attr("stroke-width",2).attr("stroke",(e=>color4disc(e,t))).attr("r",(t=>t.radius-2));a.filter((t=>t.dt==dtsnvindel||t.dt==dtsv||t.dt==dtfusionrna)).attr("fill",(e=>color4disc(e,t))).attr("stroke","white").attr("r",(t=>t.radius-.5));u.filter((t=>t.dt==dtfusionrna||t.dt==dtsv)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>d3arc()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));u.append("circle").attr("r",(t=>t.radius-.5)).attr("stroke",(e=>color4disc(e,t))).attr("class","sja_aa_disckick").attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>{m_mouseover(s,t);if(t.disc_mouseover){t.disc_mouseover(s,e.target)}else{epaint_may_hl(t,[s],true)}})).on("mouseout",((e,s)=>{m_mouseout(s,t);if(t.disc_mouseout){t.disc_mouseout(s)}else{epaint_may_hl(t,[s],false)}})).on("click",((s,a)=>{const o=s.target.getBoundingClientRect();m_click(a,o,t,e)}))}const h=u.filter((t=>t.labattop||t.labatbottom)).append("text").each((function(t){t.textlabel=this})).text((t=>mnamegetter(t.mname))).attr("font-family",font).attr("font-size",(t=>{t._labfontsize=Math.max(12,t.radius*1.2);return t._labfontsize})).attr("fill",(e=>color4disc(e,t))).attr("x",(t=>s.showsamplebar||s.showgenotypebyvalue?s.axisheight+s.maxradius+4:t.radius+t.rimwidth+disclabelspacing)).attr("y",(t=>t._labfontsize*middlealignshift)).attr("class","sja_aa_disclabel").attr("transform",(t=>"rotate("+(t.labattop?"-":"")+"90)")).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>m_mouseover(s,t))).on("mouseout",((e,s)=>m_mouseout(s,t))).on("click",((s,a)=>{m_click(a,{left:s.clientX,top:s.clientY},t,e)}));if(t.hlaachange){h.filter((e=>t.hlaachange.has(e.mname))).classed("sja_pulse",true)}}function m_mouseover(t,e){if(t.textlabel){d3select(t.textlabel).attr("font-size",t._labfontsize*1.1)}const s=e.numericmode;if(s.showsamplebar)return;if(s.showgenotypebyvalue)return;e.pica.g.attr("transform","translate("+(t.aa.x+t.xoff)+","+(s.toplabelheight+s.maxradius+s.axisheight-t._y)+")");const a=10;const o=4;const n=t._labfontsize||13;const r=color4disc(t,e);let i=0,l=false;e.pica.g.append("text").attr("font-size",n).attr("font-family",font).text(t._v).each((function(){i=this.getBBox().width})).remove();if(!t.labattop&&!t.labatbottom){l=true;e.pica.g.append("text").attr("font-size",n).attr("font-family",font).text(t.mname).each((function(){i=Math.max(i,this.getBBox().width)})).remove()}const c=o*2+i;let f,d,p=true;if(c+a>t.aa.x+t.xoff){p=false;d=t.radius+t.rimwidth;f=d+a}else{d=-t.radius-t.rimwidth-a;f=d-c}e.pica.g.append("rect").attr("x",f-2).attr("y",-2-o-(l?n:n/2)).attr("width",4+c).attr("height",4+o*2+n*(l?2:1)).attr("fill","white");e.pica.g.append("line").attr("x1",d).attr("x2",d+a).attr("stroke","white").attr("stroke-width",3).attr("shape-rendering","crispEdges");e.pica.g.append("line").attr("x1",d).attr("x2",d+a).attr("stroke",r).attr("shape-rendering","crispEdges");e.pica.g.append("rect").attr("x",f).attr("y",-o-(l?n:n/2)).attr("width",c).attr("height",o*2+n*(l?2:1)).attr("fill","none").attr("stroke",r).attr("shape-rendering","crispEdges");e.pica.g.append("text").text(t._v).attr("text-anchor",p?"end":"start").attr("font-size",n).attr("font-family",font).attr("x",p?d-o:f+o).attr("y",l?-n/2:0).attr("fill",r).attr("dominant-baseline","central");if(l){e.pica.g.append("text").text(t.mname).attr("text-anchor",p?"end":"start").attr("font-size",n).attr("font-family",font).attr("x",p?d-o:f+o).attr("y",l?n/2:0).attr("fill",r).attr("dominant-baseline","central")}}function m_mouseout(t,e){if(t.textlabel){d3select(t.textlabel).attr("font-size",t._labfontsize)}e.pica.g.selectAll("*").remove()}async function m_click(t,e,s,a){if(t.dt==dtfusionrna||t.dt==dtsv){itemtable({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:a,svgraph:true});return}if(t.occurrence>1){if(await may_sunburst(t.occurrence,[t],t.aa.x+t.xoff,s.numericmode.toplabelheight+s.numericmode.axisheight-t._y,s,a))return}itemtable({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:a})}function verticallabplace(t){const e=[];for(const s of t.data){for(const t of s.mlst){e.push({m:t,w:2*(t.radius+t.rimwidth),x:s.x0,y:t._y})}}e.sort(((t,e)=>e.y-t.y));for(let t=0;t<e.length;t++){const s=e[t];let a=false;for(let o=0;o<t;o++){const t=e[o];if(Math.abs(s.x-t.x)<(s.w+t.w)/2-2){a=true;break}}if(!a){s.m.labattop=true}}for(let t=e.length-1;t>=0;t--){const s=e[t];if(s.m.labattop)continue;let a=false;for(let o=e.length-1;o>t;o--){const t=e[o];if(t.m.labatbottom&&Math.abs(t.x-s.x)<(t.w+s.w)/2-2){a=true;break}}if(!a){s.m.labatbottom=true}}}function skewer2_setstem(t,e){if(t.mlst.length==1){return"M0,0v"+e.stem1+"l"+-t.xoffset+","+e.stem2+"v"+e.stem3}return"M0,0"+"v"+e.stem1+"l"+-t.xoffset+","+e.stem2+"v"+e.stem3+"v-"+e.stem3+"l"+(t.stemw+t.xoffset-1)+",-"+e.stem2+"v-"+e.stem1}function adjustview(t,e){t.numericmode;const s=100;let a=0;for(const e of t.data){let t=0;for(const s of e.mlst){t+=2*(s.radius+s.rimwidth)}if(e.mlst.length==1){e.width=t}else{e.width=Math.min(s,t);const a=e.mlst[0];const o=e.mlst[e.mlst.length-1];e.fixedgew=a.radius+a.rimwidth+o.radius+o.rimwidth}a+=e.width}if(a<=e.width){let s=0;for(const e of t.data){e.x=s+e.mlst[0].radius+e.mlst[0].rimwidth;s+=e.width;if(e.mlst.length==1){e.stemw=0}else{e.stemw=e.width-e.fixedgew}}horiplace1(t.data,e.width);for(const e of t.data){e.xoffset=e.x-e.x0;if(e.mlst.length==1){e.mlst[0].xoff=0;e.stemw=0}else{e.stemw=e.width-e.fixedgew;const t=e.stemw/(e.mlst.length-1);for(let s=0;s<e.mlst.length;s++){e.mlst[s].xoff=t*s}}}return true}else{for(const e of t.data){e.x=e.x0;e.xoffset=0;for(const t of e.mlst){t.xoff=0}}return false}}function horiplace1(t,e){for(let s=0;s<t.length;s++){if(t[s].x0<0)continue;if(t[s].x0>e)break;while(1){let a=0,o=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}a+=Math.abs(s.x-s.x0-s.stemw/2);s.x++;o+=Math.abs(s.x-s.x0-s.stemw/2)}if(t[s].x>t[s].x0-t[s].stemw/2){for(let e=s;e<t.length;e++){t[e].x--}break}const n=t[t.length-1];if(n.x+n.width/2>=e){return}if(o<=a);else{for(let a=s;a<t.length;a++){if(t[a].x0>e){break}t[a].x--}break}}}}const vcfnotannotated_label="Not annotated";const middlealignshift=.3;const disclabelspacing=1;const minbpwidth=4;const modefold=0;const modeshow=1;async function dstkload(t,e){try{if(!t)throw"no tk";if(!t.ds)throw"no ds";if(!e.gmmode||e.gmmode==gmmode.genomic){if(e.viewrangeabovelimit(t.viewrangeupperlimit)){t.mlst=[];t.viewrangeupperlimit_above=true;dstkrender(t,e);return}}delete t.viewrangeupperlimit_above;if(t.isvcf){e.tkcloakon(t);loadvcftk(e,t);return}if(e.ds2handle[t.ds.label]){t.__handlesays=e.ds2handle[t.ds.label].handlesays}if(t.ds.bulkdata||t.ds.mlst){return await dstkload_fromclientdata(t,e)}await dstkload_fromdsquery(t,e);mayAddSubtk_legacyDsFilter(t,e);t.ds.busy=false;e.tkcloakoff(t,{})}catch(s){if(s.stack)console.log(s.stack);t.ds.busy=false;e.tkcloakoff(t,{error:s.message||s});e.setllabel(t);e.block_setheight()}}function mayAddSubtk_legacyDsFilter(t,e){if(!t.legacyDsFilter)return;if(!t.legacyDsFilter.key||!t.legacyDsFilter.value)throw"legacyDsFilter is not {key,value}";const s=t.mlst.filter((e=>e[t.legacyDsFilter.key]==t.legacyDsFilter.value));const a={label:t.ds.label+" - "+t.legacyDsFilter.value,bulkdata:{},parentname:t.ds.label,iscustom:true,sampleselectable:t.ds.sampleselectable};a.bulkdata[e.usegm.name.toUpperCase()]=s;e.addchilddsnoload(a);const o=e.block_addtk_template({type:tkt.ds,ds:a});dstkload(o,e)}async function dstkload_fromclientdata(t,e){if(e.usegm){if(t.__handlesays){t.__handlesays.style("background-color","#ddd").style("color","black")}let s=[];if(t.ds.bulkdata){const a=t.ds.bulkdata[e.usegm.name.toUpperCase()];if(a){s=[...a]}}if(t.ds.mlst){for(const a of t.ds.mlst){if(a.gene.toUpperCase()==e.usegm.name.toUpperCase()){s.push(a)}}}if(s.length){const a=[];for(const t of s){if(t.isoform&&t.isoform==e.usegm.isoform){a.push(t)}}if(a.length){load2tk([{lst:a}],e,t)}else{throw"No data from "+t.ds.label+" for "+e.usegm.isoform}}else{throw"No data from "+t.ds.label+" for "+e.usegm.name}if(t.ds.dbexpression&&(!t.eplst||t.eplst.length==0)){const s={jwt:e.jwt,db:t.ds.dbexpression.dbfile,tablename:t.ds.dbexpression.tablename,keyname:t.ds.dbexpression.keyname,key:e.usegm.name};const a=await dofetch2("dbdata",{method:"POST",body:JSON.stringify(s)});if(a.error)throw a.error;if(!t.eplst)t.eplst=[];if(t.ds.dbexpression.tidy)t.ds.dbexpression.tidy(a.rows);const o={data:a.rows,expp:t.ds.dbexpression.config,block:e,genome:e.genome,genename:e.usegm.name,dsname:t.ds.label};const n=await import("./ep-708f0514.js");t.eplst.push(new n.default(o))}}else{const s=[];const a=new Map;for(const t of e.rglst){if(!a.has(t.chr)){a.set(t.chr,[])}a.get(t.chr).push(t)}const o=[];if(t.ds.bulkdata){for(const e in t.ds.bulkdata){o.push(...t.ds.bulkdata[e])}}if(t.ds.mlst){o.push(...t.ds.mlst)}for(const t of o){switch(t.dt){case dtsnvindel:case dtitd:case dtdel:case dtnloss:case dtcloss:if(!t.pos){break}if(!t.chr&&!a.has(t.chr)){break}for(const e of a.get(t.chr)){if(t.pos>=e.start&&t.pos<e.stop){s.push(t);break}}break;case dtsv:case dtfusionrna:if(!t.pairlst){break}let e=false;for(const s of t.pairlst){if(s.a.chr&&a.has(s.a.chr)){const t=s.a.position||s.a.pos;if(t){for(const o of a.get(s.a.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}if(s.b.chr&&a.has(s.b.chr)){const t=s.b.position||s.b.pos;if(t){for(const o of a.get(s.b.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}}if(e){s.push(t)}break}}if(s.length){load2tk([{lst:s}],e,t)}}}async function dstkload_fromdsquery(t,e){if(t.__handlesays)t.__handlesays.text("Loading...");t.ds.busy=true;e.tkcloakon(t);const s={genome:e.genome.name,dsname:t.ds.label,range:e.tkarg_maygm(t)[0]};if(e.usegm){s.genename=e.usegm.name;s.isoform=e.usegm.isoform}if(t.eplst){s.noexpression=1}if(e.hidedatasetexpression){s.noexpression=1}const a=await dofetch2("dsdata",{method:"POST",body:JSON.stringify(s)});if(t.__handlesays){t.__handlesays.text(t.ds.label).style("background-color","#ddd").style("color","black")}if(a.error)throw a.error;load2tk(a.data,e,t)}function load2tk(t,e,s){if(s.dsuninitiated){for(let t=0;t<e.tklst.length;t++){if(e.tklst[t].tkid==s.tkid){e.tklst.splice(t,1);break}}delete s.dsuninitiated;let t=-1;for(let s=0;s<e.tklst.length;s++){const a=e.tklst[s];if(a.type==tkt.usegm&&!a.hidden){t=s;break}}let a=true;if(t==-1){a=true;e.tklst.push(s)}else{let o=false;for(let s=0;s<t;s++){const t=e.tklst[s];if(!t.hidden&&t.type==tkt.ds){o=true;break}}if(o){a=false;e.tklst.splice(t+1,0,s)}else{a=true;if(t==0){e.tklst.unshift(s)}else{e.tklst.splice(t-1,0,s)}}}if(s.aboveprotein==undefined){s.aboveprotein=a}s.eplst=[]}s.mlst=[];const a=[];for(const o of t){if(o.isgeneexpression){a.push(dsqueryresult_geneexpression(o,s,e));continue}if(o.vcfid){data2tk(o,s,e);continue}if(o.lst){dsqueryresult_snvindelfusionitd(o.lst,s,e);may_print_stratifycountfromserver(o,s);continue}e.error("unknown data/query type from "+s.ds.label);return}Promise.all(a).then((()=>{if(s.eplst.length>1){for(let t=1;t<s.eplst.length;t++){const e=s.eplst[t];e.pane.pane.style("left",Number.parseInt(s.eplst[0].pane.pane.style("left"))+50*t+"px");e.pane.pane.style("top",Number.parseInt(s.eplst[0].pane.pane.style("top"))+50*t+"px")}}}));dstkrender(s,e)}function dstkrender(t,e){e.tkcloakoff(t,{});mlst_set_occurrence(t);if(t.vcfinfofilter&&t.vcfinfofilter.setidx4numeric!=undefined){if(!t.numericmode){t.numericmode={axisheight:t.axisheight}}}else{delete t.numericmode}const s=new Set;for(const t in morigin){if(morigin[t].hidden){s.add(t)}}vcfinfofilter_mayupdateautocategory(t);if(t.numericmode){rendernumerictk(t,e,s)}else{renderskewertk(t,e,s)}e.setllabel(t);e.block_setheight();e.tkchangeaffectlegend(t);showlegend_vcfinfofilter(t,e);showlegend_populationfrequencyfilter(t,e);{const s=showlegend_sampleattribute(t,e);if(s)console.log("showlegend_sampleattribute: "+s)}}function mlst_set_occurrence(t){if(t.vcfinfofilter&&t.vcfinfofilter.setidx4occurrence!=undefined){const e=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4occurrence];if(!e)throw"mcset not found by setidx4occurrence";for(const s of t.mlst){const[t,a]=getter_mcset_key(e,s);if(t||a==undefined){s.occurrence=1}else{s.occurrence=a[0]}}}else{for(const e of t.mlst){e.occurrence=1}}}function renderskewertk(t,e,s){t.leftaxis.selectAll("*").remove();if(e.usegm&&e.gmmode!=gmmode.genomic&&e.pannedpx!=undefined&&t.skewer){tkdata_update_x(t,e);t.skewer.attr("transform",(t=>"translate("+t.x+","+t.y+")"));settle_glyph(t,e)}else{t.glider.selectAll("*").remove();mlst_pretreat(t,e,s);const a=new Map;for(const e of t.mlst){if(e.__x==undefined){continue}if(!a.has(e.__x)){a.set(e.__x,[])}a.get(e.__x).push(e)}const o=[];if(e.exonsf>=minbpwidth){for(const[t,e]of a){o.push({chr:e[0].chr,pos:e[0].pos,mlst:e,x:t,groups:mlst2disc(e)})}}else{if(e.usegm&&e.usegm.coding&&e.gmmode!=gmmode.genomic){const t=new Map;for(const[s,o]of a){if(o[0].chr!=e.usegm.chr){continue}let n=undefined;for(const t of o){if(Number.isFinite(t.aapos))n=t.aapos}if(n==undefined){n=genomic2gm(o[0].pos,e.usegm).aapos}if(n==undefined){console.error("data item cannot map to aaposition");console.log(o[0]);continue}a.delete(s);if(!t.has(n)){t.set(n,[])}let r=true;for(const s of t.get(n)){if(Math.abs(s[0].__x-o[0].__x)<=e.exonsf*3){for(const t of o){s.push(t)}r=false;break}}if(r){t.get(n).push(o)}}e.usegm.utr5?e.usegm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0;for(const e of t.values()){for(const t of e){let e=null;for(const s of t){if(Number.isFinite(s.rnapos))e=s}if(e==null){console.log("trying to map mlst to codon, but no rnapos found");for(const e of t){console.log(e)}continue}o.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x,groups:mlst2disc(t)})}}}const t=[];const s=2;for(const[e,o]of a){const a=Math.floor(e/s);if(!t[a]){t[a]=[]}t[a]=[...t[a],...o]}for(const e of t){if(!e)continue;const t=e.reduce(((t,e)=>t+e.__x),0);o.push({isbin:true,chr:e[0].chr,pos:e[0].pos,mlst:e,x:t/e.length,groups:mlst2disc(e)})}}o.sort(((t,e)=>t.x-e.x));if(t.data&&e.pannedpx!=undefined&&(!e.usegm||e.gmmode==gmmode.genomic)){const e={};for(const s of t.data){e[s.chr+"."+s.pos]={mode:s.showmode,xoffset:s.xoffset,slabelrotate:s.slabelrotate}}for(const t of o){const s=t.chr+"."+t.pos;if(e[s]){t.showmode=e[s].mode;t.xoffset=e[s].xoffset;t.slabelrotate=e[s].slabelrotate}}}t.data=o;for(const e of t.data){e.occurrence=e.groups.reduce(((t,e)=>t+e.occurrence),0)}skewer_make(t,e);t.height_main=t.toppad+t.maxskewerheight+t.stem1+t.stem2+t.stem3+t.bottompad}if(!t.data||t.data.length==0){done_tknodata(t,e);return}if(t.hlaachange||t.hlvariants){const s=[];const a=[];if(t.hlaachange){for(const e of t.data){let o=false;for(const s of e.groups){if(t.hlaachange.has(s.mlst[0].mname)){o=true;t.hlaachange.delete(s.mlst[0].mname);break}}if(o){a.push(e)}else{s.push(e)}}if(t.hlaachange.size){if(!e.usegm){e.error("cannot add items from hlaachange: not in gene-mode")}else{hlaachange_addnewtrack(t,e)}}delete t.hlaachange}if(t.hlvariants){const e={};for(const s of t.hlvariants){e[s.chr+"."+s.pos+"."+s.ref+"."+s.alt]=1}for(const o of t.data){let t=false;for(const s of o.groups){if(t){break}for(const a of s.mlst){if(e[a.chr+"."+a.pos+"."+a.ref+"."+a.alt]){t=true;break}}}if(t){a.push(o)}else{s.push(o)}}}fold_glyph(s,t);unfold_glyph(a,t,e)}else{settle_glyph(t,e)}}function mlst2disc(t,e){const s=new Map;for(const e of t){switch(e.dt){case dtsnvindel:if(!s.has(e.dt)){s.set(e.dt,new Map)}if(!s.get(e.dt).has(e.class)){s.get(e.dt).set(e.class,new Map)}const t=e.mname||"";if(!s.get(e.dt).get(e.class).has(t)){s.get(e.dt).get(e.class).set(t,[])}s.get(e.dt).get(e.class).get(t).push(e);break;case dtsv:case dtfusionrna:if(!s.has(e.dt)){s.set(e.dt,new Map)}if(!s.get(e.dt).has(e.class)){s.get(e.dt).set(e.class,{use5:new Map,use3:new Map})}if(e.useNterm){if(!s.get(e.dt).get(e.class).use5.has(e.mname)){s.get(e.dt).get(e.class).use5.set(e.mname,[])}s.get(e.dt).get(e.class).use5.get(e.mname).push(e)}else{if(!s.get(e.dt).get(e.class).use3.has(e.mname)){s.get(e.dt).get(e.class).use3.set(e.mname,[])}s.get(e.dt).get(e.class).use3.get(e.mname).push(e)}break;case dtitd:case dtdel:case dtnloss:case dtcloss:if(!s.has(e.dt)){s.set(e.dt,[])}s.get(e.dt).push(e);break;default:console.log("unknown datatype: "+e.dt);console.log(e);return}}const a=[];for(const[t,e]of s){switch(t){case dtsnvindel:for(const s of e.values()){for(const e of s.values()){a.push({dt:t,mlst:e})}}break;case dtsv:case dtfusionrna:for(const s of e.values()){for(const e of s.use5.values()){a.push({dt:t,useNterm:true,mlst:e})}for(const e of s.use3.values()){a.push({dt:t,useNterm:false,mlst:e})}}break;case dtitd:case dtdel:case dtnloss:case dtcloss:a.push({dt:t,mlst:e})}}for(const t of a){let e=0,s=0;for(const a of t.mlst){if(a.isrim1)e++;else if(a.isrim2)s++}t.rim1count=e;t.rim2count=s;t.occurrence=t.mlst.reduce(((t,e)=>t+e.occurrence),0)}a.sort(((t,e)=>e.occurrence-t.occurrence));return a}function skewer_make(t,e){delete t.skewer2;const s=e=>{if(t.vcfinfofilter&&t.vcfinfofilter.setidx4mclass!=undefined){const s=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4mclass];const[a,o]=getter_mcset_key(s,e);if(a||o==undefined)return"black";for(const t of o){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(mclass[e.class]){return mclass[e.class].color}return"black"};const a=[];for(const s of t.data){s.x0=s.x;if(s.xoffset!=undefined){s.x=s.x0+s.xoffset}for(const t of s.groups){t.aa=s;let o=null;if(t.dt==dtitd){o=t.mlst[0].rnaduplength;for(const e of t.mlst){o=Math.max(o,e.rnaduplength)}}else if(t.dt==dtdel){o=t.mlst[0].rnadellength;for(const e of t.mlst){o=Math.max(o,e.rnadellength)}}else{continue}if(!Number.isFinite(o)||o<0){console.log("no rnaspan for stack bar from itd/del");console.log(t.mlst);continue}let n=null;if(e.usegm){const a=t.mlst[0].rnapos;const r=rna2gmcoord(a+o,e.usegm);const i=e.seekcoord(e.usegm.chr,r);if(i.length>0){n=i[0].x-s.x}else{console.log(r+" no hit on rglst")}}if(!Number.isFinite(n)){console.log("no pxspan for stack bar from itd/del");console.log(t.mlst);continue}t.stackbar={aa:s.mlst[0].aapos,pxspan:n,height:4,grp:t};s.hasstackbar=true;a.push(t.stackbar)}}let o=0;if(a.length>0){let t=1;for(let e=0;e<a.length;e++){const s=a[e];const n=[];for(let t=0;t<e;t++){const e=a[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){n.push(e)}}s.y=2;for(const e of n){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}o=Math.max(o,s.y+s.height)}}const n=Math.max(14,e.width/110);let r=0;for(const e of t.data){for(const t of e.groups){r=Math.max(r,t.occurrence)}}let i=0;const l=Math.pow(n/2,2)*Math.PI;if(r<=10)i=l*r*.9;else if(r<=100)i=l*10;else if(r<=1e3)i=l*14;else i=l*20;const c=linear().domain([1,r*.5,r*.6,r*.7,r*.8,r]).range([l,l+(i-l)*.8,l+(i-l)*.85,l+(i-l)*.9,l+(i-l)*.95,i]);let f=n/2;t.maxskewerheight=0;t.skewer=t.glider.selectAll().data(t.data).enter().append("g").attr("class","sja_skg").each((function(e){e.skewer=this;if(e.showmode==undefined){e.showmode=modefold}e.maxradius=0;e.maxrimwidth=0;e.width=0;e.slabelrotate=false;e.slabelwidth=0;for(const t of e.groups){if(t.occurrence==1){t.radius=n/2}else{const e=t.occurrence.toString().length;t.radius=Math.max(Math.sqrt(c(t.occurrence)/Math.PI),e*5)}e.maxradius=Math.max(e.maxradius,t.radius);f=Math.max(f,t.radius);t.rimwidth=t.rim1count+t.rim2count==0?0:Math.max(2,t.radius/6);e.maxrimwidth=Math.max(e.maxrimwidth,t.rimwidth)}let s=0;for(const t of e.groups){t.yoffset=s+t.radius+t.rimwidth;s+=(t.radius+t.rimwidth)*2}t.maxskewerheight=Math.max(t.maxskewerheight,s)}));const d=t.skewer.selectAll().data((t=>t.groups)).enter().append("g").attr("transform",(e=>"translate(0,"+(e.aa.showmode==modefold?0:e.yoffset*(t.aboveprotein?-1:1))+")")).attr("class","sja_aa_discg").each((function(t){t.g=this}));const p=d.append("circle");p.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtnloss||t.dt==dtcloss)).attr("fill","white").attr("stroke-width",2).attr("stroke",(t=>s(t.mlst[0]))).attr("r",(t=>t.radius-2));p.filter((t=>t.dt==dtsnvindel||t.dt==dtsv||t.dt==dtfusionrna)).attr("fill",(t=>s(t.mlst[0]))).attr("stroke","white").attr("r",(t=>t.radius-.5));d.filter((t=>t.dt==dtfusionrna||t.dt==dtsv)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>d3arc()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));const m=d.filter((t=>t.occurrence>1)).append("text").text((t=>t.occurrence)).attr("font-family",font).attr("class","sja_aa_discnum").attr("fill-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("stroke-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("text-anchor","middle").each((t=>{const e=t.radius*1.5;t.discnumfontsize=Math.min(e/(t.occurrence.toString().length*textlensf),e)})).attr("font-size",(t=>t.discnumfontsize)).attr("y",(t=>t.discnumfontsize*middlealignshift));m.filter((t=>t.dt==dtsnvindel)).attr("fill","white");m.filter((t=>t.dt==dtsv||t.dt==dtfusionrna)).attr("stroke",(t=>s(t.mlst[0]))).attr("stroke-width",.8).attr("font-weight","bold").attr("fill","white");m.filter((t=>t.dt==dtitd||t.dt==dtdel||t.dt==dtcloss||t.dt==dtnloss)).attr("fill",(t=>s(t.mlst[0])));const u=d.append("text").text((t=>t.mlst[0].mname)).attr("font-size",(t=>{t._labfontsize=Math.max(12,t.radius*1.2);return t._labfontsize})).each((function(e){const s=this.getBBox().width;e._label_width=s;if(e.aa.groups.length==1){e.aa.slabelrotate=true;e.aa.slabelwidth=s;t.maxskewerheight=Math.max(t.maxskewerheight,(e.radius+e.rimwidth)*2+2+s)}})).attr("fill",(t=>s(t.mlst[0]))).attr("x",(t=>t.radius+t.rimwidth+1)).attr("y",(t=>t._labfontsize*middlealignshift)).attr("font-family",font).classed("sja_aa_disclabel",true).attr("fill-opacity",(t=>t.aa.showmode==modefold?0:1)).attr("transform","scale(1) rotate(0)").on("mousedown",(t=>{t.stopPropagation()})).on("click",((s,a)=>{fold_glyph([a.aa],t);unfold_update(t,e);if(e.debugmode){console.log(a.aa)}}));if(t.hlaachange){u.filter((e=>t.hlaachange.has(e.mlst[0].mname))).classed("sja_pulse",true)}for(const e of t.data){let t=0,s=0;for(const a of e.groups){t=Math.max(t,a.radius+a.rimwidth);s=Math.max(s,a.radius+a.rimwidth+disclabelspacing+a._label_width)}e.width=t+s}d.append("circle").attr("r",(t=>t.radius-.5)).attr("stroke",(t=>s(t.mlst[0]))).attr("class","sja_aa_disckick").attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>{if(t.disc_mouseover){t.disc_mouseover(s,e.target)}else{epaint_may_hl(t,s.mlst,true)}})).on("mouseout",((e,s)=>{if(t.disc_mouseout){t.disc_mouseout(s)}else{epaint_may_hl(t,s.mlst,false)}})).on("click",(async(s,a)=>{const o=s.target.getBoundingClientRect();if(a.dt==dtfusionrna||a.dt==dtsv){itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e,svgraph:true});return}if(a.occurrence==1){itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e});return}if(await may_sunburst(a.occurrence,a.mlst,a.aa.x,skewer_sety(a,t)+a.yoffset*(t.aboveprotein?-1:1),t,e)){return}itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e})}));const h=d3arc().innerRadius((t=>t.radius)).outerRadius((t=>t.radius+t.rimwidth)).startAngle(0).endAngle((t=>{t.rim1_startangle=Math.PI*2*t.rim1count/t.occurrence;return t.rim1_startangle}));d.append("path").attr("d",h).attr("fill",(t=>s(t.mlst[0]))).attr("class","sja_aa_discrim").attr("fill-opacity",0);const g=d3arc().innerRadius((t=>t.radius+.5)).outerRadius((t=>t.radius+.5+t.rimwidth)).startAngle((t=>t.rim1_startangle)).endAngle((t=>t.rim1_startangle+Math.PI*2*t.rim2count/t.occurrence));d.filter((t=>t.rim2count>0)).append("path").attr("d",g).attr("stroke",(t=>s(t.mlst[0]))).attr("fill","none").attr("class","sja_aa_discrim").attr("stroke-opacity",0);{let e=0;let s=0;for(const a of t.data){if(a.x-a.maxradius-a.maxrimwidth<s){e++}s=Math.max(s,a.x+a.width-a.maxradius-a.maxrimwidth)}t.stem1=e==0?0:n;t.stem2=linear().domain([0,1,t.data.length]).range([0,n,n*3])(e)}const b=n*.7;let y=0;for(const e of t.data){for(const t of e.groups){y=Math.max(y,t.occurrence)}}t.stem3=Math.max(o+2,b+n*Math.min(5,y));t.skewer.append("circle").attr("class","sja_aa_skkick").attr("fill","white").attr("fill-opacity",0).attr("stroke","none").attr("r",(t=>t.maxradius+1)).attr("cy",(e=>(t.aboveprotein?-1:1)*e.maxradius)).attr("transform",(t=>"scale("+(t.showmode==modefold?1:0)+")")).on("mouseover",((e,a)=>{epaint_may_hl(t,a.mlst,true);const o=t.aboveprotein;let n=0;let r=0;const i=5;const l=o?7:14;for(const e of a.groups){e.pica_fontsize=Math.max(11,e.radius);n+=e.pica_fontsize+1;t.pica.g.append("text").text(e.mlst[0].mname+(e.occurrence>1?" x"+e.occurrence:"")).attr("font-size",e.pica_fontsize).each((function(){r=Math.max(r,this.getBBox().width)})).remove()}r+=i*2;const c=n+5;t.pica.g.append("rect").attr("y",o?-c:0).attr("width",r).attr("height",c).attr("fill","white").attr("fill-opacity",.8).attr("stroke","#ccc").attr("shape-rendering","crispEdges");n=0;const f=t.pica.g.selectAll().data(a.groups).enter().append("g").attr("transform",((t,e)=>{n+=t.pica_fontsize+1;return"translate("+i+","+n*(o?-1:1)+")"}));f.append("text").text((t=>t.mlst[0].mname)).attr("font-size",(t=>t.pica_fontsize)).each((function(t){t.pica_mlabelwidth=this.getBBox().width})).attr("fill",(t=>s(t.mlst[0]))).attr("dominant-baseline",o?"hanging":"auto");const d=a.groups[0].pica_mlabelwidth;t.pica.x=a.x-i-d/2;t.pica.y=a.y+(o?-1:1)*(a.maxradius*2+l+2);t.pica.g.attr("transform","translate("+t.pica.x+","+t.pica.y+")");f.filter((t=>t.occurrence>1)).append("text").text((t=>"x"+t.occurrence)).attr("x",(t=>t.pica_mlabelwidth+5)).attr("font-size",(t=>t.pica_fontsize)).attr("dominant-baseline",o?"hanging":"auto").attr("fill","#9e9e9e");const p=t.pica.g.append("g").attr("transform","translate("+(i+d/2)+","+(o?1:-1)+")");p.append("line").attr("y2",(o?1:-1)*l).attr("stroke","#858585").attr("shape-rendering","crispEdges");p.append("line").attr("x1",-1).attr("x2",-1).attr("y2",(o?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges");p.append("line").attr("x1",1).attr("x2",1).attr("y2",(o?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges")})).on("mouseout",((e,s)=>{t.pica.g.selectAll("*").remove();epaint_may_hl(t,s.mlst,false)})).on("click",((s,a)=>{t.pica.g.selectAll("*").remove();unfold_glyph([a],t,e)}));let k=0;for(const e of t.data){k=Math.max(k,e.occurrence)}const x=linear().domain([1,k]).range([b,t.stem3-f]);t.skewer.attr("transform",(e=>{e.foldyoffset=x(e.occurrence);e.y=skewer_sety(e,t);return"translate("+e.x+","+e.y+")"}));if(a.length>0){t.skewer.filter((t=>t.hasstackbar)).selectAll().data((t=>{const e=[];for(const s of t.groups){if(s.stackbar){e.push(s.stackbar)}}return e})).enter().append("g").attr("class","sja_aa_stackbar_g").attr("transform",(e=>"translate(0,"+(t.aboveprotein?1:-1)*(t.stem1-e.y)+")")).append("rect").attr("y",(e=>t.aboveprotein?-e.height:0)).attr("class","sja_aa_stackbar_rect").attr("width",0).attr("shape-rendering","crispEdges").attr("fill-opacity",.5).attr("stroke","none").attr("stroke-width",1).attr("height",(t=>t.height)).attr("fill",(t=>s(t.grp.mlst[0]))).on("mouseover",((e,a)=>{const o=s(a.grp.mlst[0]);d3select(e.target).attr("stroke",o);const n=t.pica;let r="wrong label";let i="wrong label, ";switch(a.grp.mlst[0].dt){case dtitd:r=mclass[a.grp.mlst[0].class].desc;i=Math.ceil(a.grp.mlst[0].rnaduplength/3)+" aa, ";break;case dtdel:r=mclass[a.grp.mlst[0].class].label;i=Math.ceil(a.grp.mlst[0].rnadellength/3)+" aa, ";break}if(a.grp.occurrence==1){const t=a.grp.mlst[0];if(t.sample){i+=t.sample}else if(t.patient){i+=t.patient}else{i+="1 sample"}}else{i+=a.grp.occurrence+" samples"}const l=14,c=10,f=2,d=4;let p=0;n.g.append("text").text(r).attr("font-size",l).attr("font-family",font).each((function(){p=this.getBBox().width})).remove();n.g.append("text").text(i).attr("font-size",c).attr("font-family",font).each((function(){p=Math.max(p,this.getBBox().width)})).remove();const m=f*3+l+c;n.x=a.grp.aa.x0+3;n.y=t.aboveprotein?t.height_main-t.toppad-t.bottompad-a.y-a.height-3-m:a.y+a.height+3;n.g.attr("transform","translate("+n.x+","+n.y+")");n.g.append("rect").attr("width",p+d*2).attr("height",m).attr("stroke",o).attr("stroke-width",1).attr("shape-rendering","crispEdges").attr("fill","white").attr("fill-opacity",.8);n.g.append("text").text(r).attr("x",d).attr("y",f+l/2).attr("dominant-baseline","middle").attr("font-size",l).attr("font-family",font).attr("fill",o);n.g.append("text").text(i).attr("x",d).attr("y",f*2+l+c/2).attr("dominant-baseline","middle").attr("font-size",c).attr("font-family",font).attr("fill","#858585")})).on("mouseout",((e,s)=>{d3select(e.target).attr("stroke","none");t.pica.g.selectAll("*").remove()})).on("click",((s,a)=>{itemtable({mlst:a.grp.mlst,pane:true,x:s.clientX,y:s.clientY,tk:t,block:e})}))}t.skewer.append("path").attr("class","sja_aa_stem").attr("d",(e=>skewer_setstem(e,t))).attr("stroke",(t=>s(t.groups[0].mlst[0]))).attr("fill","none");const v=t.skewer.filter((t=>t.groups.length>1));v.append("rect").attr("class","sja_aa_ssk_bg").attr("shape-rendering","crispEdges").attr("fill-opacity",0).attr("height",t.stem1).attr("fill",(t=>s(t.groups[0].mlst[0]))).attr("width",(t=>{t.ssk_width=Math.max(t.occurrence.toString().length*8+6,2*(t.maxradius+t.maxrimwidth));return t.ssk_width})).attr("x",(t=>-t.ssk_width/2));v.append("text").attr("class","sja_aa_ssk_text").attr("fill","white").attr("fill-opacity",0).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","central").text((t=>t.occurrence)).each((e=>{e.ssk_fontsize=Math.min(t.stem1,e.ssk_width/(e.occurrence.toString().length*textlensf))})).attr("font-size",(t=>t.ssk_fontsize));v.append("rect").attr("class","sja_aa_ssk_kick").attr("fill","white").attr("fill-opacity",0).attr("stroke","none").attr("height",t.stem1).attr("x",(t=>-t.ssk_width/2)).attr("width",(t=>t.ssk_width)).on("mouseover",((e,s)=>{const a=d3select(e.target.parentNode);a.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",1);a.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",1).attr("stroke-opacity",1);a.select(".sja_aa_ssk_text").transition().attr("fill-opacity",1);epaint_may_hl(t,s.mlst,true)})).on("mouseout",(function(e,s){const a=d3select(e.target.parentNode);a.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",0);a.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",0).attr("stroke-opacity",0);a.select(".sja_aa_ssk_text").transition().attr("fill-opacity",0);epaint_may_hl(t,s.mlst,false)})).on("click",(async(s,a)=>{const o=s.target.getBoundingClientRect();if(a.occurrence>1){if(await may_sunburst(a.occurrence,a.mlst,a.x,a.y+(t.aboveprotein?1:-1)*t.stem1/2,t,e))return}itemtable({mlst:a.mlst,pane:true,x:o.left-10,y:o.top-10,tk:t,block:e})}))}function skewer_flip(t){t.aboveprotein=!t.aboveprotein;if(t.numericmode){return}const e=t.aboveprotein;const s=1e3;const a=t.skewer.filter((t=>t.hasstackbar));a.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(s=>{const a=s.grp.aa;return"translate("+(a.showmode==modefold?0:a.x0-a.x)+","+(e?1:-1)*(a.showmode==modefold?t.stem1-s.y:t.stem1+t.stem2+t.stem3-s.y)+")"}));a.filter((t=>t.showmode==modeshow)).selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("y",(t=>e?-t.height:0));t.skewer.transition().duration(s).attr("transform",(e=>{e.y=skewer_sety(e,t);return"translate("+e.x+","+e.y+")"}));t.skewer.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(e=>skewer_setstem(e,t)));t.skewer.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>{t.y=(e?-1:1)*(t.aa.showmode==modefold?t.aa.maxradius:t.yoffset);return"translate(0,"+t.y+")"}));t.skewer.selectAll(".sja_aa_ssk_kick").attr("y",e?0:-t.stem1);t.skewer.selectAll(".sja_aa_ssk_bg").attr("y",e?0:-t.stem1);t.skewer.selectAll(".sja_aa_ssk_text").attr("y",(e?1:-1)*t.stem1/2);t.skewer.selectAll(".sja_aa_skkick").attr("cy",(t=>(e?-1:1)*t.maxradius));t.skewer.filter((t=>t.showmode==modeshow&&t.groups.length==1)).selectAll(".sja_aa_disclabel").transition().duration(s).attr("transform",(t=>"scale(1) rotate("+(t.aa.slabelrotate?(e?"-":"")+"90":"0")+")"))}function skewer_sety(t,e){if(e.aboveprotein){if(t.showmode==modefold){return e.maxskewerheight+e.stem1+e.stem2+e.stem3-t.foldyoffset}return e.maxskewerheight}if(t.showmode==modefold)return t.foldyoffset;return e.stem1+e.stem2+e.stem3}function skewer_setstem(t,e){if(e.aboveprotein){if(t.showmode==modefold){return"M0,0v0l0,0v"+t.foldyoffset}return"M0,0v"+e.stem1+"l"+(t.x0-t.x)+","+e.stem2+"v"+e.stem3}if(t.showmode==modefold){return"M0,0v0l0,0v-"+t.foldyoffset}return"M0,0v-"+e.stem1+"l"+(t.x0-t.x)+",-"+e.stem2+"v-"+e.stem3}function settle_glyph(t,e){if(t.data.length==0){return}const s=0;const a=e.width;let o=0;const n=[];const r=[];for(const e of t.data){if(e.x0<s||e.x0>a){delete e.xoffset;r.push(e)}else{o+=e.slabelrotate?(e.groups[0].radius+e.groups[0].rimwidth)*2:e.width;n.push(e)}}fold_glyph(r,t);let i=[];const l=[];if(o<a-s){i=n}else{n.sort(((t,e)=>{if(e.occurrence==t.occurrence){if(e.groups.length==t.groups.length){return Math.abs(t.x0*2-s-a)-Math.abs(e.x0*2-s-a)}else{return e.groups.length-t.groups.length}}return e.occurrence-t.occurrence}));let t=0;let e=(a-s)*.8;let o=false;for(const s of n){if(o){delete s.xoffset;l.push(s);s.showmode=modefold}else{if(t+s.width<e){i.push(s);t+=s.width}else{o=true;delete s.xoffset;l.push(s);s.showmode=modefold}}}}fold_glyph(l,t);unfold_glyph(i,t,e)}function unfold_glyph(t,e,s){const a=1e3;const o=e.aboveprotein;const n=new Set;const r=new Set;let i=false;for(const s of t){if(s.showmode==modeshow){n.add(s.x0)}else{s.showmode=modeshow;r.add(s.x0);i=true;s.y=skewer_sety(s,e)}}if(i){const t=e.skewer.filter((t=>r.has(t.x0)));t.transition().duration(a).attr("transform",(t=>"translate("+t.x+","+t.y+")"));t.selectAll(".sja_aa_discg").transition().duration(a).attr("transform",(t=>{t.y=t.yoffset*(o?-1:1);return"translate(0,"+t.y+")"}));setTimeout((function(){t.selectAll(".sja_aa_disckick").attr("transform","scale(1)")}),a);t.selectAll(".sja_aa_discnum").transition().duration(a).attr("fill-opacity",1).attr("stroke-opacity",1);t.filter((t=>t.groups.length>1)).selectAll(".sja_aa_disclabel").transition().duration(a).attr("fill-opacity",1).attr("transform","scale(1)");t.selectAll(".sja_aa_discrim").transition().duration(a).attr("fill-opacity",1).attr("stroke-opacity",1);t.selectAll(".sja_aa_ssk_kick").attr("transform","scale(1)").attr("y",o?0:-e.stem1);t.selectAll(".sja_aa_ssk_bg").attr("transform","scale(1)").attr("y",o?0:-e.stem1);t.selectAll(".sja_aa_ssk_text").attr("transform","scale(1)").attr("y",(o?1:-1)*e.stem1/2);t.selectAll(".sja_aa_skkick").attr("transform","scale(0)");t.filter((t=>t.hasstackbar)).selectAll(".sja_aa_stackbar_g").attr("transform",(t=>"translate(0,"+(o?1:-1)*(e.stem1+e.stem2+e.stem3-t.y)+")"));let n=0;t.selectAll(".sja_aa_stem").transition().duration(a).attr("d",(t=>skewer_setstem(t,e))).each((()=>++n)).on("end",(()=>{if(!--n){unfold_update(e,s)}}))}else{unfold_update(e,s)}}function unfold_update(t,e){const s=1e3;const a=t.aboveprotein;const o=[];const n=new Set;const r=0;const i=e.width;for(const e of t.data){if(e.x0<r||e.x0>i)continue;if(e.showmode==modeshow){e.x=e.x0;o.push(e);n.add(e.x0)}}if(o.length==0){return}horiplace(o,t,e);for(const t of o){t.xoffset=t.x-t.x0}for(let e=0;e<o.length;e++){const s=o[e];if(s.groups.length>1)continue;const a=s.groups[0];if(t.slabel_forcerotate){s.slabelrotate=true}else{const t=o[e+1];const n=t?t.x-t.maxradius-t.maxrimwidth:i;s.slabelrotate=n-s.x-a.radius-a.rimwidth-1<s.slabelwidth}s.width=(a.radius+a.rimwidth)*2+(s.slabelrotate?0:2+s.slabelwidth)}const l=t.skewer.filter((t=>n.has(t.x0)));l.transition().duration(s).attr("transform",(t=>"translate("+t.x+","+t.y+")"));l.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(e=>skewer_setstem(e,t)));l.filter((t=>t.groups.length==1)).selectAll(".sja_aa_disclabel").transition().duration(s).attr("fill-opacity",1).attr("transform",(t=>"scale(1) rotate("+(t.aa.slabelrotate?(a?"-":"")+"90":"0")+")"));t.slabel_forcerotate=false;const c=l.filter((t=>t.hasstackbar));c.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(e=>"translate("+(e.grp.aa.x0-e.grp.aa.x)+","+(a?1:-1)*(t.stem1+t.stem2+t.stem3-e.y)+")"));c.selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("width",(t=>t.pxspan)).attr("y",(t=>a?-t.height:0))}function horiplace(t,e,s){const a=0;const o=s.width;let n=a;let r=false;for(const e of t){if(e.x0<a||e.x0>o)continue;if(e.groups.length==1){e.slabelrotate=true;const t=e.groups[0];e.width=(t.radius+t.rimwidth)*2}const t=e.x-e.maxradius-e.maxrimwidth;if(t<n){r=true}if(t+e.width>o){r=true}n=Math.max(n,t+e.width)}if(!r){return false}n=a;for(const e of t){if(e.x0<a||e.x0>o)continue;e.x=n+e.maxradius+e.maxrimwidth;n+=e.width}horiplace0(t,s.width)}function horiplace0(t,e){for(let s=0;s<t.length;s++){if(t[s].x0<0)continue;if(t[s].x0>e)break;while(1){let a=0,o=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}a+=Math.abs(s.x-s.x0);s.x++;o+=Math.abs(s.x-s.x0)}if(t[s].x>=t[s].x0){for(let e=s;e<t.length;e++){t[e].x--}break}const n=t[t.length-1];if(n.x+n.width/2>=e){return}if(o<=a);else{for(let a=s;a<t.length;a++){if(t[a].x0>e){break}t[a].x--}break}}}}function fold_glyph(t,e){if(t.length==0)return;const s=1e3;const a=e.aboveprotein;const o=new Set;for(const s of t){s.x=s.x0;o.add(s.x0);s.showmode=modefold;s.y=skewer_sety(s,e)}const n=e.skewer.filter((t=>o.has(t.x0)));n.transition().duration(s).attr("transform",(t=>"translate("+t.x+","+t.y+")"));n.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(t=>skewer_setstem(t,e)));n.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>"translate(0,"+(a?"-":"")+t.aa.maxradius+")"));n.selectAll(".sja_aa_disckick").attr("transform","scale(0)");n.selectAll(".sja_aa_discnum").transition().duration(s).attr("fill-opacity",0).attr("stroke-opacity",0);n.selectAll(".sja_aa_disclabel").transition().duration(s).attr("fill-opacity",0).attr("transform","scale(0)");n.selectAll(".sja_aa_discrim").transition().duration(s).attr("fill-opacity",0).attr("stroke-opacity",0);n.selectAll(".sja_aa_ssk_kick").attr("transform","scale(0)");n.selectAll(".sja_aa_ssk_bg").attr("transform","scale(0)");n.selectAll(".sja_aa_ssk_text").attr("transform","scale(0)");n.selectAll(".sja_aa_skkick").transition().duration(s).attr("transform","scale(1)");const r=n.filter((t=>t.hasstackbar));r.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(t=>"translate(0,"+(a?1:-1)*(e.stem1-t.y)+")"));r.selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("width",0)}function epaint_may_hl(t,e,s){if(!t.eplst)return;for(const a of t.eplst){a.may_hl(e,s)}}function dsqueryresult_geneexpression(data,tk,block){if(!data.config){block.error("config missing for expression data in "+tk.ds.label);return}if(data.config.maf){try{data.config.maf.get=eval("("+data.config.maf.get+")")}catch(t){block.error("invalid javascript for config.maf.get of "+tk.ds.label);return}}const config=data.config;if(config.usecohort){config.cohort=tk.ds.cohort}const eparg={data:data.lst,expp:config,block:block,genome:block.genome,genename:block.usegm.name,dsname:tk.ds.label};if(block.samplecart){if(tk.ds.sampleselectable){eparg.samplecart=block.samplecart}}return import("./ep-708f0514.js").then((t=>{tk.eplst.push(new t.default(eparg))}))}function dsqueryresult_snvindelfusionitd(t,e,s){for(const a of t){switch(a.dt){case dtsnvindel:if(s.usegm){const t=genomic2gm(a.pos,s.usegm);a.rnapos=t.rnapos;a.aapos=t.aapos}e.mlst.push(a);break;case dtsv:case dtfusionrna:if(!a.pairlst){console.error("pairlst missing from sv/fusion");break}if(s.usegm&&a.dt==dtsv){if(a.pairlst.length==1){const t=a.pairlst[0].a;const e=a.pairlst[0].b;if(t.chr!=null&&e.chr!=null&&t.chr==e.chr&&t.position!=null&&e.position!=null){if(t.position<e.position){if(s.usegm.strand=="+"){t.strand="+";e.strand="+"}else{t.strand="-";e.strand="-";a.pairlst[0].a=e;a.pairlst[0].b=t}}}}}if(s.usegm&&s.gmmode!=gmmode.genomic){a.isoform=s.usegm.isoform;let t=true;for(let e=0;e<a.pairlst.length;e++){const o=a.pairlst[e];if(s.usegm.isoform==(o.a.isoform||o.a.name)){a.useNterm=e==0;a.chr=s.usegm.chr;a.strand=o.a.strand;if(o.a.position==undefined){if(o.a.rnaposition==undefined){if(o.a.codon==undefined){console.error("no position/rnaposition/codon available for "+s.usegm.isoform);break}else{a.pos=aa2gmcoord(o.a.codon,s.usegm);o.a.position=a.pos}}else{a.pos=rna2gmcoord(o.a.rnaposition-1,s.usegm);if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+o.a.rnaposition);break}o.a.position=a.pos}}else{a.pos=o.a.position}const n=genomic2gm(a.pos,s.usegm);a.rnapos=n.rnapos;a.aapos=n.aapos;if(o.a.codon){a.aapos=o.a.codon}a.mname=o.b.name;t=false;break}if(s.usegm.isoform==(o.b.isoform||o.b.name)){a.useNterm=false;a.chr=s.usegm.chr;a.strand=o.b.strand;if(o.b.position==undefined){if(o.b.rnaposition==undefined){if(o.b.codon==undefined){console.error("no position/rnaposition/codon available for "+s.usegm.isoform);break}else{a.pos=aa2gmcoord(o.b.codon,s.usegm);o.b.position=a.pos}}else{a.pos=rna2gmcoord(o.b.rnaposition-1,s.usegm);if(a.pos==null){console.error("failed to convert rnaposition to genomic");break}o.b.position=a.pos}}else{a.pos=o.b.position}const e=genomic2gm(a.pos,s.usegm);a.rnapos=e.rnapos;a.aapos=e.aapos;if(o.b.codon){a.aapos=o.b.codon}a.mname=o.a.name;t=false;break}}if(t){console.error("sv/fusion isoform no match to gm isoform: "+s.usegm.isoform)}else{e.mlst.push(a)}}else{for(const t of a.pairlst){let o=false,n=false;for(let e=s.startidx;e<=s.stopidx;e++){const a=s.rglst[e];if(t.a.chr==a.chr&&t.a.position>=a.start&&t.a.position<=a.stop){o=true}if(t.b.chr==a.chr&&t.b.position>=a.start&&t.b.position<=a.stop){n=true}}if(o){const s=duplicate(a);const o=t.a;s.chr=o.chr;s.strand=o.strand;s.useNterm=o.strand=="+";s.pos=o.pos||o.position;s.mname=t.b.name||t.b.chr;if(!Number.isFinite(s.pos)){console.error("no genomic pos for breakend a")}else if(!s.chr){console.error("no chromosome for breakend a")}else{e.mlst.push(s)}}if(n){const s=duplicate(a);const o=t.b;s.chr=o.chr;s.strand=o.strand;s.useNterm=o.strand=="+";s.pos=o.pos||o.position;s.mname=t.a.name||t.a.chr;if(!Number.isFinite(s.pos)){console.error("no genomic pos for breakend b")}else if(!s.chr){console.error("no chromosome for breakend b")}else{e.mlst.push(s)}}}}break;case dtitd:case dtdel:if(a.chrpos1&&a.chrpos2){let t=genomic2gm(a.chrpos1,s.usegm);const e=t.rnapos;t=genomic2gm(a.chrpos2,s.usegm);const o=t.rnapos;if(e<o){a.pos=a.chrpos1}else{a.pos=a.chrpos2}delete a.chrpos1;delete a.chrpos2;const n=Math.abs(e-o);if(a.dt==dtitd){a.rnaduplength=n}else if(a.dt==dtdel){a.rnadellength=n}}if(a.position){a.pos=a.position;delete a.position}if(!a.pos){if(a.dt==dtitd){if(a.b){if(a.b.position){a.pos=a.b.position;a.chr=a.b.chr}}}}if(!a.pos){if(a.rnaposition){if(s.usegm){a.pos=rna2gmcoord(a.rnaposition-1,s.usegm);a.chr=s.usegm.chr;if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+a.rnaposition);break}}}else if(a.aapos);}if(!a.pos){console.error("no genomic pos for itd");break}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);if(a.rnaposition){a.rnapos=a.rnaposition}else{a.rnapos=t.rnapos}a.aapos=t.aapos}if(a.dt==dtitd){if(!a.rnaduplength){console.error("itd has no rnaduplength");a.rnaduplength=1}}else{if(!a.rnadellength){console.error("deletion has no rnadellength");a.rnadellength=1}}e.mlst.push(a);break;case dtnloss:case dtcloss:if(a.position){a.pos=a.position;delete a.position}if(!a.pos){if(a.rnaposition){if(s.usegm){a.pos=rna2gmcoord(a.rnaposition-1,s.usegm);a.chr=s.usegm.chr;if(a.pos==null){console.error("failed to convert rnaposition to genomic position: "+a.rnaposition);break}}}else if(a.aapos);}if(!a.pos){console.error("no genomic pos for truncation");break}if(s.usegm){const t=genomic2gm(a.pos,s.usegm);if(a.rnaposition){a.rnapos=a.rnaposition}else{a.rnapos=t.rnapos}a.aapos=t.aapos}e.mlst.push(a);break;default:console.error("unknown dt: "+a.dt)}}}function hlaachange_addnewtrack(t,e){const s=new Map;for(const t in mclass){s.set(mclass[t].label.toUpperCase(),t)}const a=[];for(const[o,n]of t.hlaachange){if(n==false){continue}if(!n.name){e.error("hlaachange item .name missing");continue}if(n.codon==undefined||!Number.isFinite(n.codon)){e.error("hlaachange invalid codon for "+n.name);continue}if(!n.class){e.error("hlaachange .class missing");continue}const t=mclass[n.class]?n.class:s.get(n.class.toUpperCase());if(!t){e.error("hlaachange invalid class: "+n.class);continue}n.class=t;n.mname=n.name;delete n.name;n.chr=e.usegm.chr;n.pos=aa2gmcoord(n.codon,e.usegm);delete n.codon;n.dt=dtsnvindel;n.isoform=e.usegm.isoform;a.push(n)}if(a.length){const t={label:"Highlight",type:tkt.ds,iscustom:true,bulkdata:{}};t.bulkdata[e.usegm.name.toUpperCase()]=a;e.ownds[t.label]=t;const s=e.block_addtk_template({type:tkt.ds,ds:t});dstkload(s,e)}}function showlegend_vcfinfofilter(t,e){if(!t.vcfinfofilter)return;for(const s of t.vcfinfofilter.lst){s.holder.selectAll("*").remove();if(s.numericfilter){for(const t of s.numericfilter){t.count=0}for(const e of t.mlst){const[t,a]=getter_mcset_key(s,e);if(t){continue}if(!a)continue;const o=a[0];if(!Number.isFinite(o))continue;for(const t of s.numericfilter){if(t.side=="<"){if(o<t.value){t.count++}}else{if(o>t.value){t.count++}}}}for(const a of s.numericfilter){const o=s.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{if(s.numericCutoff==a.value&&s.numericCutoffSide==a.side){delete s.numericCutoff}else{s.numericCutoff=a.value;s.numericCutoffSide=a.side}dstkrender(t,e)}));if(s.numericCutoff==a.value&&s.numericCutoffSide==a.side){o.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}if(a.count>0){o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color","#ccc").style("color","white").html(a.count>1?a.count:"&nbsp;").style("margin-right","5px")}o.append("span").text(a.side+a.value)}continue}if(!s.categories){continue}const a=new Map;let o=0;for(const e of t.mlst){const[t,n]=getter_mcset_key(s,e);if(t){continue}if(n==undefined){o++}else{for(const t of n){if(!a.has(t)){a.set(t,0)}a.set(t,a.get(t)+1)}}}const n=[...a];if(o){n.push([vcfnotannotated_label,o])}n.sort(((t,e)=>e[1]-t[1]));for(const[a,o]of n){const n=s.categories[a]||{color:"black",label:a};const r=s.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{t.vcfinfofilter.tip.showunder(r.node());legendmenu_vcfinfo(s,a,t,e)}));r.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color",n.color).style("color","white").html(o>1?o:"&nbsp;").style("margin-right","5px");const i=r.append("span").text(n.label).style("color",n.color);if(s.categoryhidden[a]){i.style("text-decoration","line-through")}}}}function vcfinfofilter_mayupdateautocategory(t,e){if(!t.vcfinfofilter)return;for(const e of t.vcfinfofilter.lst){if(e.numericfilter){continue}if(!e.autocategory){continue}const s=new Map;for(const a of t.mlst){const[t,o]=getter_mcset_key(e,a);if(t){continue}if(o!=undefined){for(const t of o){if(!s.has(t)){s.set(t,0)}s.set(t,s.get(t)+1)}}}const a=[...s];a.sort(((t,e)=>e[1]-t[1]));const o=ordinal(schemeCategory20);e.categories={};for(const[t,s]of a){e.categories[t]={label:t,color:o(t)}}}}function getter_mcset_key(t,e){if(t.altalleleinfo){if(!e.altinfo)return["no .altinfo"];const s=e.altinfo[t.altalleleinfo.key];if(s==undefined){if(t.numericfilter){return[null,[0]]}return[null,undefined]}let a=Array.isArray(s)?s:[s];if(t.altalleleinfo.separator){a=a[0].split(t.altalleleinfo.separator)}return[null,a]}if(t.locusinfo){if(!e.info)return["no .info"];const s=e.info[t.locusinfo.key];if(s==undefined){if(t.numericfilter){return[null,[0]]}return[null,undefined]}let a=Array.isArray(s)?s:[s];if(t.locusinfo.separator){a=a[0].split(t.locusinfo.separator)}return[null,a]}return["no trigger"]}function legendmenu_vcfinfo(t,e,s,a){const o=s.vcfinfofilter.tip;o.clear();const n=t.categoryhidden[e];o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{o.hide();t.categoryhidden={};for(const s in t.categories){if(s!=e){t.categoryhidden[s]=1}}if(e!=vcfnotannotated_label){t.categoryhidden[vcfnotannotated_label]=1}dstkrender(s,a)}));if(n){o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{o.hide();delete t.categoryhidden[e];dstkrender(s,a)}))}else{o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{o.hide();t.categoryhidden[e]=1;dstkrender(s,a)}))}let r=0;for(const e in t.categoryhidden){r++}if(r>1){o.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{o.hide();t.categoryhidden={};dstkrender(s,a)}))}}function getter_pfrequency(t,e){if(!t.vcfid)return[".vcfid missing"];if(!t.sampledata)return[".sampledata missing"];const s=e.ds.id2vcf[t.vcfid];if(!s)return["no vcf"];if(!s.samples||s.samples.length==0)return["vcf no samples"];let a=0;for(const e of t.sampledata){if(!e.gtallref)a++}return[null,a/s.samples.length]}function showlegend_populationfrequencyfilter(t,e){if(!t.populationfrequencyfilter)return;for(const e of t.populationfrequencyfilter.lst){e.count=0}for(const e of t.mlst){const[s,a]=getter_pfrequency(e,t);if(s){continue}for(const e of t.populationfrequencyfilter.lst){if(a<e.value){e.count++}}}t.populationfrequencyfilter.holder.selectAll("*").remove();for(const s of t.populationfrequencyfilter.lst){const a=t.populationfrequencyfilter.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{if(t.populationfrequencyfilter.cutoff==s.value){delete t.populationfrequencyfilter.cutoff}else{t.populationfrequencyfilter.cutoff=s.value}dstkrender(t,e)}));if(t.populationfrequencyfilter.cutoff==s.value){a.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color","#ccc").style("color","white").html(s.count>1?s.count:"&nbsp;").style("margin-right","5px");a.append("span").text("< "+s.value)}}function showlegend_sampleattribute(t,e){if(!t.ds||!t.ds.cohort||!t.ds.cohort.sampleattribute)return;if(!t.ds.cohort.annotation)return".ds.cohort.annotation missing";if(!t.ds.cohort.key4annotation)return".ds.cohort.key4annotation missing";const s=t.ds.cohort.sampleattribute;if(!s.lst)return".lst missing";if(!s.holder)return".holder missing";s.holder.selectAll("*").remove();if(t.mlst.length==0){return}for(const t of s.lst){if(!t.k)return".k missing for an attribute";if(!t.hiddenvalues)t.hiddenvalues=new Set}const a=[];if(t.mlst[0].sampledata){for(const e of s.lst){let s=0;const o=new Map;for(const a of t.mlst){if(!a.sampledata)continue;for(const n of a.sampledata){const a=n.sampleobj[t.ds.cohort.key4annotation];if(!a)continue;const r=t.ds.cohort.annotation[a];if(!r)continue;const i=r[e.k];if(i==undefined)continue;s++;if(!o.has(i)){o.set(i,0)}o.set(i,o.get(i)+1)}}if(s==0){continue}a.push({samplecount:s,key:e,lst:[...o].sort(((t,e)=>e[1]-t[1])).map((t=>({value:t[0],count:t[1]})))})}}else{for(const e of s.lst){let s=0;const o=new Map;for(const a of t.mlst){const n=a[t.ds.cohort.key4annotation];if(!n)continue;const r=t.ds.cohort.annotation[n];if(!r)continue;const i=r[e.k];if(i==undefined)continue;s++;if(!o.has(i)){o.set(i,0)}o.set(i,o.get(i)+1)}if(s==0){continue}a.push({samplecount:s,key:e,lst:[...o].sort(((t,e)=>e[1]-t[1])).map((t=>({value:t[0],count:t[1]})))})}}if(a.length==0){delete s.runtimelst;return}s.runtimelst=a;const o=s.holder.append("table").style("border-spacing","5px");for(const n of a){const a=o.append("tr");a.append("td").style("color","#858585").style("text-align","right").text(n.key.label||n.key.k);const r=a.append("td");for(const a of n.lst){const o=r.append("div").style("display","inline-block").style("padding","5px").attr("class","sja_clb").on("click",(()=>{s.tip.showunder(o.node());legendmenu_sampleattribute(a,n,s.tip,t,e)}));o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 3px").style("background-color","#858585").style("color","white").html(a.count>1?a.count:"&nbsp;").style("margin-right","5px");const i=o.append("span").text(a.value);if(n.key.hiddenvalues.has(a.value)){i.style("text-decoration","line-through")}}}return null}function legendmenu_sampleattribute(t,e,s,a,o){s.clear();s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{s.hide();for(const t of e.lst){e.key.hiddenvalues.add(t.value)}e.key.hiddenvalues.delete(t.value);dstkrender(a,o)}));if(e.key.hiddenvalues.has(t.value)){s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{s.hide();e.key.hiddenvalues.delete(t.value);dstkrender(a,o)}))}else{s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{s.hide();e.key.hiddenvalues.add(t.value);dstkrender(a,o)}))}if(e.key.hiddenvalues.size>1){s.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{s.hide();e.key.hiddenvalues.clear();dstkrender(a,o)}))}}function mlst_pretreat(t,e,s){let a=0;let o=0;let n=[];let r=[];for(const i of t.mlst){delete i.__x;if(e.legend&&e.legend.mclasses.has(i.class)&&e.legend.mclasses.get(i.class).hidden){continue}if(e.legend&&e.legend.morigins.has(i.origin)&&e.legend.morigins.get(i.origin).hidden){continue}if(i.origin&&s.has(i.origin)){continue}if(e.gmmode==gmmode$1.protein&&e.usegm.codingstart&&e.usegm.codingstop){if(i.pos<e.usegm.codingstart||i.pos>e.usegm.codingstop)continue}if(t.vcfinfofilter){let e=false;for(const s of t.vcfinfofilter.lst){const[t,a]=getter_mcset_key(s,i);if(t){continue}const o=a==undefined?[vcfnotannotated_label]:a;if(s.numericCutoff!=undefined){const t=Number.parseFloat(o[0]);if(Number.isNaN(t)){e=true;break}if(s.numericCutoffSide=="<"){if(t>=s.numericCutoff){e=true;break}}else if(s.numericCutoffSide==">"){if(t<=s.numericCutoff){e=true;break}}}else if(s.categoryhidden){let t=false;for(const e of o){if(!s.categoryhidden[e]){t=true;break}}if(!t){e=true;break}}}if(e){continue}}if(t.populationfrequencyfilter&&t.populationfrequencyfilter.cutoff){const[e,s]=getter_pfrequency(i,t);if(e);else{if(s>t.populationfrequencyfilter.cutoff){continue}}}if(t.ds&&t.ds.cohort&&t.ds.cohort.annotation&&t.ds.cohort.key4annotation&&t.ds.cohort.sampleattribute&&t.ds.cohort.sampleattribute.runtimelst){let e=0;for(const s of t.ds.cohort.sampleattribute.runtimelst){if(s.key&&s.key.hiddenvalues){e+=s.key.hiddenvalues.size}}if(e>0){if(t.ds.vcfcohorttrack);else if(i.sampledata){let e=0;for(const s of i.sampledata){if(!alleleInGenotypeStr(s.genotype,i.alt)){continue}const a=s.sampleobj[t.ds.cohort.key4annotation];if(a){const e=t.ds.cohort.annotation[a];if(e){let s=false;for(const a of t.ds.cohort.sampleattribute.runtimelst){const t=e[a.key.k];if(t!=undefined){if(a.key.hiddenvalues.has(t)){s=true;break}}}if(s){continue}}}e++}if(e==0){continue}}else{const e=i[t.ds.cohort.key4annotation];if(e){const s=t.ds.cohort.annotation[e];if(s){let e=false;for(const a of t.ds.cohort.sampleattribute.runtimelst){const t=s[a.key.k];if(t!=undefined){if(a.key.hiddenvalues.has(t)){e=true;break}}}if(e){continue}}}}}}if(!i.chr){o++;continue}if(!Number.isInteger(i.pos)){a++;continue}const l=e.seekcoord(i.chr,i.pos);if(l.length==0){n.push(i);continue}if(l.length==1){i.__x=l[0].x}else{i.__x=l[0].x}if(i.__x<-1||i.__x>e.width+1){continue}r.push(i)}const i=[];t.tklabel.each((function(){i.push(this.getBBox().width)}));if(r.length==0){t.label_mcount.text("")}else{t.label_mcount.text(r.length<t.mlst.length?r.length+" of "+t.mlst.length+" "+t.itemlabelname+"s":r.length+" "+t.itemlabelname+(r.length>1?"s":"")).each((function(){i.push(this.getBBox().width)}))}if(t.label_stratify){for(const e of t.label_stratify){let s;if(e.bycohort){const e=new Set;for(const s of r){let a="";for(const e of t.ds.cohort.levels){const t=s[e.k];if(t){a+=t}}e.add(a)}s=e.size}else{const t=new Set;for(const s of r){let a=s[e.attr1.k];if(!a)continue;if(e.attr2){const t=s[e.attr2.k];if(t){a+=t}}if(e.attr3){const t=s[e.attr3.k];if(t){a+=t}}t.add(a)}s=t.size}if(s==0){e.svglabel.text("")}else{e.svglabel.text(s+" "+e.label+(s>1?"s":"")).each((function(){i.push(this.getBBox().width)}))}}}t.leftLabelMaxwidth=Math.max(...i);if(a+o>0){e.tkerror(t,a+o+" items have no chromosome or genomic position")}if(n.length){console.error(n.length+" items not mapped to any region");for(const t of n)console.log(t)}return r}function tkdata_update_x(t,e){for(const s of t.data){if(s.isbin){let t=0;for(const a of s.mlst){const s=e.seekcoord(a.chr,a.pos);if(a.usehitidx!=undefined&&s[a.usehitidx]){t+=s[a.usehitidx].x}else if(s.length==1){t+=s[0].x}else{console.log("cannot map item");console.log(a)}}s.x0=t/s.mlst.length;s.x=s.x0+(s.xoffset!=undefined?s.xoffset:0)}else{const t=e.seekcoord(s.chr,s.pos);if(t.length>0){s.x0=t[0].x;s.x=s.x0+(s.xoffset!=undefined?s.xoffset:0)}else{console.log("cannot map group of item");console.log(s)}}}}function done_tknodata(t,e){t.height_main=t.toppad+e.labelfontsize+t.bottompad;if(t.label_mcount&&t.label_mcount.text().length>0){t.height_main+=t.labyspace+e.labelfontsize}if(t.label_stratify){for(const s of t.label_stratify){if(s.svglabel.text().length>0){t.height_main+=t.labyspace+e.labelfontsize}}}t.glider.selectAll("*").remove();t.leftaxis.selectAll("*").remove();if(t.viewrangeupperlimit_above){e.tkerror(t,t.name+": zoom in under "+bplen(t.viewrangeupperlimit)+" to view data")}else{let s;if(!t.skewer.data||t.skewer.data.length==0){if(e.pannedpx!=undefined||e.zoomedin==true){s="view range"}else if(e.usegm&&e.gmmode!="genomic"){s=e.usegm.name||e.usegm.isoform}}e.tkerror(t,t.name+": no mutation in "+s)}if(t.hlaachange){hlaachange_addnewtrack(t,e);delete t.hlaachange}}function may_print_stratifycountfromserver(t,e){if(!t.stratifycount)return;for(const[s,a]of t.stratifycount){const t=e.label_stratify.find((t=>t.label==s));if(!t){console.error("unknown strat label: "+s);continue}t.servercount=a}}const tip=new Menu({padding:"0px"});function legend_newrow(t,e){const s=t.legend.holder.append("tr");const a=s.append("td").text(e).style("padding-right","10px").style("text-align","right").style("color","#555").style("border-right","solid 1px "+t.legend.legendcolor);const o=s.append("td");return[s,o,a]}function legend_mclass(t){if(!t.legend){return}const e=new Set;for(const[s,a]of t.legend.mclasses){if(a.hidden){e.add(s)}}const s=new Map;for(const e of t.tklst){if(e.hidden||e.type!=tkt.ds)continue;if(!e.mlst){continue}for(const t of e.mlst){if(t.class){if(!s.has(t.class)){s.set(t.class,{count:0})}s.get(t.class).count++}}}const a=[];for(const[t,o]of s){if(e.has(t)){s.get(t).hidden=true}a.push({key:t,count:o.count})}t.legend.mclasses=s;if(s.size==0){t.legend.tr_mclass.style("display","none");return}t.legend.tr_mclass.style("display","table-row");a.sort(((t,e)=>e.count-t.count));t.legend.td_mclass.selectAll("*").remove();for(const s of a){const a=t.legend.td_mclass.append("div").style("display","inline-block").style("white-space","nowrap").style("padding",t.legend.vpad+" 20px "+t.legend.vpad+" 0px").classed("sja_clb",true).on("click",(()=>{tip.clear();tip.showunder(a.node());tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.mclasses.values()){e.hidden=true}t.legend.mclasses.get(s.key).hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}));if(t.legend.mclasses.get(s.key).hidden){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}else{tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}if(e.size>1){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.mclasses.values()){e.hidden=false}for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}const o=tip.d.append("div").style("margin","20px");o.append("div").text(mclass[s.key].label.toUpperCase()).style("color",mclass[s.key].color).style("font-size",".8em");o.append("div").html(mclass[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));a.append("div").style("display","inline-block").style("background-color",mclass[s.key].color).style("margin-right","5px").style("border-radius","15px").style("padding","4px 8px").style("color","white").style("font-size",".8em").text(s.count);const o=a.append("div").style("display","inline-block").style("color",mclass[s.key].color).text(mclass[s.key].label);if(e.has(s.key)){o.style("text-decoration","line-through")}}}function legend_morigin(t){if(!t.legend){return}const e=new Set;for(const[s,a]of t.legend.morigins){if(a.hidden){e.add(s)}}const s=new Map;for(const a of t.tklst){if(a.hidden||a.type!=tkt.ds)continue;if(!a.mlst){continue}for(const t of a.mlst){if(!t.origin)continue;if(!s.has(t.origin)){let a=false;if(morigin[t.origin]&&morigin[t.origin].hidden){a=true;e.add(t.origin)}s.set(t.origin,{count:0,hidden:a})}s.get(t.origin).count++}}const a=[];for(const[t,o]of s){if(e.has(t)){s.get(t).hidden=true}a.push({key:t,count:o.count})}t.legend.morigins=s;if(s.size==0){t.legend.tr_morigin.style("display","none");return}t.legend.tr_morigin.style("display","table-row");a.sort(((t,e)=>e.count-t.count));t.legend.td_morigin.selectAll("*").remove();for(const s of a){const a=t.legend.td_morigin.append("div").style("display","inline-block").style("white-space","nowrap").style("padding",t.legend.vpad+" 20px "+t.legend.vpad+" 0px").classed("sja_clb",true).on("click",(()=>{tip.clear();tip.showunder(a.node());tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.morigins.values()){e.hidden=true}t.legend.morigins.get(s.key).hidden=false;morigin[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}));if(t.legend.morigins.get(s.key).hidden){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=false;morigin[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}else{tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{tip.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}if(e.size>1){tip.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{tip.hide();t.pannedpx=undefined;for(const e of t.legend.morigins.values()){e.hidden=false}for(const e of t.tklst){if(!e.hidden&&e.type==tkt.ds){dstkrender(e,t)}}}))}const o=tip.d.append("div").style("margin","20px");o.append("div").text(morigin[s.key].label.toUpperCase()).style("color",morigin[s.key].color).style("font-size",".8em");o.append("div").html(morigin[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));a.append("svg").style("margin-right","5px").attr("width",19).attr("height",19).html(morigin[s.key].legend);const o=a.append("div").style("display","inline-block").style("color","#858585").text(morigin[s.key].label+", "+s.count);if(e.has(s.key)){o.style("text-decoration","line-through")}}}export{dstkrender as a,runtimeattr_trunc as b,runtimeattr_itd as c,dstkload as d,runtimeattr_sv as e,fold_glyph as f,runtimeattr_snvindel as g,skewer_flip as h,itemtable as i,legend_mclass as j,legend_morigin as k,legend_newrow as l,may_sunburst as m,runtimeattr_del as r,settle_glyph as s};