@sjcrh/proteinpaint-client 2.74.2 → 2.76.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 (307) hide show
  1. package/dist/{2dmaf-b2d78c57.js → 2dmaf-74b99126.js} +1 -1
  2. package/dist/AppHeader-cecb39c2.js +1 -0
  3. package/dist/{ColorScale-9c76aef3.js → ColorScale-21cab8d2.js} +1 -1
  4. package/dist/DEanalysis-95bad59a.js +1 -0
  5. package/dist/Disco-a6e921a0.js +1 -0
  6. package/dist/Disco.UI-9ad999ed.js +1 -0
  7. package/dist/{DragControls-586f72db.js → DragControls-e3b6a937.js} +1 -1
  8. package/dist/{DziViewer-6311327c.js → DziViewer-354a790d.js} +1 -1
  9. package/dist/FilterRxComp-701a1480.js +1 -0
  10. package/dist/{FilterStateless-046081c2.js → FilterStateless-54c0b763.js} +1 -1
  11. package/dist/{HicApp-40e44cba.js → HicApp-d5a946bf.js} +1 -1
  12. package/dist/{OrbitControls-0cda1772.js → OrbitControls-694652cd.js} +1 -1
  13. package/dist/WSIViewer-dc7f8eb0.js +1 -0
  14. package/dist/adSandbox-f438e388.js +1 -0
  15. package/dist/app-3320ab6f.js +1 -0
  16. package/dist/app-649f8357.js +1 -0
  17. package/dist/app-b369b169.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/bam-431875ef.js +1 -0
  20. package/dist/barchart-8277ed43.js +1 -0
  21. package/dist/barchart.events-da29c90d.js +1 -0
  22. package/dist/{bars.renderer-5f7a4174.js → bars.renderer-dcfdd59b.js} +1 -1
  23. package/dist/block-6aedd569.js +1 -0
  24. package/dist/block.lazyload-87b12654.js +1 -0
  25. package/dist/block.legend-d3f61ef7.js +1 -0
  26. package/dist/{block.mds-effc078d.js → block.mds-3ad17dfa.js} +1 -1
  27. package/dist/{block.mds.cnv-ec861a26.js → block.mds.cnv-857ba868.js} +1 -1
  28. package/dist/{block.mds.expressionrank-a2ad7c80.js → block.mds.expressionrank-7e3b208c.js} +1 -1
  29. package/dist/{block.mds.expressionstat-31dc5595.js → block.mds.expressionstat-f2d31c86.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-3ca857ce.js → block.mds.geneboxplot-f0fbaf12.js} +1 -1
  31. package/dist/{block.mds.junction-debba938.js → block.mds.junction-7f87f48f.js} +1 -1
  32. package/dist/{block.mds.svcnv-8dc5abdf.js → block.mds.svcnv-ac035c12.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-81e62600.js → block.mds.svcnv.share-886d9479.js} +1 -1
  34. package/dist/block.mds2-7852c1ee.js +1 -0
  35. package/dist/{block.svg-9121e8e7.js → block.svg-9b916fa6.js} +1 -1
  36. package/dist/{block.tk.aicheck-c1b478e9.js → block.tk.aicheck-6770e333.js} +1 -1
  37. package/dist/{block.tk.ase-0f6ded48.js → block.tk.ase-ee807e59.js} +1 -1
  38. package/dist/{block.tk.bam-7cd06aee.js → block.tk.bam-00fba6e8.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-3ef8b94e.js → block.tk.bedgraphdot-7fda78e9.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-d1248810.js → block.tk.bigwig.ui-cc1a42f3.js} +1 -1
  41. package/dist/{block.tk.hicstraw-ee731e55.js → block.tk.hicstraw-526470e3.js} +1 -1
  42. package/dist/{block.tk.junction-4d8cab4d.js → block.tk.junction-b43a4cda.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-a6430b27.js → block.tk.junction.textmatrixui-a60ed78a.js} +1 -1
  44. package/dist/{block.tk.ld-8429a18b.js → block.tk.ld-d15bde41.js} +1 -1
  45. package/dist/{block.tk.menu-3f31f958.js → block.tk.menu-3aeb93c6.js} +1 -1
  46. package/dist/{block.tk.pgv-07e46705.js → block.tk.pgv-9af2bd64.js} +1 -1
  47. package/dist/boxplot-e17a17b7.js +1 -0
  48. package/dist/brainImaging-bf2ceee9.js +1 -0
  49. package/dist/{brush-c386fe3d.js → brush-aa175142.js} +1 -1
  50. package/dist/categorical-a52014a1.js +1 -0
  51. package/dist/condition-c646e357.js +1 -0
  52. package/dist/controls-287e6efa.js +1 -0
  53. package/dist/{controls.btns-1cb2bfab.js → controls.btns-79b805dd.js} +1 -1
  54. package/dist/controls.config-28d6d6a8.js +1 -0
  55. package/dist/cuminc-9e275854.js +1 -0
  56. package/dist/{customdata.inputui-cbd712ea.js → customdata.inputui-dc49d94b.js} +1 -1
  57. package/dist/dataDownload-3a3d4f33.js +1 -0
  58. package/dist/databrowser.ui-d8d3f8fd.js +1 -0
  59. package/dist/{density-19266ebf.js → density-a82a8b1c.js} +1 -1
  60. package/dist/dictionary-c5a19d90.js +1 -0
  61. package/dist/{drag-0b968811.js → drag-7b30ba17.js} +1 -1
  62. package/dist/{e2pca-b8752945.js → e2pca-82765817.js} +1 -1
  63. package/dist/{ep-a86b185a.js → ep-d017ec2f.js} +1 -1
  64. package/dist/facet-a9b44ef3.js +1 -0
  65. package/dist/{fusion.parse-244b2b97.js → fusion.parse-d40d0b9d.js} +1 -1
  66. package/dist/geneExpClustering-34c3f518.js +1 -0
  67. package/dist/geneExpression-0d1b7244.js +1 -0
  68. package/dist/{geneExpression-e0430f2e.js → geneExpression-589f485b.js} +1 -1
  69. package/dist/{geneExpression-387205bf.js → geneExpression-7d14983f.js} +1 -1
  70. package/dist/geneORA-903a780f.js +1 -0
  71. package/dist/{geneVariant-7de021b6.js → geneVariant-89601b34.js} +1 -1
  72. package/dist/geneVariant-92c4e870.js +1 -0
  73. package/dist/{genefusion.ui-a331de19.js → genefusion.ui-7e22e811.js} +1 -1
  74. package/dist/{genesearch-ea59f5d4.js → genesearch-a4e19f0d.js} +1 -1
  75. package/dist/geneset-108a39d2.js +1 -0
  76. package/dist/genomeBrowser-12f86a36.js +1 -0
  77. package/dist/genomeBrowser.controls-d5067811.js +1 -0
  78. package/dist/{groupsetting-20ffef77.js → groupsetting-b4416a96.js} +1 -1
  79. package/dist/gsea-543dab25.js +1 -0
  80. package/dist/hierCluster-26e14090.js +1 -0
  81. package/dist/hierCluster.config-98e82dff.js +1 -0
  82. package/dist/{hierCluster.interactivity-9b433033.js → hierCluster.interactivity-e56f6542.js} +1 -1
  83. package/dist/hierCluster.renderers-74a64cf5.js +1 -0
  84. package/dist/{html.legend-abb5452e.js → html.legend-a3f4ebfe.js} +1 -1
  85. package/dist/imagePlot-b9eae4ae.js +1 -0
  86. package/dist/{lasso-55cf4057.js → lasso-f767f634.js} +1 -1
  87. package/dist/launch.adhoc-abca6af3.js +1 -0
  88. package/dist/leftlabel.sample-24c2388d.js +1 -0
  89. package/dist/legacyDataset-e0e201ab.js +1 -0
  90. package/dist/{log-cf45fcf2.js → log-99af3443.js} +1 -1
  91. package/dist/{lollipop-c5b6e615.js → lollipop-806f8fa4.js} +1 -1
  92. package/dist/{maf-7535f1f9.js → maf-b06579e4.js} +1 -1
  93. package/dist/{maftimeline-1292ab62.js → maftimeline-4840a380.js} +1 -1
  94. package/dist/matrix-00bb50ff.js +1 -0
  95. package/dist/matrix.cells-914dd0c6.js +1 -0
  96. package/dist/{matrix.cluster-168bc96b.js → matrix.cluster-783ceab0.js} +1 -1
  97. package/dist/matrix.config-6ce74dfe.js +1 -0
  98. package/dist/matrix.controls-7b2a6f95.js +1 -0
  99. package/dist/{matrix.data-b1d0febe.js → matrix.data-dac4f1b7.js} +1 -1
  100. package/dist/{matrix.dom-00defa30.js → matrix.dom-4e10bbe9.js} +1 -1
  101. package/dist/matrix.groups-b9fca14a.js +1 -0
  102. package/dist/matrix.interactivity-84169b43.js +1 -0
  103. package/dist/{matrix.layout-c2345231.js → matrix.layout-dd5a44fd.js} +1 -1
  104. package/dist/matrix.legend-ac6d45e6.js +1 -0
  105. package/dist/matrix.renderers-78010275.js +1 -0
  106. package/dist/matrix.serieses-9b4fd744.js +1 -0
  107. package/dist/matrix.sort-014d798d.js +1 -0
  108. package/dist/{matrix.sorterUi-a741ba2e.js → matrix.sorterUi-9bf7e6f9.js} +1 -1
  109. package/dist/{mavb-92136d17.js → mavb-c6be46fc.js} +1 -1
  110. package/dist/{mds.fimo-c03115b4.js → mds.fimo-bff6a1ed.js} +1 -1
  111. package/dist/mds.samplescatterplot-9a02b9fb.js +1 -0
  112. package/dist/{mds.survivalplot-366db380.js → mds.survivalplot-055549f4.js} +1 -1
  113. package/dist/{metaboliteIntensity-ddb6e480.js → metaboliteIntensity-fac92f8b.js} +1 -1
  114. package/dist/niceNumLabels-238aabce.js +1 -0
  115. package/dist/{nodrag-2c046d31.js → nodrag-16ad4b03.js} +1 -1
  116. package/dist/{notify-44ebc0df.js → notify-224cccbd.js} +1 -1
  117. package/dist/{numeric-918d4686.js → numeric-b0b17185.js} +1 -1
  118. package/dist/numeric.binary-1f9e93f2.js +1 -0
  119. package/dist/numeric.continuous-ebcd0567.js +1 -0
  120. package/dist/numeric.discrete-7b97044a.js +1 -0
  121. package/dist/numeric.spline-1be88f3d.js +1 -0
  122. package/dist/numeric.toggle-7fa2a770.js +1 -0
  123. package/dist/oncomatrix-351af2a0.js +1 -0
  124. package/dist/{parseData-e66308cd.js → parseData-21fe9822.js} +1 -1
  125. package/dist/partjson.esm-b3f1fc21.js +1 -0
  126. package/dist/{plot.2dvaf-73dbfbd1.js → plot.2dvaf-18a35e4b.js} +1 -1
  127. package/dist/plot.app-30c4b8e5.js +1 -0
  128. package/dist/plot.barplot-7c4865a2.js +1 -0
  129. package/dist/{plot.boxplot-641da058.js → plot.boxplot-fe3046c6.js} +1 -1
  130. package/dist/plot.brainImaging-2ceb6023.js +1 -0
  131. package/dist/plot.disco-6011f87f.js +1 -0
  132. package/dist/{plot.dzi-41ea26e5.js → plot.dzi-6728a7c8.js} +1 -1
  133. package/dist/plot.ssgq-5581dc56.js +1 -0
  134. package/dist/{plot.vaf2cov-80e58833.js → plot.vaf2cov-b2284c64.js} +1 -1
  135. package/dist/{plot.wsi-51cc48ef.js → plot.wsi-9a9d4034.js} +1 -1
  136. package/dist/profileBarchart-0476f1f8.js +1 -0
  137. package/dist/profileHome-32eb9b50.js +1 -0
  138. package/dist/profilePlot-c7e099e8.js +1 -0
  139. package/dist/profilePolar-6b981e63.js +1 -0
  140. package/dist/profileRadar-bca1cc03.js +1 -0
  141. package/dist/profileRadarFacility-bbb1ecd8.js +1 -0
  142. package/dist/profileSummary-b114204f.js +1 -0
  143. package/dist/recover-49e09de0.js +1 -0
  144. package/dist/regression.inputs-a761f40d.js +1 -0
  145. package/dist/regression.inputs.values.table-5929d25a.js +1 -0
  146. package/dist/regression.results-69bc42d0.js +1 -0
  147. package/dist/{renderPvalueTable-895a72c2.js → renderPvalueTable-dc5d15f2.js} +1 -1
  148. package/dist/sampleScatter-2d0ed680.js +1 -0
  149. package/dist/{sampleScatter.rendererThree-5e686004.js → sampleScatter.rendererThree-0b12ac61.js} +2 -2
  150. package/dist/sampleView-484ab133.js +1 -0
  151. package/dist/samplelst-689796e6.js +1 -0
  152. package/dist/{samplematrix-2a1d7d82.js → samplematrix-2b137a05.js} +1 -1
  153. package/dist/scatter-205e013f.js +1 -0
  154. package/dist/{select2Terms-b4fffc50.js → select2Terms-b21e184a.js} +1 -1
  155. package/dist/{selectGenomeWithTklst-acf7e568.js → selectGenomeWithTklst-466995b4.js} +1 -1
  156. package/dist/singleCellCellType-5db730bb.js +1 -0
  157. package/dist/{singleCellGeneExpression-6de17162.js → singleCellGeneExpression-7147a2d0.js} +1 -1
  158. package/dist/singleCellPlot-73b2738f.js +1 -0
  159. package/dist/{singlecell-f76c856a.js → singlecell-24409b72.js} +1 -1
  160. package/dist/singlecell-bca774ed.js +1 -0
  161. package/dist/{snp-9590a1b4.js → snp-37d06246.js} +1 -1
  162. package/dist/snp-a8388ce4.js +1 -0
  163. package/dist/snplocus-7a1ea8c9.js +1 -0
  164. package/dist/{snplst-007a1926.js → snplst-6865d7c7.js} +1 -1
  165. package/dist/{spliceevent.a53ss.diagram-63dfef69.js → spliceevent.a53ss.diagram-e2eab72b.js} +1 -1
  166. package/dist/{spliceevent.exonskip.diagram-76fa9af8.js → spliceevent.exonskip.diagram-4d5df3a1.js} +1 -1
  167. package/dist/spliceevent.exonskip.getdefault-a94aad6e.js +1 -0
  168. package/dist/{spliceevent.noeventdiagram-64a099e0.js → spliceevent.noeventdiagram-ea97b0fb.js} +1 -1
  169. package/dist/{spliceevent.phrase-770c8cac.js → spliceevent.phrase-c5832470.js} +1 -1
  170. package/dist/{stattable-f1189f0f.js → stattable-7c5ecc2f.js} +1 -1
  171. package/dist/{style.gdc-89cfdb0f.js → style.gdc-131f3c77.js} +1 -1
  172. package/dist/summary-5ec455d3.js +1 -0
  173. package/dist/{sunburst-d5379952.js → sunburst-533902a7.js} +1 -1
  174. package/dist/survival-92250664.js +1 -0
  175. package/dist/survival-e16e068f.js +1 -0
  176. package/dist/{svg.download-86850940.js → svg.download-35926549.js} +1 -1
  177. package/dist/{svg.legend-a94b0697.js → svg.legend-8d490df2.js} +1 -1
  178. package/dist/{svgraph-c57b9ae3.js → svgraph-6fac8cbc.js} +1 -1
  179. package/dist/{svmr-cf6f1b27.js → svmr-d07ff695.js} +1 -1
  180. package/dist/table-29d5a973.js +1 -0
  181. package/dist/table-ad744310.js +1 -0
  182. package/dist/termInfo-bf99a37e.js +1 -0
  183. package/dist/{termdb.bins-9faa5170.js → termdb.bins-8b656cc3.js} +1 -1
  184. package/dist/termsetting-33ea66f1.js +1 -0
  185. package/dist/tk-071a7550.js +1 -0
  186. package/dist/{toggleButtons-002aeda1.js → toggleButtons-dbdbad01.js} +1 -1
  187. package/dist/tp.ui-9c2e9fc5.js +1 -0
  188. package/dist/tslib.es6-c3c2d88f.js +1 -0
  189. package/dist/tvs.density-f6128793.js +1 -0
  190. package/dist/{tvs.geneVariant-3a65ad94.js → tvs.geneVariant-ca4bdbb1.js} +1 -1
  191. package/dist/tvs.numeric-0260a825.js +1 -0
  192. package/dist/{tvs.samplelst-1eeb586b.js → tvs.samplelst-cb71b3bf.js} +1 -1
  193. package/dist/{uiUtils-1336bad7.js → uiUtils-f1bd2bcc.js} +1 -1
  194. package/dist/{variantBrowser-f0c812c1.js → variantBrowser-7c540224.js} +1 -1
  195. package/dist/{vcf-c4a23924.js → vcf-5cc55588.js} +1 -1
  196. package/dist/violin-2ba509eb.js +1 -0
  197. package/dist/violin.interactivity-4da6d7a9.js +1 -0
  198. package/dist/{violin.renderer-dafd89fa.js → violin.renderer-ce024265.js} +1 -1
  199. package/dist/{violinRenderer-8215f40d.js → violinRenderer-f7c96a60.js} +1 -1
  200. package/dist/{viridis-ffd14c4d.js → viridis-01ab20c5.js} +1 -1
  201. package/dist/{y-dd197cc9.js → y-67939f83.js} +1 -1
  202. package/dist/{zoom-9c63e74c.js → zoom-25dce8b9.js} +1 -1
  203. package/package.json +6 -4
  204. package/dist/AppHeader-a2a7e518.js +0 -1
  205. package/dist/DEanalysis-a6b50e49.js +0 -1
  206. package/dist/Disco-1c71b7dd.js +0 -1
  207. package/dist/Disco.UI-4c16ee50.js +0 -1
  208. package/dist/FilterRxComp-242f4615.js +0 -1
  209. package/dist/WSIViewer-d90032d7.js +0 -1
  210. package/dist/adSandbox-3528c372.js +0 -1
  211. package/dist/app-07dee349.js +0 -1
  212. package/dist/app-a8c4854a.js +0 -1
  213. package/dist/app-ade9c62a.js +0 -1
  214. package/dist/bam-92483a98.js +0 -1
  215. package/dist/barchart-3e69d094.js +0 -1
  216. package/dist/barchart.events-9b11d97e.js +0 -1
  217. package/dist/block-dcb130fb.js +0 -1
  218. package/dist/block.lazyload-9f031cac.js +0 -1
  219. package/dist/block.legend-b2987cd9.js +0 -1
  220. package/dist/block.mds2-de6e0986.js +0 -1
  221. package/dist/boxplot-1178fffc.js +0 -1
  222. package/dist/brainImaging-98ed7aa2.js +0 -1
  223. package/dist/categorical-26528ce8.js +0 -1
  224. package/dist/condition-b0d74550.js +0 -1
  225. package/dist/controls-0bacec22.js +0 -1
  226. package/dist/controls.config-0ccc9d79.js +0 -1
  227. package/dist/controls.divide-a9fe9466.js +0 -1
  228. package/dist/controls.overlay-fe20d41d.js +0 -1
  229. package/dist/controls.term1-faa2efcf.js +0 -1
  230. package/dist/cuminc-7e2cac2d.js +0 -1
  231. package/dist/dataDownload-ade8d840.js +0 -1
  232. package/dist/databrowser.ui-716f0519.js +0 -1
  233. package/dist/dictionary-3f83ce63.js +0 -1
  234. package/dist/facet-6850cfed.js +0 -1
  235. package/dist/geneExpClustering-7fd3c87e.js +0 -1
  236. package/dist/geneExpression-6462537d.js +0 -1
  237. package/dist/geneORA-7eb818c4.js +0 -1
  238. package/dist/geneVariant-b58e924a.js +0 -1
  239. package/dist/geneset-9f69ad3f.js +0 -1
  240. package/dist/genomeBrowser-1b2b83f7.js +0 -1
  241. package/dist/genomeBrowser.controls-cd8ddeb1.js +0 -1
  242. package/dist/gsea-36376589.js +0 -1
  243. package/dist/hierCluster-f1e30c19.js +0 -1
  244. package/dist/hierCluster.config-da3510b1.js +0 -1
  245. package/dist/hierCluster.renderers-610d8860.js +0 -1
  246. package/dist/imagePlot-7089bdff.js +0 -1
  247. package/dist/launch.adhoc-d229fd55.js +0 -1
  248. package/dist/leftlabel.sample-a919168c.js +0 -1
  249. package/dist/legacyDataset-1cbcb67d.js +0 -1
  250. package/dist/matrix-0614794d.js +0 -1
  251. package/dist/matrix.cells-819d4991.js +0 -1
  252. package/dist/matrix.config-c54ca273.js +0 -1
  253. package/dist/matrix.controls-5eca7822.js +0 -1
  254. package/dist/matrix.groups-4660dd70.js +0 -1
  255. package/dist/matrix.interactivity-23d83183.js +0 -1
  256. package/dist/matrix.legend-2e647224.js +0 -1
  257. package/dist/matrix.renderers-43445f4f.js +0 -1
  258. package/dist/matrix.serieses-972fbe5d.js +0 -1
  259. package/dist/matrix.sort-80d9b788.js +0 -1
  260. package/dist/mds.samplescatterplot-1623e6d0.js +0 -1
  261. package/dist/niceNumLabels-6cfc1508.js +0 -1
  262. package/dist/numeric.binary-80467e8b.js +0 -1
  263. package/dist/numeric.continuous-69a62a15.js +0 -1
  264. package/dist/numeric.discrete-86181905.js +0 -1
  265. package/dist/numeric.spline-1b07fd13.js +0 -1
  266. package/dist/numeric.toggle-37c4bee8.js +0 -1
  267. package/dist/oncomatrix-475271da.js +0 -1
  268. package/dist/plot.app-aa916e0e.js +0 -1
  269. package/dist/plot.barplot-8b440a2b.js +0 -1
  270. package/dist/plot.brainImaging-2f796b0c.js +0 -1
  271. package/dist/plot.disco-43e18d2f.js +0 -1
  272. package/dist/plot.ssgq-e49cb70b.js +0 -1
  273. package/dist/profileBarchart-91463ab6.js +0 -1
  274. package/dist/profileHome-d37a6821.js +0 -1
  275. package/dist/profilePlot-9ca577cb.js +0 -1
  276. package/dist/profilePolar-19c7da5b.js +0 -1
  277. package/dist/profileRadar-8bf094e3.js +0 -1
  278. package/dist/profileRadarFacility-f9fd8971.js +0 -1
  279. package/dist/profileSummary-93999c14.js +0 -1
  280. package/dist/recover-36ada47f.js +0 -1
  281. package/dist/regression.inputs-cb57ece6.js +0 -1
  282. package/dist/regression.inputs.values.table-908bb37a.js +0 -1
  283. package/dist/regression.results-c186a8dc.js +0 -1
  284. package/dist/roundValue-b0d0517c.js +0 -1
  285. package/dist/sampleScatter-9d5b3630.js +0 -1
  286. package/dist/sampleView-2d895023.js +0 -1
  287. package/dist/samplelst-9f8343ff.js +0 -1
  288. package/dist/scatter-b4992f64.js +0 -1
  289. package/dist/singleCellCellType-84a0c2cf.js +0 -1
  290. package/dist/singleCellPlot-2f2b8619.js +0 -1
  291. package/dist/singlecell-90567dde.js +0 -1
  292. package/dist/snp-79ec95ba.js +0 -1
  293. package/dist/snplocus-cb629be1.js +0 -1
  294. package/dist/spliceevent.exonskip.getdefault-31d2950c.js +0 -1
  295. package/dist/summary-b77bef3c.js +0 -1
  296. package/dist/survival-61ab375a.js +0 -1
  297. package/dist/survival-80a0ade9.js +0 -1
  298. package/dist/table-79e3e776.js +0 -1
  299. package/dist/table-eee91e14.js +0 -1
  300. package/dist/termInfo-f851b415.js +0 -1
  301. package/dist/tk-75566002.js +0 -1
  302. package/dist/tp.ui-02911b56.js +0 -1
  303. package/dist/tslib.es6-1f85f553.js +0 -1
  304. package/dist/tvs.density-026fca97.js +0 -1
  305. package/dist/tvs.numeric-3f3d9919.js +0 -1
  306. package/dist/violin-1515c3e6.js +0 -1
  307. package/dist/violin.interactivity-8e2f480d.js +0 -1
@@ -1 +0,0 @@
1
- import{Z as t,B as e,ap as s,aP as o,aQ as a,aR as n,ar as r,at as i,as as l,ak as c,z as f,a9 as d,p,ac as u,b6 as m,b7 as h,aN as g,q as b,b8 as y,j as x,b9 as k,ba as v,a7 as w,aG as _,bb as j,a8 as M,af as A,aM as z,aL as N,r as P,aW as S,d as C,aF as F,I as R,ah as I,W as B,ag as q,ad as D,O as L,aJ as E,bc as U,bd as G,be as V,bf as O,ae as T,M as H}from"./app-a8c4854a.js";import{v as X,a as Y}from"./vcf-c4a23924.js";import{p as J}from"./partition-db811f6b.js";import{d as Q}from"./arc-3d6751aa.js";import{b as W}from"./axis-747c801e.js";import{s as Z}from"./legacy-d3-polyfill-bdb2d792.js";const K="__";function $(f){const{mlst:d,tk:p,block:u}=f;if(!d||d.length==0)return;let m;if(f.pane){const e=t({x:f.x,y:f.y});e.header.html(tt(d));m=e.body}else{m=f.holder}if(!m){console.error("no holder provided for showing table");return}const h=new Map;for(const t of d){if(!h.has(t.dt)){h.set(t.dt,[])}h.get(t.dt).push(t)}delete p.__singlevariant_table;for(const[t,f]of h){const d=m.append("div").style("margin","10px");if(h.size>1){d.append("p").text(e[t]).style("color","#858585")}switch(t){case c:et(f,d,p,u);break;case l:case i:ct(f,d,p,u);break;case r:dt(f,d,p,u.genome);break;case n:case a:ut(f,d,p,u.genome);break;case o:pt(f,d,p,u.genome);break;case s:d.append("p").text("cnv not supported yet");break;default:d.append("p").text("unknown dt: "+t)}}Ft(d,m,p,u)}function tt(t){if(t.length==1){const e=t[0];const d=f[e.class];if(e.dt==c){return'<span style="font-weight:bold;color:'+d.color+'">'+(e.mname?e.mname:e.pos?e.chr+":"+(e.pos+1):"")+'</span> <span style="font-size:80%">'+d.label+"</span>"}if(e.dt==l||e.dt==i){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%">'+d.label+"</span>"}if(e.dt==n||e.dt==a||e.dt==r||e.dt==o||e.dt==s){return'<span style="font-size:80%">'+d.label+"</span>"}return"unknown dt "+e.dt}const d=new Set;for(const e of t){d.add(e.dt)}if(d.size==1){const s=[...d][0];return t.length+" "+e[s]}return t.length+" mutations"}function et(e,s,o,a){if(o.ds&&o.ds.id2vcf){if(e.length==1){const t=o.ds.id2vcf[e[0].vcfid];if(!t){s.append("p").text("No vcf config file (id: "+e[0].vcfid+")");return}at(e[0],t,s,o,a);return}for(const n of e){const e=o.ds.id2vcf[n.vcfid];if(!e){s.append("p").text("No vcf config file (id: "+n.vcfid+")");continue}const r=s.append("div").attr("class","sja_menuoption").on("click",(s=>{const r=t({x:s.clientX+100,y:Math.max(100,s.clientY-100)});at(n,e,r.body,o,a)}));if(n.mname){r.append("span").html(n.mname+'\t<span style="font-size:80%;color:#858585">'+f[n.class].label+"</span>")}else if(n.csq){r.append("span").html(n.csq[0]._mname+'\t<span style="font-size:80%;color:#858585">'+n.csq[0].Consequence+"</span>")}r.append("span").html("&nbsp;&nbsp;"+n.chr+":"+(n.pos+1)+' <span style="font-size:70%">REF</span> '+n.ref+' <span style="font-size:70%">ALT</span> '+n.alt)}return}const n=a.genome.hasSNP;const r={chr:null,bprange:[],holder:null,says:null};const i={set:new Map,butholder:null};for(const t of e){if(n&&t.chr&&t.pos){r.chr=t.chr;let e=true;for(const s of r.bprange){if(s.start<=t.pos&&s.stop>=t.pos){e=false;break}}if(e){r.bprange.push({start:t.pos,stop:t.pos+1})}}}if(!o.snvindelattr){mt(o,e)}if(a.variantPageCall_snv){i.butholder=s.append("div").style("margin","10px")}if(e.length==1){const t=e[0];r.alleleLst=[t.ref,t.alt];if(a.variantPageCall_snv){if(t.chr!=undefined&&t.pos!=undefined&&t.ref!=undefined&&t.alt!=undefined){i.set.set(t.chr+K+t.pos+K+t.ref+K+t.alt,{mname:t.mname,class:t.class})}}const l=[];for(const e of o.snvindelattr){if(e.lst){const s=[];for(const o of e.lst){if(o.ismaf){const e=o.get(t);s.push({k:o.label,v:e?Number.isFinite(e.f)?'<span style="color:'+o.fill+'">'+(e.f*100).toFixed(0)+"% ("+e.v1+"/"+e.v2+")</span>":"n/a":""})}else{s.push({k:o.label,v:o.get(t)})}}if(s.length){l.push({k:e.label,kvlst:s})}}else if(e.ismaf){const s=e.get(t);l.push({k:e.label,v:s?Number.isFinite(s.f)?'<span style="color:'+e.fill+'">'+(s.f*100).toFixed(0)+"% ("+s.v1+"/"+s.v2+")</span>":"n/a":""})}else{let s=e.get(t);if(e.hover){const o=e.hover(t);if(o){s+=' <span style="color:#aaa;font-size:80%">'+o+"</span>"}}l.push({k:e.label,v:s})}}const c=d(s,l);if(n){const t=c.append("tr");t.append("td").attr("colspan",2).style("color","#9e9e9e").text("dbSNP");r.says=t.append("td").text("loading...")}const f=s.append("div").style("margin-top","10px");if(o.eplst){for(const t of o.eplst){lt(t,f,e)}}if(o.ds&&o.ds.snvindel_legend){f.append("button").text("Legend").on("click",(()=>{if(t.style("display")=="none"){p(t)}else{u(t)}}));const t=f.append("div").style("display","none").style("margin","10px").style("width","400px").html(o.ds.snvindel_legend)}}else{if(a.variantPageCall_snv){for(const t of e){if(t.chr!=undefined&&t.pos!=undefined&&t.ref!=undefined&&t.alt!=undefined){i.set.set(t.chr+K+t.pos+K+t.ref+K+t.alt,{mname:t.mname,class:t.class})}}}const t=s.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");st(e,t,o.snvindelattr,o);const l=s.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";u(c)}else{this.style.color="red";p(c)}}));if(n&&r.bprange.length){r.button=l.append("button").text("loading...").on("click",(function(){if(f.style("display")=="block"){this.style.color="black";u(f)}else{this.style.color="red";p(f)}}))}if(o.eplst){for(const t of o.eplst){lt(t,l,e)}}if(o.ds&&o.ds.snvindel_legend){l.append("button").text("Legend").on("click",(function(){if(d.style("display")=="block"){this.style.color="black";u(d)}else{this.style.color="red";p(d)}}))}c=s.append("div").style("margin","10px").style("display","none");for(const s of o.snvindelattr){const a=Math.random();const n=c.append("input").attr("type","checkbox").attr("id",a);if(!s.hide)n.attr("checked",true);n.on("change",(()=>{s.hide=!n.node().checked;st(e,t,o.snvindelattr,o)}));c.append("label").attr("for",a).text(s.label);c.append("br")}if(n){f=s.append("div").style("margin","10px").style("display","none");r.holder=f;r.says=f}if(o.ds&&o.ds.snvindel_legend){d=s.append("div").style("display","none").style("width","300px").html(o.ds.snvindel_legend)}}if(n&&r.bprange.length){m(r.chr,r.bprange,a.genome,r.alleleLst).then((t=>{if(!t||t.length==0)throw{message:"no SNP"};r.says.text("");if(r.button){r.button.text(t.length+" SNP"+(t.length>1?"s":""))}for(const e of t){const t=r.says.append("div");h(e,t)}})).catch((t=>{r.says.text(t.message);if(r.button){r.button.attr("disabled",true)}if(t.stack)console.log(t.stack)}))}if(a.variantPageCall_snv){const t=[];for(const[e,s]of i.set){const o=e.split(K);t.push({chr:o[0],position:Number.parseInt(o[1])+1,refallele:o[2],altallele:o[3],class:s.class,aachange:s.mname})}if(t.length==1){const e=t[0];e.container=i.butholder;a.variantPageCall_snv(e)}else if(t.length>1){i.butholder.append("div").classed("sja_variantpagesnv",true).text("Variant Page").on("click",(e=>{const s=o.tktip.clear().showunder(e.target).d.append("table");for(const e of t){const t=s.append("tr");t.append("td").text(e.aachange);t.append("td").text(f[e.class].label).style("font-size",".7em").style("color",f[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 st(t,e,s,o,a){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 o=n.get(e);if(n.ismaf){if(s==undefined){if(o==undefined)return 0;return 1}else{if(o==undefined)return-1;return n.descend?o.f-s.f:s.f-o.f}}if(s==undefined||s===""){if(o==undefined||o==="")return 0;return 1}if(o==undefined||o==="")return-1;if(typeof s=="string"){if(s<o)return n.descend?1:-1;if(s>o)return n.descend?-1:1}if(typeof s=="number")return n.descend?o-s:s-o;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;st(t,e,s,o,a)}))}}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;st(t,e,s,o,a)}))}}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(a){i.on("click",(()=>a(r)))}if(o.eplst){i.on("mouseover",((t,e)=>{for(const t of o.eplst)t.may_hl([r],true)})).on("mouseout",((t,e)=>{for(const t of o.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{g(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{g(e,s,t)}}}else{e.html(t.get(r))}}}}}function ot(t){return'<span style="font-size:70%;color:#858585">'+t+"</span>"}function at(t,e,s,o,a){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==c){n.append("span").style("padding-right","10px").html(ot("REF")+" "+t.ref+" "+ot("ALT")+" "+t.alt);if(a.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")};a.variantPageCall_snv(e)}if(o.button4variant){zt(n,t,o.button4variant)}if(o.url4variant){At(n,t,o.url4variant)}}if(e.info&&e.info.CSQ&&e.info.CSQ.csqheader&&t.csq){vt(t.csq,n,o,e.info.CSQ.csqheader)}if(e.info&&e.info.ANN&&e.info.ANN.annheader&&t.ann){wt(t.ann,n,o,e.info.ANN.annheader)}if(o.variant2img){_t(t,n,s.append("div"),o)}const r=s.append("div");if(Pt(t,o,r)){r.style("margin-top","10px")}else if(t.sampledata){const e=r.append("div");Promise.resolve().then((()=>{if(t.sampledata.length==0&&o.ds.vcfcohorttrack){e.text("Loading ...");return Mt(t,o,a).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){St(t,o,r);return}if(Nt(t,o,r)){r.style("margin-top","10px")}else if(jt(t,o,r)){r.style("margin-top","10px")}else if(Pt(t,o,r)){r.style("margin-top","10px")}else{kt(t,n,o)}})).catch((t=>{e.text(t)}))}if(e.infopipejoin){const o=[];if(t.altinfo){for(const s of e.infopipejoin){const e=t.altinfo[s.key];if(e){if(Array.isArray(e)){o.push(e)}else{o.push(e.split(/[,|]/))}}else{o.push([])}}}if(o.length){const t=s.append("div");for(let s=0;s<o[0].length;s++){const a=[];for(let t=0;t<e.infopipejoin.length;t++){const n=e.infopipejoin[t];a.push({k:n.label,v:n.values?n.values[o[t][s]]:o[t][s]})}d(t,a).style("display","inline-block").style("border","solid 1px black").style("margin","20px")}}}nt(t,s,o);rt(t,s,o);const i={};const l={};if(o.vcfinfofilter){for(const t of o.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 o=[];for(const s in t.altinfo){const a=Array.isArray(t.altinfo[s])?t.altinfo[s]:[t.altinfo[s]];let n;if(i[s]){n=a.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=a}o.push({k:s,v:n.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("Alternative allele:");d(s,o)}}{const a=[];for(const s in t.info){if(o.info2table&&o.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}a.push({k:s,v:r.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("This locus:");d(s,a)}}}function nt(t,e,s){if(!s.info2singletable)return;for(const o in s.info2singletable){const a=s.info2singletable[o];const n=t.info[o];if(!n||!n[0])continue;const r=[];const i=n[0].split(a.col_separator);for(let t=0;t<a.fields.length;t++){if(a.fields[t].hide)continue;r.push({k:a.fields[t].name,v:it(a,i,t)})}d(e,r)}}function rt(t,e,s){if(!s.info2table)return;for(const o in s.info2table){const a=s.info2table[o];const n=t.info[o];if(!n)continue;if(a.separate_tables){const t=JSON.parse(JSON.stringify(a.separate_tables));t.forEach((t=>t.rows=[]));for(const e of n){const s=e.split(a.col_separator);const o=new Map;for(let t=0;t<a.fields.length;t++){o.set(a.fields[t].name,s[t])}for(const e of t){if(e.groupers.reduce(((t,e)=>o.get(e.field)==e.value?t:false),true)){e.rows.push(o)}}}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 o=t.append("tr");for(const t of a.fields){if(t.hide)continue;o.append("td").text(t.name)}for(const e of s.rows){const s=t.append("tr").attr("class","sja_tr");const o=a.fields.map((t=>e.get(t.name)));for(let t=0;t<a.fields.length;t++){if(a.fields[t].hide)continue;const e=s.append("td");e.html(it(a,o,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 a.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(a.col_separator);for(let t=0;t<a.fields.length;t++){if(a.fields[t].hide)continue;const o=e.append("td");o.html(it(a,s,t))}}}}function it(t,e,s){const o=t.fields[s];if(o.hide)return;let a=e[s];if(a==undefined)return;if(o.eval){a=(0,eval)('"'+a+'"')}if(o.isurl)return"<a href="+a+" target=_blank>"+a+"</a>";if(o.appendUrl){if(o.separator){return a.split(o.separator).map((t=>"<a href="+o.appendUrl+t+" target=_blank>"+t+"</a>")).join(", ")}return"<a href="+o.appendUrl+a+" target=_blank>"+a+"</a>"}if(o.insert2url){return"<a href="+o.insert2url.left+a+o.insert2url.right+" target=_blank>"+a+"</a>"}if(o.ampersand2br)return a.replace(/&/g,"<br>");if(o.urlMatchLst){const t=a.toLowerCase();const e=t.split(o.urlMatchLst.separator)[o.urlMatchLst.idIndex];if(e){for(const s of o.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 a}function lt(t,e,s){let o=true;for(const e of s){if(e[t.p.sampletype]in t.sampletype2value){o=false;break}}if(o){return}let a=false;e.append("button").text("Highlight in "+t.p.name).on("click",(()=>{a=!a;t.may_hl(s,a)}))}function ct(t,e,s,o){const a=e.append("div").style("margin-bottom","10px");ft(t[0].pairlst,o,a);if(!s.svattr){yt(s,t)}if(t.length==1){const o=t[0];const a=[];for(const t of s.svattr){a.push({k:t.label,v:t.get(o)})}d(e,a);if(s.eplst){const o=e.append("div").style("margin-top","10px");for(const e of s.eplst){lt(e,o,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)}st(t,n,s.svattr,s,(t=>{a.selectAll("*").remove();ft(t.pairlst,o,a)}));if(s.eplst){const o=e.append("div").style("margin-top","5px");for(const e of s.eplst){lt(e,o,t)}}}function ft(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 o={jwt:e.jwt,hostURL:e.hostURL,pairlst:t,genome:e.genome,holder:s};import("./svgraph-c57b9ae3.js").then((t=>{t.default(o)}))}function dt(t,e,s,o){if(!s.itdattr){bt(s,t)}if(t.length==1){const o=t[0];const a=[];for(const t of s.itdattr){a.push({k:t.label,v:t.get(o)})}d(e,a);if(s.eplst){const o=e.append("div").style("margin-top","10px");for(const e of s.eplst){lt(e,o,t)}}return}const a=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=a.append("tr");for(const t of s.itdattr){n.append("td").text(t.label)}st(t,a,s.itdattr,s);if(s.eplst){const o=e.append("div").style("margin-top","5px");for(const e of s.eplst){lt(e,o,t)}}}function pt(t,e,s,o){if(!s.delattr){gt(s,t)}if(t.length==1){const o=t[0];const a=[];for(const t of s.delattr){a.push({k:t.label,v:t.get(o)})}d(e,a);if(s.eplst){const o=e.append("div").style("margin-top","10px");for(const e of s.eplst){lt(e,o,t)}}return}const a=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=a.append("tr");for(const t of s.delattr){n.append("td").text(t.label)}st(t,a,s.delattr,s);if(s.eplst){const o=e.append("div").style("margin-top","5px");for(const e of s.eplst){lt(e,o,t)}}}function ut(t,e,s,o){if(!s.truncattr){ht(s,t)}if(t.length==1){const o=t[0];const a=[];for(const t of s.truncattr){a.push({k:t.label,v:t.get(o)})}d(e,a);if(s.eplst){const o=e.append("div").style("margin-top","10px");for(const e of s.eplst){lt(e,o,t)}}return}const a=e.append("table").style("font-size","90%").style("border-spacing","2px").style("border-collapse","separate");const n=a.append("tr");for(const t of s.truncattr){n.append("td").text(t.label)}st(t,a,s.truncattr,s);if(s.eplst){const o=e.append("div").style("margin-top","5px");for(const e of s.eplst){lt(e,o,t)}}}function mt(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 o=[];for(const t in e[0]){if(s.has(t))continue;switch(t){case"chr":o.push({label:"Genome pos.",get:t=>t.chr+":"+(t.pos+1)});break;case"class":o.push({label:"Class",get:t=>f[t.class].label});break;case"mname":o.push({label:"Mutation",get:t=>t.mname});break;case"ref":o.push({label:"Allele",lst:[{label:"Ref",get:t=>t.ref},{label:"Alt",get:t=>t.alt}]});break;case"pmid":o.push(xt());break;case"maf_tumor":o.push({get:t=>t.maf_tumor,ismaf:true,width:40,height:12,label:"Tumor MAF",fill:"#ff4d4d",fillbg:"#ffcccc"});break;case"maf_normal":o.push({get:t=>t.maf_normal,ismaf:true,width:40,height:12,label:"Germline MAF",fill:"#4d4dff",fillbg:"#ccccff"});break;default:o.push({label:t,get:e=>e[t]})}}t.snvindelattr=o}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 ht(t,e){const s=new Set(["__x","mname","gene","strand","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","partner"]);t.truncattr=[];for(const o of e){if(o.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 o=new Set;for(const t of e){o.add(t.dt)}if(o.size>1){t.truncattr.push({label:"Truncated",get:t=>t.dt==n?"N-term":"C-term"})}for(const o of e){if(o.pmid){t.truncattr.push(xt());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 o in e[0]){if(s.has(o))continue;t.truncattr.push({label:o,get:t=>t[o]})}}function gt(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnadellength","a","b"]);t.delattr=[];for(const o of e){if(o.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 o of e){if(o.pmid){t.delattr.push(xt());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 o in e[0]){if(s.has(o))continue;t.delattr.push({label:o,get:t=>t[o]})}}function bt(t,e){const s=new Set(["__x","mname","isoform","aapos","rnapos","chr","pos","class","dt","rnaposition","rnaduplength","a","b"]);t.itdattr=[];for(const o of e){if(o.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 o of e){if(o.pmid){t.itdattr.push(xt());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 o in e[0]){if(s.has(o))continue;t.itdattr.push({label:o,get:t=>t[o]})}}function yt(t,e){const s=new Set(["__x","mname","aapos","chr","class","dt","inframe","origin","pos","rnapos","strand","useNterm","pairlst"]);t.svattr=[];for(const o of e){if(o.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 o of e){if(o.pmid){t.svattr.push(xt());s.add("pmid");break}}let o=false;for(const s of e){if(o)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"});o=true;break}}}if(e[0].pairlst[0].a.ratio!=undefined){t.svattr.push({label:"Chimeric reads ratio",get:t=>{const e=[];const s=40,o=12,a="#FF850A",n="#FFCF9E";for(const r of t.pairlst){e.push((r.a.name?r.a.name:r.a.chr)+" <svg width="+s+" height="+o+"><g><title>"+r.a.ratio+"</title><rect width="+s+" height="+o+' fill="'+n+'"></rect>'+"<rect width="+s*r.a.ratio+" height="+o+' fill="'+a+'"></rect>'+"</g></svg>"+"&nbsp;&nbsp;"+(r.b.name?r.b.name:r.b.chr)+" <svg width="+s+" height="+o+"><g><title>"+r.b.ratio+"</title><rect width="+s+" height="+o+' fill="'+n+'"></rect>'+"<rect width="+s*r.b.ratio+" height="+o+' fill="'+a+'"></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:'+k+';font-size:80%;color:white;padding:1px 3px">OUT of frame</span>';if(t==1)return'<span style="white-space:nowrap;background-color:'+v+';font-size:80%;color:white;padding:1px 3px">IN frame</span>';if(t==2)return'<span style="white-space:nowrap;background-color:'+v+';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:'+v+';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 o in e[0]){if(s.has(o))continue;t.svattr.push({label:o,get:t=>t[o]})}}function xt(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 kt(t,e,s){let o=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){o=[];for(const e of t.sampledata){const t=e.sampleobj[s.ds.cohort.key4annotation];if(!t)continue;const a=s.ds.cohort.annotation[t];if(a){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=a[e.key.k];if(e.key.hiddenvalues.has(s)){t=true;break}}}if(t)continue}o.push(e)}}e.append("div").attr("class","sja_menuoption").style("display","inline-block").style("margin-right","10px").text(o.length+" sample"+(o.length>1?"s":"")).on("click",(t=>{s.tktip.showunder(t.target).clear();const e=s.tktip.d.append("table");const a=e.append("tr").style("font-size",".8em").style("color","#858585");a.append("td").text("Name");a.append("td").text("Genotype");let n=false;if(o[0].DP!=undefined){a.append("td").text("Read depth");n=true}let r=false;if(o[0].allele2readcount){a.append("td").text("Allele read count");r=true}for(const t of o){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 vt(t,e,s,o){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 a;{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")}a=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(a).on("click",(()=>{if(t){t=false;n.html(a)}else{t=true;n.text("");const s=[];for(const t of o){const o=e[t.name];if(o){s.push({k:t.name,v:o})}}d(n,s)}}))}}))}function wt(t,e,s,o){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 a;{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")}a=t.join(" ")}const n=s.tktip.d.append("div").attr("class","sja_menuoption").style("margin","5px").html(a).on("click",(()=>{if(t){t=false;n.html(a)}else{t=true;n.text("");const s=[];for(const t of o){const o=e[t.name];if(o){s.push({k:t.name,v:o})}}d(n,s)}}))}}))}function _t(t,e,s,o,a){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 a=await b("img",{file:[o.variant2img.path,t.chr+"."+(t.pos+1)+"."+t.ref+"."+t.alt+"."+o.variant2img.ext].join("/")});if(a.error)throw a.error;e.remove();s.append("img").attr("src",a.src).style("width",a.size.width+"px").style("height",a.size.height+"px")}catch(t){e.text("Error loading image")}}))}function jt(t,e,s){if(!e.ds.vaf2coverageplot){return false}if(!t.sampledata){return false}const o=[];const a={};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(!a[t]){a[t]=[]}a[t].push(l)}else{o.push(l)}}else{o.push(l)}}if(r){console.log("skipped "+r+" items")}const i=[];if(o.length){i.push({name:"no "+(e.ds.vaf2coverageplot.samplegroupkey||"sampletype"),lst:o})}for(const t in a){i.push({name:t,lst:a[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,o]of n){const o=e.ds.vaf2coverageplot.categories[s];const a=t.append("div").style("margin-bottom","3px");a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("margin-right","5px").style("background-color",o.color).html("&nbsp;&nbsp;");a.append("span").style("color",o.color).text(o.label||s)}}const l=s.append("div").style("margin-bottom","10px");import("./plot.vaf2cov-80e58833.js").then((t=>{const s={};for(const o of i){let a=l.append("div").style("display","inline-block").style("vertical-align","top");if(i.length>1){a.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(o.name.toUpperCase());a=a.append("div").style("border","solid 1px #aaa")}const n={holder:a,data:o.lst,name:o.name,tip:e.tktip,automax:true,mouseover:t=>{if(!t.sampleobj)return;for(const e in s){if(e==o.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==o.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[o.name]=t.default(n)}}));return true}function Mt(t,e,s){const o=e.ds.vcfcohorttrack;return Promise.resolve().then((()=>{if(o.info){return null}const t={jwt:s.jwt,file:o.file,url:o.url,indexURL:o.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,a,n,r]=X(t.metastr.split("\n"));if(r)throw{message:"vcf meta error for the cohort vcf file: "+r.join("; ")};o.info=e;o.format=a;if(o.samplenamemap){o.samples=n.map(o.samplenamemap)}else{o.samples=n}o.nochr=y(s.genome,t.chrstr.split("\n"));return})).then((()=>{const e={jwt:s.jwt,file:o.file,url:o.url,indexURL:o.indexURL,rglst:[{chr:o.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,a,n]=Y(e,o);for(const e of a){if(e.pos==t.pos&&e.ref==t.ref&&e.alt==t.alt){return e}}}return null}))}))}function At(t,e,s){for(const o of s){if(!o.makeurl)continue;const s=o.makeurl(e);if(!s){continue}t.append("a").attr("href",s).attr("target","_blank").text(o.makelabel?o.makelabel(e):o.label||"link").style("margin-right","10px")}}function zt(t,e,s){s.forEach((s=>{if(!s.makebutton)return;const o=t.append("div").style("display","inline-block").style("margin","0px 10px 2px 3px");s.makebutton(e,o.node())}))}function Nt(t,e,s){const o=e.ds.germline2dvafplot;if(!o)return false;const a=o.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[a];if(!i){continue}const l=e.sampleobj[o.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[o.xsampletype]){continue}if(e.sampletypes[o.yleftsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[o.xsampletype]=e.sampletypes[o.xsampletype];t.sampletypes[o.yleftsampletype]=e.sampletypes[o.yleftsampletype];i.push(t)}if(o.yrightsampletype&&e.sampletypes[o.yrightsampletype]){const t={};for(const s in e){t[s]=e[s]}t.sampletypes={};t.sampletypes[o.xsampletype]=e.sampletypes[o.xsampletype];t.sampletypes[o.yrightsampletype]=e.sampletypes[o.yrightsampletype];i.push(t)}}if(i.length){const t=s.append("div").style("display","inline-block");import("./plot.2dvaf-73dbfbd1.js").then((e=>{e.default(i,o,t)}));return true}return false}function Pt(t,e,s){const o=e.ds.genotype2boxplot;if(!o)return false;if(o.boxplotvaluekey){const e=t.info[o.boxplotvaluekey];if(!e)return false;const a=e.split("|");const n=[];for(const t of a){const e=t.split("/");const s=Number.parseFloat(e[1]);const o=Number.parseFloat(e[2]);const a=Number.parseFloat(e[3]);const r=Number.parseFloat(e[4]);const i=Number.parseFloat(e[5]);if(Number.isNaN(s)||Number.isNaN(o)||Number.isNaN(a)||Number.isNaN(r)||Number.isNaN(i)){continue}n.push({label:e[0],color:"#4F8F38",minvalue:s,maxvalue:i,percentile:{p05:s,p25:o,p50:a,p75:r,p95:i}})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-641da058.js").then((t=>{const e=t.default({holder:r,axislabel:o.axislabel,list:n});if(e){x(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 a=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[o.sampleannotationkey];if(!Number.isFinite(r))return;if(!a.has(t.genotype)){a.set(t.genotype,[])}a.get(t.genotype).push({value:r,key:s})}));if(a.size==0){return false}const n=[];for(const[t,e]of a){n.push({label:t,color:"#4F8F38",samples:e})}const r=s.append("div").style("display","inline-block");import("./plot.boxplot-641da058.js").then((t=>{const e=t.default({holder:r,axislabel:o.axislabel,list:n});if(e){x(r,"Boxplot: "+e)}}));return true}function St(t,e,s){const o=t.sampledata[0];const a=[];if(o.genotype){a.push({k:"genotype",v:o.genotype})}if(o.DP!=undefined){a.push({k:"total reads",v:o.DP})}if(o.allele2readcount&&o.allele2readcount[t.alt]!=undefined){a.push({k:"alt reads",v:o.allele2readcount[t.alt]})}else{Ct(a,t,e)}if(o.sampleobj){if(e.ds.cohort&&e.ds.cohort.annotation&&e.ds.cohort.key4annotation){const t=o.sampleobj[e.ds.cohort.key4annotation];if(t){a.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;a.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;a.push({k:t,v:s[t]})}}}}}else if(o.sampleobj.name){a.push({k:"name",v:o.sampleobj.name})}}d(s,a)}function Ct(t,e,s){let o;if(e.vcfid&&s.ds&&s.ds.id2vcf)o=s.ds.id2vcf[e.vcfid];if(!o)return;if(!o.format)return;const a=e.sampledata[0];for(const s in o.format){const n=o.format[s];if(!(s in a))continue;let r=n.Number=="R"||n.Number=="A";if(!r){if(s=="AD"){r=true}}if(r){const o=[];const r=[];let i;for(const t in a[s]){if(t==e.ref)continue;o.push(t);i=a[s][t];r.push(i)}const l=a[s][e.ref];if(l!=undefined){o.push(e.ref);r.push(l)}let c;if(l+i>0){c=g(null,{f:i/(i+l)})}t.push({k:s,v:(c?c+" ":"")+'<span style="font-size:.8em;opacity:.5">'+o.join(" / ")+"</span> "+r.join(" / ")+(n.Description?' <span style="font-size:.7em;opacity:.5">'+n.Description+"</span>":"")})}else{t.push({k:s,v:a[s]})}}}function Ft(t,e,s,o){if(!o.samplecart||!s.ds||!s.ds.sampleselectable)return;const a=new Set;for(const e of t){if(e.sample){a.add(e.sample)}}if(a.size==0){return}const n=new Set;for(const e of t){const t=f[e.class].label;let s;if(e.dt==i||e.dt==l){if(e.mname){if(e.useNterm){s=(o.usegm?o.usegm.name+"-":"")+e.mname+" "+t}else{s=e.mname+(o.usegm?"-"+o.usegm.name:"")+" "+t}}else{s=(o.usegm?o.usegm.name:"")+" "+t}}else{s=(e.mname?e.mname+" ":"")+t+(o.usegm?" in "+o.usegm.name:"")}n.add(s)}if(n.size==1){"having "+[...n][0]}else{"having mutations"+(o.usegm?" in "+o.usegm.name:"")}o.samplecart.setBtns({samplelst:[...a],id:n.size?[...n][0]:o.usegm?o.usegm.name:"",basket:"Gene Mutation",container:e.append("div").style("margin-left","10px").append("div")})}function Rt(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 o=["genome="+t.genome.name];if(s.file){o.push("file="+s.file)}else{o.push("url="+s.url);if(s.indexURL)o.push("indexURL="+s.indexURL)}return w("vcfheader?"+o.join("&")).then((t=>{if(t.error)throw{message:t.error};if(!t.metastr)throw{message:"no meta lines for vcf file "+e.name};const[o,a,n,r]=X(t.metastr.split("\n"));if(r)throw{error:"vcf meta error for file "+e.name+": "+r.join("; ")};s.info=o;s.format=a;if(s.samplenamemap){s.samples=n.map(s.samplenamemap)}else{s.samples=n}s.nochr=t.nochr}))})).then((()=>{const o={file:s.file,url:s.url,indexURL:s.indexURL,rglst:t.tkarg_maygm(e)};if(s.nochr){for(const t of o.rglst){t.chr=t.chr.replace("chr","")}}return w("vcf",{method:"POST",body:JSON.stringify(o)}).then((o=>{if(o.error)throw{message:o.error};const a=o.linestr?o.linestr.trim().split("\n"):[];ce([{vcfid:s.vcfid,lines:a}],t,e);return}))})).catch((t=>{if(t.stack)console.log(t.stack);return t.message})).then((s=>{t.tkcloakoff(e,{error:s})}))}function It(t,e,s){const o=e.ds.id2vcf[t.vcfid];if(!o){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 a=[];for(const n of t.lines){const[r,i,l]=Y(n,o);if(r){a.push(r)}if(!i){continue}for(const o of i){if(o.alt=="NON_REF"){continue}if(e.ds.discardsymbolicallele&&o.issymbolicallele){continue}if(s.usegm){const t=_(o.pos,s.usegm);o.rnapos=t.rnapos;o.aapos=t.aapos}o.vcfid=t.vcfid;j(o,s);e.mlst.push(o)}}if(!e.dstk_novcferror&&a.length){s.error(a[0]+(a.length==1?"":" and "+(a.length-1)+" more errors with the VCF track"))}}function Bt(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=M(A)}let o;if(!s.cohort.annotation){o=s.mlst}else{if(!s.cohort.key4annotation){console.error("arg.cohort.key4annotation missing");return}o=[];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 a=s.cohort.annotation[t];if(!a){continue}const n={k4a:t};for(const t of s.cohort.levels){n[t.k]=a[t.k];if(t.full){n[t.full]=a[t.full]}}o.push(n)}}}else{for(const t of s.mlst){const e=t[s.cohort.key4annotation];if(!e){continue}const a=s.cohort.annotation[e];if(!a){continue}const n={k4a:e};for(const t of s.cohort.levels){n[t.k]=a[t.k];if(t.full){n[t.full]=a[t.full]}}o.push(n)}}if(o.length==0){if(s.m2detail){$({mlst:[s.m2detail],pane:true,x:s.cx,y:s.cy,tk:t,block:e})}else{$({mlst:s.mlst,pane:true,x:s.cx,y:s.cy,tk:t,block:e})}return}}let a=s.cx,n=s.cy,r=500,i=250;const l=t.glider.append("g").attr("transform","translate("+a+","+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 u=Math.log(o.length)*24;if(u>t.height*.42){u=t.height*.42}else if(u<t.height*.2){u=t.height*.2}let m=a,h=n;if(a-u<0){m=u}else if(a+u>e.width){m=e.width-u}if(n-u<0){h=u}else if(n+u>t.height){h=t.height-u}if(m!=a||h!=n){l.transition().delay(r+i).attr("transform","translate("+m+","+h+")");a=m;n=h}const g=z(o,s.cohort.levels);const b=N()(g);b.sum((t=>t.value));b.sort(((t,e)=>e.value-t.value));J().size([1,Math.pow(u,2)])(b);f.append("circle").attr("r",u).attr("fill","white").attr("fill-opacity",0);let y;const x=Q().startAngle((t=>Math.PI*2*t.x0)).endAngle((t=>Math.PI*2*t.x1)).innerRadius((t=>{if(!t.parent){y=Math.sqrt(t.y1)-u/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",x).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 o;if(s.cohort.key2color){o=s.cohort.key2color[e];if(!o){console.log(e);o="#858585"}}else{o=s.cohort.suncolor(e)}t._color=o;return o})).on("mouseover",((o,r)=>{if(!r.parent)return;if(p.busy)return;o.target.setAttribute("fill",P(r._color).darker(.5).toString());Dt(r,c,s,a,n,t,e)})).on("mouseout",((t,e)=>{c.g.selectAll("*").remove();if(!e.parent)return;t.target.setAttribute("fill",e._color)})).on("click",((o,a)=>{if(s.noclickring){return}if(!a.parent){return}if(s.cohort.annotation){if(a.data.lst.length==1){Lt(a.data.lst[0].k4a,s.cohort.annotation[a.data.lst[0].k4a],o.clientX,o.clientY);return}Et(a.data.lst,s.cohort,o.clientX,o.clientY);return}$({mlst:a.data.lst,x:o.clientX,y:o.clientY,tk:t,block:e,pane:true})}));const k=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",(()=>qt(p)));f.shutter.transition().duration(i).attr("height",y*2).on("end",(()=>{f.fore=f.append("g");const r=Math.min(k/(s.label.length*S),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/(o.length.toString().length*S),(y-r/2)*.7));f.fore.append("text").text(o.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;qt(p)})).on("mousedown",(t=>{t.preventDefault();t.stopPropagation();let e=a,s=n,o=t.clientX,r=t.clientY,i=C(document.body);i.on("mousemove",(t=>{p.busy=true;a=e+t.clientX-o;n=s+t.clientY-r;l.attr("transform","translate("+a+","+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",-k/2).attr("width",k).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",-k/2).attr("width",k).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",(o=>{if(s.m2detail){qt(p);$({mlst:[s.m2detail],pane:true,x:o.clientX-u,y:o.clientY-u*2,tk:t,block:e});return}const a=o.target.getBoundingClientRect();qt(p);setTimeout((()=>$({mlst:s.mlst,x:a.left,y:a.top,tk:t,block:e,pane:true})),500)}))}))}))}function qt(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 Dt(t,e,s,o,a,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+a+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=o+(t.outradius+5)*Math.sin(Math.PI*2*d);const u=a-(t.outradius+5)*Math.cos(Math.PI*2*d);e.g.attr("transform","translate("+p+","+u+")");const m=60;let h=null,g=0;if(i&&i.root){h=e.g.append("g");h.append("rect").attr("width",m+4).attr("height",c+4).attr("fill","white").attr("shape-rendering","crispEdges");h.append("rect").attr("x",2).attr("y",2).attr("width",m).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",m*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 x=e.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",l).attr("font-family","Arial");const k=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)":"");x.text(v);k.text(v);Math.max(y.node().getBBox().width,k.node().getBBox().width);if(d<.25){x.attr("y",h?-3-c-f:0);k.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);x.attr("dominant-baseline","hanging").attr("y",f+l);k.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);x.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);k.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",f+l);if(h){h.attr("transform","translate(-"+m+","+(l+f)*2+")")}}else{x.attr("text-anchor","end").attr("y",h?-3-c-f:0);k.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(-"+m+",-"+c+")")}}}function Lt(e,s,o,a){const n=[];for(const t in s){n.push({k:t,v:s[t]})}const r=t({x:o,y:a});r.header.text(e);d(r.body,n)}function Et(e,s,o,a){const n=new Set;for(const t of e){const e=s.annotation[t.k4a];for(const t in e){n.add(t)}}const r=t({x:o,y:a});r.header.text(e.length+" "+s.key4annotation+"s");const i=r.body.append("table");const l=[...n];{const t=i.append("tr");for(const e of l){t.append("td").text(e).style("color","#858585").style("font-size",".7em")}}for(const t of e){const e=i.append("tr").attr("class","sja_tr");const o=s.annotation[t.k4a];for(const t of l){e.append("td").text(o[t]==undefined?"":o[t])}}}async function Ut(t,e,s,o,a,n){if(a.ds){if(a.ds.cohort){let t=false;if(a.ds.cohort.annotation){if(a.ds.cohort.variantsunburst){t=true}}else{t=true}if(t){Bt(a,n,{cx:s,cy:o,mlst:e,label:e[0].mname,cohort:a.ds.cohort});return true}}}return false}const Gt=7;const Vt=t=>{if(!t)return"";if(t.length>25){return t.substr(0,20)+"..."}return t};function Ot(t,e,s){const o=t.numericmode;if(!o.axisheight){o.axisheight=100}t.glider.selectAll("*").remove();delete t.skewer;const a=qe(t,e,s);const n=new Map;for(const t of a){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>=se){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!=F.genomic){const t=new Map;for(const[s,o]of n){if(o[0].chr!=e.usegm.chr){continue}let a=undefined;for(const t of o){if(Number.isFinite(t.aapos))a=t.aapos}if(a==undefined){a=_(o[0].pos,e.usegm).aapos}if(a==undefined){console.error("data item cannot map to aaposition");console.log(o[0]);continue}n.delete(s);if(!t.has(a)){t.set(a,[])}let r=true;for(const s of t.get(a)){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(a).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}r.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x})}}}const t=[];const s=2;for(const[e,o]of n){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);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==F.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;Ht(t,e);t.height_main=t.toppad+o.toplabelheight+o.maxradius+o.axisheight+o.maxradius+t.stem1+t.stem2+t.stem3+o.bottomlabelheight+t.bottompad;if(!t.data||t.data.length==0){Le(t,e);return}}function Tt(t,e){if(e.vcfinfofilter&&e.vcfinfofilter.setidx4mclass!=undefined){const s=e.vcfinfofilter.lst[e.vcfinfofilter.setidx4mclass];const[o,a]=Se(s,t);if(o||a==undefined)return"black";for(const t of a){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(f[t.class]){return f[t.class].color}return"black"}function Ht(t,e){const s=t.numericmode;const f=[];for(const e of t.data){e.x0=e.x;if(e.xoffset!=undefined){e.x=e.x0+e.xoffset}continue}let p=0;if(f.length>0){let t=1;for(let e=0;e<f.length;e++){const s=f[e];const o=[];for(let t=0;t<e;t++){const e=f[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){o.push(e)}}s.y=2;for(const e of o){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}p=Math.max(p,s.y+s.height)}}const u=Math.max(14,e.width/110);s.dotwidth=u;s.maxradius=0;for(const e of t.data){for(const t of e.mlst){t.radius=u/2;s.maxradius=Math.max(t.radius,s.maxradius);t.rimwidth=0;t.aa=e}}const m=Zt(t,e);s.showsamplebar=m&&t.ds&&t.ds.samplebynumericvalue;if(!s.showsamplebar){s.showgenotypebyvalue=m&&t.ds&&t.ds.genotypebynumericvalue}t.genotype2color.legend.style("display",s.showsamplebar||s.showgenotypebyvalue?"block":"none");let h;let g=null;let b=null;let y=0;let x=null;if(s.showsamplebar){h={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 o=t.ds.cohort.annotation[s];if(!o)continue;const a=o[t.ds.samplebynumericvalue.attrkey];if(!Number.isFinite(a))continue;if(g==null){g=a;b=a}else{g=Math.min(g,a);b=Math.max(b,a)}}}}}else if(s.showgenotypebyvalue){h={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(g==null){g=e;b=e}else{g=Math.min(g,e);b=Math.max(b,e)}}e=s.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){if(g==null){g=e;b=e}else{g=Math.min(g,e);b=Math.max(b,e)}}e=s.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){if(g==null){g=e;b=e}else{g=Math.min(g,e);b=Math.max(b,e)}}let o=0,a=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){let e=s.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];if(Number.isFinite(e)){o=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)){a=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{a++}}else{o++}}}y=Math.max(y,o,n,a)}}const e=Math.pow(12/2,2)*Math.PI;const s=e*10;x=R().domain([1,y*.1,y*.3,y*.6,y*.8,y]).range([e,e+(s-e)*.8,e+(s-e)*.85,e+(s-e)*.9,e+(s-e)*.95,s])}else{h=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4numeric];for(const e of t.data){for(const t of e.mlst){t._v=0;const[e,s]=Se(h,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(g==null){g=t._v;b=t._v}else{g=Math.min(t._v,g);b=Math.max(t._v,b)}}}}const k=R().domain([g,b]).range([0,s.axisheight]);for(const e of t.data){for(const t of e.mlst){t._y=k(t._v)}}if(m){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(Vt(s.mname)).attr("font-family",I).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(m){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)<Gt);else{for(const t of e.mlst){t.labattop=true}}}}}else{Qt(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 o=e.labelfontsize+t.labyspace+e.labelfontsize;if(t.label_stratify){o+=t.label_stratify.length*(t.labyspace+e.labelfontsize)}s.toplabelheight=Math.max(s.toplabelheight,o)}t.leftaxis.attr("transform","translate(-"+u/2+","+(s.toplabelheight+s.maxradius)+")").selectAll("*").remove();{const o=R().domain([g,b]).range([s.axisheight,0]);const a=W().scale(o).ticks(4);if(h.numberIsInteger){a.tickFormat(B("d"));if(b-g<3){a.ticks(b-g)}}q({axis:t.leftaxis.call(a),showline:true,fontsize:u});if(g==b){t.leftaxis.append("text").attr("text-anchor","end").attr("font-size",u).attr("dominant-baseline","central").attr("x",e.tkleftlabel_xshift).attr("y",s.axisheight).text(g).attr("fill","black")}{let e=0;t.leftaxis.selectAll("text").each((function(){e=Math.max(e,this.getBBox().width)}));const o=h.name.split(" ");const a=(s.axisheight-o.length*(u+1))/2;let n=0;o.forEach(((s,o)=>{t.leftaxis.append("text").attr("fill","black").attr("font-size",u).attr("dominant-baseline","central").attr("text-anchor","end").attr("y",a+(u+1)*o).attr("x",-(e+15)).text(s).each((function(){n=Math.max(n,this.getBBox().width+15+e)}))}));t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,n)}}const v=t.glider.append("g").attr("transform","translate(0,0)");v.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");v.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=v.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+ee+s.maxradius+s.axisheight+s.maxradius)+")"));if(m){t.skewer2.append("path").attr("class","sja_aa_stem").attr("d",(e=>Wt(e,t))).attr("stroke",(e=>Tt(e.mlst[0],t))).attr("fill",(t=>t.mlst.length==1?"none":"#ededed"))}const w=t.skewer2.selectAll().data((t=>t.mlst)).enter().append("g").attr("class","sja_aa_discg").each((function(t){t.g=this}));if(s.showsamplebar){w.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const o of e.mlst){if(!o.sampledata)continue;const e=C(o.g);for(const a of o.sampledata){const n=a.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=-k(i)-s.maxradius;const c=a.allele2readcount[o.ref];const f=a.allele2readcount[o.alt];if(f)continue;e.append("line").attr("x1",-o.radius).attr("x2",o.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:a.genotype});t.tktip.clear().show(e.clientX,e.clientY);d(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-o.radius-3);e.target.setAttribute("x2",o.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-o.radius);e.target.setAttribute("x2",o.radius)}))}for(const a of o.sampledata){const n=a.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=-k(i)-s.maxradius;const c=a.allele2readcount[o.ref];const f=a.allele2readcount[o.alt];if(!f)continue;e.append("line").attr("x1",-o.radius).attr("x2",o.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:a.genotype});t.tktip.clear().show(e.clientX,e.clientY);d(t.tktip.d,s);e.target.setAttribute("stroke-width",3);e.target.setAttribute("x1",-o.radius-3);e.target.setAttribute("x2",o.radius+3)})).on("mouseout",(e=>{t.tktip.hide();e.target.setAttribute("stroke-width",1);e.target.setAttribute("x1",-o.radius);e.target.setAttribute("x2",o.radius)}))}}}}else if(s.showgenotypebyvalue){w.attr("transform",(t=>"translate("+t.xoff+",0)"));for(const e of t.data){for(const o of e.mlst){let e=0,a=0,n=0;if(t.ds.genotypebynumericvalue.refref.genotypeCountInfokey){e=o.info[t.ds.genotypebynumericvalue.refref.genotypeCountInfokey];a=o.info[t.ds.genotypebynumericvalue.altalt.genotypeCountInfokey];n=o.info[t.ds.genotypebynumericvalue.refalt.genotypeCountInfokey]}else{if(!o.sampledata)continue;for(const t of o.sampledata){if(!t.allele2readcount)continue;if(t.allele2readcount[o.alt]){if(t.allele2readcount[o.ref]){n++}else{a++}}else{e++}}}const r=C(o.g);if(e){const a=o.info[t.ds.genotypebynumericvalue.refref.infokey];if(a!=undefined){const n=-k(a)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(x(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:o.chr+":"+(o.pos+1)+" "+o.ref+">"+o.alt},{k:"Genotype",v:"Ref/Ref"},{k:"#sample",v:e},{k:t.ds.genotypebynumericvalue.axislabel,v:a}];d(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(n){const e=o.info[t.ds.genotypebynumericvalue.refalt.infokey];if(e!=undefined){const a=-k(e)-s.maxradius;r.append("circle").attr("cy",a).attr("r",Math.sqrt(x(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 a=[{k:"Variant",v:o.chr+":"+(o.pos+1)+" "+o.ref+">"+o.alt},{k:"Genotype",v:"Ref/Alt"},{k:"#sample",v:n},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];d(t.tktip.d,a)})).on("mouseout",(()=>{t.tktip.hide()}))}}if(a){const e=o.info[t.ds.genotypebynumericvalue.altalt.infokey];if(e!=undefined){const n=-k(e)-s.maxradius;r.append("circle").attr("cy",n).attr("r",Math.sqrt(x(a))/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:o.chr+":"+(o.pos+1)+" "+o.ref+">"+o.alt},{k:"Genotype",v:"Alt/Alt"},{k:"#sample",v:a},{k:t.ds.genotypebynumericvalue.axislabel,v:e}];d(t.tktip.d,n)})).on("mouseout",(()=>{t.tktip.hide()}))}}}}}else{w.attr("transform",(t=>"translate("+t.xoff+","+(t._y+s.maxradius)*-1+")"));const f=w.append("circle");f.filter((t=>t.dt==r||t.dt==o||t.dt==n||t.dt==a)).attr("fill","white").attr("stroke-width",2).attr("stroke",(e=>Tt(e,t))).attr("r",(t=>t.radius-2));f.filter((t=>t.dt==c||t.dt==l||t.dt==i)).attr("fill",(e=>Tt(e,t))).attr("stroke","white").attr("r",(t=>t.radius-.5));w.filter((t=>t.dt==i||t.dt==l)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>Q()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));w.append("circle").attr("r",(t=>t.radius-.5)).attr("stroke",(e=>Tt(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)=>{Xt(s,t);if(t.disc_mouseover){t.disc_mouseover(s,e.target)}else{je(t,[s],true)}})).on("mouseout",((e,s)=>{Yt(s,t);if(t.disc_mouseout){t.disc_mouseout(s)}else{je(t,[s],false)}})).on("click",((s,o)=>{const a=s.target.getBoundingClientRect();Jt(o,a,t,e)}))}const _=w.filter((t=>t.labattop||t.labatbottom)).append("text").each((function(t){t.textlabel=this})).text((t=>Vt(t.mname))).attr("font-family",I).attr("font-size",(t=>{t._labfontsize=Math.max(12,t.radius*1.2);return t._labfontsize})).attr("fill",(e=>Tt(e,t))).attr("x",(t=>s.showsamplebar||s.showgenotypebyvalue?s.axisheight+s.maxradius+4:t.radius+t.rimwidth+ee)).attr("y",(t=>t._labfontsize*te)).attr("class","sja_aa_disclabel").attr("transform",(t=>"rotate("+(t.labattop?"-":"")+"90)")).on("mousedown",(t=>{t.stopPropagation()})).on("mouseover",((e,s)=>Xt(s,t))).on("mouseout",((e,s)=>Yt(s,t))).on("click",((s,o)=>{Jt(o,{left:s.clientX,top:s.clientY},t,e)}));if(t.hlaachange){_.filter((e=>t.hlaachange.has(e.mname))).classed("sja_pulse",true)}}function Xt(t,e){if(t.textlabel){C(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 o=10;const a=4;const n=t._labfontsize||13;const r=Tt(t,e);let i=0,l=false;e.pica.g.append("text").attr("font-size",n).attr("font-family",I).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",I).text(t.mname).each((function(){i=Math.max(i,this.getBBox().width)})).remove()}const c=a*2+i;let f,d,p=true;if(c+o>t.aa.x+t.xoff){p=false;d=t.radius+t.rimwidth;f=d+o}else{d=-t.radius-t.rimwidth-o;f=d-c}e.pica.g.append("rect").attr("x",f-2).attr("y",-2-a-(l?n:n/2)).attr("width",4+c).attr("height",4+a*2+n*(l?2:1)).attr("fill","white");e.pica.g.append("line").attr("x1",d).attr("x2",d+o).attr("stroke","white").attr("stroke-width",3).attr("shape-rendering","crispEdges");e.pica.g.append("line").attr("x1",d).attr("x2",d+o).attr("stroke",r).attr("shape-rendering","crispEdges");e.pica.g.append("rect").attr("x",f).attr("y",-a-(l?n:n/2)).attr("width",c).attr("height",a*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",I).attr("x",p?d-a:f+a).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",I).attr("x",p?d-a:f+a).attr("y",l?n/2:0).attr("fill",r).attr("dominant-baseline","central")}}function Yt(t,e){if(t.textlabel){C(t.textlabel).attr("font-size",t._labfontsize)}e.pica.g.selectAll("*").remove()}async function Jt(t,e,s,o){if(t.dt==i||t.dt==l){$({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:o,svgraph:true});return}if(t.occurrence>1){if(await Ut(t.occurrence,[t],t.aa.x+t.xoff,s.numericmode.toplabelheight+s.numericmode.axisheight-t._y,s,o))return}$({mlst:[t],pane:true,x:e.left-10,y:e.top-10,tk:s,block:o})}function Qt(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 o=false;for(let a=0;a<t;a++){const t=e[a];if(Math.abs(s.x-t.x)<(s.w+t.w)/2-2){o=true;break}}if(!o){s.m.labattop=true}}for(let t=e.length-1;t>=0;t--){const s=e[t];if(s.m.labattop)continue;let o=false;for(let a=e.length-1;a>t;a--){const t=e[a];if(t.m.labatbottom&&Math.abs(t.x-s.x)<(t.w+s.w)/2-2){o=true;break}}if(!o){s.m.labatbottom=true}}}function Wt(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 Zt(t,e){t.numericmode;const s=100;let o=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 o=e.mlst[0];const a=e.mlst[e.mlst.length-1];e.fixedgew=o.radius+o.rimwidth+a.radius+a.rimwidth}o+=e.width}if(o<=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}}Kt(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 Kt(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 o=0,a=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}o+=Math.abs(s.x-s.x0-s.stemw/2);s.x++;a+=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(a<=o);else{for(let o=s;o<t.length;o++){if(t[o].x0>e){break}t[o].x--}break}}}}const $t="Not annotated";const te=.3;const ee=1;const se=4;const oe=0;const ae=1;async function ne(t,e){try{if(!t)throw"no tk";if(!t.ds)throw"no ds";if(!e.gmmode||e.gmmode==F.genomic){if(e.viewrangeabovelimit(t.viewrangeupperlimit)){t.mlst=[];t.viewrangeupperlimit_above=true;fe(t,e);return}}delete t.viewrangeupperlimit_above;if(t.isvcf){e.tkcloakon(t);Rt(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 ie(t,e)}await le(t,e);re(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 re(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 o={label:t.ds.label+" - "+t.legacyDsFilter.value,bulkdata:{},parentname:t.ds.label,iscustom:true,sampleselectable:t.ds.sampleselectable};o.bulkdata[e.usegm.name.toUpperCase()]=s;e.addchilddsnoload(o);const a=e.block_addtk_template({type:D.ds,ds:o});ne(a,e)}async function ie(t,e){if(e.usegm){if(t.__handlesays){t.__handlesays.style("background-color","#ddd").style("color","black")}let s=[];if(t.ds.bulkdata){const o=t.ds.bulkdata[e.usegm.name.toUpperCase()];if(o){s=[...o]}}if(t.ds.mlst){for(const o of t.ds.mlst){if(o.gene.toUpperCase()==e.usegm.name.toUpperCase()){s.push(o)}}}if(s.length){const o=[];for(const t of s){if(t.isoform&&t.isoform==e.usegm.isoform){o.push(t)}}if(o.length){ce([{lst:o}],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 o=await w("dbdata",{method:"POST",body:JSON.stringify(s)});if(o.error)throw o.error;if(!t.eplst)t.eplst=[];if(t.ds.dbexpression.tidy)t.ds.dbexpression.tidy(o.rows);const a={data:o.rows,expp:t.ds.dbexpression.config,block:e,genome:e.genome,genename:e.usegm.name,dsname:t.ds.label};const n=await import("./ep-a86b185a.js");t.eplst.push(new n.default(a))}}else{const s=[];const f=new Map;for(const t of e.rglst){if(!f.has(t.chr)){f.set(t.chr,[])}f.get(t.chr).push(t)}const d=[];if(t.ds.bulkdata){for(const e in t.ds.bulkdata){d.push(...t.ds.bulkdata[e])}}if(t.ds.mlst){d.push(...t.ds.mlst)}for(const t of d){switch(t.dt){case c:case r:case o:case n:case a:if(!t.pos){break}if(!t.chr&&!f.has(t.chr)){break}for(const e of f.get(t.chr)){if(t.pos>=e.start&&t.pos<e.stop){s.push(t);break}}break;case l:case i:if(!t.pairlst){break}let e=false;for(const s of t.pairlst){if(s.a.chr&&f.has(s.a.chr)){const t=s.a.position||s.a.pos;if(t){for(const o of f.get(s.a.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}if(s.b.chr&&f.has(s.b.chr)){const t=s.b.position||s.b.pos;if(t){for(const o of f.get(s.b.chr)){if(t>=o.start&&t<o.stop){e=true;break}}}}}if(e){s.push(t)}break}}if(s.length){ce([{lst:s}],e,t)}}}async function le(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 o=await w("dsdata",{method:"POST",body:JSON.stringify(s)});if(t.__handlesays){t.__handlesays.text(t.ds.label).style("background-color","#ddd").style("color","black")}if(o.error)throw o.error;ce(o.data,e,t)}function ce(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 o=e.tklst[s];if(o.type==D.usegm&&!o.hidden){t=s;break}}let o=true;if(t==-1){o=true;e.tklst.push(s)}else{let a=false;for(let s=0;s<t;s++){const t=e.tklst[s];if(!t.hidden&&t.type==D.ds){a=true;break}}if(a){o=false;e.tklst.splice(t+1,0,s)}else{o=true;if(t==0){e.tklst.unshift(s)}else{e.tklst.splice(t-1,0,s)}}}if(s.aboveprotein==undefined){s.aboveprotein=o}s.eplst=[]}s.mlst=[];const o=[];for(const a of t){if(a.isgeneexpression){o.push(Me(a,s,e));continue}if(a.vcfid){It(a,s,e);continue}if(a.lst){Ae(a.lst,s,e);Ee(a,s);continue}e.error("unknown data/query type from "+s.ds.label);return}Promise.all(o).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")}}}));fe(s,e)}function fe(t,e){e.tkcloakoff(t,{});de(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 L){if(L[t].hidden){s.add(t)}}Pe(t);if(t.numericmode){Ot(t,e,s)}else{pe(t,e,s)}e.setllabel(t);e.block_setheight();e.tkchangeaffectlegend(t);Ne(t,e);Re(t,e);{const s=Ie(t,e);if(s)console.log("showlegend_sampleattribute: "+s)}}function de(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,o]=Se(e,s);if(t||o==undefined){s.occurrence=1}else{s.occurrence=o[0]}}}else{for(const e of t.mlst){e.occurrence=1}}}function pe(t,e,s){t.leftaxis.selectAll("*").remove();if(e.usegm&&e.gmmode!=F.genomic&&e.pannedpx!=undefined&&t.skewer){De(t,e);t.skewer.attr("transform",(t=>"translate("+t.x+","+t.y+")"));ye(t,e)}else{t.glider.selectAll("*").remove();qe(t,e,s);const o=new Map;for(const e of t.mlst){if(e.__x==undefined){continue}if(!o.has(e.__x)){o.set(e.__x,[])}o.get(e.__x).push(e)}const a=[];if(e.exonsf>=se){for(const[t,e]of o){a.push({chr:e[0].chr,pos:e[0].pos,mlst:e,x:t,groups:ue(e)})}}else{if(e.usegm&&e.usegm.coding&&e.gmmode!=F.genomic){const t=new Map;for(const[s,a]of o){if(a[0].chr!=e.usegm.chr){continue}let n=undefined;for(const t of a){if(Number.isFinite(t.aapos))n=t.aapos}if(n==undefined){n=_(a[0].pos,e.usegm).aapos}if(n==undefined){console.error("data item cannot map to aaposition");console.log(a[0]);continue}o.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-a[0].__x)<=e.exonsf*3){for(const t of a){s.push(t)}r=false;break}}if(r){t.get(n).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}a.push({chr:t[0].chr,pos:e.pos,mlst:t,x:t[0].__x,groups:ue(t)})}}}const t=[];const s=2;for(const[e,a]of o){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);a.push({isbin:true,chr:e[0].chr,pos:e[0].pos,mlst:e,x:t/e.length,groups:ue(e)})}}a.sort(((t,e)=>t.x-e.x));if(t.data&&e.pannedpx!=undefined&&(!e.usegm||e.gmmode==F.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 a){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=a;for(const e of t.data){e.occurrence=e.groups.reduce(((t,e)=>t+e.occurrence),0)}me(t,e);t.height_main=t.toppad+t.maxskewerheight+t.stem1+t.stem2+t.stem3+t.bottompad}if(!t.data||t.data.length==0){Le(t,e);return}if(t.hlaachange||t.hlvariants){const s=[];const o=[];if(t.hlaachange){for(const e of t.data){let a=false;for(const s of e.groups){if(t.hlaachange.has(s.mlst[0].mname)){a=true;t.hlaachange.delete(s.mlst[0].mname);break}}if(a){o.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{ze(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 a of t.data){let t=false;for(const s of a.groups){if(t){break}for(const o of s.mlst){if(e[o.chr+"."+o.pos+"."+o.ref+"."+o.alt]){t=true;break}}}if(t){o.push(a)}else{s.push(a)}}}_e(s,t);xe(o,t,e)}else{ye(t,e)}}function ue(t,e){const s=new Map;for(const e of t){switch(e.dt){case c: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 l:case i: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 r:case o:case n:case a: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 f=[];for(const[t,e]of s){switch(t){case c:for(const s of e.values()){for(const e of s.values()){f.push({dt:t,mlst:e})}}break;case l:case i:for(const s of e.values()){for(const e of s.use5.values()){f.push({dt:t,useNterm:true,mlst:e})}for(const e of s.use3.values()){f.push({dt:t,useNterm:false,mlst:e})}}break;case r:case o:case n:case a:f.push({dt:t,mlst:e})}}for(const t of f){let e=0,s=0;for(const o of t.mlst){if(o.isrim1)e++;else if(o.isrim2)s++}t.rim1count=e;t.rim2count=s;t.occurrence=t.mlst.reduce(((t,e)=>t+e.occurrence),0)}f.sort(((t,e)=>e.occurrence-t.occurrence));return f}function me(t,e){delete t.skewer2;const s=e=>{if(t.vcfinfofilter&&t.vcfinfofilter.setidx4mclass!=undefined){const s=t.vcfinfofilter.lst[t.vcfinfofilter.setidx4mclass];const[o,a]=Se(s,e);if(o||a==undefined)return"black";for(const t of a){if(s.categories[t]){return s.categories[t].color}else{return"black"}}}if(f[e.class]){return f[e.class].color}return"black"};const d=[];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 a=null;if(t.dt==r){a=t.mlst[0].rnaduplength;for(const e of t.mlst){a=Math.max(a,e.rnaduplength)}}else if(t.dt==o){a=t.mlst[0].rnadellength;for(const e of t.mlst){a=Math.max(a,e.rnadellength)}}else{continue}if(!Number.isFinite(a)||a<0){console.log("no rnaspan for stack bar from itd/del");console.log(t.mlst);continue}let n=null;if(e.usegm){const o=t.mlst[0].rnapos;const r=E(o+a,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;d.push(t.stackbar)}}let p=0;if(d.length>0){let t=1;for(let e=0;e<d.length;e++){const s=d[e];const o=[];for(let t=0;t<e;t++){const e=d[t];if(Math.max(s.aa,e.aa)<Math.min(s.pxspan+s.aa,e.pxspan+e.aa)){o.push(e)}}s.y=2;for(const e of o){if(Math.max(s.y,e.y)<Math.min(s.y+s.height,e.y+e.height)){s.y=e.y+e.height+t}}p=Math.max(p,s.y+s.height)}}const u=Math.max(14,e.width/110);let m=0;for(const e of t.data){for(const t of e.groups){m=Math.max(m,t.occurrence)}}let h=0;const g=Math.pow(u/2,2)*Math.PI;if(m<=10)h=g*m*.9;else if(m<=100)h=g*10;else if(m<=1e3)h=g*14;else h=g*20;const b=R().domain([1,m*.5,m*.6,m*.7,m*.8,m]).range([g,g+(h-g)*.8,g+(h-g)*.85,g+(h-g)*.9,g+(h-g)*.95,h]);let y=u/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=oe}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=u/2}else{const e=t.occurrence.toString().length;t.radius=Math.max(Math.sqrt(b(t.occurrence)/Math.PI),e*5)}e.maxradius=Math.max(e.maxradius,t.radius);y=Math.max(y,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 x=t.skewer.selectAll().data((t=>t.groups)).enter().append("g").attr("transform",(e=>"translate(0,"+(e.aa.showmode==oe?0:e.yoffset*(t.aboveprotein?-1:1))+")")).attr("class","sja_aa_discg").each((function(t){t.g=this}));const k=x.append("circle");k.filter((t=>t.dt==r||t.dt==o||t.dt==n||t.dt==a)).attr("fill","white").attr("stroke-width",2).attr("stroke",(t=>s(t.mlst[0]))).attr("r",(t=>t.radius-2));k.filter((t=>t.dt==c||t.dt==l||t.dt==i)).attr("fill",(t=>s(t.mlst[0]))).attr("stroke","white").attr("r",(t=>t.radius-.5));x.filter((t=>t.dt==i||t.dt==l)).append("path").attr("fill","white").attr("stroke","none").attr("d",(t=>Q()({innerRadius:0,outerRadius:t.radius-2,startAngle:t.useNterm?0:Math.PI,endAngle:t.useNterm?Math.PI:Math.PI*2})));const v=x.filter((t=>t.occurrence>1)).append("text").text((t=>t.occurrence)).attr("font-family",I).attr("class","sja_aa_discnum").attr("fill-opacity",(t=>t.aa.showmode==oe?0:1)).attr("stroke-opacity",(t=>t.aa.showmode==oe?0:1)).attr("text-anchor","middle").each((t=>{const e=t.radius*1.5;t.discnumfontsize=Math.min(e/(t.occurrence.toString().length*S),e)})).attr("font-size",(t=>t.discnumfontsize)).attr("y",(t=>t.discnumfontsize*te));v.filter((t=>t.dt==c)).attr("fill","white");v.filter((t=>t.dt==l||t.dt==i)).attr("stroke",(t=>s(t.mlst[0]))).attr("stroke-width",.8).attr("font-weight","bold").attr("fill","white");v.filter((t=>t.dt==r||t.dt==o||t.dt==a||t.dt==n)).attr("fill",(t=>s(t.mlst[0])));const w=x.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*te)).attr("font-family",I).classed("sja_aa_disclabel",true).attr("fill-opacity",(t=>t.aa.showmode==oe?0:1)).attr("transform","scale(1) rotate(0)").on("mousedown",(t=>{t.stopPropagation()})).on("click",((s,o)=>{_e([o.aa],t);ke(t,e);if(e.debugmode){console.log(o.aa)}}));if(t.hlaachange){w.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 o of e.groups){t=Math.max(t,o.radius+o.rimwidth);s=Math.max(s,o.radius+o.rimwidth+ee+o._label_width)}e.width=t+s}x.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{je(t,s.mlst,true)}})).on("mouseout",((e,s)=>{if(t.disc_mouseout){t.disc_mouseout(s)}else{je(t,s.mlst,false)}})).on("click",(async(s,o)=>{const a=s.target.getBoundingClientRect();if(o.dt==i||o.dt==l){$({mlst:o.mlst,pane:true,x:a.left-10,y:a.top-10,tk:t,block:e,svgraph:true});return}if(o.occurrence==1){$({mlst:o.mlst,pane:true,x:a.left-10,y:a.top-10,tk:t,block:e});return}if(await Ut(o.occurrence,o.mlst,o.aa.x,ge(o,t)+o.yoffset*(t.aboveprotein?-1:1),t,e)){return}$({mlst:o.mlst,pane:true,x:a.left-10,y:a.top-10,tk:t,block:e})}));const _=Q().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}));x.append("path").attr("d",_).attr("fill",(t=>s(t.mlst[0]))).attr("class","sja_aa_discrim").attr("fill-opacity",0);const j=Q().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));x.filter((t=>t.rim2count>0)).append("path").attr("d",j).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 o of t.data){if(o.x-o.maxradius-o.maxrimwidth<s){e++}s=Math.max(s,o.x+o.width-o.maxradius-o.maxrimwidth)}t.stem1=e==0?0:u;t.stem2=R().domain([0,1,t.data.length]).range([0,u,u*3])(e)}const M=u*.7;let A=0;for(const e of t.data){for(const t of e.groups){A=Math.max(A,t.occurrence)}}t.stem3=Math.max(p+2,M+u*Math.min(5,A));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==oe?1:0)+")")).on("mouseover",((e,o)=>{je(t,o.mlst,true);const a=t.aboveprotein;let n=0;let r=0;const i=5;const l=a?7:14;for(const e of o.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",a?-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(o.groups).enter().append("g").attr("transform",((t,e)=>{n+=t.pica_fontsize+1;return"translate("+i+","+n*(a?-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",a?"hanging":"auto");const d=o.groups[0].pica_mlabelwidth;t.pica.x=o.x-i-d/2;t.pica.y=o.y+(a?-1:1)*(o.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",a?"hanging":"auto").attr("fill","#9e9e9e");const p=t.pica.g.append("g").attr("transform","translate("+(i+d/2)+","+(a?1:-1)+")");p.append("line").attr("y2",(a?1:-1)*l).attr("stroke","#858585").attr("shape-rendering","crispEdges");p.append("line").attr("x1",-1).attr("x2",-1).attr("y2",(a?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges");p.append("line").attr("x1",1).attr("x2",1).attr("y2",(a?1:-1)*l).attr("stroke","white").attr("shape-rendering","crispEdges")})).on("mouseout",((e,s)=>{t.pica.g.selectAll("*").remove();je(t,s.mlst,false)})).on("click",((s,o)=>{t.pica.g.selectAll("*").remove();xe([o],t,e)}));let z=0;for(const e of t.data){z=Math.max(z,e.occurrence)}const N=R().domain([1,z]).range([M,t.stem3-y]);t.skewer.attr("transform",(e=>{e.foldyoffset=N(e.occurrence);e.y=ge(e,t);return"translate("+e.x+","+e.y+")"}));if(d.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 n=s(a.grp.mlst[0]);C(e.target).attr("stroke",n);const i=t.pica;let l="wrong label";let c="wrong label, ";switch(a.grp.mlst[0].dt){case r:l=f[a.grp.mlst[0].class].desc;c=Math.ceil(a.grp.mlst[0].rnaduplength/3)+" aa, ";break;case o:l=f[a.grp.mlst[0].class].label;c=Math.ceil(a.grp.mlst[0].rnadellength/3)+" aa, ";break}if(a.grp.occurrence==1){const t=a.grp.mlst[0];if(t.sample){c+=t.sample}else if(t.patient){c+=t.patient}else{c+="1 sample"}}else{c+=a.grp.occurrence+" samples"}const d=14,p=10,u=2,m=4;let h=0;i.g.append("text").text(l).attr("font-size",d).attr("font-family",I).each((function(){h=this.getBBox().width})).remove();i.g.append("text").text(c).attr("font-size",p).attr("font-family",I).each((function(){h=Math.max(h,this.getBBox().width)})).remove();const g=u*3+d+p;i.x=a.grp.aa.x0+3;i.y=t.aboveprotein?t.height_main-t.toppad-t.bottompad-a.y-a.height-3-g:a.y+a.height+3;i.g.attr("transform","translate("+i.x+","+i.y+")");i.g.append("rect").attr("width",h+m*2).attr("height",g).attr("stroke",n).attr("stroke-width",1).attr("shape-rendering","crispEdges").attr("fill","white").attr("fill-opacity",.8);i.g.append("text").text(l).attr("x",m).attr("y",u+d/2).attr("dominant-baseline","middle").attr("font-size",d).attr("font-family",I).attr("fill",n);i.g.append("text").text(c).attr("x",m).attr("y",u*2+d+p/2).attr("dominant-baseline","middle").attr("font-size",p).attr("font-family",I).attr("fill","#858585")})).on("mouseout",((e,s)=>{C(e.target).attr("stroke","none");t.pica.g.selectAll("*").remove()})).on("click",((s,o)=>{$({mlst:o.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=>be(e,t))).attr("stroke",(t=>s(t.groups[0].mlst[0]))).attr("fill","none");const P=t.skewer.filter((t=>t.groups.length>1));P.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));P.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*S))})).attr("font-size",(t=>t.ssk_fontsize));P.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 o=C(e.target.parentNode);o.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",1);o.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",1).attr("stroke-opacity",1);o.select(".sja_aa_ssk_text").transition().attr("fill-opacity",1);je(t,s.mlst,true)})).on("mouseout",(function(e,s){const o=C(e.target.parentNode);o.selectAll(".sja_aa_disckick").transition().attr("stroke-opacity",0);o.select(".sja_aa_ssk_bg").transition().attr("fill-opacity",0).attr("stroke-opacity",0);o.select(".sja_aa_ssk_text").transition().attr("fill-opacity",0);je(t,s.mlst,false)})).on("click",(async(s,o)=>{const a=s.target.getBoundingClientRect();if(o.occurrence>1){if(await Ut(o.occurrence,o.mlst,o.x,o.y+(t.aboveprotein?1:-1)*t.stem1/2,t,e))return}$({mlst:o.mlst,pane:true,x:a.left-10,y:a.top-10,tk:t,block:e})}))}function he(t){t.aboveprotein=!t.aboveprotein;if(t.numericmode){return}const e=t.aboveprotein;const s=1e3;const o=t.skewer.filter((t=>t.hasstackbar));o.selectAll(".sja_aa_stackbar_g").transition().duration(s).attr("transform",(s=>{const o=s.grp.aa;return"translate("+(o.showmode==oe?0:o.x0-o.x)+","+(e?1:-1)*(o.showmode==oe?t.stem1-s.y:t.stem1+t.stem2+t.stem3-s.y)+")"}));o.filter((t=>t.showmode==ae)).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=ge(e,t);return"translate("+e.x+","+e.y+")"}));t.skewer.selectAll(".sja_aa_stem").transition().duration(s).attr("d",(e=>be(e,t)));t.skewer.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>{t.y=(e?-1:1)*(t.aa.showmode==oe?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==ae&&t.groups.length==1)).selectAll(".sja_aa_disclabel").transition().duration(s).attr("transform",(t=>"scale(1) rotate("+(t.aa.slabelrotate?(e?"-":"")+"90":"0")+")"))}function ge(t,e){if(e.aboveprotein){if(t.showmode==oe){return e.maxskewerheight+e.stem1+e.stem2+e.stem3-t.foldyoffset}return e.maxskewerheight}if(t.showmode==oe)return t.foldyoffset;return e.stem1+e.stem2+e.stem3}function be(t,e){if(e.aboveprotein){if(t.showmode==oe){return"M0,0v0l0,0v"+t.foldyoffset}return"M0,0v"+e.stem1+"l"+(t.x0-t.x)+","+e.stem2+"v"+e.stem3}if(t.showmode==oe){return"M0,0v0l0,0v-"+t.foldyoffset}return"M0,0v-"+e.stem1+"l"+(t.x0-t.x)+",-"+e.stem2+"v-"+e.stem3}function ye(t,e){if(t.data.length==0){return}const s=0;const o=e.width;let a=0;const n=[];const r=[];for(const e of t.data){if(e.x0<s||e.x0>o){delete e.xoffset;r.push(e)}else{a+=e.slabelrotate?(e.groups[0].radius+e.groups[0].rimwidth)*2:e.width;n.push(e)}}_e(r,t);let i=[];const l=[];if(a<o-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-o)-Math.abs(e.x0*2-s-o)}else{return e.groups.length-t.groups.length}}return e.occurrence-t.occurrence}));let t=0;let e=(o-s)*.8;let a=false;for(const s of n){if(a){delete s.xoffset;l.push(s);s.showmode=oe}else{if(t+s.width<e){i.push(s);t+=s.width}else{a=true;delete s.xoffset;l.push(s);s.showmode=oe}}}}_e(l,t);xe(i,t,e)}function xe(t,e,s){const o=1e3;const a=e.aboveprotein;const n=new Set;const r=new Set;let i=false;for(const s of t){if(s.showmode==ae){n.add(s.x0)}else{s.showmode=ae;r.add(s.x0);i=true;s.y=ge(s,e)}}if(i){const t=e.skewer.filter((t=>r.has(t.x0)));t.transition().duration(o).attr("transform",(t=>"translate("+t.x+","+t.y+")"));t.selectAll(".sja_aa_discg").transition().duration(o).attr("transform",(t=>{t.y=t.yoffset*(a?-1:1);return"translate(0,"+t.y+")"}));setTimeout((function(){t.selectAll(".sja_aa_disckick").attr("transform","scale(1)")}),o);t.selectAll(".sja_aa_discnum").transition().duration(o).attr("fill-opacity",1).attr("stroke-opacity",1);t.filter((t=>t.groups.length>1)).selectAll(".sja_aa_disclabel").transition().duration(o).attr("fill-opacity",1).attr("transform","scale(1)");t.selectAll(".sja_aa_discrim").transition().duration(o).attr("fill-opacity",1).attr("stroke-opacity",1);t.selectAll(".sja_aa_ssk_kick").attr("transform","scale(1)").attr("y",a?0:-e.stem1);t.selectAll(".sja_aa_ssk_bg").attr("transform","scale(1)").attr("y",a?0:-e.stem1);t.selectAll(".sja_aa_ssk_text").attr("transform","scale(1)").attr("y",(a?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,"+(a?1:-1)*(e.stem1+e.stem2+e.stem3-t.y)+")"));let n=0;t.selectAll(".sja_aa_stem").transition().duration(o).attr("d",(t=>be(t,e))).each((()=>++n)).on("end",(()=>{if(! --n){ke(e,s)}}))}else{ke(e,s)}}function ke(t,e){const s=1e3;const o=t.aboveprotein;const a=[];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==ae){e.x=e.x0;a.push(e);n.add(e.x0)}}if(a.length==0){return}ve(a,t,e);for(const t of a){t.xoffset=t.x-t.x0}for(let e=0;e<a.length;e++){const s=a[e];if(s.groups.length>1)continue;const o=s.groups[0];if(t.slabel_forcerotate){s.slabelrotate=true}else{const t=a[e+1];const n=t?t.x-t.maxradius-t.maxrimwidth:i;s.slabelrotate=n-s.x-o.radius-o.rimwidth-1<s.slabelwidth}s.width=(o.radius+o.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=>be(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?(o?"-":"")+"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)+","+(o?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=>o?-t.height:0))}function ve(t,e,s){const o=0;const a=s.width;let n=o;let r=false;for(const e of t){if(e.x0<o||e.x0>a)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>a){r=true}n=Math.max(n,t+e.width)}if(!r){return false}n=o;for(const e of t){if(e.x0<o||e.x0>a)continue;e.x=n+e.maxradius+e.maxrimwidth;n+=e.width}we(t,s.width)}function we(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 o=0,a=0;for(let n=s;n<t.length;n++){const s=t[n];if(s.x0>e){return}o+=Math.abs(s.x-s.x0);s.x++;a+=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(a<=o);else{for(let o=s;o<t.length;o++){if(t[o].x0>e){break}t[o].x--}break}}}}function _e(t,e){if(t.length==0)return;const s=1e3;const o=e.aboveprotein;const a=new Set;for(const s of t){s.x=s.x0;a.add(s.x0);s.showmode=oe;s.y=ge(s,e)}const n=e.skewer.filter((t=>a.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=>be(t,e)));n.selectAll(".sja_aa_discg").transition().duration(s).attr("transform",(t=>"translate(0,"+(o?"-":"")+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,"+(o?1:-1)*(e.stem1-t.y)+")"));r.selectAll(".sja_aa_stackbar_rect").transition().duration(s).attr("width",0)}function je(t,e,s){if(!t.eplst)return;for(const o of t.eplst){o.may_hl(e,s)}}function Me(t,e,s){if(!t.config){s.error("config missing for expression data in "+e.ds.label);return}if(t.config.maf){try{t.config.maf.get=new Function(...t.config.maf.get)}catch(t){s.error("invalid javascript for config.maf.get of "+e.ds.label);return}}const o=t.config;if(o.usecohort){o.cohort=e.ds.cohort}const a={data:t.lst,expp:o,block:s,genome:s.genome,genename:s.usegm.name,dsname:e.ds.label};if(s.samplecart){if(e.ds.sampleselectable){a.samplecart=s.samplecart}}return import("./ep-a86b185a.js").then((t=>{e.eplst.push(new t.default(a))}))}function Ae(t,e,s){for(const f of t){switch(f.dt){case c:if(s.usegm){const t=_(f.pos,s.usegm);f.rnapos=t.rnapos;f.aapos=t.aapos}e.mlst.push(f);break;case l:case i:if(!f.pairlst){console.error("pairlst missing from sv/fusion");break}if(s.usegm&&f.dt==l){if(f.pairlst.length==1){const t=f.pairlst[0].a;const e=f.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="-";f.pairlst[0].a=e;f.pairlst[0].b=t}}}}}if(s.usegm&&s.gmmode!=F.genomic){f.isoform=s.usegm.isoform;let t=true;for(let e=0;e<f.pairlst.length;e++){const o=f.pairlst[e];if(s.usegm.isoform==(o.a.isoform||o.a.name)){f.useNterm=e==0;f.chr=s.usegm.chr;f.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{f.pos=U(o.a.codon,s.usegm);o.a.position=f.pos}}else{f.pos=E(o.a.rnaposition-1,s.usegm);if(f.pos==null){console.error("failed to convert rnaposition to genomic position: "+o.a.rnaposition);break}o.a.position=f.pos}}else{f.pos=o.a.position}const a=_(f.pos,s.usegm);f.rnapos=a.rnapos;f.aapos=a.aapos;if(o.a.codon){f.aapos=o.a.codon}f.mname=o.b.name;t=false;break}if(s.usegm.isoform==(o.b.isoform||o.b.name)){f.useNterm=false;f.chr=s.usegm.chr;f.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{f.pos=U(o.b.codon,s.usegm);o.b.position=f.pos}}else{f.pos=E(o.b.rnaposition-1,s.usegm);if(f.pos==null){console.error("failed to convert rnaposition to genomic");break}o.b.position=f.pos}}else{f.pos=o.b.position}const e=_(f.pos,s.usegm);f.rnapos=e.rnapos;f.aapos=e.aapos;if(o.b.codon){f.aapos=o.b.codon}f.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(f)}}else{for(const t of f.pairlst){let o=false,a=false;for(let e=s.startidx;e<=s.stopidx;e++){const n=s.rglst[e];if(t.a.chr==n.chr&&t.a.position>=n.start&&t.a.position<=n.stop){o=true}if(t.b.chr==n.chr&&t.b.position>=n.start&&t.b.position<=n.stop){a=true}}if(o){const s=G(f);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(a){const s=G(f);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 r:case o:if(f.chrpos1&&f.chrpos2){let t=_(f.chrpos1,s.usegm);const e=t.rnapos;t=_(f.chrpos2,s.usegm);const a=t.rnapos;if(e<a){f.pos=f.chrpos1}else{f.pos=f.chrpos2}delete f.chrpos1;delete f.chrpos2;const n=Math.abs(e-a);if(f.dt==r){f.rnaduplength=n}else if(f.dt==o){f.rnadellength=n}}if(f.position){f.pos=f.position;delete f.position}if(!f.pos){if(f.dt==r){if(f.b){if(f.b.position){f.pos=f.b.position;f.chr=f.b.chr}}}}if(!f.pos){if(f.rnaposition){if(s.usegm){f.pos=E(f.rnaposition-1,s.usegm);f.chr=s.usegm.chr;if(f.pos==null){console.error("failed to convert rnaposition to genomic position: "+f.rnaposition);break}}}else if(f.aapos);}if(!f.pos){console.error("no genomic pos for itd");break}if(s.usegm){const t=_(f.pos,s.usegm);if(f.rnaposition){f.rnapos=f.rnaposition}else{f.rnapos=t.rnapos}f.aapos=t.aapos}if(f.dt==r){if(!f.rnaduplength){console.error("itd has no rnaduplength");f.rnaduplength=1}}else{if(!f.rnadellength){console.error("deletion has no rnadellength");f.rnadellength=1}}e.mlst.push(f);break;case n:case a:if(f.position){f.pos=f.position;delete f.position}if(!f.pos){if(f.rnaposition){if(s.usegm){f.pos=E(f.rnaposition-1,s.usegm);f.chr=s.usegm.chr;if(f.pos==null){console.error("failed to convert rnaposition to genomic position: "+f.rnaposition);break}}}else if(f.aapos);}if(!f.pos){console.error("no genomic pos for truncation");break}if(s.usegm){const t=_(f.pos,s.usegm);if(f.rnaposition){f.rnapos=f.rnaposition}else{f.rnapos=t.rnapos}f.aapos=t.aapos}e.mlst.push(f);break;default:console.error("unknown dt: "+f.dt)}}}function ze(t,e){const s=new Map;for(const t in f){s.set(f[t].label.toUpperCase(),t)}const o=[];for(const[a,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=f[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=U(n.codon,e.usegm);delete n.codon;n.dt=c;n.isoform=e.usegm.isoform;o.push(n)}if(o.length){const t={label:"Highlight",type:D.ds,iscustom:true,bulkdata:{}};t.bulkdata[e.usegm.name.toUpperCase()]=o;e.ownds[t.label]=t;const s=e.block_addtk_template({type:D.ds,ds:t});ne(s,e)}}function Ne(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,o]=Se(s,e);if(t){continue}if(!o)continue;const a=o[0];if(!Number.isFinite(a))continue;for(const t of s.numericfilter){if(t.side=="<"){if(a<t.value){t.count++}}else{if(a>t.value){t.count++}}}}for(const o of s.numericfilter){const a=s.holder.append("div").style("display","inline-block").style("padding","10px").attr("class","sja_clb").on("click",(()=>{if(s.numericCutoff==o.value&&s.numericCutoffSide==o.side){delete s.numericCutoff}else{s.numericCutoff=o.value;s.numericCutoffSide=o.side}fe(t,e)}));if(s.numericCutoff==o.value&&s.numericCutoffSide==o.side){a.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}if(o.count>0){a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 5px").style("background-color","#ccc").style("color","white").html(o.count>1?o.count:"&nbsp;").style("margin-right","5px")}a.append("span").text(o.side+o.value)}continue}if(!s.categories){continue}const o=new Map;let a=0;for(const e of t.mlst){const[t,n]=Se(s,e);if(t){continue}if(n==undefined){a++}else{for(const t of n){if(!o.has(t)){o.set(t,0)}o.set(t,o.get(t)+1)}}}const n=[...o];if(a){n.push([$t,a])}n.sort(((t,e)=>e[1]-t[1]));for(const[o,a]of n){const n=s.categories[o]||{color:"black",label:o};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());Ce(s,o,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(a>1?a:"&nbsp;").style("margin-right","5px");const i=r.append("span").text(n.label).style("color",n.color);if(s.categoryhidden[o]){i.style("text-decoration","line-through")}}}}function Pe(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 o of t.mlst){const[t,a]=Se(e,o);if(t){continue}if(a!=undefined){for(const t of a){if(!s.has(t)){s.set(t,0)}s.set(t,s.get(t)+1)}}}const o=[...s];o.sort(((t,e)=>e[1]-t[1]));const a=M(Z);e.categories={};for(const[t,s]of o){e.categories[t]={label:t,color:a(t)}}}}function Se(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 o=Array.isArray(s)?s:[s];if(t.altalleleinfo.separator){o=o[0].split(t.altalleleinfo.separator)}return[null,o]}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 o=Array.isArray(s)?s:[s];if(t.locusinfo.separator){o=o[0].split(t.locusinfo.separator)}return[null,o]}return["no trigger"]}function Ce(t,e,s,o){const a=s.vcfinfofilter.tip;a.clear();const n=t.categoryhidden[e];a.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{a.hide();t.categoryhidden={};for(const s in t.categories){if(s!=e){t.categoryhidden[s]=1}}if(e!=$t){t.categoryhidden[$t]=1}fe(s,o)}));if(n){a.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{a.hide();delete t.categoryhidden[e];fe(s,o)}))}else{a.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{a.hide();t.categoryhidden[e]=1;fe(s,o)}))}let r=0;for(const e in t.categoryhidden){r++}if(r>1){a.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{a.hide();t.categoryhidden={};fe(s,o)}))}}function Fe(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 o=0;for(const e of t.sampledata){if(!e.gtallref)o++}return[null,o/s.samples.length]}function Re(t,e){if(!t.populationfrequencyfilter)return;for(const e of t.populationfrequencyfilter.lst){e.count=0}for(const e of t.mlst){const[s,o]=Fe(e,t);if(s){continue}for(const e of t.populationfrequencyfilter.lst){if(o<e.value){e.count++}}}t.populationfrequencyfilter.holder.selectAll("*").remove();for(const s of t.populationfrequencyfilter.lst){const o=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}fe(t,e)}));if(t.populationfrequencyfilter.cutoff==s.value){o.style("border-bottom","solid 2px #ccc").style("background-color","#f1f1f1")}o.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");o.append("span").text("< "+s.value)}}function Ie(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 o=[];if(t.mlst[0].sampledata){for(const e of s.lst){let s=0;const a=new Map;for(const o of t.mlst){if(!o.sampledata)continue;for(const n of o.sampledata){const o=n.sampleobj[t.ds.cohort.key4annotation];if(!o)continue;const r=t.ds.cohort.annotation[o];if(!r)continue;const i=r[e.k];if(i==undefined)continue;s++;if(!a.has(i)){a.set(i,0)}a.set(i,a.get(i)+1)}}if(s==0){continue}o.push({samplecount:s,key:e,lst:[...a].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 a=new Map;for(const o of t.mlst){const n=o[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(!a.has(i)){a.set(i,0)}a.set(i,a.get(i)+1)}if(s==0){continue}o.push({samplecount:s,key:e,lst:[...a].sort(((t,e)=>e[1]-t[1])).map((t=>({value:t[0],count:t[1]})))})}}if(o.length==0){delete s.runtimelst;return}s.runtimelst=o;const a=s.holder.append("table").style("border-spacing","5px");for(const n of o){const o=a.append("tr");o.append("td").style("color","#858585").style("text-align","right").text(n.key.label||n.key.k);const r=o.append("td");for(const o of n.lst){const a=r.append("div").style("display","inline-block").style("padding","5px").attr("class","sja_clb").on("click",(()=>{s.tip.showunder(a.node());Be(o,n,s.tip,t,e)}));a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("padding","1px 3px").style("background-color","#858585").style("color","white").html(o.count>1?o.count:"&nbsp;").style("margin-right","5px");const i=a.append("span").text(o.value);if(n.key.hiddenvalues.has(o.value)){i.style("text-decoration","line-through")}}}return null}function Be(t,e,s,o,a){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);fe(o,a)}));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);fe(o,a)}))}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);fe(o,a)}))}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();fe(o,a)}))}}function qe(t,e,s){let o=0;let a=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==V.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,o]=Se(s,i);if(t){continue}const a=o==undefined?[$t]:o;if(s.numericCutoff!=undefined){const t=Number.parseFloat(a[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 a){if(!s.categoryhidden[e]){t=true;break}}if(!t){e=true;break}}}if(e){continue}}if(t.populationfrequencyfilter&&t.populationfrequencyfilter.cutoff){const[e,s]=Fe(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(!O(s.genotype,i.alt)){continue}const o=s.sampleobj[t.ds.cohort.key4annotation];if(o){const e=t.ds.cohort.annotation[o];if(e){let s=false;for(const o of t.ds.cohort.sampleattribute.runtimelst){const t=e[o.key.k];if(t!=undefined){if(o.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 o of t.ds.cohort.sampleattribute.runtimelst){const t=s[o.key.k];if(t!=undefined){if(o.key.hiddenvalues.has(t)){e=true;break}}}if(e){continue}}}}}}if(!i.chr){a++;continue}if(!Number.isInteger(i.pos)){o++;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 o="";for(const e of t.ds.cohort.levels){const t=s[e.k];if(t){o+=t}}e.add(o)}s=e.size}else{const t=new Set;for(const s of r){let o=s[e.attr1.k];if(!o)continue;if(e.attr2){const t=s[e.attr2.k];if(t){o+=t}}if(e.attr3){const t=s[e.attr3.k];if(t){o+=t}}t.add(o)}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(o+a>0){e.tkerror(t,o+a+" 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 De(t,e){for(const s of t.data){if(s.isbin){let t=0;for(const o of s.mlst){const s=e.seekcoord(o.chr,o.pos);if(o.usehitidx!=undefined&&s[o.usehitidx]){t+=s[o.usehitidx].x}else if(s.length==1){t+=s[0].x}else{console.log("cannot map item");console.log(o)}}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 Le(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 "+T(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){ze(t,e);delete t.hlaachange}}function Ee(t,e){if(!t.stratifycount)return;for(const[s,o]of t.stratifycount){const t=e.label_stratify.find((t=>t.label==s));if(!t){console.error("unknown strat label: "+s);continue}t.servercount=o}}const Ue=new H({padding:"0px"});function Ge(t,e){const s=t.legend.holder.append("tr");const o=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 a=s.append("td");return[s,a,o]}function Ve(t){if(!t.legend){return}const e=new Set;for(const[s,o]of t.legend.mclasses){if(o.hidden){e.add(s)}}const s=new Map;for(const e of t.tklst){if(e.hidden||e.type!=D.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 o=[];for(const[t,a]of s){if(e.has(t)){s.get(t).hidden=true}o.push({key:t,count:a.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");o.sort(((t,e)=>e.count-t.count));t.legend.td_mclass.selectAll("*").remove();for(const s of o){const o=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",(()=>{Ue.clear();Ue.showunder(o.node());Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{Ue.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==D.ds){fe(e,t)}}}));if(t.legend.mclasses.get(s.key).hidden){Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{Ue.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==D.ds){fe(e,t)}}}))}else{Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{Ue.hide();t.pannedpx=undefined;t.legend.mclasses.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==D.ds){fe(e,t)}}}))}if(e.size>1){Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{Ue.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==D.ds){fe(e,t)}}}))}const a=Ue.d.append("div").style("margin","20px");a.append("div").text(f[s.key].label.toUpperCase()).style("color",f[s.key].color).style("font-size",".8em");a.append("div").html(f[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));o.append("div").style("display","inline-block").style("background-color",f[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 a=o.append("div").style("display","inline-block").style("color",f[s.key].color).text(f[s.key].label);if(e.has(s.key)){a.style("text-decoration","line-through")}}}function Oe(t){if(!t.legend){return}const e=new Set;for(const[s,o]of t.legend.morigins){if(o.hidden){e.add(s)}}const s=new Map;for(const o of t.tklst){if(o.hidden||o.type!=D.ds)continue;if(!o.mlst){continue}for(const t of o.mlst){if(!t.origin)continue;if(!s.has(t.origin)){let o=false;if(L[t.origin]&&L[t.origin].hidden){o=true;e.add(t.origin)}s.set(t.origin,{count:0,hidden:o})}s.get(t.origin).count++}}const o=[];for(const[t,a]of s){if(e.has(t)){s.get(t).hidden=true}o.push({key:t,count:a.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");o.sort(((t,e)=>e.count-t.count));t.legend.td_morigin.selectAll("*").remove();for(const s of o){const o=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",(()=>{Ue.clear();Ue.showunder(o.node());Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show alone').on("click",(()=>{Ue.hide();t.pannedpx=undefined;for(const e of t.legend.morigins.values()){e.hidden=true}t.legend.morigins.get(s.key).hidden=false;L[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==D.ds){fe(e,t)}}}));if(t.legend.morigins.get(s.key).hidden){Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show').on("click",(()=>{Ue.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=false;L[s.key].hidden=false;for(const e of t.tklst){if(!e.hidden&&e.type==D.ds){fe(e,t)}}}))}else{Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&times;</div> hide').on("click",(()=>{Ue.hide();t.pannedpx=undefined;t.legend.morigins.get(s.key).hidden=true;for(const e of t.tklst){if(!e.hidden&&e.type==D.ds){fe(e,t)}}}))}if(e.size>1){Ue.d.append("div").attr("class","sja_menuoption").html('<div style="display:inline-block;width:25px">&#10003;</div> show all').on("click",(()=>{Ue.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==D.ds){fe(e,t)}}}))}const a=Ue.d.append("div").style("margin","20px");a.append("div").text(L[s.key].label.toUpperCase()).style("color",L[s.key].color).style("font-size",".8em");a.append("div").html(L[s.key].desc).style("color","#858585").style("font-size",".8em").style("width","210px")}));o.append("svg").style("margin-right","5px").attr("width",19).attr("height",19).html(L[s.key].legend);const a=o.append("div").style("display","inline-block").style("color","#858585").text(L[s.key].label+", "+s.count);if(e.has(s.key)){a.style("text-decoration","line-through")}}}export{fe as a,ht as b,bt as c,ne as d,yt as e,_e as f,mt as g,he as h,$ as i,Ve as j,Oe as k,Ge as l,Ut as m,gt as r,ye as s};
@@ -1 +0,0 @@
1
- import{z as e,a7 as t,aF as n,aG as a,b as s,k as o,I as i,aN as l,ag as r,q as d,Z as p,b$ as c,v as f,p as u,ac as m,a9 as g,ah as h,d as y,W as x,M as _,B as b,ap as v,aq as k,ar as w,an as A,as as F,at as j,bL as L}from"./app-a8c4854a.js";import{l as z}from"./block.legend-b2987cd9.js";import{f as N}from"./FilterStateless-046081c2.js";import{a as E,c as M}from"./FilterRxComp-242f4615.js";import"./roundValue-b0d0517c.js";import{v as I}from"./vcf-c4a23924.js";import{appInit as R}from"./app-ade9c62a.js";import{b as S,c as C}from"./axis-747c801e.js";import{m as O}from"./checkbox-96437f4d.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./legacy-d3-polyfill-bdb2d792.js";import"./table-79e3e776.js";import"./tslib.es6-1f85f553.js";import"./termdb.bins-9faa5170.js";import"path";import"./termInfo-f851b415.js";import"./toggleButtons-002aeda1.js";function U(e){const t=e.append("div").attr("class","sja_filter_tag_btn").style("position","absolute");const n=e.append("select").style("opacity",0).on("mouseover",(()=>{t.style("opacity","0.8").style("cursor","default")})).on("mouseout",(()=>{t.style("opacity","1")}));return[n,t]}function T(e,t,n,a,s){const o=D(t,s);console.log(o);return 0}const P=4;function B(e,t,n){if(!t.vcf)return 0;if(!e.vcf)return 0;if(!e.vcf.rglst)return 0;let a=0;for(const s of e.vcf.rglst){const o=t.g_vcfrow.append("g").attr("transform","translate("+s.xoff+",0)");if(s.rangetoobig){s.text_rangetoobig=o.append("text").text(s.rangetoobig).attr("text-anchor","middle").attr("dominant-baseline","central").attr("x",s.width/2);a=Math.max(a,50);continue}if(s.imgsrc){o.append("image").attr("width",s.width).attr("height",s.imgheight).attr("xlink:href",s.imgsrc);a=Math.max(a,s.imgheight);continue}if(s.variants){const i=q(e,s,o,t,n);a=Math.max(a,i);continue}}for(const t of e.vcf.rglst){if(t.rangetoobig){t.text_rangetoobig.attr("y",a/2)}}{const n=e.vcf.rglst.reduce(((e,t)=>e+t.variants.length),0);t.vcfrow_label_numbervariants.text(n==0?"No variant":n+" variant"+(n>1?"s":""));if(n==0){t.__vcf_data=null}else{t.__vcf_data=e}}return a}function q(e,t,n,a,s){let o=50;if(a.vcf.numerical_axis&&a.vcf.numerical_axis.in_use){o=ge(e,t,n,a,s)}else{o=T(e,t,n,a,s)}return o}function J(t,n){return e[t.class].color}function G(e,n){const a=["genome="+n.name];if(e.file){a.push("file="+e.file)}else{a.push("url="+e.url);if(e.indexURL)a.push("indexURL="+e.indexURL)}return t("vcfheader?"+a.join("&")).then((t=>{if(t.error)throw t.error;const[n,a,s,o]=I(t.metastr.split("\n"));if(o)throw"Error parsing VCF meta lines: "+o.join("; ");e.info=n;e.format=a;e.samples=s;e.nochr=t.nochr}))}function D(e,t){const s=new Map;for(const n of e.variants){const e=t.seekcoord(n.chr,n.pos);if(e.length==0){continue}if(e.length==1){n.__x=e[0].x}else{n.__x=e[0].x}if(!s.has(n.__x)){s.set(n.__x,[])}s.get(n.__x).push(n)}const o=[];if(t.exonsf>=P){for(const[e,t]of s){o.push({chr:t[0].chr,pos:t[0].pos,mlst:t,x:e})}}else{if(t.usegm&&t.usegm.coding&&t.gmmode!=n.genomic){for(const e of s.values()){const n=a(e[0].pos,t.usegm);for(const t of e){t.aapos=n.aapos;t.rnapos=n.rnapos}}const e=new Map;for(const[n,a]of s){if(a[0].chr!=t.usegm.chr){continue}const o=a[0].aapos;if(o==undefined){console.error("data item cannot map to aaposition");console.log(a[0]);continue}s.delete(n);if(!e.has(o)){e.set(o,[])}let i=true;for(const n of e.get(o)){if(Math.abs(n[0].__x-a[0].__x)<=t.exonsf*3){for(const e of a){n.push(e)}i=false;break}}if(i){e.get(o).push(a)}}t.usegm.utr5?t.usegm.utr5.reduce(((e,t)=>e+t[1]-t[0]),0):0;for(const t of e.values()){for(const e of t){let t=null;for(const n of e){if(Number.isFinite(n.rnapos))t=n}if(t==null){console.log("trying to map mlst to codon, but no rnapos found");for(const t of e){console.log(t)}continue}o.push({chr:e[0].chr,pos:t.pos,mlst:e,x:e[0].__x})}}}const e=[];const i=2;for(const[t,n]of s){const a=Math.floor(t/i);if(!e[a]){e[a]=[]}e[a]=[...e[a],...n]}for(const t of e){if(!t)continue;const e=t.reduce(((e,t)=>e+t.__x),0);o.push({isbin:true,chr:t[0].chr,pos:t[0].pos,mlst:t,x:e/t.length})}}o.sort(((e,t)=>e.x-t.x));return o}async function V(e,t,n,a){const s={d:{svgdiv:e.append("div"),wait:e.append("div")},m:t,tk:n,block:a,overlay_term:n.vcf.plot_mafcov.overlay_term};if(n.mds&&n.mds.sample2bam){s.d.tempbbdiv=e.append("div")}await Y(s)}async function Y(e){const t={genome:e.block.genome.name,trigger_mafcovplot:1,m:{chr:e.m.chr,pos:e.m.pos,ref:e.m.ref,alt:e.m.alt}};if(e.tk.mds){t.dslabel=e.tk.mds.label}else{t.vcf={file:e.tk.vcf.file,url:e.tk.vcf.url,indexURL:e.tk.vcf.indexURL}}if(e.overlay_term&&e.overlay_term.term){t.overlay_term=e.overlay_term.term.id;t.overlay_term_q=e.overlay_term.term.q}e.d.wait.text("Loading...").style("display","block");try{const n=await s("mds2",{method:"POST",body:JSON.stringify(t)});if(n.error)throw n.error;if(n.plotgroups){H(e,n.plotgroups)}e.d.wait.style("display","none")}catch(t){e.d.wait.text("ERROR: "+(t.message||t));if(t.stack)console.log(t.stack)}}function H(e,t){import("./plot.vaf2cov-80e58833.js").then((n=>{const a={};e.d.svgdiv.selectAll("*").remove();for(const s of t){let o=e.d.svgdiv.append("div").style("display","inline-block").style("vertical-align","top");if(t.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(s.name.toUpperCase());o=o.append("div").style("border","solid 1px #aaa")}const i={holder:o,data:s.lst,name:s.name,tip:e.tk.tktip,automax:true,samplecolor:"#4888BF",mouseover:e=>{if(!e.sampleobj)return;for(const t in a){if(t==s.name)continue;a[t].filter((t=>t.sampleobj.patient==e.sampleobj.patient)).each((e=>{e.crosshair1.attr("transform","scale(2.5)");e.crosshair2.attr("transform","scale(2.5)")}))}},mouseout:e=>{if(!e.sampleobj)return;for(const t in a){if(t==s.name)continue;a[t].filter((t=>t.sampleobj.patient==e.sampleobj.patient)).each((e=>{e.crosshair1.attr("transform","scale(1)");e.crosshair2.attr("transform","scale(1)")}))}}};if(e.tk&&e.tk.mds&&e.tk.mds.sample2bam){i.click=t=>{if(!t.sampleobj)return;const n=e.tk.mds.sample2bam[t.sampleobj.name];if(!n)return;e.d.tempbbdiv.selectAll("*").remove();import("./block-dcb130fb.js").then((function(e){return e.c})).then((a=>{new a.Block({hostURL:sessionStorage.getItem("hostURL"),holder:e.d.tempbbdiv,genome:e.block.genome,nobox:true,chr:e.m.chr,start:e.m.pos-30,stop:e.m.pos+30,nativetracks:[e.block.genome.tracks.find((e=>e.__isgene)).name.toLowerCase()],tklst:[{type:"bam",name:t.sampleobj.name,file:n}],hlregions:[{chr:e.m.chr,start:e.m.pos,stop:e.m.pos}]})}))}}a[s.name]=n.default(i)}}))}async function Q(e,t,n,a){const{ssid:s,groups:o}=await te(t,n.mds.label,a.genome.name);const i=e.append("div");const l=i.append("div");try{const e={ssid:s,tip:n.legend.tip,mds:n.mds,genome:a.genome,termfilter:{filter:W(n)},dom:{}};Z(e,i,n);await X(e);l.remove()}catch(e){l.text("Error: "+(e.message||e));if(e.stack)console.log(e.stack)}}function W(e){if(e.vcf&&e.vcf.numerical_axis&&e.vcf.numerical_axis.in_use&&e.vcf.numerical_axis.inuse_AFtest){const t=e.vcf.numerical_axis.AFtest;const n=t.groups.find((e=>e.is_termdb));if(n){return n.filterApi.getNormalRoot()}}if(e.mds&&e.mds.termdb&&e.mds.termdb.selectCohort){const t=e.mds.termdb.selectCohort;return{type:"tvslst",join:"",in:true,lst:[{type:"tvs",tag:"cohortFilter",renderAs:"htmlSelect",selectOptionsFrom:"selectCohort",tvs:{term:JSON.parse(JSON.stringify(t.term)),values:t.values[0].keys.map((e=>({key:e})))}}]}}}function $(e){const t=["genome="+e.genome.name,"dslabel="+e.mds.label,"ssid="+e.ssid,"phewas=1","intendwidth="+e.svg.intendwidth,"axisheight="+e.svg.axisheight,"groupnamefontsize="+e.svg.groupnamefontsize,"dotradius="+e.svg.dotradius,"groupxspace="+e.svg.groupxspace,"leftpad="+e.svg.leftpad,"rightpad="+e.svg.rightpad,"toppad="+e.svg.toppad,"bottompad="+e.svg.bottompad,"devicePixelRatio="+(window.devicePixelRatio>1?window.devicePixelRatio:1)];if(e.termfilter.filter)t.push("filter="+encodeURIComponent(JSON.stringify(e.termfilter.filter)));return t}async function X(e){e.dom.svg.selectAll("*").remove();const n=await t("/termdb?"+$(e).join("&"));if(n.error)throw n.error;if(!n.tmpfile)throw"data.tmpfile missing";e.tmpfile=n.tmpfile;e.svg.ymax=n.maxlogp;e.dom.filter_says.text("n="+n.numberofsamples);K(n,e)}function Z(e,n,a){e.dom.row_filter=n.append("div").style("margin-bottom","5px");e.dom.row_message=n.append("div");e.dom.row_control=n.append("div").style("margin","10px 0px");e.dom.svg=n.append("svg");e.dom.row_details=n.append("div");e.svg={intendwidth:800,axisheight:300,groupnamefontsize:16,dotradius:2,groupxspace:3,leftpad:2,rightpad:2,toppad:20,bottompad:10};{e.dom.row_filter.append("div").style("display","inline-block").text("FILTER").style("font-size",".7em").style("opacity",.5);N({vocab:{route:"termdb",genome:e.genome.name,dslabel:e.mds.label},holder:e.dom.row_filter.append("div").style("display","inline-block").style("margin","0px 10px"),termdbConfig:e.mds.termdb,callback:async t=>{e.termfilter.filter=t;await X(e)}}).main(e.termfilter.filter);e.dom.filter_says=e.dom.row_filter.append("div").style("display","inline-block")}{const n=e.dom.row_control.append("input").attr("type","number").style("width","150px").attr("placeholder","Set Y axis max").on("keyup",(async a=>{if(!o(a))return;const s=n.property("value");if(!s)return;const i=Number(s);if(i<=0){window.alert("Max value must be above 0");return}e.svg.ymax=i;n.property("value","").property("disabled",true).attr("placeholder","Loading...");const l=$(e);l.push("update=1");l.push("file="+e.tmpfile);l.push("max="+e.svg.ymax);const r=await t("/termdb?"+l.join("&"));e.svg.image.attr("xlink:href",r.src);ee(r,e);n.property("disabled",false).attr("placeholder","Set Y axis max")}))}}function K(e,n){n.dom.row_message.text(e.testcount+" attributes tested, "+e.hoverdots.length+" attributes with p-value <= 0.05, "+"Max -log10(p-value) is "+n.svg.ymax);const a=80;const s=5;n.dom.svg.attr("width",a+s+e.canvaswidth);{let t=0;for(const o of e.grouplabels){n.dom.svg.append("g").attr("transform","translate("+(a+s+o.x)+","+o.y+")").append("text").attr("font-size",e.groupnamefontsize).text(o.name).attr("dominant-baseline","central").attr("transform","rotate(90)").each((function(){t=Math.max(t,this.getBBox().width)})).attr("class","sja_svgtext2").on("click",(()=>{d(o.name)}))}n.dom.svg.attr("height",e.canvasheight+t)}const o=n.dom.svg.append("g");n.svg.yscale=i();n.svg.axis_g=o.append("g").attr("transform","translate("+a+","+n.svg.toppad+")");o.append("g").attr("transform","translate(10,"+(n.svg.toppad+n.svg.axisheight/2)+")").append("text").text("-Log10(p-value)").attr("text-anchor","middle").attr("dominant-baseline","central").attr("transform","rotate(-90)");const r=o.append("g").attr("transform","translate("+(a+s)+",0)");n.svg.image=r.append("image").attr("width",e.canvaswidth).attr("height",e.canvasheight).attr("xlink:href",e.src);n.svg.hoverdots=r.append("g").attr("transform","translate(0,"+n.svg.toppad+")").selectAll().data(e.hoverdots).enter().append("g");n.svg.hoverdots.append("circle").attr("r",n.svg.dotradius).attr("fill","red").on("mouseover",((e,t)=>{console.log(t);n.tip.clear();const a=n.tip.d.append("div").style("margin","10px");a.append("div").text(t.term.name);if(t.parent_name){a.append("div").style("font-size",".7em").style("opacity",".5").text("of "+t.parent_name)}const s=a.append("table").style("margin","10px 0px");{const e=s.append("tr").style("font-size",".7em").style("opacity",.5);e.append("td");e.append("td").text("REF/REF");e.append("td").text("REF/ALT");e.append("td").text("ALT/ALT")}{const e=s.append("tr");e.append("td").text(t.group1label);e.append("td").text(t.table[0]);e.append("td").text(t.table[2]);e.append("td").text(t.table[4])}{const e=s.append("tr");e.append("td").text(t.group2label);e.append("td").text(t.table[1]);e.append("td").text(t.table[3]);e.append("td").text(t.table[5])}a.append("div").html('<span style="opacity:.5;font-size:.8em">P-value:</span> '+t.pvalue);n.tip.show(t.clientX,t.clientY)})).on("mouseout",(()=>{n.tip.hide()}));ee(e,n);async function d(e){n.dom.row_details.selectAll("*").remove();const a=n.dom.row_details.append("div").text("Loading...");const s=["genome="+n.genome.name,"dslabel="+n.mds.label,"file="+n.tmpfile,"phewas=1","getgroup="+e];const o=await t("/termdb?"+s.join("&"));a.remove();const i=n.dom.row_details.append("table");const r=i.append("tr");r.append("th").text("Term");r.append("th").text("Case");r.append("th").text("Control");r.append("th").text("P-value");for(const e of o.categories){const t=i.append("tr");t.append("td").text(e.term.name);{const n=e.table[0]+e.table[1];const a=l(null,{f:n>0?e.table[0]/n:0});t.append("td").html(e.group1label+" "+a+' <span style="font-size:.7em;opacity:.5">ALT/REF</span> '+e.table[0]+" / "+e.table[1])}{const n=e.table[2]+e.table[3];const a=l(null,{f:n>0?e.table[2]/n:0});t.append("td").html(e.group2label+" "+a+' <span style="font-size:.7em;opacity:.5">ALT/REF</span> '+e.table[2]+" / "+e.table[3])}const n=t.append("td").text(e.pvalue);if(e.pvalue<=.05)n.style("color","red")}}}function ee(e,t){t.svg.yscale.domain([t.svg.ymax,0]).range([0,t.svg.axisheight]);r({axis:t.svg.axis_g.call(S().scale(t.svg.yscale)),fontsize:12,showline:true});t.svg.hoverdots.attr("transform",(e=>"translate("+e.x+","+(e.logp>=t.svg.ymax?0:t.svg.yscale(e.logp))+")"))}function te(e,t,n){const a={dslabel:t,genome:n,m:{chr:e.chr,pos:e.pos,ref:e.ref,alt:e.alt},trigger_ssid_onevcfm:true};return d("mds2",a).then((e=>{if(e.error)throw e.error;return e}))}async function ne(t,n,a,s){if(a.ld&&a.ld.overlaywith){await de(t,a,s);return}const o="sja-pp-block-"+s.blockId+"-"+s.tklst.findIndex((e=>e===a))+"-vcf_clickvariant";const i=p({x:n.left,y:n.top,$id:o});i.pane.style("line-height",1.15);i.header.html(t.mname+' <span style="font-size:.7em;">'+e[t.class].label+"</span>");const l=[];ie(l,t,a,s);oe(l,t,a,s);se(l,t,a,s);ae(l,t,a,s);re(l,t,a,s);c(i.body.style("padding-top","10px"),l)}function ae(e,t,n,a){if(!n.vcf||!n.vcf.plot_mafcov)return;e.push({label:"Coverage-MAF plot",callback:async e=>{const s=f(e);try{await V(e,t,n,a);s.remove()}catch(e){s.text("Error: "+(e.message||e))}}})}function se(e,t,n,a){if(!n.vcf)return;if(!n.vcf.termdb_bygenotype)return;if(n.mds&&n.mds.hide_phewas)return;e.push({label:"Phewas",callback:async e=>{const s=f(e);try{await Q(e,t,n,a);s.remove()}catch(e){s.text("Error: "+(e.message||e))}}})}function oe(e,t,n,a){if(!n.vcf.numerical_axis||!n.vcf.numerical_axis.inuse_AFtest||!n.vcf.numerical_axis.AFtest||!n.vcf.numerical_axis.AFtest.testby_fisher||!t.contigencytable)return;e.push({label:"Fisher' exact test",callback:s});async function s(e){const s=n.vcf.numerical_axis.AFtest;const o=[];if(s.groups[0].is_termdb){if(n.populations){for(const e of n.populations){if(!s.groups[1].is_population||s.groups[1].key!=e.key){o.push({key:e.key,label:e.label})}}}}const i=e.append("table").style("border","1px solid #ccc").style("border-collapse","collapse");if(o.length){{const e=i.append("tr");e.append("td");e.append("th").text("#ALT alleles");e.append("th").text("#REF alleles");e.append("th").text("P-value")}{const e=i.append("tr");e.append("th").text(Je(n,0));e.append("td").text(t.contigencytable[0].toFixed(0)).style("padding","5px");e.append("td").text(t.contigencytable[1].toFixed(0)).style("padding","5px");e.append("td").text("-")}{const e=i.append("tr");e.append("th").text(Je(n,1));e.append("td").text(t.contigencytable[2].toFixed(0)).style("padding","5px");e.append("td").text(t.contigencytable[3].toFixed(0)).style("padding","5px");e.append("td").text(t.AFtest_pvalue).style("padding","5px")}for(const e of o){const s=i.append("tr");s.append("th").text(e.label);const o=s.append("td").text("...").style("padding","5px");const l=s.append("td").text("...").style("padding","5px");const r=s.append("td").text("...").style("padding","5px");const p=vt(n,a);delete p.trigger_ld;p.AFtest.groups[1]={is_population:true,key:e.key};p.rglst=[{chr:t.chr,start:t.pos,stop:t.pos+1}];const c=await d("mds2",p);if(c.vcf&&c.vcf.rglst&&c.vcf.rglst[0]&&c.vcf.rglst[0].variants){const e=c.vcf.rglst[0].variants[0];if(e){if(e.contigencytable){o.text(e.contigencytable[2]);l.text(e.contigencytable[3])}if(e.AFtest_pvalue!=undefined){r.text(e.AFtest_pvalue)}}}}}else{{const e=i.append("tr");e.append("td");e.append("th").text("#ALT alleles");e.append("th").text("#REF alleles")}{const e=i.append("tr");e.append("th").text(Je(n,0));e.append("td").text(t.contigencytable[0].toFixed(0)).style("padding","5px");e.append("td").text(t.contigencytable[1].toFixed(0)).style("padding","5px")}{const e=i.append("tr");e.append("th").text(Je(n,1));e.append("td").text(t.contigencytable[2].toFixed(0)).style("padding","5px");e.append("td").text(t.contigencytable[3].toFixed(0)).style("padding","5px")}i.append("tr").append("td").attr("colspan",3).style("border","1px solid #ccc").style("padding","5px").html('<span style="opacity:.5">Fisher exact p-value:</span> '+t.AFtest_pvalue)}if(t.popsetadjvalue){const n=s.groups.findIndex((e=>e.is_termdb));const a=s.groups.find((e=>e.is_termdb));const o=s.groups.find((e=>e.is_population));const i=e.append("table").style("margin-top","30px").style("border","1px solid #ccc").style("border-collapse","collapse");{const e=i.append("tr");e.append("td").style("padding","5px");for(const t of a.popsetaverage){e.append("th").text(t[0]).style("padding","5px")}}{const e=i.append("tr");e.append("th").text("Group "+(n+1)+" average admix").style("padding","5px");for(const t of a.popsetaverage){e.append("td").text(t[1].toFixed(2)).style("padding","5px")}}{const e=i.append("tr");e.append("th").text(o.key+" raw ALT/REF").style("padding","5px");for(const n of a.popsetaverage){const a=t.popsetadjvalue.find((e=>e[0]==n[0]));e.append("td").text(a[1]+"/"+a[2]).style("padding","5px")}}{const e=i.append("tr");e.append("th").text(o.key+" adjusted ALT/REF").style("padding","5px");for(const n of a.popsetaverage){const a=t.popsetadjvalue.find((e=>e[0]==n[0]));e.append("td").text(a[3]+"/"+a[4]).style("padding","5px")}}}}}function ie(t,n,a,s){t.push({label:"Annotation",callback:o});function o(t){t.append("span").html((n.gene?"<i>"+n.gene+"</i> ":"")+(n.isoform?'<span style="font-size:.8em;text-decoration:italic">'+n.isoform+"</span> ":"")+n.mname+'&nbsp; <span style="font-size:.7em;padding:3px;color:white;background:'+e[n.class].color+'">'+e[n.class].label+"</span>"+(n.name&&n.name.startsWith("rs")?"&nbsp; <a href=https://www.ncbi.nlm.nih.gov/snp/"+n.name+" target=_blank>"+n.name+"</a>":""));if(n.csq_count&&n.csq_count>1){const e=t.append("div").style("margin-left","20px").text(n.csq_count-1+" other interpretations").attr("class","sja_button").style("zoom",".7");let o=false,i=false;const l=t.append("div").style("margin","20px").style("display","none");e.on("click",(async()=>{if(l.style("display")=="none"){u(l);e.attr("class","sja_button_open")}else{m(l);e.attr("class","sja_button_fold")}if(i||o)return;o=true;e.text("Loading...");try{await le(l,n,a,s)}catch(e){l.text("Error: "+(e.message||e))}i=true;o=false;e.text(n.csq_count-1+" other interpretations")}))}const o=[];{let e=n.chr+":"+(n.pos+1);if(n.ref+">"+n.alt!=n.mname){e+=' <span style="font-size:.7em;opacity:.5">REF</span> '+n.ref+' <span style="font-size:.7em;opacity:.5">ALT</span> '+n.alt}o.push({k:"Genomic",v:e})}if(n.altinfo){for(const e in n.altinfo){const t=Array.isArray(n.altinfo[e])?n.altinfo[e]:[n.altinfo[e]];const s=t;o.push({k:e,v:s.join(", ")+(a.vcf.info&&a.vcf.info[e]?' <span style="font-size:.7em;opacity:.5">'+a.vcf.info[e].Description+"</span>":"")})}}if(n.info){for(const e in n.info){const t=Array.isArray(n.info[e])?n.info[e]:[n.info[e]];const s=t;o.push({k:e,v:s.join(", ")+(a.vcf.info&&a.vcf.info[e]?' <span style="font-size:.7em;opacity:.5">'+a.vcf.info[e].Description+"</span>":"")})}}const i=g(t,o).style("margin","20px 0px 0px 0px");if(a.vcf.check_pecanpie){const e=i.append("tr");e.append("td").attr("colspan",2).text("PeCAN-PIE").style("opacity",.5);const t=e.append("td").text("Loading...");fetch("https://pecan.stjude.cloud/variant/decision/"+s.genome.name+"/"+n.chr.replace("chr","")+"/"+(n.pos+1)+"/"+n.ref+"/"+n.alt).then((e=>e.json())).then((e=>{if(e.length==0)throw"Not in PeCAN-PIE";const o=e[0].paneldecision;if(!o)throw"Not in PeCAN-PIE";const i=a.vcf.check_pecanpie.info;t.html("<a href=https://pecan.stjude.cloud/variant/"+s.genome.name+"/"+n.chr.replace("chr","")+"/"+(n.pos+1)+"/"+n.ref+"/"+n.alt+" target=_blank "+' style="font-size:.8em;text-decoration:none;background:'+i[o].fill+";color:"+(i[o].color||"white")+';padding:3px 5px">'+"PeCAN-PIE: "+i[o].label+"</a>")})).catch((e=>{t.text(e.message||e);if(e.stack)console.log(e.stack)}))}}}function le(e,t,n,a){const s={genome:a.genome.name,trigger_getvcfcsq:1,m:{chr:t.chr,pos:t.pos,ref:t.ref,alt:t.alt}};if(n.mds){s.dslabel=n.mds.label}else{s.vcf={file:n.vcf.file,url:n.vcf.url,indexURL:n.vcf.indexURL}}return d("mds2",s).then((t=>{if(t.error)throw t.error;if(!t.csq)throw"cannot load csq";for(const a of t.csq){let t;{const e=[];if(a.HGVSp){e.push('<span style="font-size:.7em;opacity:.5">HGVSp</span> '+a.HGVSp)}else if(a.HGVSc){e.push('<span style="font-size:.7em;opacity:.5">HGVSc</span> '+a.HGVSc)}else if(a.Feature){e.push('<span style="font-size:.7em;opacity:.5">no HGVS</span> '+a.Feature)}if(a.Consequence){e.push('<span style="font-size:.7em;opacity:.5">CONSEQUENCE</span> '+a.Consequence)}else{e.push('<span style="font-size:.7em;opacity:.5">no CONSEQUENCE</span>')}t=e.join(" ")}const s=e.append("div").style("margin","5px").attr("class","sja_clbtext").html(t);const o=e.append("div").style("display","none");const i=[];for(const e of n.vcf.info.CSQ.csqheader){const t=a[e.name];if(t){i.push({k:e.name,v:t})}}g(o.append("div").style("display","inline-block"),i);s.on("click",(()=>{o.style("display",o.style("display")=="none"?"block":"none")}))}})).catch((t=>{e.text(t.message||t)}))}function re(e,t,n,a){if(!a.genome.fimo_motif)return;e.push({label:"TF motif",callback:async e=>{const n=f(e);const s={genome:a.genome,div:e,m:{chr:t.chr,pos:t.pos+1,ref:t.ref,alt:t.alt}};try{const e=await import("./mds.fimo-c03115b4.js");await e.init(s);n.remove()}catch(e){n.text("Error: "+(e.message||e))}}})}async function de(e,t,n){const a={genome:n.genome.name,trigger_overlayld:1,ldtkname:t.ld.overlaywith,m:{chr:e.chr,pos:e.pos,ref:e.ref,alt:e.alt}};if(t.mds){a.dslabel=t.mds.label}const s=await d("mds2",a);const o=new Map;for(const e of s.lst){o.set(e.pos+"."+e.alleles,e.r2)}t.skewer2.selectAll(".sja_aa_disk_fill").attr("fill",(n=>{if(n.pos==e.pos&&n.ref==e.ref&&n.alt==e.alt){return t.ld.overlay.color_1}const a=o.get(n.pos+"."+n.ref+"."+n.alt)||0;return t.ld.overlay.r2_to_color(a)}));t.ld.overlay.vcfcircle.attr("stroke-opacity",1);t.skewer2.selectAll(".sja_aa_discg").filter((t=>t.pos==e.pos&&t.ref==e.ref&&t.alt==e.alt)).node().appendChild(t.ld.overlay.vcfcircle.node())}const pe=1;const ce=.3;const fe=5;const ue=7;const me=0;function ge(e,t,n,a,s){const o=D(t,s);const i=a.vcf.numerical_axis;he(i,t,n,o,a,s);return i.toplabelheight+i.maxradius+i.axisheight+i.maxradius+i.stem1+i.stem2+i.stem3+i.bottomlabelheight}function he(e,t,n,a,s,o){for(const e of a){e.x0=e.x;if(e.xoffset!=undefined){e.x=e.x0+e.xoffset}}const l=Math.max(14,o.width/110);if(s.ld&&s.ld.overlay&&s.ld.overlay.vcfcircle){s.ld.overlay.vcfcircle.attr("r",l/2).attr("stroke-opacity",0)}e.dotwidth=l;e.maxradius=0;for(const t of a){for(const n of t.mlst){n.radius=l/2;e.maxradius=Math.max(n.radius,e.maxradius);n.rimwidth=0;n.aa=t}}const r=ye(a,e,s,o);Ae(t,e,s);const d=i().domain([e.minvalue,e.maxvalue]).range([0,e.axisheight]);for(const e of a){for(const t of e.mlst){t._y=d(t._v)}}if(r){e.stem1=5;e.stem2=20;e.stem3=10}else{e.stem1=0;e.stem2=0;e.stem3=0}for(const e of a){for(const t of e.mlst){s.glider.append("text").text(_e(t.mname)).attr("font-family",h).attr("font-size",t.radius*2-2).each((function(){t.labwidth=this.getBBox().width})).remove()}}for(const e of a){for(const t of e.mlst){delete t.labattop;delete t.labatbottom}}if(r){for(const e of a){if(e.mlst.length==1){const t=e.mlst[0];t.labattop=true}else{if((e.width-e.fixedgew)/(e.mlst.length-1)<ue);else{for(const t of e.mlst){t.labattop=true}}}}}else{be(a)}e.toplabelheight=0;e.bottomlabelheight=0;if(e.showsamplebar||e.showgenotypebyvalue){for(const t of a){for(const n of t.mlst){e.toplabelheight=Math.max(e.toplabelheight,n.labwidth)}}}else{for(const t of a){for(const n of t.mlst){if(n.labattop){e.toplabelheight=Math.max(e.toplabelheight,n._y+n.labwidth-e.axisheight)}else if(n.labatbottom){e.bottomlabelheight=Math.max(e.bottomlabelheight,n.labwidth-n._y)}}}}{let t=o.labelfontsize+fe+o.labelfontsize;if(s.label_stratify){t+=s.label_stratify.length*(fe+o.labelfontsize)}e.toplabelheight=Math.max(e.toplabelheight,t)}je(n,s,e,o);n.append("line").attr("y1",e.toplabelheight+e.maxradius).attr("y2",e.toplabelheight+e.maxradius).attr("x2",t.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");n.append("line").attr("y1",e.toplabelheight+e.maxradius+e.axisheight).attr("y2",e.toplabelheight+e.maxradius+e.axisheight).attr("x2",t.width).attr("stroke","#ededed").attr("shape-rendering","crispEdges");s.skewer2=n.selectAll().data(a).enter().append("g").attr("class","sja_skg2").each((function(e){e.g=this}));s.skewer2.attr("transform",(t=>"translate("+t.x+","+(e.toplabelheight+pe+e.maxradius+e.axisheight+e.maxradius)+")"));if(r){s.skewer2.append("path").attr("class","sja_aa_stem").attr("d",(t=>ve(t,e))).attr("stroke",(e=>J(e.mlst[0]))).attr("fill",(e=>e.mlst.length==1?"none":"#ededed"))}const p=s.skewer2.selectAll().data((e=>e.mlst)).enter().append("g").attr("class","sja_aa_discg").each((function(e){e.g=this}));p.attr("transform",(t=>"translate("+t.xoff+","+(t._y+e.maxradius)*-1+")"));const c=p.append("circle");c.attr("fill",(e=>J(e))).attr("stroke","white").attr("r",(e=>e.radius-.5)).attr("class","sja_aa_disk_fill");p.append("circle").attr("r",(e=>e.radius-.5)).attr("stroke",(e=>J(e))).attr("class","sja_aa_disckick").attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mousedown",(e=>{e.preventDefault()})).on("mouseover",((t,n)=>{ke(n,e,s)})).on("mouseout",((e,t)=>{we(t,s)})).on("click",((e,t)=>{const n=e.target.getBoundingClientRect();ne(t,n,s,o)}));p.filter((e=>e.labattop||e.labatbottom)).append("text").each((function(e){e.textlabel=this})).text((e=>_e(e.mname))).attr("font-family",h).attr("font-size",(e=>{e._labfontsize=Math.max(12,e.radius*1.2);return e._labfontsize})).attr("fill",(e=>J(e))).attr("x",(t=>e.showsamplebar||e.showgenotypebyvalue?e.axisheight+e.maxradius+4:t.radius+t.rimwidth+pe)).attr("y",(e=>e._labfontsize*ce)).attr("class","sja_aa_disclabel").attr("transform",(e=>"rotate("+(e.labattop?"-":"")+"90)")).on("mousedown",(e=>{e.preventDefault()})).on("mouseover",((t,n)=>ke(n,e,s))).on("mouseout",((e,t)=>we(t,s))).on("click",((e,t)=>{ne(t,{left:t.clientX,top:t.clientY},s,o);if(o.debugmode){console.log(t)}}))}function ye(e,t,n,a){const s=100;let o=0;for(const t of e){let e=0;for(const n of t.mlst){e+=2*(n.radius+n.rimwidth)}if(t.mlst.length==1){t.width=e}else{t.width=Math.min(s,e);const n=t.mlst[0];const a=t.mlst[t.mlst.length-1];t.fixedgew=n.radius+n.rimwidth+a.radius+a.rimwidth}o+=t.width}if(o<=a.width){let t=0;for(const n of e){n.x=t+n.mlst[0].radius+n.mlst[0].rimwidth;t+=n.width;if(n.mlst.length==1){n.stemw=0}else{n.stemw=n.width-n.fixedgew}}xe(e,a.width);for(const t of e){t.xoffset=t.x-t.x0;if(t.mlst.length==1){t.mlst[0].xoff=0;t.stemw=0}else{t.stemw=t.width-t.fixedgew;const e=t.stemw/(t.mlst.length-1);for(let n=0;n<t.mlst.length;n++){t.mlst[n].xoff=e*n}}}return true}for(const t of e){t.x=t.x0;t.xoffset=0;for(const e of t.mlst){e.xoff=0}}return false}function xe(e,t){for(let n=0;n<e.length;n++){if(e[n].x0<0)continue;if(e[n].x0>t)break;while(1){let a=0,s=0;for(let o=n;o<e.length;o++){const n=e[o];if(n.x0>t){return}a+=Math.abs(n.x-n.x0-n.stemw/2);n.x++;s+=Math.abs(n.x-n.x0-n.stemw/2)}if(e[n].x>e[n].x0-e[n].stemw/2){for(let t=n;t<e.length;t++){e[t].x--}break}const o=e[e.length-1];if(o.x+o.width/2>=t){return}if(s<=a);else{for(let a=n;a<e.length;a++){if(e[a].x0>t){break}e[a].x--}break}}}}const _e=e=>{if(!e)return"";if(e.length>25){return e.substr(0,20)+"..."}return e};function be(e){const t=[];for(const n of e){for(const e of n.mlst){t.push({m:e,w:2*(e.radius+e.rimwidth),x:n.x0,y:e._y})}}t.sort(((e,t)=>t.y-e.y));for(let e=0;e<t.length;e++){const n=t[e];let a=false;for(let s=0;s<e;s++){const e=t[s];if(Math.abs(n.x-e.x)<(n.w+e.w)/2-2){a=true;break}}if(!a){n.m.labattop=true}}for(let e=t.length-1;e>=0;e--){const n=t[e];if(n.m.labattop)continue;let a=false;for(let s=t.length-1;s>e;s--){const e=t[s];if(e.m.labatbottom&&Math.abs(e.x-n.x)<(e.w+n.w)/2-2){a=true;break}}if(!a){n.m.labatbottom=true}}}function ve(e,t){if(e.mlst.length==1){return"M0,0v"+t.stem1+"l"+-e.xoffset+","+t.stem2+"v"+t.stem3}return"M0,0"+"v"+t.stem1+"l"+-e.xoffset+","+t.stem2+"v"+t.stem3+"v-"+t.stem3+"l"+(e.stemw+e.xoffset-1)+",-"+t.stem2+"v-"+t.stem1}function ke(e,t,n){if(e.textlabel){y(e.textlabel).attr("font-size",e._labfontsize*1.1)}n.pica.g.attr("transform","translate("+(e.aa.x+e.xoff)+","+(t.toplabelheight+t.maxradius+t.axisheight-e._y)+")");const a=10;const s=4;const o=e._labfontsize||13;const i=J(e);const l=[];if(t.inuse_AFtest){if(e.AFtest_group_values){for(const t of e.AFtest_group_values)l.push(t)}else if(e.AFtest_pvalue!=undefined){l.push(e.AFtest_pvalue)}}else if(t.inuse_infokey){l.push(e._v)}else{throw"unknown axis type"}if(!e.labattop&&!e.labatbottom){l.push(e.mname)}let r=0;for(const e of l){n.pica.g.append("text").attr("font-size",o).attr("font-family",h).text(e).each((function(){r=Math.max(r,this.getBBox().width)})).remove()}const d=s*2+r;let p,c,f=true;if(d+a>e.aa.x+e.xoff){f=false;c=e.radius+e.rimwidth;p=c+a}else{c=-e.radius-e.rimwidth-a;p=c-d}const u=o*l.length;n.pica.g.append("rect").attr("x",p-2).attr("y",-2-s-u/2).attr("width",4+d).attr("height",4+s*2+u).attr("fill","white");n.pica.g.append("line").attr("x1",c).attr("x2",c+a).attr("stroke","white").attr("stroke-width",3).attr("shape-rendering","crispEdges");n.pica.g.append("line").attr("x1",c).attr("x2",c+a).attr("stroke",i).attr("shape-rendering","crispEdges");n.pica.g.append("rect").attr("x",p).attr("y",-s-u/2).attr("width",d).attr("height",s*2+u).attr("fill","none").attr("stroke",i).attr("shape-rendering","crispEdges");let m=(o-u)/2;for(const e of l){n.pica.g.append("text").text(e).attr("text-anchor",f?"end":"start").attr("font-size",o).attr("font-family",h).attr("x",f?c-s:p+s).attr("y",m).attr("fill",i).attr("dominant-baseline","central");m+=o}}function we(e,t){if(e.textlabel){y(e.textlabel).attr("font-size",e._labfontsize)}t.pica.g.selectAll("*").remove()}function Ae(e,t,n){t.minvalue=0;t.maxvalue=0;let a,s,o;if(t.inuse_infokey){a=t.info_keys.find((e=>e.in_use)).key;s=n.vcf.info[a].Number=="A";if(n.info_fields){const e=n.info_fields.find((e=>e.key==a));if(e){o=e.missing_value}}}for(const n of e.variants){let e=null;if(t.inuse_AFtest){e=n.nm_axis_value}else if(t.inuse_infokey){if(s){if(n.altinfo){e=n.altinfo[a]}}else{if(n.info){e=n.info[a]}}if(!Number.isFinite(e)){e=Number.isFinite(o)?o:me}}else{throw"unknown axis type"}n._v=e;t.minvalue=Math.min(t.minvalue,e);t.maxvalue=Math.max(t.maxvalue,e)}if(t.inuse_AFtest&&t.AFtest.testby_AFdiff){const e=Math.max(Math.abs(t.minvalue),Math.abs(t.maxvalue));t.minvalue=-e;t.maxvalue=e}}function Fe(e){if(!e.vcf)return;const t=e.vcf.numerical_axis;if(!t.in_use){return}delete t.isinteger;if(!t.info_keys&&!t.AFtest)throw"no options for numerical axis";if(t.inuse_infokey){if(!t.info_keys)throw".info_keys[] missing when inuse_infokey is true"}else if(t.inuse_AFtest){if(!t.AFtest)throw".AFtest{} missing when inuse_AFtest is true"}else{if(t.AFtest){t.inuse_AFtest=true}else{t.inuse_infokey=true}}if(t.info_keys){if(!Array.isArray(t.info_keys))throw"numerical_axis.info_keys[] is not an array";if(t.info_keys.length==0)throw"numerical_axis.info_keys[] array is empty";let n=t.info_keys.find((e=>e.in_use));if(!n){n=t.info_keys[0];n.in_use=true}if(!e.vcf.info)throw"VCF file has no INFO fields";if(t.inuse_infokey){let a=true;if(e.info_fields){const s=e.info_fields.find((e=>e.key==n.key));if(s){a=false;if(s.isinteger)t.isinteger=true}}if(a){const a=e.vcf.info[n.key];if(!a)throw"unknown INFO field for numerical axis: "+n.key;if(a.Type=="Integer")t.isinteger=true}}}if(t.AFtest){if(!t.AFtest.allowed_infofields)throw"AFtest.allowed_infofields[] is required";if(!Array.isArray(t.AFtest.allowed_infofields))throw"AFtest.allowed_infofields[] is not array";if(!t.AFtest.groups)throw"AFtest.groups[] missing";if(!Array.isArray(t.AFtest.groups))throw"AFtest.groups[] is not array";if(t.AFtest.groups.length<2)throw"AFtest.groups[] must have at least two elements";for(const n of t.AFtest.groups){if(n.is_termdb){if(!n.filter)throw".filter{} missing from a is_termdb group"}else if(n.is_infofield){if(!n.key)throw"key missing from a is_infofield group";if(!t.AFtest.allowed_infofields.find((e=>e.key==n.key)))throw"info key not found in allowed_infofields: "+n.key}else if(n.is_population){if(!n.key)throw"key missing from a is_population group";if(!e.populations)throw"tk.populations{} missing when using a population group";if(!e.populations.find((e=>e.key==n.key)))throw"unknown population by key: "+n.key}else{throw"unknown type of group from AFtest.groups[]"}}if(t.AFtest.testby_AFdiff);else if(t.AFtest.testby_fisher){if(t.AFtest.groups.find((e=>e.is_infofield)))throw"fisher test will not work for an info field"}else{throw"AFtest: do not know how to do test"}}if(t.inuse_AFtest){if(t.AFtest.testby_AFdiff)t.label="Allele frequency difference";else if(t.AFtest.testby_fisher)t.label="-log10 P-value"}else{t.label=Le(e)}}function je(e,t,n,a){t.leftaxis_vcfrow.attr("transform","translate(-"+n.dotwidth/2+","+(n.toplabelheight+n.maxradius)+")").selectAll("*").remove();const s=i().domain([n.minvalue,n.maxvalue]).range([n.axisheight,0]);const o=S().scale(s).ticks(4);if(n.isinteger){o.tickFormat(x("d"));if(n.maxvalue-n.minvalue<3){o.ticks(n.maxvalue-n.minvalue)}}r({axis:t.leftaxis_vcfrow.call(o),showline:true,fontsize:n.dotwidth});if(n.minvalue==n.maxvalue){t.leftaxis_vcfrow.append("text").attr("text-anchor","end").attr("font-size",n.dotwidth).attr("dominant-baseline","central").attr("x",a.tkleftlabel_xshift).attr("y",n.axisheight).text(n.minvalue).attr("fill","black")}let l=0;t.leftaxis_vcfrow.selectAll("text").each((function(){l=Math.max(l,this.getBBox().width)}));t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,l+15);if(n.label){const e=n.label.split(" ");const a=(n.axisheight-e.length*(n.dotwidth+1))/2;let s=0;e.forEach(((e,o)=>{t.leftaxis_vcfrow.append("text").attr("fill","black").attr("font-size",n.dotwidth).attr("dominant-baseline","central").attr("text-anchor","end").attr("y",a+(n.dotwidth+1)*o).attr("x",-(l+15)).text(e).each((function(){s=Math.max(s,this.getBBox().width+15+l)}))}));t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,s)}}function Le(e){if(!e.vcf)return;const t=e.vcf.numerical_axis;if(!t)return;if(!t.in_use)return"Disabled";if(t.inuse_infokey){const n=t.info_keys.find((e=>e.in_use));if(!n)return"Error: no key in_use";if(e.info_fields){const t=e.info_fields.find((e=>e.key==n.key));if(t&&t.label)return t.label}return n.key}if(t.inuse_AFtest)return ze();return"Error: unknown type of axis"}function ze(){return"Compare two groups"}function Ne(e,t){if(!e.vcf)return;const n=e.vcf.numerical_axis;if(!n)return;if(!n.in_use)return;if(n.inuse_infokey){return}if(n.inuse_AFtest&&n.AFtest){t.AFtest={groups:[],testby_AFdiff:n.AFtest.testby_AFdiff,testby_fisher:n.AFtest.testby_fisher};for(const a of n.AFtest.groups){if(a.is_termdb){t.AFtest.groups.push({is_termdb:true,filter:a.filterApi.getNormalRoot()});continue}if(a.is_infofield){const n={is_infofield:true,key:a.key};if(e.info_fields){const t=e.info_fields.find((e=>e.key==a.key));if(t&&t.missing_value!=undefined){n.missing_value=t.missing_value}}t.AFtest.groups.push(n);continue}if(a.is_population){const e={is_population:true,key:a.key};if(a.adjust_race){if(n.AFtest.groups.find((e=>e.is_termdb))){e.adjust_race=true}}t.AFtest.groups.push(e);continue}throw"unknown group type at xhr parameter"}const a=Ee(e);if(a){t.AFtest.termfilter=[a]}return}throw"unknown type of numeric axis"}function Ee(e){if(!e.vcf||!e.vcf.numerical_axis)return;const t=e.vcf.numerical_axis.AFtest;if(!t||!t.termfilter||!t.termfilter.inuse)return;if(t.termfilter.type!="categorical")throw"AFtest.termfilter.type is not categorical (hardcoded)";if(!t.termfilter.values)throw"termfilter.values missing";const n=t.termfilter.values[t.termfilter.value_index];if(!n)throw"unknown value selection by value_index in AFtest.termfilter";return{term:{id:t.termfilter.id,name:t.termfilter.name,type:"categorical"},values:[{key:n.key,label:n.label||n.key}]}}function Me(e,t){const n=e.vcf.numerical_axis.AFtest;const a=n.dom.holder.append("table").style("border-spacing","5px").style("border-collapse","separate").style("border-left","solid 1px #ccc");for(const[s,o]of n.groups.entries()){o.dom={};const n=a.append("tr");o.dom.td1=n.append("td").append("div").attr("class","sja_filter_tag_btn").text("GROUP "+(s+1)).style("white-space","nowrap").style("border-radius","6px").style("background-color","#ddd").style("color","#000").style("padding","6px").style("margin","3px 5px").style("font-size",".7em").on("click",(()=>{Ce(e,t,o)}));o.dom.td2=n.append("td").style("opacity",.5).style("font-size",".8em").style("white-space","nowrap");o.dom.td3=n.append("td");Oe(e,t,o)}Ie(n,e,t,a);Re(n,e,t,a);Se(e)}function Ie(e,t,n,a){const s=a.append("tr");const o=s.append("td").attr("colspan",3);o.append("span").text("TEST METHOD").style("padding","6px").style("margin","3px 5px").style("font-size",".7em");e.dom.testmethod_select=o.append("select").on("change",(()=>{e.testby_AFdiff=false;e.testby_fisher=false;const n=e.dom.testmethod_select.node().selectedIndex;if(n==0){e.testby_AFdiff=true}else if(n==1){e.testby_fisher=true}Fe(t);t.load()}));e.dom.testmethod_select.append("option").text("Value difference");e.dom.testmethod_option_fisher=e.dom.testmethod_select.append("option").text("Fisher exact test")}function Re(e,t,n,a){if(!e.termfilter)return;const s=a.append("tr");const o=s.append("td").attr("colspan",3);o.append("span").text("RESTRICT TO").style("padding","6px").style("margin","3px 5px").style("font-size",".7em");const i=o.append("select").on("change",(async()=>{const a=i.node().selectedIndex;if(a==0){e.termfilter.inuse=false}else{e.termfilter.inuse=true;e.termfilter.value_index=a-1}for(const a of e.groups){if(a.is_termdb){Pe(a,t,n)}}i.property("disabled",true);await t.load();i.property("disabled",false)}));e.dom.termfilter_select=i;if(e.termfilter.disabled){i.property("disabled",true)}e.dom.termfilter_options=[];e.dom.termfilter_options.push(i.append("option").text("No restriction"));for(const t of e.termfilter.values){e.dom.termfilter_options.push(i.append("option").text(t.label||t.key))}}function Se(e){const t=e.vcf.numerical_axis.AFtest;if(t.groups[0].is_population&&t.groups[1].is_population){t.groups[0].adjust_race=false;t.groups[1].adjust_race=false}else{const e=t.groups.find((e=>e.is_population));if(e){if(e.allowto_adjust_race){e.adjust_race=t.groups.find((e=>e.is_termdb))!=undefined}else{delete e.adjust_race}}}if(t.testby_fisher){if(t.groups.find((e=>e.is_infofield))){t.testby_fisher=false;t.testby_AFdiff=true;t.dom.testmethod_option_fisher.property("disabled",true)}else{t.dom.testmethod_option_fisher.property("disabled",false)}}t.dom.testmethod_select.node().selectedIndex=t.testby_AFdiff?0:1;if(t.termfilter){t.termfilter.disabled=false;if(!t.groups.find((e=>e.is_termdb))){if(!t.groups.find((t=>{if(t.is_population){const n=e.populations.find((e=>e.key==t.key));if(n&&n.termfilter)return t}return}))){t.termfilter.inuse=false;t.termfilter.disabled=true}}if(t.termfilter.disabled){t.dom.termfilter_select.property("disabled",true)}else{t.dom.termfilter_select.property("disabled",false);const n=t.groups.filter((e=>e.is_population));if(n.length){const a=new Set;for(const[s,o]of t.termfilter.values.entries()){for(const t of n){const n=e.populations.find((e=>e.key==t.key));if(n.termfilter){if(!n.sets.find((e=>e.termfilter_value==o.key))){a.add(s);break}}}}if(a.size){for(const e of a){t.dom.termfilter_options[e+1].property("disabled",true)}if(a.has(t.termfilter.value_index)){t.termfilter.inuse=false}}else{for(const e of t.dom.termfilter_options)e.property("disabled",false)}}}t.dom.termfilter_select.node().selectedIndex=t.termfilter.inuse?1+t.termfilter.value_index:0}}function Ce(e,t,n){const a=e.vcf.numerical_axis.AFtest;const s=e.legend.tip.clear();const o=[];if(e.mds&&e.mds.termdb){let a;if(n.filter){const t=E(n.filter,"cohortFilter");if(t&&e.mds.termdb.selectCohort){const n=t.tvs.values.map((e=>e.key)).sort().join(",");a=e.mds.termdb.selectCohort.values.findIndex((e=>e.keys.sort().join(",")===n))}}o.push({label:"Clinical info",callback:async o=>{const l={holder:o,state:{genome:t.genome.name,dslabel:e.mds.label,activeCohort:a},barchart:{bar_click_override:e=>{s.hide();if(e.length==0)return;const t=e.find((e=>e.tag==="cohortFilter"));if(t){t.renderAs="htmlSelect";t.selectOptionsFrom="selectCohort"}n.filter={type:"tvslst",join:e.length==1?"":"and",in:true,lst:e};delete n.key;delete n.is_infofield;delete n.is_population;delete n.filterApi;n.is_termdb=true;i()}}};const r=M(Ue(e));if(r)l.state.termfilter={filter:r};R(l)}})}if(a.allowed_infofields){o.push({label:"Numerical value",callback:t=>{for(const o of a.allowed_infofields){if(n.is_infofield&&n.key==o.key){continue}const a=e.info_fields.find((e=>e.key==o.key));t.append("div").attr("class","sja_menuoption").text(a.label).on("click",(async()=>{s.hide();delete n.is_termdb;delete n.is_population;delete n.filterApi;if(n.dom.samplehandle){n.dom.samplehandle.remove();delete n.dom.samplehandle}n.is_infofield=true;n.key=o.key;i()}))}}})}if(e.populations){o.push({label:"Population",callback:t=>{for(const a of e.populations){if(n.is_population&&n.key==a.key){continue}t.append("div").attr("class","sja_menuoption").text(a.label).on("click",(async()=>{s.hide();delete n.is_termdb;delete n.is_infofield;delete n.filterApi;if(n.dom.samplehandle){n.dom.samplehandle.remove();delete n.dom.samplehandle}n.is_population=true;n.key=a.key;n.allowto_adjust_race=a.allowto_adjust_race;n.adjust_race=a.adjust_race;i()}))}}})}c(s.d.append("div").style("margin","13px"),o);s.showunder(n.dom.td1.node());async function i(){a.dom.holder.selectAll("*").remove();a.groups.forEach((e=>delete e.filterApi));Me(e,t);n.dom.td2.text("UPDATING...");Fe(e);await e.load();n.dom.td2.text(n.is_termdb||n.is_population?"ALLELE FREQUENCY OF":"VALUE OF")}}function Oe(e,t,n){if(n.is_termdb){n.dom.td2.text("ALLELE FREQUENCY OF");Pe(n,e,t);return}if(n.is_infofield){n.dom.td2.text("VALUE OF");Be(n,e);return}if(n.is_population){n.dom.td2.text("ALLELE FREQUENCY OF");qe(n,e);return}n.dom.td3.text("Unknown group type!")}function Ue(e){const t=[];const n=Ee(e);if(n){t.push({type:"tvslst",join:"",in:true,lst:[{type:"tvs",tvs:n}]})}if(e.sample_termfilter){t.push(JSON.parse(JSON.stringify(e.sample_termfilter)))}return t}function Te(e,t){const n=JSON.parse(JSON.stringify(e));n.tag="filterUiRoot";const a={type:"tvslst",join:"and",in:true,lst:[n]};const s=Ue(t);if(s.length){a.lst.push(M(s))}return a}function Pe(e,t,n){if(!e.filterApi){e.filterApi=N({holder:e.dom.td3,vocab:{route:"termdb",genome:n.genome.name,dslabel:t.dslabel},emptyLabel:"Entire cohort",termdbConfig:n.genome.datasets[t.dslabel].termdb,callback:async n=>{e.filter=n;await t.load()}})}e.filterApi.main(Te(e.filter,t));if(!e.dom.samplehandle){console.log(501);e.dom.samplehandle=e.dom.td3.append("span").style("margin-left","15px").style("opacity",".6").attr("class","sja_clbtext").text("Loading...").on("click",(()=>{t.legend.tip.clear().showunder(e.dom.samplehandle.node());R({holder:t.legend.tip.d.append("div").style("margin","5px"),state:{genome:n.genome.name,dslabel:t.mds.label,termfilter:{filter:e.filterApi.getNormalRoot()}},barchart:{bar_click_opts:[]}})}))}}function Be(e,t){const n=e.dom.td3.append("span");const[a,s]=U(n);a.on("change",(async()=>{const n=a.node().value;const o=t.info_fields.find((e=>e.key==n));e.key=n;s.html((o?o.label:n)+'&nbsp; <span style="font-size:.7em">LOADING...</span>');await t.load();s.html((o?o.label:n)+" &#9662;");a.style("width",s.node().offsetWidth+"px")}));for(const e of t.vcf.numerical_axis.AFtest.allowed_infofields){const n=t.info_fields.find((t=>t.key==e.key));a.append("option").attr("value",e.key).text(n?n.label:e.key)}a.node().value=e.key;const o=t.info_fields.find((t=>t.key==e.key));s.style("border-radius","6px").style("background-color","#ddd").style("color","black").style("padding","3px 6px 3px 6px").style("margin-left","5px").html(o.label+" &#9662;");a.style("width",s.node().offsetWidth+"px")}function qe(e,t){const n=e.dom.td3.append("span");const a=t.populations.find((t=>t.key==e.key));const s=t.vcf.numerical_axis.AFtest;const[o,i]=U(n);o.on("change",(async()=>{const n=o.node().value;const a=t.populations.find((e=>e.key==n));e.key=n;e.allowto_adjust_race=a.allowto_adjust_race;e.adjust_race=a.adjust_race;r(l);Se(t);i.html(a.label+' &nbsp;<span style="font-size:.7em">LOADING...</span>');await t.load();i.html(a.label+(t.populations.length>1?" &#9662;":""));o.style("width",i.node().offsetWidth+"px")}));for(const e of t.populations){o.append("option").attr("value",e.key).text(e.label)}o.node().value=e.key;i.style("border-radius","6px").style("background-color","#ddd").style("color","black").style("padding","3px 6px 3px 6px").style("margin-left","5px").html(a.label+(t.populations.length>1?" &#9662;":""));o.style("width",i.node().offsetWidth+"px");const l=n.append("span");r(l);function r(n){n.selectAll("*").remove();const a=s.groups.find((t=>t.key==e.key));if(a.allowto_adjust_race){const e=n.append("label");e.append("input").attr("type","checkbox").style("margin-left","10px").property("disabled",!s.groups.find((e=>e.is_termdb))||!s.groups.find((e=>e.is_population))).property("checked",a.adjust_race).on("change",(async()=>{a.adjust_race=!a.adjust_race;o.html("&nbsp;Loading...");await t.load();o.html("&nbsp;Adjust race background")}));const o=e.append("span").html("&nbsp;Adjust race background")}}}function Je(e,t){const n=e.vcf.numerical_axis.AFtest.groups[t];if(!n)throw"index out of bound";if(n.is_infofield){const t=e.info_fields.find((e=>e.key==n.key));return t?t.label:n.key}if(n.is_population){const t=e.populations.find((e=>e.key==n.key));return t?t.label:n.key}if(n.is_termdb){return"Group "+(t+1)}throw"unknown AFtest group type"}function Ge(e,t){if(!e.vcf)return;const n=e.vcf.numerical_axis;if(!n)return;const a=e.legend.table.append("tr");a.append("td").style("text-align","right").style("opacity",.3).text("Numerical axis");const s=a.append("td");const o=s.append("table").append("tr");const i=o.append("td").append("button").style("margin","0px 10px");const l=o.append("td");const r=Ve(i,l,e,t);r();i.on("click",(()=>{De(i,e,t,r)}))}function De(e,t,n,a){t.legend.tip.clear();const s=t.legend.tip.d;const o=t.vcf.numerical_axis;if(o.info_keys){for(const e of o.info_keys){if(o.inuse_infokey&&e.in_use){continue}let n=e.key;if(t.info_fields){const a=t.info_fields.find((t=>t.key==e.key));if(a)n=a.label}s.append("div").text(n).attr("class","sja_menuoption").on("click",(()=>{o.in_use=true;o.inuse_AFtest=false;o.inuse_infokey=true;o.info_keys.forEach((e=>e.in_use=false));e.in_use=true;i()}))}}if(o.AFtest&&!o.inuse_AFtest){s.append("div").style("margin-top","10px").attr("class","sja_menuoption").text(ze()).on("click",(()=>{o.in_use=true;o.inuse_infokey=false;o.inuse_AFtest=true;if(o.AFtest&&o.AFtest.groups){for(const e of o.AFtest.groups)delete e.filterApi}i()}))}if(o.in_use){s.append("div").style("margin-top","10px").attr("class","sja_menuoption").html("&times;&nbsp;&nbsp;Disable").on("click",(()=>{o.in_use=false;o.inuse_infokey=false;o.inuse_AFtest=false;i()}))}t.legend.tip.showunder(e.node());async function i(){t.legend.tip.hide();a();e.node().disabled=true;await t.load();e.node().disabled=false}}function Ve(e,t,n,a){return()=>{Fe(n);e.html(Le(n)+" &#9662;");t.selectAll("*").remove();const s=n.vcf.numerical_axis;if(!s.in_use){return}if(s.inuse_infokey){return}if(s.inuse_AFtest){n.vcf.numerical_axis.AFtest.dom={holder:t};Me(n,a);return}throw"do not know what is in use for numerical axis"}}function Ye(e,t){if(!e.info_fields&&!e.variantcase_fields)return;e.legend.variantfilter={};const n=e.legend.table.append("tr");n.append("td").style("text-align","right").style("opacity",.3).text("Variant Filters");const a=n.append("td").style("padding-left","5px").append("table").append("tr");e.legend.variantfilter.button=a.append("td").append("div").style("display","inline-block").attr("class","sja_menuoption").text("+").style("border-radius","3px").style("border","solid 1px #ddd").on("click",(()=>{Qe(e,t)}));e.legend.variantfilter.holder=a.append("td").style("padding-left","10px");Ze(e)}function He(e,t,n){const a=e.legend.variantfilter.holder.append("div").style("display","inline-block").style("margin-top","5px");a.append("div").style("display","inline-block").style("border-radius","6px 0 0 6px").style("color","#000").style("border-color","#ddd").style("border-style","solid").style("border-width","2px").style("padding","4px").style("margin-left","5px").style("font-size",".7em").style("text-transform","uppercase").text(t.label);const s=a.append("div").style("display","inline-block");if(t.iscategorical){Ke(e,t,s,a)}else if(t.isinteger||t.isfloat){et(e,t,s,a)}else if(t.isflag){tt(e,t,s)}else{throw"unknown info type"}let o=false;a.append("div").attr("class","sja_filter_tag_btn").style("border-radius","0 6px 6px 0").style("background-color","#ddd").style("padding","2px 6px 4px 6px").style("margin-right","1px").style("color","#000").html("&#215;").on("click",(async n=>{if(o)return;o=true;n.target.innerHTML="deleting...";delete t.isactivefilter;if(t.iscategorical){delete t.unannotated_ishidden;for(const e of t.values)delete e.ishidden}else if(t.isflag){delete t.remove_yes;delete t.remove_no}await e.load();a.remove()}))}function Qe(e,t){const n=e.legend.tip;n.clear();const a=n.d.append("table").style("border-spacing","5px").style("border-collapse","separate");if(e.info_fields){for(const n of e.info_fields){const s=a.append("tr");s.append("td").style("padding","5px").style("text-align","right").style("opacity",.5).text(n.label);const o=s.append("td").style("padding","5px");if(n.iscategorical){We(n,o,(async()=>{n.isactivefilter=nt(n)>0;await e.load();Ze(e)}))}else if(n.isinteger||n.isfloat){Xe(n,o,e,t)}else if(n.isflag){$e(n,o,e)}else{throw"unknown info type"}}}if(e.variantcase_fields){console.log("list variantcase fields in menu")}e.legend.tip.showunder(e.legend.variantfilter.button.node())}function We(e,t,n){t.selectAll("*").remove();for(const a of e.values){const s=t.append("div").style("display","inline-block").style("padding","2px 10px").attr("class","sja_clb");s.append("div").attr("class","sja_mcdot").style("display","inline-block").style("background","#aaa").style("padding","2px 3px").text(e._data?e._data.value2count[a.key]:"");const o=s.append("div").style("display","inline-block").style("padding","2px 5px").style("text-decoration",a.ishidden?"line-through":"none").text(a.label);s.on("click",(async()=>{o.text("Loading...");a.ishidden=!a.ishidden;await n();o.style("text-decoration",a.ishidden?"line-through":"none").text(a.label)}))}if(e._data.unannotated_count){const a=t.append("div").style("display","inline-block").style("padding","2px 10px").attr("class","sja_clb");a.append("div").attr("class","sja_mcdot").style("display","inline-block").style("background","#aaa").style("padding","2px 3px").text(e._data?e._data.unannotated_count:0);const s=a.append("div").style("display","inline-block").style("padding","2px 5px").style("text-decoration",e.unannotated_ishidden?"line-through":"none").text("Unannotated");a.on("click",(async()=>{s.text("Loading...");e.unannotated_ishidden=!e.unannotated_ishidden;await n();s.style("text-decoration",e.unannotated_ishidden?"line-through":"none").text("Unannotated")}))}}function $e(e,t,n,a){const s=t.append("div").style("display","inline-block").style("padding","3px 10px").attr("class","sja_clb").on("click",(async()=>{if(e.remove_yes){e.remove_yes=false}else{e.remove_yes=true;e.remove_no=false}o.style("text-decoration",e.remove_yes?"line-through":"default");e.isactivefilter=e.remove_yes||e.remove_no;await n.load();Ze(n)}));s.append("div").attr("class","sja_mcdot").style("display","inline-block").style("background","#aaa").style("padding","2px 3px").text(e._data?e._data.count_yes:0);const o=s.append("div").style("display","inline-block").style("padding","4px 5px").text("Yes").style("text-decoration",e.remove_yes?"line-through":"default");const i=t.append("div").style("display","inline-block").style("padding","3px 10px").attr("class","sja_clb").on("click",(async()=>{if(e.remove_no){e.remove_no=false}else{e.remove_no=true;e.remove_yes=false}l.style("text-decoration",e.remove_no?"line-through":"default");e.isactivefilter=e.remove_yes||e.remove_no;await n.load();Ze(n)}));i.append("div").attr("class","sja_mcdot").style("display","inline-block").style("background","#aaa").style("padding","2px 3px").text(e._data?e._data.count_no:0);const l=i.append("div").style("display","inline-block").style("padding","4px 5px").style("text-decoration",e.remove_no?"line-through":"default").text("No")}function Xe(e,t,n,a){t.selectAll("*").remove();const s='<span style="font-family:Times;font-style:italic">x</span>';const i=t.append("input").attr("type","number").attr("value",e.range.start).style("width","60px").property("disabled",e.range.startunbounded?true:false).on("keyup",(async t=>{if(!o(t))return;if(!e.isactivefilter)return;i.property("disabled",true);await f();i.property("disabled",false).node().focus()}));const l=t.append("select").style("margin-left","10px").on("change",(async t=>{const n=t.target.selectedIndex;if(n==2){e.range.startunbounded=true;i.property("disabled",true)}else{delete e.range.startunbounded;e.range.startinclusive=n==0;i.property("disabled",false)}if(!e.isactivefilter)return;l.property("disabled",true);await f();l.property("disabled",false).node().focus()}));l.append("option").html("&le;");l.append("option").html("&lt;");l.append("option").html("&#8734;");l.node().selectedIndex=e.range.startunbounded?2:e.range.startinclusive?0:1;t.append("div").style("display","inline-block").style("padding","3px 10px").html(s);const r=t.append("select").style("margin-right","10px").on("change",(async t=>{const n=t.target.selectedIndex;if(n==2){e.range.stopunbounded=true;d.property("disabled",true)}else{delete e.range.stopunbounded;e.range.stopinclusive=n==0;d.property("disabled",false)}if(!e.isactivefilter)return;r.property("disabled",true);await f();r.property("disabled",false).node().focus()}));r.append("option").html("&le;");r.append("option").html("&lt;");r.append("option").html("&#8734;");r.node().selectedIndex=e.range.stopunbounded?2:e.range.stopinclusive?0:1;const d=t.append("input").attr("type","number").style("width","60px").attr("value",e.range.stop).property("disabled",e.range.stopunbounded?true:false).on("keyup",(async t=>{if(!o(t))return;if(!e.isactivefilter)return;d.property("disabled",true);await f();d.property("disabled",false).node().focus()}));const p=Math.random();const c=t.append("input").attr("type","checkbox").style("margin","0px 5px 0px 10px").attr("id",p).property("checked",e.isactivefilter).on("change",(async()=>{c.property("disabled",true);await f();c.property("disabled",false)}));t.append("label").attr("for",p).text("APPLY").style("font-size",".8em").attr("class","sja_clbtext");async function f(){e.isactivefilter=c.node().checked;try{if(e.range.startunbounded&&e.range.stopunbounded)throw"Both ends can not be unbounded";const t=e.range.startunbounded?null:Number(i.property("value"));const s=e.range.stopunbounded?null:Number(d.property("value"));if(t!=null&&s!=null&&t>=s)throw"start must be lower than stop";e.range.start=t;e.range.stop=s;await n.load();Ze(n,a)}catch(e){window.alert(e)}}}function Ze(e,t){e.legend.variantfilter.holder.selectAll("*").remove();if(e.info_fields){for(const t of e.info_fields){if(!t.isfilter)continue;if(t.isactivefilter){He(e,t)}}}if(e.variantcase_fields){console.log("to list active variantcase fields")}}function Ke(e,t,n,a){n.selectAll("*").remove();const s=e.legend.tip;for(const s of t.values){if(s.ishidden){s.htmlspan=n.append("div").attr("class","sja_filter_tag_btn").style("background-color","#ddd").style("padding","3px 6px 5px 6px").style("margin-right","1px").style("font-size",".9em").style("color","#000").text((t._data?"("+t._data.value2count[s.key]+") ":"")+s.label).style("text-decoration","line-through").on("click",(async()=>{delete s.ishidden;s.htmlspan.text("Loading...");await e.load();if(nt(t)==0){delete t.isactivefilter;a.remove()}else{Ke(e,t,n,a)}}))}}if(t.unannotated_ishidden){t.unannotated_htmlspan=n.append("div").attr("class","sja_filter_tag_btn").style("background-color","#ddd").style("padding","3px 6px 5px 6px").style("margin-right","1px").style("font-size",".9em").style("color","#000").text((t._data?"("+t._data.unannotated_count+") ":"")+"Unannotated").style("text-decoration","line-through").on("click",(async()=>{delete t.unannotated_ishidden;t.unannotated_htmlspan.text("Loading...");await e.load();if(nt(t)==0){delete t.isactivefilter;a.remove()}else{Ke(e,t,n,a)}}))}if(nt(t)<=t.values.length){const o=n.append("div").attr("class","sja_filter_tag_btn").style("background-color","#ddd").style("color","#000").style("padding","2px 6px 4px 6px").style("margin-right","1px").html("&#43;").on("click",(()=>{s.clear().showunder(o.node());const i=s.d.append("div").style("display","block");for(const o of t.values){if(!o.ishidden){const l=i.append("div").attr("class","sja_menuoption");l.append("div").style("display","inline-block").style("padding","1px 5px").text((t._data?"("+t._data.value2count[o.key]+") ":"")+o.label);l.on("click",(async()=>{s.hide();o.ishidden=true;Ke(e,t,n,a);await e.load()}))}}if(t._data.unannotated_count&&!t.unannotated_ishidden){const o=i.append("div").attr("class","sja_menuoption");o.append("div").style("display","inline-block").style("padding","1px 5px").text((t._data?"("+t._data.unannotated_count+") ":"")+"Unannotated");o.on("click",(async()=>{s.hide();t.unannotated_ishidden=true;Ke(e,t,n,a);await e.load()}))}}))}}function et(e,t,n,a){n.selectAll("*").remove();const s=n.append("div").attr("class","sja_filter_tag_btn").style("background-color","#ddd").style("color","#000").style("padding","3px 6px 4px 6px").style("margin-right","1px").style("font-size",".9em");s.selectAll("*").remove();const i='<span style="font-family:Times;font-style:italic">x</span>';if(t.range.startunbounded){s.html(i+" "+(t.range.stopinclusive?"&le;":"&lt;")+" "+t.range.stop)}else if(t.range.stopunbounded){s.html(i+" "+(t.range.startinclusive?"&ge;":"&gt;")+" "+t.range.start)}else{s.html(t.range.start+" "+(t.range.startinclusive?"&le;":"&lt;")+" "+i+" "+(t.range.stopinclusive?"&le;":"&lt;")+" "+t.range.stop)}t.htmlspan=s.append("div").style("display","inline-block").style("background-color","#ddd").style("color","#000").style("padding-left","3px").text(t._data?"("+t._data.filteredcount+" filtered)":"");s.on("click",(()=>{const l=e.legend.tip;l.clear();const r=l.d.append("div").style("display","block").style("padding","3px 5px");const d=r.append("input").attr("type","number").attr("value",t.range.start).style("width","60px").on("keyup",(async e=>{if(!o(e))return;d.property("disabled",true);await u();d.property("disabled",false)}));const p=r.append("select").style("margin-left","10px");p.append("option").html("&le;");p.append("option").html("&lt;");p.append("option").html("&#8734;");p.node().selectedIndex=t.range.startunbounded?2:t.range.startinclusive?0:1;r.append("div").style("display","inline-block").style("padding","3px 10px").html(i);const c=r.append("select").style("margin-right","10px");c.append("option").html("&le;");c.append("option").html("&lt;");c.append("option").html("&#8734;");c.node().selectedIndex=t.range.stopunbounded?2:t.range.stopinclusive?0:1;const f=r.append("input").attr("type","number").style("width","60px").attr("value",t.range.stop).on("keyup",(async e=>{if(!o(e))return;f.property("disabled",true);await u();f.property("disabled",false)}));l.d.append("div").attr("class","sja_menuoption").style("text-align","center").text("APPLY").on("click",(()=>{l.hide();u()}));l.showunder(s.node());async function u(){try{if(p.node().selectedIndex==2&&c.node().selectedIndex==2)throw"Both ends can not be unbounded";const s=p.node().selectedIndex==2?null:Number(d.node().value);const o=c.node().selectedIndex==2?null:Number(f.node().value);if(s!=null&&o!=null&&s>=o)throw"start must be lower than stop";if(p.node().selectedIndex==2){t.range.startunbounded=true;delete t.range.start}else{delete t.range.startunbounded;t.range.start=s;t.range.startinclusive=p.node().selectedIndex==0}if(c.node().selectedIndex==2){t.range.stopunbounded=true;delete t.range.stop}else{delete t.range.stopunbounded;t.range.stop=o;t.range.stopinclusive=c.node().selectedIndex==0}t.htmlspan.text("Loading...");await e.load();et(e,t,n,a)}catch(e){window.alert(e)}}}))}function tt(e,t,n,a){n.selectAll("*").remove();t.htmlspan=n.append("div").attr("class","sja_filter_tag_btn").style("background-color","#ddd").style("color","#000").style("padding","3px 6px 5px 6px").style("margin-right","1px").style("font-size",".9em").style("text-decoration","line-through").text((t._data?"("+(t.remove_yes?t._data.count_yes:t._data.count_no)+") ":"")+(t.remove_no?"No":"Yes")).on("click",(async()=>{t.remove_no=!t.remove_no;t.remove_yes=!t.remove_yes;t.htmlspan.text("Loading...");await e.load();tt(e,t,n)}))}function nt(e){let t=e.unannotated_ishidden?1:0;for(const n of e.values){if(n.ishidden)t++}return t}function at(e,t,n){if(!t.ld)return 0;if(!e.ld)return 0;let a=0;for(const s of t.ld.tracks){const o=e.ld[s.name];if(!o){delete s.g;continue}s.yoff=a;s.g={g:t.g_ldrow.append("g").attr("transform","translate(0,"+a+")")};s.g.label=t.gleft_ldrow.append("text").text(s.name+" LD").attr("font-size",n.labelfontsize).attr("x",n.tkleftlabel_xshift).attr("text-anchor","end").each((function(){t.leftLabelMaxwidth=Math.max(t.leftLabelMaxwidth,this.getBBox().width)}));let i=0;for(const e of o.rglst){const t=s.g.g.append("g").attr("transform","translate("+e.xoff+",0)");if(e.rangetoobig){e.text_rangetoobig=t.append("text").text(e.rangetoobig).attr("text-anchor","middle").attr("dominant-baseline","central").attr("x",e.width/2);i=Math.max(i,50);continue}if(e.img){t.append("image").attr("width",e.width).attr("height",e.img.height).attr("xlink:href",e.img.src);i=Math.max(i,e.img.height);continue}}s.height=i;s.g.label.attr("y",a+Math.min(i/2,t.ld.connheight));for(const e of o.rglst){if(e.rangetoobig){e.text_rangetoobig.attr("y",i/2)}}a+=i}return a}function st(e,t){if(!e.ld)return;const n=e.legend.table.append("tr");n.append("td").style("text-align","right").style("opacity",.3).html("LD r<sup>2</sup>");const a=n.append("td").style("padding","10px");for(const n of e.ld.tracks){const s=a.append("div").style("margin-bottom","5px");O({holder:s,labeltext:n.name,checked:n.shown,callback:async()=>{if(n.shown){n.shown=false;n.g.label.remove();n.g.g.remove();e.height_main-=n.height;{let t=false;for(const a of e.ld.tracks){if(!a.g)continue;if(a.name==n.name){t=true}else{if(t){a.yoff-=n.height;a.g.label.transition().attr("y",a.yoff+e.ld.connheight);a.g.g.transition().attr("transform","translate(0,"+a.yoff+")")}}}}t.block_setheight();return}n.shown=true;await e.load()}})}{const t=a.append("div");const n=t.append("select").on("input",(()=>{const t=n.node().selectedIndex;if(t==0){delete e.ld.overlaywith;s.style("display","none");e.skewer2.selectAll(".sja_aa_disk_fill").attr("fill",(e=>J(e)))}else{e.ld.overlaywith=e.ld.tracks[t-1].name;s.style("display","inline-block")}}));n.append("option").text("No overlay");for(const t of e.ld.tracks){n.append("option").text(t.name)}const s=t.append("div").style("display","none").style("margin-left","10px");const o=[];for(let t=0;t<=1;t+=.1){o.push(e.ld.overlay.r2_to_color(t))}const l=s.append("svg");const d=20;const p=15;const c=10;const f=150;r({axis:l.append("g").attr("transform","translate("+c+","+d+")").call(C().scale(i().domain([0,1]).range([0,f])).ticks(4)),fontsize:12});const u=l.append("defs").append("linearGradient").attr("id","grad");u.append("stop").attr("offset","0%").attr("stop-color",e.ld.overlay.color_0);u.append("stop").attr("offset","100%").attr("stop-color",e.ld.overlay.color_1);l.append("rect").attr("x",c).attr("y",d).attr("width",f).attr("height",p).attr("fill","url(#grad)");l.attr("width",c*2+f).attr("height",d+p)}}function ot(e,t){if(!e.legend)e.legend={};e.legend.tip=new _({padding:"0px"});const[n,a]=z(t,e.name);e.tr_legend=n;const s=a.append("table").style("border-spacing","5px").style("border-collapse","separate");e.legend.table=s;Ge(e,t);Ye(e,t);it(e);st(e,t);pt(e,t)}function it(e){if(!e.legend.mclass)e.legend.mclass={};if(!e.legend.mclass.hiddenvalues)e.legend.mclass.hiddenvalues=new Set;e.legend.mclass.row=e.legend.table.append("tr");e.legend.mclass.row.append("td").style("text-align","right").style("opacity",.8).text("Mutation");e.legend.mclass.holder=e.legend.mclass.row.append("td")}function lt(e,t,n){if(e.mclass2count){rt(e.mclass2count,t)}if(e.info_fields){dt(e.info_fields,t)}if(e.AFtest_termdbgroup){let n=t.vcf.numerical_axis.AFtest.groups[0];if(n.is_termdb){n.dom.samplehandle.text("n="+e.AFtest_termdbgroup[0].samplecount+", view stats");n.popsetaverage=e.AFtest_termdbgroup[0].popsetaverage}n=t.vcf.numerical_axis.AFtest.groups[1];if(n.is_termdb){n.dom.samplehandle.text("n="+e.AFtest_termdbgroup[1].samplecount+", view stats");n.popsetaverage=e.AFtest_termdbgroup[1].popsetaverage}}}function rt(t,n){n.legend.mclass.holder.selectAll("*").remove();const a=[],s=[];for(const e in t){const o={k:e,count:t[e]};if(n.legend.mclass.hiddenvalues.has(e)){s.push(o)}else{a.push(o)}}a.sort(((e,t)=>t.count-e.count));s.sort(((e,t)=>t.count-e.count));for(const t of a){let o,i,l="#858585";if(Number.isInteger(t.k)){o=b[t.k];if(t.dt==v){i="Copy number variation."}else if(t.dt==k){i="Loss of heterozygosity."}else if(t.dt==w){l=e[A].color;i="Internal tandem duplication."}else if(t.dt==F){i="Structural variation of DNA."}else if(t.dt==j){i="Fusion gene from RNA-seq."}}else{o=e[t.k].label;l=e[t.k].color;i=e[t.k].desc}const r=n.legend.mclass.holder.append("div").attr("class","sja_clb").style("display","inline-block").on("click",(()=>{n.legend.tip.clear().d.append("div").attr("class","sja_menuoption").text("Hide").on("click",(()=>{n.legend.mclass.hiddenvalues.add(t.k);n.legend.tip.hide();n.load()}));n.legend.tip.d.append("div").attr("class","sja_menuoption").text("Show only").on("click",(()=>{for(const e of a){n.legend.mclass.hiddenvalues.add(e.k)}n.legend.mclass.hiddenvalues.delete(t.k);n.legend.tip.hide();n.load()}));if(s.length){n.legend.tip.d.append("div").attr("class","sja_menuoption").text("Show all").on("click",(()=>{n.legend.mclass.hiddenvalues.clear();n.legend.tip.hide();n.load()}))}n.legend.tip.d.append("div").style("padding","10px").style("font-size",".8em").style("width","150px").text(i);n.legend.tip.showunder(r.node())}));r.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background",l).html(t.count>1?t.count:"&nbsp;");r.append("div").style("display","inline-block").style("color",l).html("&nbsp;"+o)}for(const t of s){let a=false;n.legend.mclass.holder.append("div").style("display","inline-block").attr("class","sja_clb").style("text-decoration","line-through").style("opacity",.3).text("("+t.count+") "+(Number.isInteger(t.k)?b[t.k]:e[t.k].label)).on("click",(async e=>{if(a)return;a=true;n.legend.mclass.hiddenvalues.delete(t.k);e.target.innerHTML="Updating...";await n.load()}))}}function dt(e,t){for(const n in e){const a=t.info_fields.find((e=>e.key==n));if(!a){console.log("info field not found by key: "+n);continue}a._data=e[n];if(a.isactivefilter){if(a.iscategorical){if(a.unannotated_htmlspan)a.unannotated_htmlspan.text("("+(a._data.unannotated_count||0)+") Unannotated");for(const e of a.values){if(e.htmlspan){e.htmlspan.text("("+(a._data.value2count[e.key]||0)+") "+e.label)}}}else if(a.isinteger||a.isfloat){if(a.htmlspan)a.htmlspan.text("("+a._data.filteredcount+" filtered)")}else if(a.isflag){if(a.htmlspan)a.htmlspan.text("("+(a.remove_yes?a._data.count_yes:a._data.count_no)+") "+(a.remove_no?"No":"Yes"))}else{throw"unknown info type"}}}}function pt(e,t){if(e.mds&&e.mds.hide_genotypedownload)return;const n=e.legend.table.append("tr").append("td").attr("colspan",2).append("button").text("Export genotype");n.on("click",(async()=>{n.property("disabled",true);const a=vt(e,t);a.exportgenotype=true;delete a.trigger_ld;delete a.AFtest;const s=await d("mds2",a);if(s.error)throw s.error;const o=document.createElement("a");document.body.appendChild(o);o.addEventListener("click",(function(){o.download="genotype.txt";const e=new Blob([s.exportgenotype],{type:"octet/stream"});o.href=URL.createObjectURL(e);document.body.removeChild(o)}),false);o.click();n.property("disabled",false)}))}function ct(e,t){return()=>xt(e,t)}async function ft(e,t){e.load=ct(e,t);e.tip2=new _({padding:"0px"});if(e.dslabel){const n=t.genome.datasets[e.dslabel];if(!n)throw"dataset not found for "+e.dslabel;if(n.mdsIsUninitiated){const e=await s(`getDataset?genome=${t.genome.name}&dsname=${n.label}`);if(e.error)throw e.error;if(!e.ds)throw"ds missing";Object.assign(n,e.ds);delete n.mdsIsUninitiated}e.mds=n;if(!e.mds.track)throw"mds.track{} missing: dataset not configured for mds2 track";ht(e)}else{if(!e.name)e.name="Unnamed";if(e.vcf){await G(e.vcf,t.genome)}}ut(e);yt(e);e.tklabel.text(e.name);mt(e,t);gt(e);e.clear=()=>{if(e.g_vcfrow)e.g_vcfrow.selectAll("*").remove();if(e.leftaxis_vcfrow)e.leftaxis_vcfrow.selectAll("*").remove();if(e.g_ldrow)e.g_ldrow.selectAll("*").remove();if(e.gleft_ldrow)e.gleft_ldrow.selectAll("*").remove()};e.config_handle=t.maketkconfighandle(e).on("click",(()=>{}));ot(e,t)}function ut(e){if(e.termdb2groupAF){if(!e.mds)throw".mds missing";if(!e.mds.termdb)throw".mds.termdb missing";if(!e.vcf)throw"tk.vcf missing";if(!e.vcf.numerical_axis){e.vcf.numerical_axis={}}e.vcf.numerical_axis.termdb2groupAF=e.termdb2groupAF;delete e.termdb2groupAF}if(e.numericaxis_inuse_ebgatest){if(!e.vcf)throw"tk.vcf missing";if(!e.vcf.numerical_axis){e.vcf.numerical_axis={}}e.vcf.numerical_axis.inuse_ebgatest=true;delete e.vcf.numerical_axis.inuse_infokey;delete e.vcf.numerical_axis.inuse_termdb2groupAF}}function mt(e,t){if(!e.vcf)return;e.g_vcfrow=e.glider.append("g");e.g_vcfrow_layer2=e.glider.append("g");e.leftaxis_vcfrow=e.gleft.append("g");e.vcfrow_label_numbervariants=t.maketklefthandle(e,15).on("click",(()=>{if(!e.__vcf_data||!e.__vcf_data.vcf||!e.__vcf_data.vcf.rglst)return;const t=[];for(const n of e.__vcf_data.vcf.rglst){if(!n.variants)continue;for(const e of n.variants){t.push(e.chr+":"+(e.pos+1)+" "+e.ref+">"+e.altstr)}}e.tktip.showunder(e.vcfrow_label_numbervariants.node());e.tktip.clear().d.append("textarea").attr("cols",25).attr("rows",20).text(t.join("\n"))}));try{Fe(e)}catch(e){throw"numerical axis error: "+e}}function gt(e){if(!e.ld)return;e.g_ldrow=e.glider.append("g");e.gleft_ldrow=e.gleft.append("g");if(e.g_vcfrow_layer2){e.ld.overlay.vcfcircle=e.g_vcfrow_layer2.append("circle").attr("fill","none").attr("stroke","black").attr("stroke-width",2).attr("stroke-opacity",0)}}function ht(e){if(!e.mds)return;e.name=e.mds.track.name;if(e.mds.track.vcf){if(!e.vcf)e.vcf={};const t=JSON.parse(JSON.stringify(e.mds.track.vcf));for(const n in t){if(e.vcf[n]==undefined)e.vcf[n]=t[n]}if(t.numerical_axis){for(const n in t.numerical_axis){if(e.vcf.numerical_axis[n]==undefined)e.vcf.numerical_axis[n]=t.numerical_axis[n]}if(t.numerical_axis.AFtest){for(const n in t.numerical_axis.AFtest){if(e.vcf.numerical_axis.AFtest[n]==undefined)e.vcf.numerical_axis.AFtest[n]=t.numerical_axis.AFtest[n]}}}}if(e.mds.track.ld){if(!e.ld)e.ld={};if(!e.ld.connheight)e.ld.connheight=50;const t=JSON.parse(JSON.stringify(e.mds.track.ld));for(const n in t){if(e.ld[n]==undefined)e.ld[n]=t[n]}e.ld.overlay.r2_to_color=L(e.ld.overlay.color_0,e.ld.overlay.color_1)}if(e.mds.track.info_fields){e.info_fields=JSON.parse(JSON.stringify(e.mds.track.info_fields))}if(e.mds.track.populations){e.populations=JSON.parse(JSON.stringify(e.mds.track.populations))}if(e.mds.track.sample_termfilter)e.sample_termfilter=JSON.parse(JSON.stringify(e.mds.track.sample_termfilter))}function yt(e){if(!e.info_fields)return;if(!Array.isArray(e.info_fields))throw"info_fields should be an array";for(const t of e.info_fields){if(!t.key)throw"key missing from one of info_fields";if(!t.label)t.label=t.key;if(!t.isfilter)continue;if(t.iscategorical){if(!t.values)throw".values[] missing from a categorical info field "+t.label;if(!Array.isArray(t.values))throw".values[] not an array from info field "+t.label;for(const e of t.values){if(!e.key)throw".key missing from a value of info field "+t.label;if(!e.label)e.label=e.key}}else if(t.isinteger||t.isfloat){if(!t.range)throw".range{} missing from a numeric info field "+t.label}else if(t.isflag);else{throw"info field "+t.label+" neither numerical or categorical"}}}async function xt(e,t){t.tkcloakon(e);t.block_setheight();const n=bt(e,t);try{if(e.uninitialized){await ft(e,t);delete e.uninitialized}e.tklabel.each((function(){e.leftLabelMaxwidth=this.getBBox().width}));const a=await _t(e,t);e.clear();const s=B(a,e,t);const o=at(a,e,t);if(e.g_ldrow){e.g_ldrow.transition().attr("transform","translate(0,"+s+")");e.gleft_ldrow.transition().attr("transform","translate(0,"+s+")")}e.height_main=s+o;n(a)}catch(t){if(e.clear)e.clear();e.height_main=50;n({error:t.message||t});if(t.stack)console.log(t.stack);return}}async function _t(e,t){const n=vt(e,t);return d("mds2",n).then((e=>{if(e.error)throw e.error;return e}))}function bt(e,t){return n=>{lt(n,e);t.tkcloakoff(e,{error:n.error});t.block_setheight();t.setllabel()}}function vt(e,t){const n={genome:t.genome.name};kt(n,e);if(e.legend.mclass.hiddenvalues.size){n.hidden_mclass=[...e.legend.mclass.hiddenvalues]}if(e.mds){n.dslabel=e.mds.label}else{if(e.vcf){n.vcf={file:e.vcf.file,url:e.vcf.url,indexURL:e.vcf.indexURL}}}if(e.vcf){n.trigger_vcfbyrange=1;Ne(e,n)}if(e.ld){const t=e.ld.tracks.filter((e=>e.shown));if(t.length){n.trigger_ld={tracks:t,connheight:e.ld.connheight}}}n.rglst=t.tkarg_rglst(e);if(t.usegm){const e=n.rglst[0];e.usegm_isoform=t.usegm.isoform;for(let a=1;a<n.rglst.length;a++){const s=n.rglst[a];e.width+=s.width+t.regionspace;e.start=Math.min(e.start,s.start);e.stop=Math.max(e.stop,s.stop)}n.rglst=[e]}let a=0;for(const e of n.rglst){e.xoff=0;a+=e.width+t.regionspace}if(t.subpanels.length==e.subpanels.length){for(const e of t.subpanels){n.rglst.push({chr:e.chr,start:e.start,stop:e.stop,width:e.width,exonsf:e.exonsf,xoff:a});a+=e.width+e.leftpad}}return n}function kt(e,t){if(t.info_fields){e.info_fields=t.info_fields.reduce(((e,t)=>{if(t.isfilter){if(t.iscategorical){const n={key:t.key,iscategorical:true,unannotated_ishidden:t.unannotated_ishidden,hiddenvalues:{}};for(const e of t.values){if(e.ishidden)n.hiddenvalues[e.key]=1}e.push(n)}else if(t.isinteger||t.isfloat){if(t.isactivefilter){e.push({key:t.key,isnumerical:true,missing_value:t.missing_value,range:t.range})}}else if(t.isflag){e.push({key:t.key,isflag:true,remove_no:t.remove_no,remove_yes:t.remove_yes})}else{throw"unknown type of info filter"}}return e}),[])}}export{vt as addparameter_rangequery,xt as loadTk};