@sjcrh/proteinpaint-client 2.193.0 → 2.195.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 (916) hide show
  1. package/dist/2dmaf-GTD3AXGT.js +1373 -0
  2. package/dist/AIProjectAdmin-ALMSVHFX.js +958 -0
  3. package/dist/AppHeader-RK2YRITI.js +835 -0
  4. package/dist/BoxPlot-6ZXLPA5Q.js +1217 -0
  5. package/dist/CorrelationVolcano-PJB3QCXB.js +619 -0
  6. package/dist/DE-MEWV5RTV.js +95 -0
  7. package/dist/DEinput-I62VHD2U.js +301 -0
  8. package/dist/DEinput-I62VHD2U.js.map +7 -0
  9. package/dist/DifferentialAnalysis-7L3CDPVB.js +245 -0
  10. package/dist/Disco-FCS7B5DO.js +3297 -0
  11. package/dist/Disco.UI-BFJ5XFAT.js +249 -0
  12. package/dist/DmrPlot-362PCE7L.js +642 -0
  13. package/dist/GB-SX4JENAW.js +1353 -0
  14. package/dist/GB-SX4JENAW.js.map +7 -0
  15. package/dist/GeneExpInput-EHWHQTRV.js +367 -0
  16. package/dist/HicApp-UE4DCUKX.js +2250 -0
  17. package/dist/IDCViewer-EDF5XJ63.js +10455 -0
  18. package/dist/IDCViewer-EDF5XJ63.js.map +7 -0
  19. package/dist/NumBinaryEditor-3TAAJNYY.js +271 -0
  20. package/dist/NumBinaryEditor.unit.spec-6776472M.js +286 -0
  21. package/dist/NumContEditor-WLFXTY4M.js +109 -0
  22. package/dist/NumContEditor.unit.spec-KG5SCOIQ.js +169 -0
  23. package/dist/NumCustomBinEditor-EKKNCLKI.js +38 -0
  24. package/dist/NumCustomBinEditor.unit.spec-LSLSKQDW.js +284 -0
  25. package/dist/NumDiscreteEditor-X2MLECNT.js +179 -0
  26. package/dist/NumDiscreteEditor.unit.spec-BZG7P4C7.js +202 -0
  27. package/dist/NumRegularBinEditor-CAGJ4ZWD.js +38 -0
  28. package/dist/NumRegularBinEditor.unit.spec-GJSJC4DK.js +227 -0
  29. package/dist/NumSplineEditor-ND3RC7R6.js +198 -0
  30. package/dist/NumSplineEditor.unit.spec-F67JQKPY.js +199 -0
  31. package/dist/NumericDensity-VW7NIZU7.js +38 -0
  32. package/dist/NumericDensity.unit.spec-YHIMU23C.js +221 -0
  33. package/dist/NumericHandler-HCU6B2XV.js +39 -0
  34. package/dist/NumericHandler.unit.spec-6GVWAUED.js +219 -0
  35. package/dist/ProteomeInput-SONQSTVD.js +396 -0
  36. package/dist/RunChart2-ZLBNG4JF.js +758 -0
  37. package/dist/SC-YDRE37LP.js +1127 -0
  38. package/dist/Volcano-27ZERHXI.js +1379 -0
  39. package/dist/WSIViewer-2P7ANPBV.js +48562 -0
  40. package/dist/WsiSamplesPlot-FM4B657P.js +165 -0
  41. package/dist/adSandbox-M6TBRE5W.js +38 -0
  42. package/dist/animatedBubbleChart-VYSSX52K.js +555 -0
  43. package/dist/app-BLJT7ZDG.js +49 -0
  44. package/dist/app-LSFSUJHF.js +37 -0
  45. package/dist/app.js +13 -13
  46. package/dist/bam-ZMHBTBB4.js +860 -0
  47. package/dist/barchart-EF75MNTN.js +47 -0
  48. package/dist/barchart.data-VWZB3R2Z.js +22 -0
  49. package/dist/barchart.events-AMYQOMBQ.js +47 -0
  50. package/dist/barchart.integration.spec-TCTQ5PKN.js +2196 -0
  51. package/dist/barchart.integration.spec-TCTQ5PKN.js.map +7 -0
  52. package/dist/barchart2-LOHN6NSE.js +314 -0
  53. package/dist/block-23BH5TZ3.js +6226 -0
  54. package/dist/block.init-3BF6L23D.js +38 -0
  55. package/dist/block.mds.expressionrank-DSHATA2M.js +359 -0
  56. package/dist/block.mds.geneboxplot-RXQUOE3Y.js +828 -0
  57. package/dist/block.mds.junction-PN776TCD.js +1545 -0
  58. package/dist/block.mds.svcnv-SOWUBH4K.js +6801 -0
  59. package/dist/block.svg-ZPYMFAGC.js +164 -0
  60. package/dist/block.tk.aicheck-E22ZJJFP.js +283 -0
  61. package/dist/block.tk.ase-S54Z5A4G.js +365 -0
  62. package/dist/block.tk.bam-YOELFYXU.js +1906 -0
  63. package/dist/block.tk.bedgraphdot-VFUWXPSL.js +384 -0
  64. package/dist/block.tk.bigwig.ui-2SJYUPR3.js +212 -0
  65. package/dist/block.tk.hicstraw-GZVE4HQG.js +823 -0
  66. package/dist/block.tk.junction-RRFX4CAT.js +2364 -0
  67. package/dist/block.tk.junction-RRFX4CAT.js.map +7 -0
  68. package/dist/block.tk.junction.textmatrixui-A726SAAL.js +199 -0
  69. package/dist/block.tk.ld-THUOBW72.js +99 -0
  70. package/dist/block.tk.menu-V3VGODVI.js +1029 -0
  71. package/dist/block.tk.pgv-CNUGIK5J.js +944 -0
  72. package/dist/brainImaging-4PF74IEK.js +423 -0
  73. package/dist/brainRegions-U5K3KEQF.js +221 -0
  74. package/dist/bubbleHeatmap-6NL4PUFY.js +383 -0
  75. package/dist/bubbleHeatmap-6NL4PUFY.js.map +7 -0
  76. package/dist/chunk-2FTXOPE2.js +368 -0
  77. package/dist/chunk-2MCUT32T.js +254 -0
  78. package/dist/chunk-2SZ2VLOG.js +1102 -0
  79. package/dist/chunk-2XBWB6P2.js +37 -0
  80. package/dist/chunk-34VSTY2U.js +234 -0
  81. package/dist/chunk-3DS4HIEH.js +1230 -0
  82. package/dist/chunk-3DS4HIEH.js.map +7 -0
  83. package/dist/chunk-42FSM477.js +272 -0
  84. package/dist/chunk-42FSM477.js.map +7 -0
  85. package/dist/chunk-44VQIATQ.js +6364 -0
  86. package/dist/chunk-5B5FZPZI.js +148 -0
  87. package/dist/chunk-5DSLFEAN.js +276 -0
  88. package/dist/chunk-5DSQOV7M.js +50 -0
  89. package/dist/chunk-7CZI6SE7.js +222 -0
  90. package/dist/chunk-7NABQ2JU.js +54 -0
  91. package/dist/chunk-7VMFUE64.js +117 -0
  92. package/dist/chunk-7WBS7ZUI.js +54 -0
  93. package/dist/chunk-7XSDY2FN.js +1220 -0
  94. package/dist/chunk-7XSDY2FN.js.map +7 -0
  95. package/dist/chunk-AK5Z4PLV.js +230 -0
  96. package/dist/chunk-B3XMNPZY.js +448 -0
  97. package/dist/chunk-B4VBTVVQ.js +815 -0
  98. package/dist/chunk-CHUE5Y7Y.js +194 -0
  99. package/dist/chunk-CNBLRB4P.js +170 -0
  100. package/dist/chunk-CPMOBFFR.js +190 -0
  101. package/dist/chunk-D3TU3RDU.js +299 -0
  102. package/dist/chunk-E2KY2IZS.js +446 -0
  103. package/dist/chunk-FBMDK2UA.js +514 -0
  104. package/dist/chunk-FSWSZZTG.js +102 -0
  105. package/dist/chunk-GPGCGFFS.js +399 -0
  106. package/dist/chunk-H5DR6OYM.js +217 -0
  107. package/dist/chunk-HVZQYGQN.js +98 -0
  108. package/dist/chunk-HYIDLSEL.js +833 -0
  109. package/dist/chunk-IDX6WU4U.js +14 -0
  110. package/dist/chunk-IPGYIEPM.js +263 -0
  111. package/dist/chunk-IPGYIEPM.js.map +7 -0
  112. package/dist/chunk-IQTEW3SK.js +119 -0
  113. package/dist/chunk-J7W2DGAL.js +226 -0
  114. package/dist/chunk-J7W2DGAL.js.map +7 -0
  115. package/dist/chunk-JVVOJREJ.js +55 -0
  116. package/dist/chunk-KIGAMN3Z.js +216 -0
  117. package/dist/chunk-LAQZX5PA.js +13624 -0
  118. package/dist/chunk-LRPQBMQE.js +2786 -0
  119. package/dist/chunk-LYULXXGR.js +20896 -0
  120. package/dist/chunk-LYULXXGR.js.map +7 -0
  121. package/dist/chunk-M7JGRSFA.js +5067 -0
  122. package/dist/chunk-MAACMLMN.js +142 -0
  123. package/dist/chunk-MNPTPENH.js +1825 -0
  124. package/dist/chunk-MU3ZC4RW.js +102 -0
  125. package/dist/chunk-N6ALTSJ2.js +176 -0
  126. package/dist/chunk-N7326KA3.js +1943 -0
  127. package/dist/chunk-O64WQLAV.js +2327 -0
  128. package/dist/chunk-OEOYTMMY.js +203 -0
  129. package/dist/chunk-P3QPMVML.js +736 -0
  130. package/dist/chunk-PJM6MUTT.js +1289 -0
  131. package/dist/chunk-QPAZPA3N.js +4269 -0
  132. package/dist/chunk-RG222M4S.js +272 -0
  133. package/dist/chunk-S46UPZFM.js +158 -0
  134. package/dist/chunk-S4L4JCMA.js +102 -0
  135. package/dist/chunk-S4L4JCMA.js.map +7 -0
  136. package/dist/chunk-TUMA63WX.js +11194 -0
  137. package/dist/chunk-TUMA63WX.js.map +7 -0
  138. package/dist/chunk-UAALI7MC.js +315 -0
  139. package/dist/chunk-UAALI7MC.js.map +7 -0
  140. package/dist/chunk-UDTNSJY2.js +34 -0
  141. package/dist/chunk-UFLSI6EW.js +2681 -0
  142. package/dist/chunk-UFLSI6EW.js.map +7 -0
  143. package/dist/chunk-UKABZJQ7.js +480 -0
  144. package/dist/chunk-UKABZJQ7.js.map +7 -0
  145. package/dist/chunk-UPNKFGTN.js +100 -0
  146. package/dist/chunk-UZKHBBWY.js +617 -0
  147. package/dist/chunk-VG6GVF6D.js +302 -0
  148. package/dist/chunk-VO4FCZOR.js +448 -0
  149. package/dist/chunk-VVDFRJVN.js +306 -0
  150. package/dist/chunk-VVDFRJVN.js.map +7 -0
  151. package/dist/chunk-VZBMCJBR.js +534 -0
  152. package/dist/chunk-WR4UATTO.js +182 -0
  153. package/dist/chunk-XNYATA6C.js +2833 -0
  154. package/dist/chunk-Y5FH3TEH.js +129 -0
  155. package/dist/chunk-YIFCXFWE.js +343 -0
  156. package/dist/chunk-YRXB3MKU.js +477 -0
  157. package/dist/chunk-Z7UVDJKK.js +1275 -0
  158. package/dist/chunk-ZDEMAKRA.js +386 -0
  159. package/dist/chunk-ZTJLENGZ.js +292 -0
  160. package/dist/chunk-ZTJLENGZ.js.map +7 -0
  161. package/dist/condition-6UUQ3AAI.js +332 -0
  162. package/dist/controls-N2NIGPHY.js +41 -0
  163. package/dist/controls.config-YYIMJHWN.js +39 -0
  164. package/dist/correlation-DYUMFMTU.js +102 -0
  165. package/dist/cuminc-EUXCL53V.js +1149 -0
  166. package/dist/cuminc.integration.spec-ZQFMIBF6.js +678 -0
  167. package/dist/customdata.inputui-U2VXVWJ3.js +289 -0
  168. package/dist/dataDownload-QK2VYWYW.js +330 -0
  169. package/dist/dataDownload.integration.spec-NG4ZASWC.js +193 -0
  170. package/dist/databrowser.ui-ALW4LSLA.js +433 -0
  171. package/dist/dictionary-F7BPXOBO.js +118 -0
  172. package/dist/dnaMethylation-XNRJIBAH.js +38 -0
  173. package/dist/dnaMethylation.integration.spec-F5ODQTVL.js +203 -0
  174. package/dist/dofetch-IYEI7WSH.js +51 -0
  175. package/dist/e2pca-BHB7UMS5.js +350 -0
  176. package/dist/ep-QRFUVFSK.js +1256 -0
  177. package/dist/expclust.gdc.spec-LMH7QAU4.js +307 -0
  178. package/dist/facet-34HXG7MO.js +521 -0
  179. package/dist/forms2-ZQUPKXE5.js +539 -0
  180. package/dist/gb-HWZ5KZXX.js +88 -0
  181. package/dist/geneExpClustering-KFMP553E.js +249 -0
  182. package/dist/geneExpression-E2GIRM6Z.js +313 -0
  183. package/dist/geneExpression-QODFRNS4.js +38 -0
  184. package/dist/geneExpression.unit.spec-HV44ABGV.js +102 -0
  185. package/dist/geneORA-MJ6MFW2K.js +278 -0
  186. package/dist/geneRanking-ODKGLJX2.js +553 -0
  187. package/dist/geneRanking-ODKGLJX2.js.map +7 -0
  188. package/dist/geneVariant-QT6E7YZN.js +39 -0
  189. package/dist/geneVariant-UYQ4XIOQ.js +41 -0
  190. package/dist/geneVariant.integration.spec-HQ5GJ7UM.js +198 -0
  191. package/dist/genefusion.ui-5KYGD7JL.js +309 -0
  192. package/dist/geneset-M6T24ZYZ.js +208 -0
  193. package/dist/genomeBrowser.spec-CVH4S5KZ.js +281 -0
  194. package/dist/grin2-GI2WNWJO.js +968 -0
  195. package/dist/grin2-GI2WNWJO.js.map +7 -0
  196. package/dist/grin2-QU2UCKKE.js +75 -0
  197. package/dist/gsea-EGWJAATJ.js +47 -0
  198. package/dist/hierCluster-4OJ7BHAB.js +59 -0
  199. package/dist/hierCluster-P4HGGVK7.js +63 -0
  200. package/dist/hierCluster.config-5DGS5EH4.js +40 -0
  201. package/dist/hierCluster.integration.spec-OL4FLSBS.js +488 -0
  202. package/dist/hierCluster.integration.spec-OL4FLSBS.js.map +7 -0
  203. package/dist/hierCluster.interactivity-VEHJHBKY.js +54 -0
  204. package/dist/hierCluster.renderers-OEVSBUBK.js +21 -0
  205. package/dist/imagePlot-MMJYC4DX.js +163 -0
  206. package/dist/importPlot-4HJ6VR4P.js +8 -0
  207. package/dist/isoformExpression-EISYQF2S.js +40 -0
  208. package/dist/isoformExpression.unit.spec-YKBWVL7C.js +208 -0
  209. package/dist/jspdf.es.min-NXISJ3W7.js +40 -0
  210. package/dist/launch.adhoc-U3KOGDIC.js +42 -0
  211. package/dist/leftlabel.sample-LVF5WLMZ.js +264 -0
  212. package/dist/lollipop-HX2WLD5J.js +171 -0
  213. package/dist/maf-MBX3S3LS.js +459 -0
  214. package/dist/maf-MBX3S3LS.js.map +7 -0
  215. package/dist/maftimeline-VN6SYUPQ.js +593 -0
  216. package/dist/matrix-6UASVMIW.js +58 -0
  217. package/dist/matrix-FYYLVW7O.js +63 -0
  218. package/dist/matrix.cells-3RUGV7XG.js +28 -0
  219. package/dist/matrix.config-ELBFN3JN.js +41 -0
  220. package/dist/matrix.data-MHFF47ZY.js +25 -0
  221. package/dist/matrix.groups-UJRFFG5J.js +27 -0
  222. package/dist/matrix.integration.spec-5DUNUOQ3.js +3072 -0
  223. package/dist/matrix.interactivity-2TZ3ON4H.js +42 -0
  224. package/dist/matrix.layout-IGUBUCB2.js +44 -0
  225. package/dist/matrix.legend-UBQF6LMD.js +22 -0
  226. package/dist/matrix.renderers-ON2EXXIS.js +38 -0
  227. package/dist/matrix.serieses-5XH7NO23.js +21 -0
  228. package/dist/matrix.sort-QSWTVRJT.js +27 -0
  229. package/dist/matrix.sort.unit.spec-7Y6D456I.js +472 -0
  230. package/dist/matrix.sorterUi.unit.spec-3XNGEZZ2.js +342 -0
  231. package/dist/mavb-J4AUXBHZ.js +732 -0
  232. package/dist/mds.fimo-I6OALZRX.js +518 -0
  233. package/dist/mds.samplescatterplot-XSWR37S5.js +1550 -0
  234. package/dist/mds.survivalplot-Q3TE4A5P.js +483 -0
  235. package/dist/numericDictTermCluster-N3GM6YVP.js +65 -0
  236. package/dist/numericDictTermCluster-N3GM6YVP.js.map +7 -0
  237. package/dist/oncomatrix-C4RDUA2C.js +295 -0
  238. package/dist/oncomatrix.spec-QVD3XUTH.js +448 -0
  239. package/dist/plot.2dvaf-MNONDWFA.js +377 -0
  240. package/dist/plot.app-3T275PW5.js +41 -0
  241. package/dist/plot.barplot-LOLIPHXG.js +102 -0
  242. package/dist/plot.boxplot-I6CAYXPV.js +152 -0
  243. package/dist/plot.brainImaging-Y76KB6IC.js +51 -0
  244. package/dist/plot.disco-N5ISUUNQ.js +102 -0
  245. package/dist/plot.dzi-Q6K542P6.js +33 -0
  246. package/dist/plot.ssgq-OGLNOY4Q.js +139 -0
  247. package/dist/plot.vaf2cov-NXQ5D3KA.js +259 -0
  248. package/dist/plot.wsi-YMDUOZ57.js +36 -0
  249. package/dist/polar2-AQ2W3SNH.js +231 -0
  250. package/dist/profileForms-TCPZPI22.js +446 -0
  251. package/dist/profilePlot-4RKKICKC.js +54 -0
  252. package/dist/proteinView-5VJ6E2XT.js +1568 -0
  253. package/dist/proteinView-5VJ6E2XT.js.map +7 -0
  254. package/dist/purify.es-PPNYMKMJ.js +1457 -0
  255. package/dist/purify.es-PPNYMKMJ.js.map +7 -0
  256. package/dist/qualitative-NCFIVW6S.js +43 -0
  257. package/dist/radar2-UJFFZE7T.js +326 -0
  258. package/dist/radarFacility2-ATQBCF3N.js +334 -0
  259. package/dist/regression-4RSS7447.js +56 -0
  260. package/dist/regression.inputs-5XGUGNWV.js +48 -0
  261. package/dist/regression.inputs.term-LSJAZWE4.js +48 -0
  262. package/dist/regression.inputs.values.table-GNIJZETG.js +45 -0
  263. package/dist/regression.integration.spec-MV652K47.js +784 -0
  264. package/dist/regression.results-M3YH6ZD3.js +40 -0
  265. package/dist/regression.spec-455WPZHP.js +708 -0
  266. package/dist/report-MH3V7SHZ.js +222 -0
  267. package/dist/sampleScatter.spec-OTIL3JDG.js +202 -0
  268. package/dist/sampleView-DHACOCEG.js +48 -0
  269. package/dist/samplelst-F3AXOE2D.js +111 -0
  270. package/dist/samplematrix-M6CKKVNE.js +2198 -0
  271. package/dist/sc-S5XA37JJ.js +86 -0
  272. package/dist/scatter-IRPFNDHW.js +851 -0
  273. package/dist/scatter.integration.spec-5FWVHMVJ.js +1206 -0
  274. package/dist/selectGenomeWithTklst-NIOUX6MV.js +134 -0
  275. package/dist/singleCellCellType-FTGLNH2J.js +38 -0
  276. package/dist/singleCellCellType.unit.spec-BJ5YZAXF.js +160 -0
  277. package/dist/singleCellGeneExpression-56EDDG5H.js +38 -0
  278. package/dist/singleCellGeneExpression.unit.spec-XSQRWAI3.js +153 -0
  279. package/dist/singleCellPlot-TH77EJZ4.js +54 -0
  280. package/dist/singlecell-3QZQZM32.js +86 -0
  281. package/dist/singlecell-7KJMBASC.js +1572 -0
  282. package/dist/snp-YXG5O4U4.js +38 -0
  283. package/dist/snp.unit.spec-O27J7OOK.js +176 -0
  284. package/dist/snplocus-CQZSC7P6.js +208 -0
  285. package/dist/spliceevent.a53ss.diagram-K5ZDPZE6.js +151 -0
  286. package/dist/spliceevent.exonskip.diagram-A2VZ3TTF.js +277 -0
  287. package/dist/spliceevent.noeventdiagram-DJDA6ENK.js +460 -0
  288. package/dist/ssGSEA-3FTGRUTC.js +38 -0
  289. package/dist/ssGSEA.unit.spec-GF35KBTX.js +88 -0
  290. package/dist/summarizeCnvGeneexp-6IDTNOYE.js +163 -0
  291. package/dist/summarizeGeneexpSurvival-OWLUX2HO.js +114 -0
  292. package/dist/summarizeGeneexpSurvival-OWLUX2HO.js.map +7 -0
  293. package/dist/summarizeMutationCnv-BMEN3XNV.js +164 -0
  294. package/dist/summarizeMutationDiagnosis-LW6K6373.js +40 -0
  295. package/dist/summarizeMutationSurvival-E7REF2VY.js +99 -0
  296. package/dist/summary-MKA7OJKE.js +49 -0
  297. package/dist/summary.integration.spec-IV6I6SNJ.js +414 -0
  298. package/dist/summaryInput-NET6SPM4.js +235 -0
  299. package/dist/sunburst-CO3MXFTJ.js +284 -0
  300. package/dist/survival-MIPCEBS3.js +46 -0
  301. package/dist/survival-QQXTCNDU.js +58 -0
  302. package/dist/survival.integration.spec-6FH4S3EH.js +915 -0
  303. package/dist/survival.integration.spec-6FH4S3EH.js.map +7 -0
  304. package/dist/svg2pdf.es.min-P2F6SSVJ.js +3157 -0
  305. package/dist/svgraph-YF7BS7TN.js +1387 -0
  306. package/dist/svmr-J2JLQGEE.js +3842 -0
  307. package/dist/table-7YL7I4GH.js +200 -0
  308. package/dist/termCollection-LNEN72IV.js +38 -0
  309. package/dist/termCollection-SOLNYAZ4.js +179 -0
  310. package/dist/termCollection.unit.spec-LTX7UVYP.js +208 -0
  311. package/dist/tk-RZDP2YT5.js +46 -0
  312. package/dist/tp.ui-T6XXBHHD.js +1459 -0
  313. package/dist/tvs.dt-7APM37Y3.js +39 -0
  314. package/dist/tvs.dtcnv.categorical-YIPXQSIL.js +40 -0
  315. package/dist/tvs.dtcnv.continuous-ITNZE3SH.js +72 -0
  316. package/dist/tvs.dtfusion-2JIIPDTN.js +40 -0
  317. package/dist/tvs.dtsnvindel-HO2PUFN2.js +40 -0
  318. package/dist/tvs.dtsv-7KCWSUYO.js +40 -0
  319. package/dist/tvs.samplelst-KKWJQNLW.js +104 -0
  320. package/dist/tvs.termCollection-R2IGRG2U.js +159 -0
  321. package/dist/violin-OTPZQTGA.js +46 -0
  322. package/dist/violin.integration.spec-KESWDSBM.js +1425 -0
  323. package/dist/violin.interactivity-Q2WALZO3.js +38 -0
  324. package/dist/violin.renderer-WIRIV7QY.js +40 -0
  325. package/dist/vocabulary-XXDHHHPJ.js +41 -0
  326. package/package.json +9 -3
  327. package/dist/2dmaf-US2ZAJJJ.js +0 -1373
  328. package/dist/AIProjectAdmin-QQO2PNAJ.js +0 -958
  329. package/dist/AppHeader-UKB344GC.js +0 -835
  330. package/dist/BoxPlot-JEBLRKBY.js +0 -1217
  331. package/dist/CorrelationVolcano-J3IFVSZB.js +0 -619
  332. package/dist/DE-PAPJP6AH.js +0 -95
  333. package/dist/DEinput-YON466QQ.js +0 -301
  334. package/dist/DEinput-YON466QQ.js.map +0 -7
  335. package/dist/DifferentialAnalysis-DEUODXGG.js +0 -245
  336. package/dist/Disco-OZM4S7HF.js +0 -3297
  337. package/dist/Disco.UI-VIHYJGYU.js +0 -249
  338. package/dist/DmrPlot-DSELMC4E.js +0 -642
  339. package/dist/GB-MUPI6RL5.js +0 -1151
  340. package/dist/GB-MUPI6RL5.js.map +0 -7
  341. package/dist/GeneExpInput-3AQEPTFZ.js +0 -367
  342. package/dist/HicApp-BP7PSXY2.js +0 -2250
  343. package/dist/NumBinaryEditor-CHWQT445.js +0 -271
  344. package/dist/NumBinaryEditor.unit.spec-MXRNK7XH.js +0 -286
  345. package/dist/NumContEditor-XS3RA7GY.js +0 -109
  346. package/dist/NumContEditor.unit.spec-662MHSP4.js +0 -169
  347. package/dist/NumCustomBinEditor-LUVIAXMZ.js +0 -38
  348. package/dist/NumCustomBinEditor.unit.spec-3D3GY3F4.js +0 -284
  349. package/dist/NumDiscreteEditor-24W2A5IN.js +0 -179
  350. package/dist/NumDiscreteEditor.unit.spec-B5T42Z5S.js +0 -202
  351. package/dist/NumRegularBinEditor-AING4HZ5.js +0 -38
  352. package/dist/NumRegularBinEditor.unit.spec-UKSVZH2S.js +0 -227
  353. package/dist/NumSplineEditor-54KNKHJX.js +0 -198
  354. package/dist/NumSplineEditor.unit.spec-5FTST3Y5.js +0 -199
  355. package/dist/NumericDensity-C7DQZ5Q5.js +0 -38
  356. package/dist/NumericDensity.unit.spec-HV6SD3ZS.js +0 -221
  357. package/dist/NumericHandler-FV3L23EC.js +0 -39
  358. package/dist/NumericHandler.unit.spec-E72DXVBB.js +0 -219
  359. package/dist/ProteomeInput-3XTK74SN.js +0 -396
  360. package/dist/RunChart2-X5FBZVRX.js +0 -758
  361. package/dist/SC-WE5DG2CQ.js +0 -1127
  362. package/dist/Volcano-2USCTLKO.js +0 -1379
  363. package/dist/WSIViewer-U6VSJUFF.js +0 -48562
  364. package/dist/WsiSamplesPlot-VIKSG63U.js +0 -165
  365. package/dist/adSandbox-VXUJGPD3.js +0 -38
  366. package/dist/animatedBubbleChart-4P7XLKSB.js +0 -555
  367. package/dist/app-KHZT2BVF.js +0 -49
  368. package/dist/app-XLYH3YPL.js +0 -37
  369. package/dist/bam-C23ZARYE.js +0 -860
  370. package/dist/barchart-KGXLYEIP.js +0 -47
  371. package/dist/barchart.data-7OI5GZZ6.js +0 -22
  372. package/dist/barchart.events-3KDNIFBG.js +0 -47
  373. package/dist/barchart.integration.spec-OQYY54AQ.js +0 -2010
  374. package/dist/barchart.integration.spec-OQYY54AQ.js.map +0 -7
  375. package/dist/barchart2-AT5FXOUY.js +0 -314
  376. package/dist/block-TCWYUB4R.js +0 -6226
  377. package/dist/block.init-7FHXQJNE.js +0 -38
  378. package/dist/block.mds.expressionrank-UGZQK7Z3.js +0 -359
  379. package/dist/block.mds.geneboxplot-2CQLB4YN.js +0 -828
  380. package/dist/block.mds.junction-JHPHWVOS.js +0 -1545
  381. package/dist/block.mds.svcnv-E7P2SVKK.js +0 -6801
  382. package/dist/block.svg-MVRR3C6V.js +0 -164
  383. package/dist/block.tk.aicheck-KX46G4TR.js +0 -283
  384. package/dist/block.tk.ase-WMXI47BF.js +0 -365
  385. package/dist/block.tk.bam-KFEGVEQQ.js +0 -1906
  386. package/dist/block.tk.bedgraphdot-P4DBCWFK.js +0 -384
  387. package/dist/block.tk.bigwig.ui-WJPH2Z7F.js +0 -212
  388. package/dist/block.tk.hicstraw-RSD6I2NX.js +0 -823
  389. package/dist/block.tk.junction-VZS2DEDO.js +0 -2364
  390. package/dist/block.tk.junction-VZS2DEDO.js.map +0 -7
  391. package/dist/block.tk.junction.textmatrixui-UCWGHZDI.js +0 -199
  392. package/dist/block.tk.ld-ERSIIBM2.js +0 -99
  393. package/dist/block.tk.menu-2ZNXE7CE.js +0 -1029
  394. package/dist/block.tk.pgv-EJLACCFR.js +0 -944
  395. package/dist/brainImaging-BMZJY6OT.js +0 -423
  396. package/dist/brainRegions-RZEBXPAS.js +0 -221
  397. package/dist/bubbleHeatmap-ERJFMLPK.js +0 -383
  398. package/dist/bubbleHeatmap-ERJFMLPK.js.map +0 -7
  399. package/dist/chunk-27FPMFP2.js +0 -54
  400. package/dist/chunk-455XZIIA.js +0 -222
  401. package/dist/chunk-474DTKP7.js +0 -263
  402. package/dist/chunk-474DTKP7.js.map +0 -7
  403. package/dist/chunk-4AP3O3JW.js +0 -226
  404. package/dist/chunk-4AP3O3JW.js.map +0 -7
  405. package/dist/chunk-4JWN7E7Q.js +0 -117
  406. package/dist/chunk-55MOHL3P.js +0 -158
  407. package/dist/chunk-5TJQ6633.js +0 -291
  408. package/dist/chunk-5TJQ6633.js.map +0 -7
  409. package/dist/chunk-5X5LI5YM.js +0 -254
  410. package/dist/chunk-634MOGE3.js +0 -314
  411. package/dist/chunk-634MOGE3.js.map +0 -7
  412. package/dist/chunk-6G4YOMWW.js +0 -1825
  413. package/dist/chunk-6SCBPP4C.js +0 -95
  414. package/dist/chunk-6SCBPP4C.js.map +0 -7
  415. package/dist/chunk-6YVEYTNH.js +0 -4269
  416. package/dist/chunk-73R5BVCY.js +0 -5067
  417. package/dist/chunk-74XVBQF7.js +0 -55
  418. package/dist/chunk-7I3LST7R.js +0 -272
  419. package/dist/chunk-ATUYZWHV.js +0 -1289
  420. package/dist/chunk-B6U3EDAF.js +0 -448
  421. package/dist/chunk-BO47H3VP.js +0 -477
  422. package/dist/chunk-BOO4W7WD.js +0 -482
  423. package/dist/chunk-BOO4W7WD.js.map +0 -7
  424. package/dist/chunk-C6YT5EM2.js +0 -217
  425. package/dist/chunk-CDUNE45Q.js +0 -534
  426. package/dist/chunk-CLN7ANNL.js +0 -216
  427. package/dist/chunk-CLNSNNQU.js +0 -302
  428. package/dist/chunk-COYULNJF.js +0 -119
  429. package/dist/chunk-DBFKUPM6.js +0 -1275
  430. package/dist/chunk-DNVSEW6P.js +0 -170
  431. package/dist/chunk-E6XLLQCG.js +0 -299
  432. package/dist/chunk-EC3SKPQT.js +0 -446
  433. package/dist/chunk-EDXQKDVQ.js +0 -368
  434. package/dist/chunk-EY253UB7.js +0 -448
  435. package/dist/chunk-F5ONTCHE.js +0 -13624
  436. package/dist/chunk-FABY3ISP.js +0 -176
  437. package/dist/chunk-FOPHIWFD.js +0 -100
  438. package/dist/chunk-FVX76DZS.js +0 -203
  439. package/dist/chunk-FXGE233W.js +0 -2681
  440. package/dist/chunk-FXGE233W.js.map +0 -7
  441. package/dist/chunk-GBXX3AHJ.js +0 -343
  442. package/dist/chunk-GVCQGWN7.js +0 -34
  443. package/dist/chunk-HXNUQOGN.js +0 -234
  444. package/dist/chunk-HXZSSHEB.js +0 -37
  445. package/dist/chunk-IKDWQJZE.js +0 -736
  446. package/dist/chunk-IVXCWCKS.js +0 -317
  447. package/dist/chunk-IVXCWCKS.js.map +0 -7
  448. package/dist/chunk-JEZUPG4J.js +0 -617
  449. package/dist/chunk-JWHFMFF2.js +0 -142
  450. package/dist/chunk-K3OJJZCQ.js +0 -230
  451. package/dist/chunk-KM4JBR26.js +0 -815
  452. package/dist/chunk-KNOFEVOJ.js +0 -54
  453. package/dist/chunk-L7VDSIM7.js +0 -20881
  454. package/dist/chunk-L7VDSIM7.js.map +0 -7
  455. package/dist/chunk-LLX3NKB4.js +0 -148
  456. package/dist/chunk-MQJVDIQK.js +0 -2786
  457. package/dist/chunk-N25ENPO3.js +0 -14
  458. package/dist/chunk-N3JT3KCV.js +0 -399
  459. package/dist/chunk-N6QEVQZV.js +0 -194
  460. package/dist/chunk-NJDW6ZQP.js +0 -102
  461. package/dist/chunk-NLQQIVTC.js +0 -276
  462. package/dist/chunk-NU2W6B7I.js +0 -833
  463. package/dist/chunk-OR43PGBV.js +0 -98
  464. package/dist/chunk-PWUERAAF.js +0 -182
  465. package/dist/chunk-PXCFA4ZQ.js +0 -2327
  466. package/dist/chunk-QSEGY3U5.js +0 -129
  467. package/dist/chunk-QWOE5YTB.js +0 -11194
  468. package/dist/chunk-QWOE5YTB.js.map +0 -7
  469. package/dist/chunk-SC6IPDJR.js +0 -6364
  470. package/dist/chunk-SDMOLIEU.js +0 -1205
  471. package/dist/chunk-SDMOLIEU.js.map +0 -7
  472. package/dist/chunk-T46LHXJW.js +0 -283
  473. package/dist/chunk-T46LHXJW.js.map +0 -7
  474. package/dist/chunk-UDL2DEBB.js +0 -50
  475. package/dist/chunk-UXDVUCXU.js +0 -190
  476. package/dist/chunk-VDIVDU3T.js +0 -386
  477. package/dist/chunk-VRLC7DAU.js +0 -2833
  478. package/dist/chunk-XQSQQSGB.js +0 -1102
  479. package/dist/chunk-XVXAQ3FI.js +0 -1943
  480. package/dist/chunk-Y45JIQ5Y.js +0 -1219
  481. package/dist/chunk-Y45JIQ5Y.js.map +0 -7
  482. package/dist/chunk-YQMENK5H.js +0 -102
  483. package/dist/chunk-ZUC4XNWU.js +0 -514
  484. package/dist/condition-ZPFBPMEZ.js +0 -332
  485. package/dist/controls-LIVMV2GV.js +0 -41
  486. package/dist/controls.config-2EOMBN5E.js +0 -39
  487. package/dist/correlation-D6GAPOP5.js +0 -102
  488. package/dist/cuminc-GPFDRNUP.js +0 -1149
  489. package/dist/cuminc.integration.spec-V4JYKLA6.js +0 -678
  490. package/dist/customdata.inputui-DSEUS3CT.js +0 -289
  491. package/dist/dataDownload-KT6K3M7Q.js +0 -330
  492. package/dist/dataDownload.integration.spec-VEX2RTSA.js +0 -193
  493. package/dist/databrowser.ui-VJKNMIXA.js +0 -433
  494. package/dist/dictionary-B27BMR5H.js +0 -118
  495. package/dist/dnaMethylation-BWQGUXVR.js +0 -38
  496. package/dist/dnaMethylation.integration.spec-YMGT2HYZ.js +0 -203
  497. package/dist/dofetch-BMSZZAAQ.js +0 -51
  498. package/dist/e2pca-KSY4DP53.js +0 -350
  499. package/dist/ep-4PAYGMWK.js +0 -1256
  500. package/dist/expclust.gdc.spec-XXFP2HHE.js +0 -307
  501. package/dist/facet-VCJQ7QPE.js +0 -521
  502. package/dist/forms2-IUD2SNOQ.js +0 -539
  503. package/dist/gb-JDH242LG.js +0 -88
  504. package/dist/geneExpClustering-L23JB7XA.js +0 -249
  505. package/dist/geneExpression-P2ERCRXO.js +0 -313
  506. package/dist/geneExpression-QGPVFAN4.js +0 -38
  507. package/dist/geneExpression.unit.spec-6BQBM6VL.js +0 -102
  508. package/dist/geneORA-XIMJP665.js +0 -278
  509. package/dist/geneRanking-AJH5G22J.js +0 -551
  510. package/dist/geneRanking-AJH5G22J.js.map +0 -7
  511. package/dist/geneVariant-AUUZ7S2B.js +0 -41
  512. package/dist/geneVariant-H6BGRRON.js +0 -39
  513. package/dist/geneVariant.integration.spec-FRCH6VI4.js +0 -198
  514. package/dist/genefusion.ui-AAJ37VFA.js +0 -309
  515. package/dist/geneset-5ARBBUYH.js +0 -208
  516. package/dist/genomeBrowser.spec-RV7YBSMZ.js +0 -281
  517. package/dist/grin2-4MYLICII.js +0 -75
  518. package/dist/grin2-RBK4NI6W.js +0 -967
  519. package/dist/grin2-RBK4NI6W.js.map +0 -7
  520. package/dist/gsea-XUMCVLFK.js +0 -47
  521. package/dist/hierCluster-HXOTNMC5.js +0 -63
  522. package/dist/hierCluster-PEDY7OTZ.js +0 -59
  523. package/dist/hierCluster.config-RKYCGNWW.js +0 -40
  524. package/dist/hierCluster.integration.spec-YKMAT7UU.js +0 -395
  525. package/dist/hierCluster.integration.spec-YKMAT7UU.js.map +0 -7
  526. package/dist/hierCluster.interactivity-LPTHVWHR.js +0 -54
  527. package/dist/hierCluster.renderers-4XWKHCNW.js +0 -21
  528. package/dist/imagePlot-3DF7ZH3U.js +0 -163
  529. package/dist/importPlot-N74SV3TL.js +0 -8
  530. package/dist/isoformExpression-FU7Y4OGU.js +0 -40
  531. package/dist/isoformExpression.unit.spec-BLQDKV37.js +0 -208
  532. package/dist/jspdf.es.min-TFJHKUF5.js +0 -40
  533. package/dist/launch.adhoc-Y35FZV6H.js +0 -42
  534. package/dist/leftlabel.sample-ERJGAYTF.js +0 -264
  535. package/dist/lollipop-DU37Q5E2.js +0 -171
  536. package/dist/maf-NRLSNDOT.js +0 -452
  537. package/dist/maf-NRLSNDOT.js.map +0 -7
  538. package/dist/maftimeline-GRXGOOSJ.js +0 -593
  539. package/dist/matrix-G3BULZ7Y.js +0 -58
  540. package/dist/matrix-TCTX26A4.js +0 -63
  541. package/dist/matrix.cells-ED6RS5EC.js +0 -28
  542. package/dist/matrix.config-QHO2YNOT.js +0 -41
  543. package/dist/matrix.data-KQFMXWRX.js +0 -25
  544. package/dist/matrix.groups-RE74EFLY.js +0 -27
  545. package/dist/matrix.integration.spec-Y4FCZ2Q2.js +0 -3072
  546. package/dist/matrix.interactivity-3DW5WAM3.js +0 -42
  547. package/dist/matrix.layout-W57D765I.js +0 -44
  548. package/dist/matrix.legend-ZST44PIB.js +0 -22
  549. package/dist/matrix.renderers-NFRKXO7Y.js +0 -38
  550. package/dist/matrix.serieses-6ZKTFVWY.js +0 -21
  551. package/dist/matrix.sort-2UE47IOC.js +0 -27
  552. package/dist/matrix.sort.unit.spec-5CMWEXPE.js +0 -472
  553. package/dist/matrix.sorterUi.unit.spec-Y2HXWHJN.js +0 -342
  554. package/dist/mavb-BI4XKI5P.js +0 -732
  555. package/dist/mds.fimo-UJYESPNC.js +0 -518
  556. package/dist/mds.samplescatterplot-JKU5B4QR.js +0 -1550
  557. package/dist/mds.survivalplot-OP7Y4D3L.js +0 -483
  558. package/dist/numericDictTermCluster-DRIEJJSP.js +0 -72
  559. package/dist/numericDictTermCluster-DRIEJJSP.js.map +0 -7
  560. package/dist/oncomatrix-A3IE47HV.js +0 -295
  561. package/dist/oncomatrix.spec-TDWB2ROF.js +0 -448
  562. package/dist/plot.2dvaf-XY34TDSM.js +0 -377
  563. package/dist/plot.app-WRCBLYGO.js +0 -41
  564. package/dist/plot.barplot-RXGOUNHM.js +0 -102
  565. package/dist/plot.boxplot-GBZGSS3D.js +0 -152
  566. package/dist/plot.brainImaging-DYPKMNHL.js +0 -51
  567. package/dist/plot.disco-5K2SCKJ4.js +0 -102
  568. package/dist/plot.dzi-THJIFHIS.js +0 -33
  569. package/dist/plot.ssgq-FSIUIV3A.js +0 -139
  570. package/dist/plot.vaf2cov-HP6KEBVJ.js +0 -259
  571. package/dist/plot.wsi-MR6JMOXW.js +0 -36
  572. package/dist/polar2-IT3OF5DX.js +0 -231
  573. package/dist/profileForms-XXGJVF2T.js +0 -446
  574. package/dist/profilePlot-J2C35OEY.js +0 -54
  575. package/dist/proteinView-7FDCILPH.js +0 -1556
  576. package/dist/proteinView-7FDCILPH.js.map +0 -7
  577. package/dist/purify.es-OGN7FDEQ.js +0 -1038
  578. package/dist/purify.es-OGN7FDEQ.js.map +0 -7
  579. package/dist/qualitative-N7S2JHZM.js +0 -43
  580. package/dist/radar2-CDDOQGQX.js +0 -326
  581. package/dist/radarFacility2-ZQTHO2ON.js +0 -334
  582. package/dist/regression-PBGAMZAV.js +0 -56
  583. package/dist/regression.inputs-54E5YKI4.js +0 -48
  584. package/dist/regression.inputs.term-52MBTMVM.js +0 -48
  585. package/dist/regression.inputs.values.table-F3FOAYFV.js +0 -45
  586. package/dist/regression.integration.spec-M4RPJUE4.js +0 -784
  587. package/dist/regression.results-JOK6I2ZD.js +0 -40
  588. package/dist/regression.spec-O4HZB2HQ.js +0 -708
  589. package/dist/report-BDDTM7SV.js +0 -222
  590. package/dist/sampleScatter.spec-272GLYEK.js +0 -202
  591. package/dist/sampleView-E6OHEEP4.js +0 -48
  592. package/dist/samplelst-3LNF3DBG.js +0 -111
  593. package/dist/samplematrix-HL445X7I.js +0 -2198
  594. package/dist/sc-4LELHVIS.js +0 -86
  595. package/dist/scatter-IZIZURQD.js +0 -851
  596. package/dist/scatter.integration.spec-BBEWMA7M.js +0 -1206
  597. package/dist/selectGenomeWithTklst-5LQGT4Z7.js +0 -134
  598. package/dist/singleCellCellType-T3ZT64EK.js +0 -38
  599. package/dist/singleCellCellType.unit.spec-AE4IAHOF.js +0 -160
  600. package/dist/singleCellGeneExpression-SRJXSDEB.js +0 -38
  601. package/dist/singleCellGeneExpression.unit.spec-EPL73UUO.js +0 -153
  602. package/dist/singleCellPlot-P2BHFTYZ.js +0 -54
  603. package/dist/singlecell-32SSD7VN.js +0 -1572
  604. package/dist/singlecell-7KRD5DP7.js +0 -86
  605. package/dist/snp-LE5R377N.js +0 -38
  606. package/dist/snp.unit.spec-UY6KQ5NJ.js +0 -176
  607. package/dist/snplocus-CP34ABUJ.js +0 -208
  608. package/dist/spliceevent.a53ss.diagram-JWLWQDNJ.js +0 -151
  609. package/dist/spliceevent.exonskip.diagram-C5526P7P.js +0 -277
  610. package/dist/spliceevent.noeventdiagram-352M63YB.js +0 -460
  611. package/dist/ssGSEA-BFTCECV3.js +0 -38
  612. package/dist/ssGSEA.unit.spec-4OUCKRDQ.js +0 -88
  613. package/dist/summarizeCnvGeneexp-Y3AWFIZA.js +0 -163
  614. package/dist/summarizeGeneexpSurvival-U5JSPG22.js +0 -108
  615. package/dist/summarizeGeneexpSurvival-U5JSPG22.js.map +0 -7
  616. package/dist/summarizeMutationCnv-KCOVQEBC.js +0 -164
  617. package/dist/summarizeMutationDiagnosis-EQXEQABW.js +0 -40
  618. package/dist/summarizeMutationSurvival-4VGLG4SC.js +0 -99
  619. package/dist/summary-DXYCBNI4.js +0 -49
  620. package/dist/summary.integration.spec-MZTJISLP.js +0 -414
  621. package/dist/summaryInput-5Z3XVIL6.js +0 -235
  622. package/dist/sunburst-WVSQJYP2.js +0 -284
  623. package/dist/survival-3R3J2JBE.js +0 -46
  624. package/dist/survival-XQWFVGCJ.js +0 -58
  625. package/dist/survival.integration.spec-EBDPIBYM.js +0 -821
  626. package/dist/survival.integration.spec-EBDPIBYM.js.map +0 -7
  627. package/dist/svg2pdf.es.min-H4DXBG4O.js +0 -3157
  628. package/dist/svgraph-SY2HVMYL.js +0 -1387
  629. package/dist/svmr-TIIMFKG7.js +0 -3842
  630. package/dist/table-5RFTXIQL.js +0 -200
  631. package/dist/termCollection-23QXTZDN.js +0 -38
  632. package/dist/termCollection-7KXABWVW.js +0 -179
  633. package/dist/termCollection.unit.spec-4AN2Z4PQ.js +0 -208
  634. package/dist/tk-WW6PJGPQ.js +0 -46
  635. package/dist/tp.ui-S5PO3MPH.js +0 -1459
  636. package/dist/tvs.dt-O7LUM5TK.js +0 -39
  637. package/dist/tvs.dtcnv.categorical-2OUFOD3W.js +0 -40
  638. package/dist/tvs.dtcnv.continuous-NOOUY5SZ.js +0 -72
  639. package/dist/tvs.dtfusion-KXQMP3UF.js +0 -40
  640. package/dist/tvs.dtsnvindel-PWHFTWZU.js +0 -40
  641. package/dist/tvs.dtsv-25FLS572.js +0 -40
  642. package/dist/tvs.samplelst-FLXNJFIV.js +0 -104
  643. package/dist/tvs.termCollection-PSVOMJE4.js +0 -159
  644. package/dist/violin-SWMEFWRA.js +0 -46
  645. package/dist/violin.integration.spec-6EQ6GC2N.js +0 -1425
  646. package/dist/violin.interactivity-WBIWPLSM.js +0 -38
  647. package/dist/violin.renderer-3WARZUOH.js +0 -40
  648. package/dist/vocabulary-WLHYHDX7.js +0 -41
  649. /package/dist/{2dmaf-US2ZAJJJ.js.map → 2dmaf-GTD3AXGT.js.map} +0 -0
  650. /package/dist/{AIProjectAdmin-QQO2PNAJ.js.map → AIProjectAdmin-ALMSVHFX.js.map} +0 -0
  651. /package/dist/{AppHeader-UKB344GC.js.map → AppHeader-RK2YRITI.js.map} +0 -0
  652. /package/dist/{BoxPlot-JEBLRKBY.js.map → BoxPlot-6ZXLPA5Q.js.map} +0 -0
  653. /package/dist/{CorrelationVolcano-J3IFVSZB.js.map → CorrelationVolcano-PJB3QCXB.js.map} +0 -0
  654. /package/dist/{DE-PAPJP6AH.js.map → DE-MEWV5RTV.js.map} +0 -0
  655. /package/dist/{DifferentialAnalysis-DEUODXGG.js.map → DifferentialAnalysis-7L3CDPVB.js.map} +0 -0
  656. /package/dist/{Disco-OZM4S7HF.js.map → Disco-FCS7B5DO.js.map} +0 -0
  657. /package/dist/{Disco.UI-VIHYJGYU.js.map → Disco.UI-BFJ5XFAT.js.map} +0 -0
  658. /package/dist/{DmrPlot-DSELMC4E.js.map → DmrPlot-362PCE7L.js.map} +0 -0
  659. /package/dist/{GeneExpInput-3AQEPTFZ.js.map → GeneExpInput-EHWHQTRV.js.map} +0 -0
  660. /package/dist/{HicApp-BP7PSXY2.js.map → HicApp-UE4DCUKX.js.map} +0 -0
  661. /package/dist/{NumBinaryEditor-CHWQT445.js.map → NumBinaryEditor-3TAAJNYY.js.map} +0 -0
  662. /package/dist/{NumBinaryEditor.unit.spec-MXRNK7XH.js.map → NumBinaryEditor.unit.spec-6776472M.js.map} +0 -0
  663. /package/dist/{NumContEditor-XS3RA7GY.js.map → NumContEditor-WLFXTY4M.js.map} +0 -0
  664. /package/dist/{NumContEditor.unit.spec-662MHSP4.js.map → NumContEditor.unit.spec-KG5SCOIQ.js.map} +0 -0
  665. /package/dist/{NumCustomBinEditor-LUVIAXMZ.js.map → NumCustomBinEditor-EKKNCLKI.js.map} +0 -0
  666. /package/dist/{NumCustomBinEditor.unit.spec-3D3GY3F4.js.map → NumCustomBinEditor.unit.spec-LSLSKQDW.js.map} +0 -0
  667. /package/dist/{NumDiscreteEditor-24W2A5IN.js.map → NumDiscreteEditor-X2MLECNT.js.map} +0 -0
  668. /package/dist/{NumDiscreteEditor.unit.spec-B5T42Z5S.js.map → NumDiscreteEditor.unit.spec-BZG7P4C7.js.map} +0 -0
  669. /package/dist/{NumRegularBinEditor-AING4HZ5.js.map → NumRegularBinEditor-CAGJ4ZWD.js.map} +0 -0
  670. /package/dist/{NumRegularBinEditor.unit.spec-UKSVZH2S.js.map → NumRegularBinEditor.unit.spec-GJSJC4DK.js.map} +0 -0
  671. /package/dist/{NumSplineEditor-54KNKHJX.js.map → NumSplineEditor-ND3RC7R6.js.map} +0 -0
  672. /package/dist/{NumSplineEditor.unit.spec-5FTST3Y5.js.map → NumSplineEditor.unit.spec-F67JQKPY.js.map} +0 -0
  673. /package/dist/{NumericDensity-C7DQZ5Q5.js.map → NumericDensity-VW7NIZU7.js.map} +0 -0
  674. /package/dist/{NumericDensity.unit.spec-HV6SD3ZS.js.map → NumericDensity.unit.spec-YHIMU23C.js.map} +0 -0
  675. /package/dist/{NumericHandler-FV3L23EC.js.map → NumericHandler-HCU6B2XV.js.map} +0 -0
  676. /package/dist/{NumericHandler.unit.spec-E72DXVBB.js.map → NumericHandler.unit.spec-6GVWAUED.js.map} +0 -0
  677. /package/dist/{ProteomeInput-3XTK74SN.js.map → ProteomeInput-SONQSTVD.js.map} +0 -0
  678. /package/dist/{RunChart2-X5FBZVRX.js.map → RunChart2-ZLBNG4JF.js.map} +0 -0
  679. /package/dist/{SC-WE5DG2CQ.js.map → SC-YDRE37LP.js.map} +0 -0
  680. /package/dist/{Volcano-2USCTLKO.js.map → Volcano-27ZERHXI.js.map} +0 -0
  681. /package/dist/{WSIViewer-U6VSJUFF.js.map → WSIViewer-2P7ANPBV.js.map} +0 -0
  682. /package/dist/{WsiSamplesPlot-VIKSG63U.js.map → WsiSamplesPlot-FM4B657P.js.map} +0 -0
  683. /package/dist/{adSandbox-VXUJGPD3.js.map → adSandbox-M6TBRE5W.js.map} +0 -0
  684. /package/dist/{animatedBubbleChart-4P7XLKSB.js.map → animatedBubbleChart-VYSSX52K.js.map} +0 -0
  685. /package/dist/{app-KHZT2BVF.js.map → app-BLJT7ZDG.js.map} +0 -0
  686. /package/dist/{app-XLYH3YPL.js.map → app-LSFSUJHF.js.map} +0 -0
  687. /package/dist/{bam-C23ZARYE.js.map → bam-ZMHBTBB4.js.map} +0 -0
  688. /package/dist/{barchart-KGXLYEIP.js.map → barchart-EF75MNTN.js.map} +0 -0
  689. /package/dist/{barchart.data-7OI5GZZ6.js.map → barchart.data-VWZB3R2Z.js.map} +0 -0
  690. /package/dist/{barchart.events-3KDNIFBG.js.map → barchart.events-AMYQOMBQ.js.map} +0 -0
  691. /package/dist/{barchart2-AT5FXOUY.js.map → barchart2-LOHN6NSE.js.map} +0 -0
  692. /package/dist/{block-TCWYUB4R.js.map → block-23BH5TZ3.js.map} +0 -0
  693. /package/dist/{block.init-7FHXQJNE.js.map → block.init-3BF6L23D.js.map} +0 -0
  694. /package/dist/{block.mds.expressionrank-UGZQK7Z3.js.map → block.mds.expressionrank-DSHATA2M.js.map} +0 -0
  695. /package/dist/{block.mds.geneboxplot-2CQLB4YN.js.map → block.mds.geneboxplot-RXQUOE3Y.js.map} +0 -0
  696. /package/dist/{block.mds.junction-JHPHWVOS.js.map → block.mds.junction-PN776TCD.js.map} +0 -0
  697. /package/dist/{block.mds.svcnv-E7P2SVKK.js.map → block.mds.svcnv-SOWUBH4K.js.map} +0 -0
  698. /package/dist/{block.svg-MVRR3C6V.js.map → block.svg-ZPYMFAGC.js.map} +0 -0
  699. /package/dist/{block.tk.aicheck-KX46G4TR.js.map → block.tk.aicheck-E22ZJJFP.js.map} +0 -0
  700. /package/dist/{block.tk.ase-WMXI47BF.js.map → block.tk.ase-S54Z5A4G.js.map} +0 -0
  701. /package/dist/{block.tk.bam-KFEGVEQQ.js.map → block.tk.bam-YOELFYXU.js.map} +0 -0
  702. /package/dist/{block.tk.bedgraphdot-P4DBCWFK.js.map → block.tk.bedgraphdot-VFUWXPSL.js.map} +0 -0
  703. /package/dist/{block.tk.bigwig.ui-WJPH2Z7F.js.map → block.tk.bigwig.ui-2SJYUPR3.js.map} +0 -0
  704. /package/dist/{block.tk.hicstraw-RSD6I2NX.js.map → block.tk.hicstraw-GZVE4HQG.js.map} +0 -0
  705. /package/dist/{block.tk.junction.textmatrixui-UCWGHZDI.js.map → block.tk.junction.textmatrixui-A726SAAL.js.map} +0 -0
  706. /package/dist/{block.tk.ld-ERSIIBM2.js.map → block.tk.ld-THUOBW72.js.map} +0 -0
  707. /package/dist/{block.tk.menu-2ZNXE7CE.js.map → block.tk.menu-V3VGODVI.js.map} +0 -0
  708. /package/dist/{block.tk.pgv-EJLACCFR.js.map → block.tk.pgv-CNUGIK5J.js.map} +0 -0
  709. /package/dist/{brainImaging-BMZJY6OT.js.map → brainImaging-4PF74IEK.js.map} +0 -0
  710. /package/dist/{brainRegions-RZEBXPAS.js.map → brainRegions-U5K3KEQF.js.map} +0 -0
  711. /package/dist/{chunk-EDXQKDVQ.js.map → chunk-2FTXOPE2.js.map} +0 -0
  712. /package/dist/{chunk-5X5LI5YM.js.map → chunk-2MCUT32T.js.map} +0 -0
  713. /package/dist/{chunk-XQSQQSGB.js.map → chunk-2SZ2VLOG.js.map} +0 -0
  714. /package/dist/{chunk-HXZSSHEB.js.map → chunk-2XBWB6P2.js.map} +0 -0
  715. /package/dist/{chunk-HXNUQOGN.js.map → chunk-34VSTY2U.js.map} +0 -0
  716. /package/dist/{chunk-SC6IPDJR.js.map → chunk-44VQIATQ.js.map} +0 -0
  717. /package/dist/{chunk-LLX3NKB4.js.map → chunk-5B5FZPZI.js.map} +0 -0
  718. /package/dist/{chunk-NLQQIVTC.js.map → chunk-5DSLFEAN.js.map} +0 -0
  719. /package/dist/{chunk-UDL2DEBB.js.map → chunk-5DSQOV7M.js.map} +0 -0
  720. /package/dist/{chunk-455XZIIA.js.map → chunk-7CZI6SE7.js.map} +0 -0
  721. /package/dist/{chunk-KNOFEVOJ.js.map → chunk-7NABQ2JU.js.map} +0 -0
  722. /package/dist/{chunk-4JWN7E7Q.js.map → chunk-7VMFUE64.js.map} +0 -0
  723. /package/dist/{chunk-27FPMFP2.js.map → chunk-7WBS7ZUI.js.map} +0 -0
  724. /package/dist/{chunk-K3OJJZCQ.js.map → chunk-AK5Z4PLV.js.map} +0 -0
  725. /package/dist/{chunk-B6U3EDAF.js.map → chunk-B3XMNPZY.js.map} +0 -0
  726. /package/dist/{chunk-KM4JBR26.js.map → chunk-B4VBTVVQ.js.map} +0 -0
  727. /package/dist/{chunk-N6QEVQZV.js.map → chunk-CHUE5Y7Y.js.map} +0 -0
  728. /package/dist/{chunk-DNVSEW6P.js.map → chunk-CNBLRB4P.js.map} +0 -0
  729. /package/dist/{chunk-UXDVUCXU.js.map → chunk-CPMOBFFR.js.map} +0 -0
  730. /package/dist/{chunk-E6XLLQCG.js.map → chunk-D3TU3RDU.js.map} +0 -0
  731. /package/dist/{chunk-EC3SKPQT.js.map → chunk-E2KY2IZS.js.map} +0 -0
  732. /package/dist/{chunk-ZUC4XNWU.js.map → chunk-FBMDK2UA.js.map} +0 -0
  733. /package/dist/{chunk-YQMENK5H.js.map → chunk-FSWSZZTG.js.map} +0 -0
  734. /package/dist/{chunk-N3JT3KCV.js.map → chunk-GPGCGFFS.js.map} +0 -0
  735. /package/dist/{chunk-C6YT5EM2.js.map → chunk-H5DR6OYM.js.map} +0 -0
  736. /package/dist/{chunk-OR43PGBV.js.map → chunk-HVZQYGQN.js.map} +0 -0
  737. /package/dist/{chunk-NU2W6B7I.js.map → chunk-HYIDLSEL.js.map} +0 -0
  738. /package/dist/{chunk-N25ENPO3.js.map → chunk-IDX6WU4U.js.map} +0 -0
  739. /package/dist/{chunk-COYULNJF.js.map → chunk-IQTEW3SK.js.map} +0 -0
  740. /package/dist/{chunk-74XVBQF7.js.map → chunk-JVVOJREJ.js.map} +0 -0
  741. /package/dist/{chunk-CLN7ANNL.js.map → chunk-KIGAMN3Z.js.map} +0 -0
  742. /package/dist/{chunk-F5ONTCHE.js.map → chunk-LAQZX5PA.js.map} +0 -0
  743. /package/dist/{chunk-MQJVDIQK.js.map → chunk-LRPQBMQE.js.map} +0 -0
  744. /package/dist/{chunk-73R5BVCY.js.map → chunk-M7JGRSFA.js.map} +0 -0
  745. /package/dist/{chunk-JWHFMFF2.js.map → chunk-MAACMLMN.js.map} +0 -0
  746. /package/dist/{chunk-6G4YOMWW.js.map → chunk-MNPTPENH.js.map} +0 -0
  747. /package/dist/{chunk-NJDW6ZQP.js.map → chunk-MU3ZC4RW.js.map} +0 -0
  748. /package/dist/{chunk-FABY3ISP.js.map → chunk-N6ALTSJ2.js.map} +0 -0
  749. /package/dist/{chunk-XVXAQ3FI.js.map → chunk-N7326KA3.js.map} +0 -0
  750. /package/dist/{chunk-PXCFA4ZQ.js.map → chunk-O64WQLAV.js.map} +0 -0
  751. /package/dist/{chunk-FVX76DZS.js.map → chunk-OEOYTMMY.js.map} +0 -0
  752. /package/dist/{chunk-IKDWQJZE.js.map → chunk-P3QPMVML.js.map} +0 -0
  753. /package/dist/{chunk-ATUYZWHV.js.map → chunk-PJM6MUTT.js.map} +0 -0
  754. /package/dist/{chunk-6YVEYTNH.js.map → chunk-QPAZPA3N.js.map} +0 -0
  755. /package/dist/{chunk-7I3LST7R.js.map → chunk-RG222M4S.js.map} +0 -0
  756. /package/dist/{chunk-55MOHL3P.js.map → chunk-S46UPZFM.js.map} +0 -0
  757. /package/dist/{chunk-GVCQGWN7.js.map → chunk-UDTNSJY2.js.map} +0 -0
  758. /package/dist/{chunk-FOPHIWFD.js.map → chunk-UPNKFGTN.js.map} +0 -0
  759. /package/dist/{chunk-JEZUPG4J.js.map → chunk-UZKHBBWY.js.map} +0 -0
  760. /package/dist/{chunk-CLNSNNQU.js.map → chunk-VG6GVF6D.js.map} +0 -0
  761. /package/dist/{chunk-EY253UB7.js.map → chunk-VO4FCZOR.js.map} +0 -0
  762. /package/dist/{chunk-CDUNE45Q.js.map → chunk-VZBMCJBR.js.map} +0 -0
  763. /package/dist/{chunk-PWUERAAF.js.map → chunk-WR4UATTO.js.map} +0 -0
  764. /package/dist/{chunk-VRLC7DAU.js.map → chunk-XNYATA6C.js.map} +0 -0
  765. /package/dist/{chunk-QSEGY3U5.js.map → chunk-Y5FH3TEH.js.map} +0 -0
  766. /package/dist/{chunk-GBXX3AHJ.js.map → chunk-YIFCXFWE.js.map} +0 -0
  767. /package/dist/{chunk-BO47H3VP.js.map → chunk-YRXB3MKU.js.map} +0 -0
  768. /package/dist/{chunk-DBFKUPM6.js.map → chunk-Z7UVDJKK.js.map} +0 -0
  769. /package/dist/{chunk-VDIVDU3T.js.map → chunk-ZDEMAKRA.js.map} +0 -0
  770. /package/dist/{condition-ZPFBPMEZ.js.map → condition-6UUQ3AAI.js.map} +0 -0
  771. /package/dist/{controls-LIVMV2GV.js.map → controls-N2NIGPHY.js.map} +0 -0
  772. /package/dist/{controls.config-2EOMBN5E.js.map → controls.config-YYIMJHWN.js.map} +0 -0
  773. /package/dist/{correlation-D6GAPOP5.js.map → correlation-DYUMFMTU.js.map} +0 -0
  774. /package/dist/{cuminc-GPFDRNUP.js.map → cuminc-EUXCL53V.js.map} +0 -0
  775. /package/dist/{cuminc.integration.spec-V4JYKLA6.js.map → cuminc.integration.spec-ZQFMIBF6.js.map} +0 -0
  776. /package/dist/{customdata.inputui-DSEUS3CT.js.map → customdata.inputui-U2VXVWJ3.js.map} +0 -0
  777. /package/dist/{dataDownload-KT6K3M7Q.js.map → dataDownload-QK2VYWYW.js.map} +0 -0
  778. /package/dist/{dataDownload.integration.spec-VEX2RTSA.js.map → dataDownload.integration.spec-NG4ZASWC.js.map} +0 -0
  779. /package/dist/{databrowser.ui-VJKNMIXA.js.map → databrowser.ui-ALW4LSLA.js.map} +0 -0
  780. /package/dist/{dictionary-B27BMR5H.js.map → dictionary-F7BPXOBO.js.map} +0 -0
  781. /package/dist/{dnaMethylation-BWQGUXVR.js.map → dnaMethylation-XNRJIBAH.js.map} +0 -0
  782. /package/dist/{dnaMethylation.integration.spec-YMGT2HYZ.js.map → dnaMethylation.integration.spec-F5ODQTVL.js.map} +0 -0
  783. /package/dist/{dofetch-BMSZZAAQ.js.map → dofetch-IYEI7WSH.js.map} +0 -0
  784. /package/dist/{e2pca-KSY4DP53.js.map → e2pca-BHB7UMS5.js.map} +0 -0
  785. /package/dist/{ep-4PAYGMWK.js.map → ep-QRFUVFSK.js.map} +0 -0
  786. /package/dist/{expclust.gdc.spec-XXFP2HHE.js.map → expclust.gdc.spec-LMH7QAU4.js.map} +0 -0
  787. /package/dist/{facet-VCJQ7QPE.js.map → facet-34HXG7MO.js.map} +0 -0
  788. /package/dist/{forms2-IUD2SNOQ.js.map → forms2-ZQUPKXE5.js.map} +0 -0
  789. /package/dist/{gb-JDH242LG.js.map → gb-HWZ5KZXX.js.map} +0 -0
  790. /package/dist/{geneExpClustering-L23JB7XA.js.map → geneExpClustering-KFMP553E.js.map} +0 -0
  791. /package/dist/{geneExpression-P2ERCRXO.js.map → geneExpression-E2GIRM6Z.js.map} +0 -0
  792. /package/dist/{geneExpression-QGPVFAN4.js.map → geneExpression-QODFRNS4.js.map} +0 -0
  793. /package/dist/{geneExpression.unit.spec-6BQBM6VL.js.map → geneExpression.unit.spec-HV44ABGV.js.map} +0 -0
  794. /package/dist/{geneORA-XIMJP665.js.map → geneORA-MJ6MFW2K.js.map} +0 -0
  795. /package/dist/{geneVariant-AUUZ7S2B.js.map → geneVariant-QT6E7YZN.js.map} +0 -0
  796. /package/dist/{geneVariant-H6BGRRON.js.map → geneVariant-UYQ4XIOQ.js.map} +0 -0
  797. /package/dist/{geneVariant.integration.spec-FRCH6VI4.js.map → geneVariant.integration.spec-HQ5GJ7UM.js.map} +0 -0
  798. /package/dist/{genefusion.ui-AAJ37VFA.js.map → genefusion.ui-5KYGD7JL.js.map} +0 -0
  799. /package/dist/{geneset-5ARBBUYH.js.map → geneset-M6T24ZYZ.js.map} +0 -0
  800. /package/dist/{genomeBrowser.spec-RV7YBSMZ.js.map → genomeBrowser.spec-CVH4S5KZ.js.map} +0 -0
  801. /package/dist/{grin2-4MYLICII.js.map → grin2-QU2UCKKE.js.map} +0 -0
  802. /package/dist/{gsea-XUMCVLFK.js.map → gsea-EGWJAATJ.js.map} +0 -0
  803. /package/dist/{hierCluster-HXOTNMC5.js.map → hierCluster-4OJ7BHAB.js.map} +0 -0
  804. /package/dist/{hierCluster-PEDY7OTZ.js.map → hierCluster-P4HGGVK7.js.map} +0 -0
  805. /package/dist/{hierCluster.config-RKYCGNWW.js.map → hierCluster.config-5DGS5EH4.js.map} +0 -0
  806. /package/dist/{hierCluster.interactivity-LPTHVWHR.js.map → hierCluster.interactivity-VEHJHBKY.js.map} +0 -0
  807. /package/dist/{hierCluster.renderers-4XWKHCNW.js.map → hierCluster.renderers-OEVSBUBK.js.map} +0 -0
  808. /package/dist/{imagePlot-3DF7ZH3U.js.map → imagePlot-MMJYC4DX.js.map} +0 -0
  809. /package/dist/{importPlot-N74SV3TL.js.map → importPlot-4HJ6VR4P.js.map} +0 -0
  810. /package/dist/{isoformExpression-FU7Y4OGU.js.map → isoformExpression-EISYQF2S.js.map} +0 -0
  811. /package/dist/{isoformExpression.unit.spec-BLQDKV37.js.map → isoformExpression.unit.spec-YKBWVL7C.js.map} +0 -0
  812. /package/dist/{jspdf.es.min-TFJHKUF5.js.map → jspdf.es.min-NXISJ3W7.js.map} +0 -0
  813. /package/dist/{launch.adhoc-Y35FZV6H.js.map → launch.adhoc-U3KOGDIC.js.map} +0 -0
  814. /package/dist/{leftlabel.sample-ERJGAYTF.js.map → leftlabel.sample-LVF5WLMZ.js.map} +0 -0
  815. /package/dist/{lollipop-DU37Q5E2.js.map → lollipop-HX2WLD5J.js.map} +0 -0
  816. /package/dist/{maftimeline-GRXGOOSJ.js.map → maftimeline-VN6SYUPQ.js.map} +0 -0
  817. /package/dist/{matrix-G3BULZ7Y.js.map → matrix-6UASVMIW.js.map} +0 -0
  818. /package/dist/{matrix-TCTX26A4.js.map → matrix-FYYLVW7O.js.map} +0 -0
  819. /package/dist/{matrix.cells-ED6RS5EC.js.map → matrix.cells-3RUGV7XG.js.map} +0 -0
  820. /package/dist/{matrix.config-QHO2YNOT.js.map → matrix.config-ELBFN3JN.js.map} +0 -0
  821. /package/dist/{matrix.data-KQFMXWRX.js.map → matrix.data-MHFF47ZY.js.map} +0 -0
  822. /package/dist/{matrix.groups-RE74EFLY.js.map → matrix.groups-UJRFFG5J.js.map} +0 -0
  823. /package/dist/{matrix.integration.spec-Y4FCZ2Q2.js.map → matrix.integration.spec-5DUNUOQ3.js.map} +0 -0
  824. /package/dist/{matrix.interactivity-3DW5WAM3.js.map → matrix.interactivity-2TZ3ON4H.js.map} +0 -0
  825. /package/dist/{matrix.layout-W57D765I.js.map → matrix.layout-IGUBUCB2.js.map} +0 -0
  826. /package/dist/{matrix.legend-ZST44PIB.js.map → matrix.legend-UBQF6LMD.js.map} +0 -0
  827. /package/dist/{matrix.renderers-NFRKXO7Y.js.map → matrix.renderers-ON2EXXIS.js.map} +0 -0
  828. /package/dist/{matrix.serieses-6ZKTFVWY.js.map → matrix.serieses-5XH7NO23.js.map} +0 -0
  829. /package/dist/{matrix.sort-2UE47IOC.js.map → matrix.sort-QSWTVRJT.js.map} +0 -0
  830. /package/dist/{matrix.sort.unit.spec-5CMWEXPE.js.map → matrix.sort.unit.spec-7Y6D456I.js.map} +0 -0
  831. /package/dist/{matrix.sorterUi.unit.spec-Y2HXWHJN.js.map → matrix.sorterUi.unit.spec-3XNGEZZ2.js.map} +0 -0
  832. /package/dist/{mavb-BI4XKI5P.js.map → mavb-J4AUXBHZ.js.map} +0 -0
  833. /package/dist/{mds.fimo-UJYESPNC.js.map → mds.fimo-I6OALZRX.js.map} +0 -0
  834. /package/dist/{mds.samplescatterplot-JKU5B4QR.js.map → mds.samplescatterplot-XSWR37S5.js.map} +0 -0
  835. /package/dist/{mds.survivalplot-OP7Y4D3L.js.map → mds.survivalplot-Q3TE4A5P.js.map} +0 -0
  836. /package/dist/{oncomatrix-A3IE47HV.js.map → oncomatrix-C4RDUA2C.js.map} +0 -0
  837. /package/dist/{oncomatrix.spec-TDWB2ROF.js.map → oncomatrix.spec-QVD3XUTH.js.map} +0 -0
  838. /package/dist/{plot.2dvaf-XY34TDSM.js.map → plot.2dvaf-MNONDWFA.js.map} +0 -0
  839. /package/dist/{plot.app-WRCBLYGO.js.map → plot.app-3T275PW5.js.map} +0 -0
  840. /package/dist/{plot.barplot-RXGOUNHM.js.map → plot.barplot-LOLIPHXG.js.map} +0 -0
  841. /package/dist/{plot.boxplot-GBZGSS3D.js.map → plot.boxplot-I6CAYXPV.js.map} +0 -0
  842. /package/dist/{plot.brainImaging-DYPKMNHL.js.map → plot.brainImaging-Y76KB6IC.js.map} +0 -0
  843. /package/dist/{plot.disco-5K2SCKJ4.js.map → plot.disco-N5ISUUNQ.js.map} +0 -0
  844. /package/dist/{plot.dzi-THJIFHIS.js.map → plot.dzi-Q6K542P6.js.map} +0 -0
  845. /package/dist/{plot.ssgq-FSIUIV3A.js.map → plot.ssgq-OGLNOY4Q.js.map} +0 -0
  846. /package/dist/{plot.vaf2cov-HP6KEBVJ.js.map → plot.vaf2cov-NXQ5D3KA.js.map} +0 -0
  847. /package/dist/{plot.wsi-MR6JMOXW.js.map → plot.wsi-YMDUOZ57.js.map} +0 -0
  848. /package/dist/{polar2-IT3OF5DX.js.map → polar2-AQ2W3SNH.js.map} +0 -0
  849. /package/dist/{profileForms-XXGJVF2T.js.map → profileForms-TCPZPI22.js.map} +0 -0
  850. /package/dist/{profilePlot-J2C35OEY.js.map → profilePlot-4RKKICKC.js.map} +0 -0
  851. /package/dist/{qualitative-N7S2JHZM.js.map → qualitative-NCFIVW6S.js.map} +0 -0
  852. /package/dist/{radar2-CDDOQGQX.js.map → radar2-UJFFZE7T.js.map} +0 -0
  853. /package/dist/{radarFacility2-ZQTHO2ON.js.map → radarFacility2-ATQBCF3N.js.map} +0 -0
  854. /package/dist/{regression-PBGAMZAV.js.map → regression-4RSS7447.js.map} +0 -0
  855. /package/dist/{regression.inputs-54E5YKI4.js.map → regression.inputs-5XGUGNWV.js.map} +0 -0
  856. /package/dist/{regression.inputs.term-52MBTMVM.js.map → regression.inputs.term-LSJAZWE4.js.map} +0 -0
  857. /package/dist/{regression.inputs.values.table-F3FOAYFV.js.map → regression.inputs.values.table-GNIJZETG.js.map} +0 -0
  858. /package/dist/{regression.integration.spec-M4RPJUE4.js.map → regression.integration.spec-MV652K47.js.map} +0 -0
  859. /package/dist/{regression.results-JOK6I2ZD.js.map → regression.results-M3YH6ZD3.js.map} +0 -0
  860. /package/dist/{regression.spec-O4HZB2HQ.js.map → regression.spec-455WPZHP.js.map} +0 -0
  861. /package/dist/{report-BDDTM7SV.js.map → report-MH3V7SHZ.js.map} +0 -0
  862. /package/dist/{sampleScatter.spec-272GLYEK.js.map → sampleScatter.spec-OTIL3JDG.js.map} +0 -0
  863. /package/dist/{sampleView-E6OHEEP4.js.map → sampleView-DHACOCEG.js.map} +0 -0
  864. /package/dist/{samplelst-3LNF3DBG.js.map → samplelst-F3AXOE2D.js.map} +0 -0
  865. /package/dist/{samplematrix-HL445X7I.js.map → samplematrix-M6CKKVNE.js.map} +0 -0
  866. /package/dist/{sc-4LELHVIS.js.map → sc-S5XA37JJ.js.map} +0 -0
  867. /package/dist/{scatter-IZIZURQD.js.map → scatter-IRPFNDHW.js.map} +0 -0
  868. /package/dist/{scatter.integration.spec-BBEWMA7M.js.map → scatter.integration.spec-5FWVHMVJ.js.map} +0 -0
  869. /package/dist/{selectGenomeWithTklst-5LQGT4Z7.js.map → selectGenomeWithTklst-NIOUX6MV.js.map} +0 -0
  870. /package/dist/{singleCellCellType-T3ZT64EK.js.map → singleCellCellType-FTGLNH2J.js.map} +0 -0
  871. /package/dist/{singleCellCellType.unit.spec-AE4IAHOF.js.map → singleCellCellType.unit.spec-BJ5YZAXF.js.map} +0 -0
  872. /package/dist/{singleCellGeneExpression-SRJXSDEB.js.map → singleCellGeneExpression-56EDDG5H.js.map} +0 -0
  873. /package/dist/{singleCellGeneExpression.unit.spec-EPL73UUO.js.map → singleCellGeneExpression.unit.spec-XSQRWAI3.js.map} +0 -0
  874. /package/dist/{singleCellPlot-P2BHFTYZ.js.map → singleCellPlot-TH77EJZ4.js.map} +0 -0
  875. /package/dist/{singlecell-7KRD5DP7.js.map → singlecell-3QZQZM32.js.map} +0 -0
  876. /package/dist/{singlecell-32SSD7VN.js.map → singlecell-7KJMBASC.js.map} +0 -0
  877. /package/dist/{snp-LE5R377N.js.map → snp-YXG5O4U4.js.map} +0 -0
  878. /package/dist/{snp.unit.spec-UY6KQ5NJ.js.map → snp.unit.spec-O27J7OOK.js.map} +0 -0
  879. /package/dist/{snplocus-CP34ABUJ.js.map → snplocus-CQZSC7P6.js.map} +0 -0
  880. /package/dist/{spliceevent.a53ss.diagram-JWLWQDNJ.js.map → spliceevent.a53ss.diagram-K5ZDPZE6.js.map} +0 -0
  881. /package/dist/{spliceevent.exonskip.diagram-C5526P7P.js.map → spliceevent.exonskip.diagram-A2VZ3TTF.js.map} +0 -0
  882. /package/dist/{spliceevent.noeventdiagram-352M63YB.js.map → spliceevent.noeventdiagram-DJDA6ENK.js.map} +0 -0
  883. /package/dist/{ssGSEA-BFTCECV3.js.map → ssGSEA-3FTGRUTC.js.map} +0 -0
  884. /package/dist/{ssGSEA.unit.spec-4OUCKRDQ.js.map → ssGSEA.unit.spec-GF35KBTX.js.map} +0 -0
  885. /package/dist/{summarizeCnvGeneexp-Y3AWFIZA.js.map → summarizeCnvGeneexp-6IDTNOYE.js.map} +0 -0
  886. /package/dist/{summarizeMutationCnv-KCOVQEBC.js.map → summarizeMutationCnv-BMEN3XNV.js.map} +0 -0
  887. /package/dist/{summarizeMutationDiagnosis-EQXEQABW.js.map → summarizeMutationDiagnosis-LW6K6373.js.map} +0 -0
  888. /package/dist/{summarizeMutationSurvival-4VGLG4SC.js.map → summarizeMutationSurvival-E7REF2VY.js.map} +0 -0
  889. /package/dist/{summary-DXYCBNI4.js.map → summary-MKA7OJKE.js.map} +0 -0
  890. /package/dist/{summary.integration.spec-MZTJISLP.js.map → summary.integration.spec-IV6I6SNJ.js.map} +0 -0
  891. /package/dist/{summaryInput-5Z3XVIL6.js.map → summaryInput-NET6SPM4.js.map} +0 -0
  892. /package/dist/{sunburst-WVSQJYP2.js.map → sunburst-CO3MXFTJ.js.map} +0 -0
  893. /package/dist/{survival-3R3J2JBE.js.map → survival-MIPCEBS3.js.map} +0 -0
  894. /package/dist/{survival-XQWFVGCJ.js.map → survival-QQXTCNDU.js.map} +0 -0
  895. /package/dist/{svg2pdf.es.min-H4DXBG4O.js.map → svg2pdf.es.min-P2F6SSVJ.js.map} +0 -0
  896. /package/dist/{svgraph-SY2HVMYL.js.map → svgraph-YF7BS7TN.js.map} +0 -0
  897. /package/dist/{svmr-TIIMFKG7.js.map → svmr-J2JLQGEE.js.map} +0 -0
  898. /package/dist/{table-5RFTXIQL.js.map → table-7YL7I4GH.js.map} +0 -0
  899. /package/dist/{termCollection-23QXTZDN.js.map → termCollection-LNEN72IV.js.map} +0 -0
  900. /package/dist/{termCollection-7KXABWVW.js.map → termCollection-SOLNYAZ4.js.map} +0 -0
  901. /package/dist/{termCollection.unit.spec-4AN2Z4PQ.js.map → termCollection.unit.spec-LTX7UVYP.js.map} +0 -0
  902. /package/dist/{tk-WW6PJGPQ.js.map → tk-RZDP2YT5.js.map} +0 -0
  903. /package/dist/{tp.ui-S5PO3MPH.js.map → tp.ui-T6XXBHHD.js.map} +0 -0
  904. /package/dist/{tvs.dt-O7LUM5TK.js.map → tvs.dt-7APM37Y3.js.map} +0 -0
  905. /package/dist/{tvs.dtcnv.categorical-2OUFOD3W.js.map → tvs.dtcnv.categorical-YIPXQSIL.js.map} +0 -0
  906. /package/dist/{tvs.dtcnv.continuous-NOOUY5SZ.js.map → tvs.dtcnv.continuous-ITNZE3SH.js.map} +0 -0
  907. /package/dist/{tvs.dtfusion-KXQMP3UF.js.map → tvs.dtfusion-2JIIPDTN.js.map} +0 -0
  908. /package/dist/{tvs.dtsnvindel-PWHFTWZU.js.map → tvs.dtsnvindel-HO2PUFN2.js.map} +0 -0
  909. /package/dist/{tvs.dtsv-25FLS572.js.map → tvs.dtsv-7KCWSUYO.js.map} +0 -0
  910. /package/dist/{tvs.samplelst-FLXNJFIV.js.map → tvs.samplelst-KKWJQNLW.js.map} +0 -0
  911. /package/dist/{tvs.termCollection-PSVOMJE4.js.map → tvs.termCollection-R2IGRG2U.js.map} +0 -0
  912. /package/dist/{violin-SWMEFWRA.js.map → violin-OTPZQTGA.js.map} +0 -0
  913. /package/dist/{violin.integration.spec-6EQ6GC2N.js.map → violin.integration.spec-KESWDSBM.js.map} +0 -0
  914. /package/dist/{violin.interactivity-WBIWPLSM.js.map → violin.interactivity-Q2WALZO3.js.map} +0 -0
  915. /package/dist/{violin.renderer-3WARZUOH.js.map → violin.renderer-WIRIV7QY.js.map} +0 -0
  916. /package/dist/{vocabulary-WLHYHDX7.js.map → vocabulary-XXDHHHPJ.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/d3-beeswarm/build/d3-beeswarm.js", "../src/spliceevent.prep.js", "../src/spliceevent.exonskip.js", "../src/block.tk.junction.spliceevent.js", "../src/block.tk.junction.renderjunctions.js", "../src/block.tk.junction.js"],
4
- "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n function beeswarm () {\n /////// Inputs ///////\n var data = []; // original data to arrange\n var radius = 4; // default radius\n var orientation = \"horizontal\"; // default orientation; \"vertical\" also available\n var side = \"symetric\"; // default side; \"positive\" and \"negative\" are also available\n var distributeOn = // accessor to the x value\n function (datum) {\n return datum.x;\n };\n\n /////// Internals ///////\n var minDistanceBetweenCircles;\n var minSquareDistanceBetweenCircles;\n var xBasedDataManager; // for collision detection, x-based sorted direct-access doubly-linked list of data, used to find nearest already arranged data\n var xBasedColliderManager; // for collision detection, x-based sorted direct-access doubly-linked list of already arranged data, limit collision detection to already arranged neighbours\n var yBasedColliderManager; // for collision detection, y-based sorted direct-access doubly-linked list of already arranged data, limit collision detection to already arranged neighbours\n var arrangement; // result, array of {datum: , x: , y: }\n\n //--> for metrics purpose\n var totalPossibleColliders, maxPossibleColliders,\n totalTestedPlacements,\n visitedColliderCount, totalVisitedColliders, maxVisitedColliders;\n //<-- for metrics purpose\n\n function _beeswarm () {} // constructor ???\n\n ///////////////////////\n ///////// API /////////\n ///////////////////////\n\n _beeswarm.data = function(_) {\n if (!arguments.length) { return data; }\n data = _;\n\n return _beeswarm;\n };\n\n _beeswarm.radius = function (_) {\n if (!arguments.length) { return radius; }\n radius = _;\n\n return _beeswarm;\n };\n\n _beeswarm.orientation = function (_) {\n if (!arguments.length) { return orientation; }\n if (_ === \"horizontal\" ||\n _ === \"vertical\"\n ) {\n orientation = _;\n }\n\n return _beeswarm;\n };\n\n _beeswarm.side = function (_) {\n if (!arguments.length) { return side; }\n if (_ === \"symetric\" ||\n _ === \"positive\" ||\n _ === \"negative\"\n ) {\n side = _;\n }\n\n return _beeswarm;\n };\n\n _beeswarm.distributeOn = function (_) {\n if (!arguments.length) { return distributeOn; }\n distributeOn = _;\n\n return _beeswarm;\n };\n\n _beeswarm.arrange = function() {\n initArrangement();\n arrangement.forEach(function (d) {\n var bestYPosition = -Infinity,\n relativeYPos,\n xBasedPossibleColliders = gatherXBasedPossibleColliders(d);\n if (xBasedPossibleColliders.length===0) {\n bestYPosition = 0;\n } else {\n yBasedColliderManager.clear();\n yBasedColliderManager.addMany(xBasedPossibleColliders);\n // try to place on the x-axis\n d.free = 0;\n if (!collidesWithOther(d, yBasedColliderManager.closestTo0())) {\n bestYPosition = 0;\n //-->for metrics purpose\n totalVisitedColliders += visitedColliderCount;\n if (visitedColliderCount > maxVisitedColliders) {\n maxVisitedColliders = visitedColliderCount;\n }\n visitedColliderCount = 0;\n totalTestedPlacements += 1;\n //<--for metrics purpose\n } else {\n xBasedPossibleColliders.forEach(function(xbpc) {\n // try to place below and above an already arranged datum\n relativeYPos = yPosRelativeToXbpc(xbpc, d);\n placeBelow(d, xbpc, relativeYPos);\n if (isAuthorizedPlacement(d) &&\n isBetterPlacement(d, bestYPosition) &&\n !collidesWithOther(d, yBasedColliderManager.dln(xbpc))) {\n bestYPosition = d.free;\n }\n //-->for metrics purpose\n totalVisitedColliders += visitedColliderCount;\n if (visitedColliderCount > maxVisitedColliders) {\n maxVisitedColliders = visitedColliderCount;\n }\n visitedColliderCount = 0;\n totalTestedPlacements += 1;\n //<--for metrics purpose\n placeAbove(d, xbpc, relativeYPos);\n if (isAuthorizedPlacement(d) &&\n isBetterPlacement(d, bestYPosition) &&\n !collidesWithOther(d, yBasedColliderManager.dln(xbpc))) {\n bestYPosition = d.free;\n }\n //-->for metrics purpose\n totalVisitedColliders += visitedColliderCount;\n if (visitedColliderCount > maxVisitedColliders) {\n maxVisitedColliders = visitedColliderCount;\n }\n visitedColliderCount = 0;\n totalTestedPlacements += 1;\n //<--for metrics purpose\n \t})\n }\n };\n d.free = bestYPosition;\n if (orientation === \"horizontal\") {\n d.x = d.fixed;\n d.y = bestYPosition;\n } else {\n d.x = bestYPosition;\n d.y = d.fixed;\n }\n xBasedColliderManager.add(d);\n });\n return arrangement;\n };\n\n _beeswarm.metrics = function () {\n return {\n totalPossibleColliders: totalPossibleColliders,\n maxPossibleColliders: maxPossibleColliders,\n totalTestedPlacements: totalTestedPlacements,\n visitedColliderCount: visitedColliderCount,\n totalVisitedColliders: totalVisitedColliders,\n maxVisitedColliders: maxVisitedColliders\n };\n };\n\n ///////////////////////\n /////// Private ///////\n ///////////////////////\n\n function initArrangement () {\n arrangement = data.map(function (d,i) {\n return {\n datum: d,\n id: i,\n fixed: distributeOn(d),\n free: -Infinity\n };\n });\n\n minDistanceBetweenCircles = 2*radius;\n minSquareDistanceBetweenCircles = Math.pow(minDistanceBetweenCircles, 2);\n xBasedDataManager = new SortedDirectAccessDoublyLinkedList()\n .valueAccessor(function(d){return d.fixed;})\n .addMany(arrangement);\n xBasedColliderManager = new SortedDirectAccessDoublyLinkedList()\n .valueAccessor(function(d){return d.fixed;});\n yBasedColliderManager = new SortedDirectAccessDoublyLinkedList()\n .valueAccessor(function(d){return d.free;});\n\n\n //-->for metrics purpose\n totalPossibleColliders = maxPossibleColliders = 0;\n totalTestedPlacements = 0;\n visitedColliderCount = totalVisitedColliders = maxVisitedColliders =0;\n //<--for metrics purpose\n }\n\n \tfunction findNearestPossibleCollider(dln, visitedDln, direction) {\n if (visitedDln === null) { // special case: max reached\n return null;\n } else if ((direction===\"prev\") ?\n dln.value - visitedDln.value > minDistanceBetweenCircles :\n visitedDln.value - dln.value > minDistanceBetweenCircles\n ) {\n // stop visit, remaining data are too far away\n return null;\n } else {// visitedDln is close enought\n if (isFinite(visitedDln.datum.free)) { // visitedDln is already arranged, and hence is the nearest possible x-based collider\n return(visitedDln.datum);\n }\n // continue finding\n return findNearestPossibleCollider(dln, visitedDln[direction], direction);\n }\n }\n\n function visitToGatherXBasedPossibleColliders(dln, visitedDln, direction, xBasedPossibleColliders) {\n if (visitedDln === null) { // special case: extreme reached\n return;\n } else if ((direction===\"prev\") ?\n dln.value - visitedDln.value > minDistanceBetweenCircles :\n visitedDln.value - dln.value > minDistanceBetweenCircles\n ) {\n // stop visit, remaining data are too far away\n return;\n } else {// visitedDln is close enought\n // visitedDln is already arranged, and hence is a possible x-based collider\n xBasedPossibleColliders.push(visitedDln.datum);\n // continue gathering\n visitToGatherXBasedPossibleColliders(dln, visitedDln[direction], direction, xBasedPossibleColliders);\n }\n }\n\n function gatherXBasedPossibleColliders (datum) {\n var xBasedPossibleColliders = [];\n var dln = xBasedDataManager.dln(datum);\n //use xBasedDataManager to retrieve nearest already arranged data\n var nearestXPrevAlreadyArrangedData = findNearestPossibleCollider(dln, dln.prev, \"prev\");\n var nearestXNextAlreadyArrangedData = findNearestPossibleCollider(dln, dln.next, \"next\");\n\n //use xBasedColliderManager to retrieve already arranged data that may collide with datum (ie, close enought to datum considering x position)\n if (nearestXPrevAlreadyArrangedData != null) {\n //visit x-prev already arranged nodes\n dln = xBasedColliderManager.dln(nearestXPrevAlreadyArrangedData);\n visitToGatherXBasedPossibleColliders(dln, dln, \"prev\", xBasedPossibleColliders);\n }\n\n if (nearestXNextAlreadyArrangedData != null) {\n //visit x-next already arranged nodes\n dln = xBasedColliderManager.dln(nearestXNextAlreadyArrangedData);\n visitToGatherXBasedPossibleColliders(dln, dln, \"next\", xBasedPossibleColliders);\n }\n\n //-->for metrics purpose\n totalPossibleColliders += xBasedPossibleColliders.length;\n if (xBasedPossibleColliders.length > maxPossibleColliders) {\n maxPossibleColliders = xBasedPossibleColliders.length;\n }\n //<--for metrics purpose\n return xBasedPossibleColliders;\n }\n\n function isAuthorizedPlacement(datum) {\n if (side === \"symetric\") {\n return true;\n } else if (side === \"positive\") {\n return datum.free>=0;\n } else {\n return datum.free<=0;\n }\n }\n\n function isBetterPlacement(datum, bestYPosition) {\n return Math.abs(datum.free) < Math.abs(bestYPosition);\n }\n\n function yPosRelativeToXbpc(xbpc, d) {\n // handle Float approximation with +1E-6\n return Math.sqrt(minSquareDistanceBetweenCircles-Math.pow(d.fixed-xbpc.fixed,2))+1E-6;\n }\n\n function placeBelow(d, aad, relativeYPos) {\n d.free = aad.free - relativeYPos;\n }\n\n function placeAbove(d, aad, relativeYPos) {\n d.free = aad.free + relativeYPos;\n }\n\n function areCirclesColliding(d0, d1) {\n visitedColliderCount++; //for metrics prupose\n\n return (Math.pow(d1.free-d0.free, 2) + Math.pow(d1.fixed-d0.fixed, 2)) < minSquareDistanceBetweenCircles;\n }\n\n function visitToDetectCollisionWithOther(datum, visitedDln, direction, visitCount) {\n if (visitedDln === null) { // special case: y_max reached, no collision detected\n return false;\n } else if ((direction===\"prev\") ?\n datum.free - visitedDln.datum.free > minDistanceBetweenCircles :\n visitedDln.datum.free - datum.free > minDistanceBetweenCircles\n ) {\n // stop visit, no collision detected, remaining data are too far away\n return false;\n } else if (areCirclesColliding(datum, visitedDln.datum)) {\n return true;\n } else {\n // continue visit\n return visitToDetectCollisionWithOther(datum, visitedDln[direction], direction, visitCount++);\n }\n }\n\n function collidesWithOther (datum, visitedDln) {\n var visitCount = 0;\n //visit prev dlns for collision check\n // if (visitToDetectCollisionWithOther(datum, visitedDln.prev, \"prev\", visitCount++)) {\n if (visitToDetectCollisionWithOther(datum, visitedDln, \"prev\", visitCount++)) {\n return true;\n } else {\n //visit next dlns for collision check\n // return visitToDetectCollisionWithOther(datum, visitedDln.next, \"next\", visitCount++);\n return visitToDetectCollisionWithOther(datum, visitedDln, \"next\", visitCount++);\n }\n }\n\n ///////////////////////\n //////// Data /////////\n ////// Strucutre //////\n ///////////////////////\n\n // each data MUST have a 'value' property (for sorting)\n // each data MUST have a 'id' property (for direct-access)\n\n // data in SortedDirectAccessDoublyLinkedList are sorted by 'value', from min to max, in a doubly-linked list\n // each node in the doubly-linked list is of the form {datum: , value: , prev: , next: }\n // 'datum' refers to the original datum; 'value' is retrieved from data, 'prev'/'next' refer to previous/next value-based nodes\n\n function SortedDirectAccessDoublyLinkedList () {\n this._valueAccesor = // accessor to the value to sort on\n function (obj) {\n return obj.value;\n };\n this._min = null; // reference to a doubly-linked node with the min value\n this._max = null; // reference to a doubly-linked node with the max value\n this._closestTo0 = null; // reference to the doubly-linked node with the value closest or egal to 0\n this.size = 0; // number of data in the doubly-linked list\n this._idToNode = {}; // direct access to a node of the doubly-linked list\n }\n\n SortedDirectAccessDoublyLinkedList.prototype.valueAccessor = function (_) {\n if (!arguments.length) { return this._valueAccesor; }\n this._valueAccesor = _;\n\n //for chaining purpose\n return this;\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.closestTo0 = function () {\n return this._closestTo0;\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.clear = function () {\n this._min = null;\n this._max = null;\n this._closestTo0 = null;\n this.size = 0;\n this._idToNode = {};\n\n //for chaining purpose\n return this;\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.dln = function (datum){\n // dln = doubly-linked node\n return this._idToNode[datum.id];\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.addMany = function (data) {\n\n data.forEach( function (datum, item) {\n this.add(datum);\n }, this);\n\n //for chaining purpose\n return this;\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.add = function (datum){\n //create a new doubly-linked node\n var dln = {\n datum: datum, // original datum\n value: this._valueAccesor(datum),\n prev: null,\t// previous value-based node\n next: null\t\t// next value-based node\n };\n\n //insert node in the adequate position in the doubly-linked list\n if (this.size === 0) { //special case: no node in the list yet\n this._min = this._max = this._closestTo0 = dln;\n } else {\n if (dln.value <= this._min.value) {//special case: new datum is the min\n dln.next = this._min;\n dln.next.prev = dln;\n this._min = dln;\n } else if (dln.value >= this._max.value) { //special case: new datum is the max\n dln.prev = this._max;\n dln.prev.next = dln;\n this._max = dln;\n } else {\n //insert the node at the adequate position\n var current = this._max;\n //loop to find immediate prev\n while (current.value > dln.value) {\n current = current.prev;\n }\n dln.prev = current;\n dln.next = current.next;\n dln.next.prev = dln;\n dln.prev.next = dln;\n }\n if (Math.abs(dln.value) < Math.abs(this._closestTo0.value)) {\n this._closestTo0 = dln;\n }\n }\n\n //direct access to the node\n this._idToNode[dln.datum.id] = dln;\n\n //update size\n this.size++;\n\n //for chaining purpose\n return this;\n };\n\n SortedDirectAccessDoublyLinkedList.prototype.remove = function (datum) {\n var dln = this.dln(datum);\n\n //remove node from the doubly-linked list\n if (this.size === 1) { //special case: last item to remove\n this._min = this._max = this._closestTo0 = null;\n } else {\n if (dln===this._closestTo0) {\n if (this._closestTo0.next === null) {\n //closestTo0 is also the max, consider merge code with below\n this._closestTo0 = dln.prev;\n } else if (this.closestToZero.prev === null) {\n //closestTo0 is also the min, consider merge code with below\n \tthis._closestTo0 = dln.prev;\n \t} else {\n //consider merge code with below\n var prevAbsValue = Math.abs(this._closestTo0.prev.value);\n var nextAbsValue = Math.abs(this._closestTo0.next.value);\n if (prevAbsValue < nextAbsValue) {\n this._closestTo0 = this._closestTo0.prev;\n } else {\n this._closestTo0 = this._closestTo0.next;\n }\n }\n }\n if (dln === this._min) { //special case: datum is the min\n this._min = this._min.next;\n this._min.prev = null;\n } else if (dln === this._max) { //special case: datum is the max\n this._max = this._max.prev;\n this._max.next = null;\n } else {\n //remove pointers to the node\n dln.next.prev = dln.prev;\n dln.prev.next = dln.next;\n }\n }\n\n\n dln = null; // carbage collector\n delete this._idToNode[datum.id]; //remove direct access to the node\n\n //update size\n this.size--;\n\n //for chaining purpose\n return this;\n };\n\n return _beeswarm;\n };\n\n exports.beeswarm = beeswarm;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));", "export function mapjunctiontoexons(junctions, genes) {\n\t/*\nrun this prior to running a event finder\n\nparamters explained in exonskip.js\n\n*/\n\n\t// clear isoform/exon assignment\n\tfor (const j of junctions) {\n\t\tj.exonleft = [] // left end at last base of exon\n\t\tj.exonright = [] // right end at first base of exon\n\t\tj.exonleftin = [] // left inside exon\n\t\tj.exonrightin = [] // right inside exon\n\n\t\tj.intronleft = [] // left inside intron\n\t\tj.intronright = [] // right inside intron\n\n\t\tj.leftout = [] // left outside of gene\n\t\tj.rightout = [] // right outside of gene\n\n\t\tj.matchisoform = [] // from exonleft & exonright at common isoform\n\t}\n\n\t/* in cases e.g. NBPF9 the genes can be at different loci on same/different chromosomes\nso must identify genes that overlaps with any of the junctions\n*/\n\tconst usegenes = []\n\tfor (const gene of genes) {\n\t\tlet use = false\n\t\tfor (const j of junctions) {\n\t\t\tif (gene.chr == j.chr && Math.max(gene.start, j.start) < Math.min(gene.stop, j.stop)) {\n\t\t\t\tuse = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (use) {\n\t\t\tusegenes.push(gene)\n\t\t}\n\t}\n\tif (usegenes.length == 0) {\n\t\treturn\n\t}\n\n\t// get unique set of 5' and 3' junction positions, and mapping to junctions\n\t// for later mapping junction positions to exons\n\t// so that each unique junction position is computed only once\n\t// TODO distinguish 5' and 3' ends by junction strand\n\tconst leftpos = new Map()\n\tconst rightpos = new Map()\n\t// k: 0-based position\n\t// v: [ list of junctions ]\n\tfor (const j of junctions) {\n\t\tif (!leftpos.has(j.start)) {\n\t\t\tleftpos.set(j.start, [])\n\t\t}\n\t\tleftpos.get(j.start).push(j)\n\n\t\tif (!rightpos.has(j.stop)) {\n\t\t\trightpos.set(j.stop, [])\n\t\t}\n\t\trightpos.get(j.stop).push(j)\n\t}\n\n\tfor (const [pos, jlst] of leftpos) {\n\t\tfor (const gm of usegenes) {\n\t\t\tif (!gm.exon) continue\n\n\t\t\tfor (let i = 0; i < gm.exon.length; i++) {\n\t\t\t\tif (gm.exon[i][1] - 1 == pos) {\n\t\t\t\t\t// this left position matches to exon stop\n\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\tj.exonleft.push({\n\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\texonidx: i\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (gm.exon[i][0] <= pos && gm.exon[i][1] - 1 > pos) {\n\t\t\t\t\t// this left position is inside the exon\n\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\tj.exonleftin.push({\n\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\texonidx: i\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (gm.intron) {\n\t\t\t\tfor (let i = 0; i < gm.intron.length; i++) {\n\t\t\t\t\tif (gm.intron[i][0] <= pos && gm.intron[i][1] > pos) {\n\t\t\t\t\t\t// this left pos inside intron\n\t\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\t\tj.intronleft.push({\n\t\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\t\tintronidx: i\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// right pos should be exon start\n\tfor (const [pos, jlst] of rightpos) {\n\t\tfor (const gm of usegenes) {\n\t\t\tif (!gm.exon) continue\n\t\t\tfor (let i = 0; i < gm.exon.length; i++) {\n\t\t\t\tif (gm.exon[i][0] == pos) {\n\t\t\t\t\t// this right position matches with exon start\n\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\tj.exonright.push({\n\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\texonidx: i\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (gm.exon[i][0] < pos && gm.exon[i][1] > pos) {\n\t\t\t\t\t// this pos inside exon\n\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\tj.exonrightin.push({\n\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\texonidx: i\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (gm.intron) {\n\t\t\t\tfor (let i = 0; i < gm.intron.length; i++) {\n\t\t\t\t\tif (gm.intron[i][0] <= pos && gm.intron[i][1] > pos) {\n\t\t\t\t\t\t// this pos inside intron\n\t\t\t\t\t\tfor (const j of jlst) {\n\t\t\t\t\t\t\tj.intronright.push({\n\t\t\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\t\t\tintronidx: i\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\nmay identify junctions with one end inside, the other end outside a gene, for diagram purpose\n*/\n\tfor (const j of junctions) {\n\t\t{\n\t\t\tconst isoforms = new Set()\n\t\t\tfor (const q of j.exonleft) isoforms.add(q.gm.isoform)\n\t\t\tfor (const q of j.exonleftin) isoforms.add(q.gm.isoform)\n\t\t\tfor (const q of j.intronleft) isoforms.add(q.gm.isoform)\n\t\t\tif (isoforms.size) {\n\t\t\t\t// left end in some isoforms, see if right end stands out\n\t\t\t\tfor (const gm of usegenes) {\n\t\t\t\t\tif (!isoforms.has(gm.isoform)) continue\n\t\t\t\t\tif (gm.stop <= j.stop) {\n\t\t\t\t\t\tj.rightout.push({\n\t\t\t\t\t\t\tgm: gm\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tconst isoforms = new Set()\n\t\t\tfor (const q of j.exonright) isoforms.add(q.gm.isoform)\n\t\t\tfor (const q of j.exonrightin) isoforms.add(q.gm.isoform)\n\t\t\tfor (const q of j.intronright) isoforms.add(q.gm.isoform)\n\t\t\tif (isoforms.size) {\n\t\t\t\t// right end in some isoforms, see if right end stands out\n\t\t\t\tfor (const gm of usegenes) {\n\t\t\t\t\tif (!isoforms.has(gm.isoform)) continue\n\t\t\t\t\tif (gm.start > j.start) {\n\t\t\t\t\t\tj.leftout.push({\n\t\t\t\t\t\t\tgm: gm\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\nfind matching isoform for each junction\nan exon-end of the isoform should match junction start\nand an exon-start should match junction stop\nexon end/start can be on different exons, as the basis of exon skipping\n*/\n\tfor (const j of junctions) {\n\t\tif (j.exonleft.length == 0 || j.exonright.length == 0) continue\n\t\tfor (const el of j.exonleft) {\n\t\t\tfor (const er of j.exonright) {\n\t\t\t\tif (el.gm.isoform == er.gm.isoform) {\n\t\t\t\t\tj.matchisoform.push({\n\t\t\t\t\t\tgm: el.gm,\n\t\t\t\t\t\tleftexonidx: el.exonidx,\n\t\t\t\t\t\trightexonidx: er.exonidx\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n", "/*\nfind both exon-skipping and alternative exon usage\none skipping junction can be involved in multiple events\n\n\nNOTE\n* any group of junctions looked at here are supposed to come from the same sample\n\n\n********************** EXPORTED \n\n\nfindexonskipping( multisample, junctions, gmdata )\n\n\t### multisample\n\n\tboolean, if true, expect junction.data[] to contain more than 1 samples\n\n\n\t### junctions [ j ]\n\n\trequired\n\tj.start\n\tj.stop\n\tj.data [{}]\n\t\tread count in each sample\n\t\t.v\n\t\t.tkid\n\n\n\t*** following are generated by mapjunctiontoexons() and attached to junction\n\tj.exonleft []\n\tj.exonright []\n\tj.matchisoform []\n\n\n\n\t### gmdata [{}] required\n\n\tgm.name\n\tgm.isoform\n\tgm.exon [ [start, stop] ]\n\tgm.intron [ [] ]\n\tgm.strand\n\n\noutput is list of impacted exon sets [ exonset ]\neach exon set:\n\n\t.exonlst[ exon ]\n\t\t.chr\n\t\t.start\n\t\t.stop\n\t.eventlst [ event ]\n\t\t.isskipexon\n\t\t.gm\n\t\t.isaltexon\n\t\t.gmA, .gmB\n\t\t.junctionB\n\t\t.junctionAlst []\n\t\t.percentage\n\t\t.skippedexon[ exonidx ]\n\t\t.frame\n\t\t.color\n\t\t.down1junction\n\t\t.up1junction\n\t.toplabelsays\n\t.middlelabelsays\n\t.bottomlabelsays\n\t.color\n\n\n\n\nfindjunctionbystartstop()\n\tfrom a list of junctions, find ones matching given start & stop, no look at chr\n\nfindjunctionAlst()\n\tfrom a list of junctions, find ones that fill in any intron between designated exons\n\t(the A junctions that are canonical, as opposed to B junctions that skip exons)\n\n\nFIXME\n\nfor alternative exon, find the case where it is 100% included, means no B junction. possible??\n\n\n\n\n\n\n********************** INTERNAL\n\nfindjunctionbystartstop()\n\ncheckexoncodingutr()\n\n*/\n\nconst exonskipcolor = '#99004d'\nconst exonaltcolor = '#004d99'\n\nexport function findexonskipping(multisample, junctions, gmdata) {\n\tconst allevents = []\n\n\t// go over each junction\n\tfor (const j0 of junctions) {\n\t\tif (!j0.matchisoform || j0.matchisoform.length == 0) {\n\t\t\t// no match to any isoform\n\t\t\tcontinue\n\t\t}\n\t\tfor (const j0isoform of j0.matchisoform) {\n\t\t\tconst j0exonbegin = Math.min(j0isoform.leftexonidx, j0isoform.rightexonidx)\n\t\t\tconst j0exonend = Math.max(j0isoform.leftexonidx, j0isoform.rightexonidx)\n\t\t\tif (j0exonend - j0exonbegin <= 1) {\n\t\t\t\t/*\n\t\t\tj0 does not span more than 1 exon on this isoform\n\t\t\tno look for exon skipping\n\n\t\t\tTODO since this junction spans a intron, check to find 100% exon inclusion in alternative usage\n\t\t\t1. in this isoform, from current exon (e1), find next 2 exons (e2, e3), and the e2-e3 junction\n\t\t\t2. find another isoform that lacks e2\n\t\t\t3. if can find e1-e3 junction, mark e1-e3 junction as e2 skipping\n\t\t\t4. if no e1-e3 junction, both junctions (e1-e2, e2-e3) are 100% inclusion event\n\t\t\t*/\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t/*\n\t\tj0 spans more than 1 exon on this isoform\n\t\tj0 is the junctionB here\n\t\tshall report this event\n\t\t*/\n\t\t\tconst jB = j0\n\t\t\tconst thisevent = {\n\t\t\t\tskippedexon: [],\n\t\t\t\tjunctionB: jB,\n\t\t\t\tjunctionAlst: []\n\t\t\t}\n\n\t\t\tfor (let i = j0exonbegin + 1; i < j0exonend; i++) {\n\t\t\t\tthisevent.skippedexon.push(i)\n\t\t\t}\n\n\t\t\t// check among all isoforms to see if junction B is represented by any isoform, to tell alternative exon usage from exon skipping\n\t\t\tlet gmB = null\n\t\t\tfor (const gm of gmdata) {\n\t\t\t\tif (!gm.intron) continue\n\t\t\t\tfor (const i of gm.intron) {\n\t\t\t\t\t// intron start -1 is last base of exon, thus junction start\n\t\t\t\t\tif (i[0] - 1 == jB.start && i[1] == jB.stop) {\n\t\t\t\t\t\tgmB = gm\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (gmB) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (gmB) {\n\t\t\t\t// junction B match one of the introns of an isoform\n\t\t\t\t// this event is alternative exon usage\n\t\t\t\tthisevent.isaltexon = true\n\t\t\t\tthisevent.color = exonaltcolor\n\t\t\t\tthisevent.gmA = j0isoform.gm\n\t\t\t\tthisevent.gmB = gmB\n\t\t\t} else {\n\t\t\t\tthisevent.isskipexon = true\n\t\t\t\tthisevent.color = exonskipcolor\n\t\t\t\tthisevent.gm = j0isoform.gm\n\t\t\t\t/*\n\t\t\tis exon skipping on a gm\n\t\t\tcheck if skipped exons are coding or utr\n\t\t\t*/\n\t\t\t\tconst [utr3, utr5, coding] = checkexoncodingutr(thisevent.skippedexon, thisevent.gm)\n\t\t\t\tif (utr3) thisevent.utr3 = true\n\t\t\t\tif (utr5) thisevent.utr5 = true\n\t\t\t\tif (coding) thisevent.coding = true\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tconst jAlst = findjunctionAlst(junctions, j0isoform.gm, j0exonbegin, j0exonend)\n\t\t\t\tfor (const ja of jAlst) {\n\t\t\t\t\tthisevent.junctionAlst.push(ja)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (thisevent.isskipexon) {\n\t\t\t\t// jinghui's idea: show read count of neighbourhood junctions\n\t\t\t\t// must be based on the same isoform\n\n\t\t\t\tfindupdown1junction4exonskip(thisevent, j0isoform.gm, junctions)\n\t\t\t}\n\n\t\t\tif (multisample) {\n\t\t\t\t/*\n\t\t\tjunction tk is a sum of multiple samples\n\t\t\t*/\n\n\t\t\t\tif (!jB.data) {\n\t\t\t\t\tconsole.error('exonskip: jB.data missing when it is multi-sample')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (jB.data.length == 0) {\n\t\t\t\t\tconsole.error('exonskip: jB.data.length==0')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t/*\n\t\t\tall samples in jB.data are samples with this event\n\t\t\tcalculate percentage in each sample\n\t\t\t*/\n\t\t\t\tlet percentagesamplesum = 0\n\t\t\t\tfor (const sampleBdata of jB.data) {\n\t\t\t\t\tconst bcount = sampleBdata.v\n\t\t\t\t\t// for this sample, find out junction read count in each A junctions\n\t\t\t\t\tlet acountsum = 0\n\t\t\t\t\tfor (const junctionA of thisevent.junctionAlst) {\n\t\t\t\t\t\tif (!junctionA) {\n\t\t\t\t\t\t\t// this junction does not exist\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!junctionA.data) {\n\t\t\t\t\t\t\tconsole.log('exonskip: jA.data missing when multi-sample')\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const sampleAdata of junctionA.data) {\n\t\t\t\t\t\t\tif (sampleAdata.tkid == sampleBdata.tkid) {\n\t\t\t\t\t\t\t\tacountsum += sampleAdata.v\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpercentagesamplesum += (100 * bcount) / (bcount + acountsum / thisevent.junctionAlst.length)\n\t\t\t\t}\n\t\t\t\tthisevent.percentage = Math.ceil(percentagesamplesum / jB.data.length)\n\t\t\t} else {\n\t\t\t\t// no sample specified, assumed single-sample\n\t\t\t\t// get junction B read count percentage\n\t\t\t\tlet asum = 0\n\t\t\t\tfor (const _j of thisevent.junctionAlst) {\n\t\t\t\t\tasum += _j ? _j.data[0].v : 0\n\t\t\t\t}\n\t\t\t\tthisevent.percentage = Math.ceil(\n\t\t\t\t\t(100 * thisevent.junctionB.data[0].v) / (thisevent.junctionB.data[0].v + asum / thisevent.junctionAlst.length)\n\t\t\t\t)\n\t\t\t}\n\t\t\tallevents.push(thisevent)\n\t\t}\n\t}\n\t// done scanning junctions and generating events\n\n\t/*\njunction and exon sets are many-to-many relationship\none junction can cause events with different sets of exons\none exon set can belong to events of different junctions\nto reduce clutter\nsum events to unique exon-junction sets\n\nk: dot-joined sorted start/stop pos of all exons of an event + | + junction start.stop\nv: list of events\n*/\n\tconst exoncoords = new Map()\n\tfor (const evt of allevents) {\n\t\t// collect start/stop position of all skipped exons\n\t\tconst positionlst = []\n\t\tfor (const eid of evt.skippedexon) {\n\t\t\tlet thisexon\n\t\t\tif (evt.isskipexon) {\n\t\t\t\tthisexon = evt.gm.exon[eid]\n\t\t\t} else {\n\t\t\t\tthisexon = evt.gmA.exon[eid]\n\t\t\t}\n\t\t\tpositionlst.push(thisexon[0])\n\t\t\tpositionlst.push(thisexon[1])\n\t\t}\n\t\tif (positionlst.length == 0) {\n\t\t\tconsole.error('not possible: no skipped exon position for exon-skip')\n\t\t\tconsole.log(evt)\n\t\t\tcontinue\n\t\t}\n\t\tpositionlst.sort() // sort exon start/stop positions\n\n\t\t// append junction start/stop position at end!\n\t\tconst posstr = positionlst.join('.') + '|' + evt.junctionB.start + '.' + evt.junctionB.stop\n\n\t\tif (!exoncoords.has(posstr)) {\n\t\t\texoncoords.set(posstr, [])\n\t\t}\n\t\texoncoords.get(posstr).push(evt)\n\t}\n\n\t// event sets grouped by exons\n\tconst eventsetlst = []\n\tfor (const eventlst of exoncoords.values()) {\n\t\t// initialize this event set\n\t\tconst thisset = {\n\t\t\teventlst: eventlst,\n\t\t\texonlst: [] // each exon: {start:, stop:}\n\t\t}\n\t\teventsetlst.push(thisset)\n\n\t\t// first event\n\t\tconst firstevent = eventlst[0]\n\t\t// get exon coordinates from first event\n\t\tfor (const eid of firstevent.skippedexon) {\n\t\t\tconst gm = firstevent.isskipexon ? firstevent.gm : firstevent.gmA\n\t\t\tconst thisexon = gm.exon[eid]\n\t\t\tthisset.exonlst.push({\n\t\t\t\tchr: gm.chr,\n\t\t\t\tstart: thisexon[0],\n\t\t\t\tstop: thisexon[1]\n\t\t\t})\n\t\t}\n\n\t\t// count # of skip and alt events associated with this exon\n\t\t// for deciding how to label\n\t\tlet eventcount_skip = 0,\n\t\t\teventcount_alt = 0\n\t\tfor (const evt of eventlst) {\n\t\t\tif (evt.isskipexon) {\n\t\t\t\teventcount_skip++\n\t\t\t} else {\n\t\t\t\teventcount_alt++\n\t\t\t}\n\t\t}\n\t\tthisset.color = eventcount_skip > 0 ? exonskipcolor : exonaltcolor\n\n\t\t// top label content 1: which exons\n\t\tconst exonnumberset = new Set()\n\t\tfor (const evt of eventlst) {\n\t\t\tconst thisexonnumbers = []\n\t\t\tfor (const eid of evt.skippedexon) {\n\t\t\t\tthisexonnumbers.push(eid + 1)\n\t\t\t}\n\t\t\texonnumberset.add(thisexonnumbers.join(','))\n\t\t}\n\t\tif (exonnumberset.size == 1) {\n\t\t\t// only 1 number of exon\n\t\t\tthisset.toplabelsays = 'exon ' + [...exonnumberset][0] + ' '\n\t\t} else {\n\t\t\t// more than 1 type of exon numbers\n\t\t\t// same exons appear at different order in different isoforms\n\t\t\tthisset.toplabelsays = 'exon '\n\t\t}\n\n\t\t// top label content 2: event type\n\t\tthisset.toplabelsays += eventcount_skip ? 'skip' + (eventcount_alt ? '|alt' : '') : 'alt'\n\n\t\tif (multisample) {\n\t\t\t// using samples, find the maximum sample number among all events\n\t\t\tlet samplecount = 0\n\t\t\tfor (const evt of eventlst) {\n\t\t\t\tsamplecount = Math.max(samplecount, evt.junctionB.data.length)\n\t\t\t}\n\t\t\tthisset.middlelabelsays = samplecount + ' sample' + (samplecount > 1 ? 's' : '')\n\t\t}\n\t\t// bottom label: percentage is derived from junctions\n\t\t// since events of eventlst[] share junctions, just use the first event\n\t\tthisset.bottomlabelsays = firstevent.percentage + '%'\n\t}\n\treturn eventsetlst\n}\n\nexport function findjunctionbystartstop(lst, p1, p2) {\n\tconst start = Math.min(p1, p2)\n\tconst stop = Math.max(p1, p2)\n\tfor (const j of lst) {\n\t\tif (j.start == start && j.stop == stop) return j\n\t}\n\treturn null\n}\n\nexport function findjunctionAlst(junctions, gm, exonbegin, exonend) {\n\t/*\n\tfind canonical junctions skipped by junction B\n\tby the order of exons\n\tallow some or all of the canonical junctions to be missing\n\t*/\n\tconst lst = []\n\tconst exonstart = Math.min(exonbegin, exonend)\n\tconst exonstop = Math.max(exonbegin, exonend)\n\tif (gm.strand == '+') {\n\t\tfor (let i = exonstart; i < exonstop; i++) {\n\t\t\tconst p1 = gm.exon[i][1] - 1\n\t\t\tconst p2 = gm.exon[i + 1][0]\n\t\t\tlst.push(findjunctionbystartstop(junctions, p1, p2))\n\t\t}\n\t} else {\n\t\tfor (let i = exonstop; i > exonstart; i--) {\n\t\t\tconst p1 = gm.exon[i][1] - 1\n\t\t\tconst p2 = gm.exon[i - 1][0]\n\t\t\t// must put to head rather than tail!!\n\t\t\t// keep junctionAlst 5-3\n\t\t\tlst.unshift(findjunctionbystartstop(junctions, p1, p2))\n\t\t}\n\t}\n\treturn lst\n}\n\nexport function findupdown1junction4exonskip(evt, gm, junctions) {\n\t/*\n\tfind up1 and down1 junction for a exon skipping event on the same isoform, for graphing\n\t*/\n\t// first skipped exon\n\tlet exonidx = evt.skippedexon[0]\n\tif (exonidx > 1) {\n\t\t// upstream of first skipped exon\n\t\tlet p1, p2\n\t\tif (gm.strand == '+') {\n\t\t\tp1 = gm.exon[exonidx - 2][1] - 1\n\t\t\tp2 = gm.exon[exonidx - 1][0]\n\t\t} else {\n\t\t\tp1 = gm.exon[exonidx - 1][1] - 1\n\t\t\tp2 = gm.exon[exonidx - 2][0]\n\t\t}\n\t\tevt.up1junction = findjunctionbystartstop(junctions, p1, p2)\n\t}\n\n\t// last skipped exon\n\texonidx = evt.skippedexon[evt.skippedexon.length - 1]\n\tif (exonidx < gm.exon.length - 2) {\n\t\t// downstream of last skipped exon\n\t\tlet p1, p2\n\t\tif (gm.strand == '+') {\n\t\t\tp1 = gm.exon[exonidx + 1][1] - 1\n\t\t\tp2 = gm.exon[exonidx + 2][0]\n\t\t} else {\n\t\t\tp1 = gm.exon[exonidx + 2][1] - 1\n\t\t\tp2 = gm.exon[exonidx + 1][0]\n\t\t}\n\t\tevt.down1junction = findjunctionbystartstop(junctions, p1, p2)\n\t}\n}\n\nfunction checkexoncodingutr(exonidlst, gm) {\n\t/*\n\tlist of exon idx\n\tcheck against gm.coding\n\treturn [utr3, utr5, coding]\n\t*/\n\tif (!gm.coding) {\n\t\treturn [false, false, false]\n\t}\n\tlet exonstart = gm.exon[exonidlst[0]][0]\n\tlet exonstop = gm.exon[exonidlst[0]][1]\n\tfor (const idx of exonidlst) {\n\t\texonstart = Math.min(gm.exon[idx][0], exonstart)\n\t\texonstop = Math.max(gm.exon[idx][1], exonstop)\n\t}\n\n\tconst forward = gm.strand == '+'\n\tlet utr3 = false,\n\t\tutr5 = false,\n\t\tcoding = false\n\n\tif (exonstop <= gm.codingstart) {\n\t\tif (forward) {\n\t\t\tutr5 = true\n\t\t} else {\n\t\t\tutr3 = true\n\t\t}\n\t} else if (exonstart >= gm.codingstop) {\n\t\tif (forward) {\n\t\t\tutr3 = true\n\t\t} else {\n\t\t\tutr5 = true\n\t\t}\n\t} else {\n\t\tcoding = true\n\t}\n\treturn [utr3, utr5, coding]\n}\n", "import { select as d3select } from 'd3-selection'\nimport { axisLeft } from 'd3-axis'\nimport { scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { rgb as d3rgb } from 'd3-color'\nimport { exoncolor, IN_frame, OUT_frame, spliceeventchangegmexon } from '#shared/common.js'\nimport * as client from './client'\nimport { mapjunctiontoexons } from './spliceevent.prep'\nimport { findexonskipping } from './spliceevent.exonskip'\nimport spliceeventphrase from './spliceevent.phrase'\nimport getdefault_exonskipalt from './spliceevent.exonskip.getdefault'\n\n/*\n\nused on browser/client\n\nassume all junctions and genes to compare are on the same chr\n\n\n*/\n\nexport function spliceeventanalyze(tk, block) {\n\t/*\n\trun this after both the junction and gene tracks have been loaded\n\n\tsome conditions to halt:\n\t1. no gene track\n\t2. 3 or more genes in view range\n\n\t*/\n\n\tif (tk.eventsg) {\n\t\t// clear previous rendering before doing anything\n\t\ttk.eventsg.selectAll('*').remove()\n\t}\n\tif (tk.type != client.tkt.junction) {\n\t\treturn\n\t}\n\tif (!tk.data) {\n\t\treturn\n\t}\n\tif (tk.data.length == 0) {\n\t\t// no junction in view range\n\t\treturn\n\t}\n\n\tconst [gmdataerr, gmdata] = getgmdata(block)\n\n\tif (gmdataerr) {\n\t\tconst fontsize = 12\n\t\tconst pad = 2\n\t\ttk.eventsg\n\t\t\t.append('rect')\n\t\t\t.attr('width', block.width)\n\t\t\t.attr('height', pad * 2 + fontsize)\n\t\t\t.attr('fill', '#f1f1f1')\n\t\ttk.eventsg\n\t\t\t.append('text')\n\t\t\t.text(gmdataerr)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('font-size', fontsize)\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('x', block.width / 2)\n\t\t\t.attr('y', pad + fontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\ttk.height_main += pad * 2 + fontsize\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\n\tif (!gmdata) {\n\t\t// no gene data\n\t\treturn\n\t}\n\n\t// clear events\n\tfor (const junction of tk.data) {\n\t\tdelete junction.spliceevents\n\t}\n\n\tmapjunctiontoexons(tk.data, gmdata)\n\n\tconst allevents = []\n\n\tconst exonskipalt = findexonskipping(tk.totalsamplecount > 1, tk.data, gmdata)\n\n\tif (exonskipalt.length > 0) {\n\t\tfor (const exonset of exonskipalt) {\n\t\t\tif (exonlstoutofrange(exonset.exonlst, block)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tallevents.push(exonset)\n\t\t\tfor (const thisevt of exonset.eventlst) {\n\t\t\t\tif (!thisevt.junctionB.spliceevents) {\n\t\t\t\t\tthisevt.junctionB.spliceevents = []\n\t\t\t\t}\n\t\t\t\tthisevt.junctionB.spliceevents.push(thisevt)\n\t\t\t}\n\t\t}\n\t}\n\n\tif (allevents.length) {\n\t\trendereventsintrack(allevents, tk, block)\n\t}\n\n\t// end of export\n}\n\n//////////// render //////////\n\nfunction rendereventsintrack(allevents, tk, block) {\n\tconst labelfontsize = 10\n\tconst stackspace = 1\n\tconst boxlabelspacing = 2\n\n\tlet stackheight\n\tif (tk.totalsamplecount > 1) {\n\t\t// multi-sample, 3 rows\n\t\tstackheight = labelfontsize * 3 + stackspace * 2\n\t} else {\n\t\tstackheight = labelfontsize * 2 + stackspace\n\t}\n\n\tfor (const eventset of allevents) {\n\t\t// each is a set of events anchored to the same exon set\n\n\t\teventset.g = tk.eventsg.append('g')\n\n\t\t// all events in this set share the same junctionB!\n\t\tconst junctionB = eventset.eventlst[0].junctionB\n\t\tconst jbstr = junctionB.chr + '-' + junctionB.start + '-' + junctionB.stop // for junction frame caching\n\n\t\teventset.toplabel = eventset.g\n\t\t\t.append('text')\n\t\t\t.text(eventset.toplabelsays)\n\t\t\t.attr('font-size', labelfontsize)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('fill', eventset.color)\n\t\t\t.attr('y', labelfontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\tif (tk.totalsamplecount > 1) {\n\t\t\teventset.middlelabel = eventset.g\n\t\t\t\t.append('text')\n\t\t\t\t.text(eventset.middlelabelsays)\n\t\t\t\t.attr('font-size', labelfontsize)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('fill', eventset.color)\n\t\t\t\t.attr('y', labelfontsize * 1.5)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t}\n\n\t\t/*\n\tframe-checking\n\tgo over events, label those no checking\n\t\t.isaltexon\n\t\tnoncoding gm\n\t\tskipped exons at utr\n\tcheck against cache\n\t*/\n\t\tlet willshowframe = false\n\t\tlet thiseventframe = null\n\t\t// null means frame info was not known for all events in this set\n\t\tfor (const evt of eventset.eventlst) {\n\t\t\tif (evt.isaltexon) {\n\t\t\t\t// don't check alternative exon usage\n\t\t\t\tevt.framenocheck = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (evt.isskipexon) {\n\t\t\t\tif (!evt.gm.coding) {\n\t\t\t\t\t// noncoding gm\n\t\t\t\t\tevt.framenocheck = true\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (evt.utr3 || evt.utr5) {\n\t\t\t\t\t// skipped exons at utr\n\t\t\t\t\tevt.framenocheck = true\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\twillshowframe = true\n\t\t\tif (block.genome.junctionframecache.has(jbstr)) {\n\t\t\t\tlet isoform\n\t\t\t\tif (evt.isskipexon) {\n\t\t\t\t\tisoform = evt.gm.isoform\n\t\t\t\t}\n\t\t\t\tconst thisframe = block.genome.junctionframecache.get(jbstr).get(isoform)\n\t\t\t\tif (thisframe == undefined) {\n\t\t\t\t\t// this isoform not registered for this junction\n\t\t\t\t} else {\n\t\t\t\t\tevt.frame = thisframe\n\t\t\t\t\tif (thiseventframe == null) {\n\t\t\t\t\t\tthiseventframe = thisframe\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (thisframe == IN_frame) {\n\t\t\t\t\t\t\t// is in-frame, show as in-frame\n\t\t\t\t\t\t\tthiseventframe = IN_frame\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// this junction not registered\n\t\t\t}\n\t\t}\n\t\teventset.bottomlabel = eventset.g\n\t\t\t.append('text')\n\t\t\t.text(\n\t\t\t\teventset.bottomlabelsays +\n\t\t\t\t\t(willshowframe\n\t\t\t\t\t\t? ', ' + (thiseventframe == null ? 'checking' : thiseventframe == IN_frame ? 'IN' : 'OUT')\n\t\t\t\t\t\t: '')\n\t\t\t)\n\t\t\t.attr('font-size', labelfontsize)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('fill', eventset.color)\n\t\t\t.attr('y', stackheight - labelfontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\n\t\tif (willshowframe && thiseventframe == null) {\n\t\t\t// frame info not known for all events\n\t\t\tfor (const evt of eventset.eventlst) {\n\t\t\t\tlet gm\n\t\t\t\tif (evt.isaltexon) {\n\t\t\t\t\tgm = evt.gmB\n\t\t\t\t} else if (evt.isskipexon) {\n\t\t\t\t\tgm = evt.gm\n\t\t\t\t}\n\t\t\t\tif (!block.genome.junctionframecache.has(jbstr)) {\n\t\t\t\t\tcheckjunctionframe({\n\t\t\t\t\t\tjbstr: jbstr,\n\t\t\t\t\t\tevt: evt,\n\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\teventset: eventset\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (!block.genome.junctionframecache.get(jbstr).has(gm.isoform)) {\n\t\t\t\t\tcheckjunctionframe({\n\t\t\t\t\t\tjbstr: jbstr,\n\t\t\t\t\t\tevt: evt,\n\t\t\t\t\t\tgm: gm,\n\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\teventset: eventset\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// draw exon boxes\n\t\t// determine box pixel range\n\t\tconst exonobjlst = []\n\t\tlet boxstart = null,\n\t\t\tboxstop\n\t\tfor (const exon of eventset.exonlst) {\n\t\t\tconst pointa = block.seekcoord(exon.chr, exon.start)[0]\n\t\t\tif (!pointa) {\n\t\t\t\tconsole.log('skipped exon start position not mapped: ' + exon.start)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/*\n\t\texon.stop - 1\n\t\tmake sure to get position for exonic base\n\t\tso that in splicingrna mode of gmtk, skipped exons won't extend into intron gap\n\t\t*/\n\t\t\tconst pointb = block.seekcoord(exon.chr, exon.stop - 1)[0]\n\t\t\tif (!pointb) {\n\t\t\t\tconsole.log('skipped exon stop position not mapped: ' + exon.stop)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst exonobj = {\n\t\t\t\tx: Math.min(pointa.x, pointb.x),\n\t\t\t\tw: Math.max(1, Math.abs(pointa.x - pointb.x))\n\t\t\t}\n\t\t\texonobj.rect = eventset.g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('fill', eventset.color)\n\t\t\t\t.attr('width', exonobj.w)\n\t\t\t\t.attr('height', stackheight)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconsole.log(eventset)\n\t\t\t\t})\n\t\t\tif (boxstart == null) {\n\t\t\t\tboxstart = exonobj.x\n\t\t\t\tboxstop = exonobj.x + exonobj.w\n\t\t\t} else {\n\t\t\t\tboxstart = Math.min(boxstart, exonobj.x)\n\t\t\t\tboxstop = Math.max(boxstop, exonobj.x + exonobj.w)\n\t\t\t}\n\t\t\texonobjlst.push(exonobj)\n\t\t}\n\n\t\t// position exon boxes, starting from boxstart\n\t\tfor (const exon of exonobjlst) {\n\t\t\texon.rect.attr('x', exon.x - boxstart)\n\t\t}\n\n\t\teventset.boxstart = boxstart\n\t\teventset.boxwidth = boxstop - boxstart\n\n\t\tif (eventset.exonlst.length > 1) {\n\t\t\t// show through line\n\t\t\teventset.g\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', eventset.color)\n\t\t\t\t.attr('stroke-opacity', 0.2)\n\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('x1', 0)\n\t\t\t\t.attr('x2', eventset.boxwidth)\n\t\t\t\t.attr('y1', stackheight / 2 - 0.5)\n\t\t\t\t.attr('y2', stackheight / 2 - 0.5)\n\t\t}\n\t\teventset.toplabel.each(function () {\n\t\t\teventset.labelwidth = this.getBBox().width\n\t\t})\n\t\tif (eventset.middlelabel) {\n\t\t\teventset.middlelabel.each(function () {\n\t\t\t\teventset.labelwidth = this.getBBox().width\n\t\t\t})\n\t\t}\n\t\teventset.bottomlabel.each(function () {\n\t\t\teventset.labelwidth = Math.max(eventset.labelwidth, this.getBBox().width)\n\t\t})\n\t\tif (eventset.labelwidth > eventset.boxstart) {\n\t\t\teventset.labelonright = true\n\t\t\teventset.toplabel.attr('x', eventset.boxwidth + boxlabelspacing)\n\t\t\teventset.bottomlabel.attr('x', eventset.boxwidth + boxlabelspacing)\n\t\t\tif (eventset.middlelabel) {\n\t\t\t\teventset.middlelabel.attr('x', eventset.boxwidth + boxlabelspacing)\n\t\t\t}\n\t\t} else {\n\t\t\teventset.toplabel.attr('text-anchor', 'end').attr('x', -boxlabelspacing)\n\t\t\teventset.bottomlabel.attr('text-anchor', 'end').attr('x', -boxlabelspacing)\n\t\t\tif (eventset.middlelabel) {\n\t\t\t\teventset.middlelabel.attr('text-anchor', 'end').attr('x', -boxlabelspacing)\n\t\t\t}\n\t\t}\n\t\t// mouseover cover\n\t\teventset.cover = eventset.g\n\t\t\t.append('rect')\n\t\t\t.attr('x', eventset.labelonright ? 0 : -eventset.labelwidth - boxlabelspacing)\n\t\t\t.attr('width', eventset.labelwidth + boxlabelspacing + eventset.boxwidth)\n\t\t\t.attr('height', stackheight)\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.on('mouseover', () => {\n\t\t\t\teventset.cover.attr('fill-opacity', 0.1)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\teventset.cover.attr('fill-opacity', 0)\n\t\t\t})\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tktip.clear()\n\t\t\t\tdisplayspliceevents(eventset.eventlst, tk.tktip.d)\n\t\t\t\ttk.tktip.showunder(eventset.cover.node())\n\t\t\t})\n\t}\n\n\t// stacking\n\tconst stacks = [0]\n\n\tfor (const eventset of allevents) {\n\t\tlet x1 = eventset.boxstart - (eventset.labelonright ? 0 : boxlabelspacing + eventset.labelwidth)\n\t\tlet x2 = eventset.boxstart + eventset.boxwidth + (eventset.labelonright ? boxlabelspacing + eventset.labelwidth : 0)\n\t\tfor (let stackidx = 0; stackidx < stacks.length; stackidx++) {\n\t\t\tif (x1 > stacks[stackidx]) {\n\t\t\t\teventset.stackidx = stackidx\n\t\t\t\tstacks[stackidx] = x2\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// still looking\n\t\t\tif (!eventset.labelonright) {\n\t\t\t\t// label is on left\n\t\t\t\t// see if swinging to right fix it\n\t\t\t\tconst newx1 = eventset.boxstart\n\t\t\t\tconst newx2 = eventset.boxstart + eventset.boxwidth + boxlabelspacing + eventset.labelwidth\n\t\t\t\tif (newx1 > stacks[stackidx] && newx2 <= block.width) {\n\t\t\t\t\t// swing to right\n\t\t\t\t\teventset.labelonright = true\n\t\t\t\t\teventset.stackidx = stackidx\n\t\t\t\t\tstacks[stackidx] = newx2\n\t\t\t\t\teventset.toplabel.attr('x', eventset.boxwidth + boxlabelspacing).attr('text-anchor', 'start')\n\t\t\t\t\teventset.bottomlabel.attr('x', eventset.boxwidth + boxlabelspacing).attr('text-anchor', 'start')\n\t\t\t\t\tif (eventset.middlelabel) {\n\t\t\t\t\t\teventset.middlelabel.attr('x', eventset.boxwidth + boxlabelspacing).attr('text-anchor', 'start')\n\t\t\t\t\t}\n\t\t\t\t\teventset.cover.attr('x', 0)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (eventset.stackidx == undefined) {\n\t\t\teventset.stackidx = stacks.length\n\t\t\tstacks.push(x2)\n\t\t}\n\t\teventset.g.attr(\n\t\t\t'transform',\n\t\t\t'translate(' + eventset.boxstart + ',' + eventset.stackidx * (stackheight + stackspace) + ')'\n\t\t)\n\t}\n\n\ttk.height_main += stacks.length * (stackheight + stackspace) + tk.bottompad\n\tblock.block_setheight()\n}\n\nfunction checkjunctionframe(arg) {\n\t/*\n\t- jbstr\n\t- evt\n\t- gm\n\t- block\n\t- eventset\n\t*/\n\tif (!arg.block.genome.junctionframecache.has(arg.jbstr)) {\n\t\targ.block.genome.junctionframecache.set(arg.jbstr, new Map())\n\t}\n\tif (!arg.gm.coding) {\n\t\t// noncoding\n\t\targ.block.genome.junctionframecache.get(arg.jbstr).set(arg.gm.isoform, false)\n\t\tmayupdateeventsetlabel(arg)\n\t\treturn\n\t}\n\n\tconst gm2 = spliceeventchangegmexon(arg.gm, arg.evt)\n\n\tclient\n\t\t.dofetch2('translategm', { method: 'POST', body: JSON.stringify({ genome: arg.block.genome.name, gm: gm2 }) })\n\t\t.then(data => {\n\t\t\tif (!data) {\n\t\t\t\tconsole.log('server error')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (data.error) {\n\t\t\t\tconsole.log(data.error)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (typeof data.frame != 'boolean') {\n\t\t\t\tconsole.log('invalid result from translategm: ' + data.frame)\n\t\t\t\treturn\n\t\t\t}\n\t\t\targ.evt.frame = data.frame\n\t\t\t// cache result\n\t\t\targ.block.genome.junctionframecache.get(arg.jbstr).set(arg.gm.isoform, data.frame)\n\t\t\tmayupdateeventsetlabel(arg)\n\t\t})\n}\n\nfunction mayupdateeventsetlabel(arg) {\n\tif (!arg.block.genome.junctionframecache.has(arg.jbstr)) {\n\t\t// safe guard\n\t\t// jbstr should already be there\n\t\treturn\n\t}\n\t/*\n\tabout one single junctionB\n\n\tupon frame checked for all events,\n\tindicate frame for a set of events in the stack display\n\tshow IN whenever there is any in-frame, otherwise show OUT\n\t*/\n\tlet frame = OUT_frame\n\tfor (const evt of arg.eventset.eventlst) {\n\t\tif (evt.framenocheck) {\n\t\t\t// no checking frame\n\t\t\tcontinue\n\t\t}\n\t\tlet isoform\n\t\tif (evt.isskipexon) {\n\t\t\tisoform = evt.gm.isoform\n\t\t}\n\t\tconst thisframe = arg.block.genome.junctionframecache.get(arg.jbstr).get(isoform)\n\t\tif (thisframe == undefined) {\n\t\t\t// no result for this isoform yet\n\t\t\treturn\n\t\t}\n\t\tif (thisframe == IN_frame) {\n\t\t\tframe = IN_frame\n\t\t}\n\t}\n\t// update frame in stack display\n\targ.eventset.bottomlabel.text(arg.eventset.bottomlabelsays + ', ' + (frame == IN_frame ? 'IN' : 'OUT'))\n}\n\nexport function displayspliceevents(events, holder) {\n\t// select one event and display diagram\n\tconst evt2showidx = getdefault_exonskipalt(events)\n\n\tif (events.length > 1) {\n\t\t// more events, show phrase only\n\t\tholder.append('div').style('margin', '3px 0px').style('color', '#858585').text('Additional interpretations:')\n\t\tconst name = Math.random().toString()\n\t\tfor (const [idx, evt] of events.entries()) {\n\t\t\tconst id = name + idx\n\t\t\tconst row = holder.append('div').style('margin-top', '3px')\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'radio')\n\t\t\t\t.property('checked', idx == evt2showidx)\n\t\t\t\t.attr('name', name)\n\t\t\t\t.attr('id', id)\n\t\t\t\t.on('change', () => {\n\t\t\t\t\tdisplayspliceevents_show(events, idx, showdiv)\n\t\t\t\t})\n\t\t\trow\n\t\t\t\t.append('label')\n\t\t\t\t.attr('for', id)\n\t\t\t\t.html('&nbsp;' + spliceeventphrase(evt))\n\t\t}\n\t}\n\n\tconst showdiv = holder.append('div')\n\n\tdisplayspliceevents_show(events, evt2showidx, showdiv)\n}\n\nfunction displayspliceevents_show(events, idx, div) {\n\tdiv.selectAll('*').remove()\n\timport('./spliceevent.exonskip.diagram').then(p => {\n\t\tp.default({\n\t\t\tevent: events[idx],\n\t\t\tholder: div,\n\t\t\tnophrase: events.length > 1\n\t\t})\n\t})\n}\n\n///////////// helpers /////////////\n\nfunction exonlstoutofrange(lst, block) {\n\t/*\n\twhen doing event analysis, it took data of entire gene body\n\tand sometimes the junctions are huge, and the view range is narrow\n\tso it will find events that are out of view range\n\tdo not show these\n\n\tcheck if the entire list of exons is out of range\n\ta set of splicing events share this list of exons\n\tif out of range, the events won't be mentioned on the browser display\n\teach: { chr, start, stop }\n\t*/\n\n\tconst chr = lst[0].chr\n\tlet start = lst[0].start\n\tlet stop = lst[0].stop\n\tfor (const e of lst) {\n\t\tstart = Math.min(start, e.start)\n\t\tstop = Math.max(stop, e.stop)\n\t}\n\tconst starthit = block.seekcoord(chr, start)[0]\n\tconst stophit = block.seekcoord(chr, stop)[0]\n\n\tif (!starthit || !stophit) {\n\t\t// unreasonable case\n\t\treturn true\n\t}\n\n\t/*\n\tsee what sides are each end in\n\tif both ends are out of bounds in left or right, then skip\n\tdon't skip if start is left, and stop is right, event should be visible\n\t*/\n\tlet startoutleft = false\n\tlet startoutright = false\n\tif (starthit.x <= 0) {\n\t\tstartoutleft = true\n\t} else if (starthit.x >= block.width) {\n\t\tstartoutright = true\n\t}\n\n\tlet stopoutleft = false\n\tlet stopoutright = false\n\tif (stophit.x <= 0) {\n\t\tstopoutleft = true\n\t} else if (stophit.x >= block.width) {\n\t\tstopoutright = true\n\t}\n\n\tif (startoutleft && stopoutleft) return true\n\tif (startoutright && stopoutright) return true\n\treturn false\n}\n\nfunction getgmdata(block) {\n\t/*\n\tto work in browser, not offline\n\tcan reject if 3 or more genes in view range\n\t*/\n\tif (!block.gmmode || block.gmmode == client.gmmode.genomic) {\n\t\t/*\n\t\tin genome mode\n\t\trequire gene track for the gene data\n\t\t*/\n\t\tconst genetk = []\n\t\tfor (const t of block.tklst) {\n\t\t\tif (t.__isgene) {\n\t\t\t\tgenetk.push(t)\n\t\t\t}\n\t\t}\n\t\tif (genetk.length == 0) {\n\t\t\treturn ['Add a gene track to analyze splice junctions.']\n\t\t}\n\t\tconst gmdatalst = []\n\t\tfor (const t of genetk) {\n\t\t\tif (t.gmdata) {\n\t\t\t\tfor (const m of t.gmdata) {\n\t\t\t\t\tgmdatalst.push(m)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (gmdatalst.length == 0) {\n\t\t\t// no genes from view range\n\t\t\treturn [null]\n\t\t}\n\t\t/*\n\t\tcheck how many genes are there in view range\n\t\tif 3 or more, reject, do not overwhelm server\n\t\t*/\n\t\tconst regions = []\n\t\tfor (const m of gmdatalst) {\n\t\t\tlet overlap = false\n\t\t\tfor (const r of regions) {\n\t\t\t\tif (Math.max(r.start, m.start) < Math.min(r.stop, m.stop)) {\n\t\t\t\t\toverlap = true\n\t\t\t\t\tr.start = Math.min(r.start, m.start)\n\t\t\t\t\tr.stop = Math.max(r.stop, m.stop)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!overlap) {\n\t\t\t\tregions.push({ start: m.start, stop: m.stop })\n\t\t\t}\n\t\t}\n\t\tif (regions.length >= 3) {\n\t\t\treturn ['Zoom in on a single gene to analyze splice junctions.']\n\t\t}\n\t\treturn [null, gmdatalst]\n\t}\n\tif (block.gmmode == client.gmmode.gmsum) {\n\t\t// showing sum of isoforms\n\t\tif (!block.allgm) {\n\t\t\treturn ['Error: block.allgm[] is missing']\n\t\t}\n\t\treturn [null, block.allgm]\n\t}\n\t// in gm mode and viewing single isoform\n\tif (!block.usegm) {\n\t\treturn ['Error: block.usegm is missing']\n\t}\n\treturn [null, [block.usegm]]\n}\n", "import { scaleLinear, scaleLog, scaleOrdinal } from 'd3-scale'\nimport { schemeCategory10 } from 'd3-scale-chromatic'\nimport { select as d3select } from 'd3-selection'\nimport { axisRight } from 'd3-axis'\nimport * as client from './client'\nimport * as common from '#shared/common.js'\nimport { legend_newrow } from './block.legend'\nimport { modefold, moderaise, modesample } from './block.tk.junction'\nimport { spliceeventanalyze, displayspliceevents } from './block.tk.junction.spliceevent'\nimport { beeswarm } from 'd3-beeswarm'\nimport getdefault_exonskipalt from './spliceevent.exonskip.getdefault'\n\n/*\nexported functions:\n\t- rendertk()\n\t- automode()\n\t- horiplace()\n*/\n\nconst colorfunc = scaleOrdinal(schemeCategory10)\n\nconst minfontsize = 12\n\nexport function rendertk(junctions, tk, block) {\n\t/*\ndata from multiple samples\nallow metadata\nallow mode toggling\nallow highlight certain junctions\n*/\n\n\tif (tk.data) {\n\t\t/*\n\tthere has been old junctions\n\treserve old settings (x, mode)\n\t*/\n\t\tconst map = new Map()\n\t\tfor (const j of tk.data) {\n\t\t\tmap.set(j.chr + '.' + j.start + '.' + j.stop, j)\n\t\t}\n\t\tconst pannedpx = Number.isInteger(block.pannedpx) ? block.pannedpx : 0\n\t\tfor (const i of junctions) {\n\t\t\tconst j = map.get(i.chr + '.' + i.start + '.' + i.stop)\n\t\t\tif (j) {\n\t\t\t\ti.x = j.x + pannedpx\n\t\t\t\ti.mode = j.mode\n\t\t\t\ti.modefix = j.modefix\n\t\t\t\t/*\n\t\t\tlazy fix: if previous mode is modesample, change to moderaise\n\t\t\t*/\n\t\t\t\tif (i.mode == modesample) {\n\t\t\t\t\ti.mode = moderaise\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttk.data = junctions\n\ttk.glider.selectAll('*').remove()\n\ttk.leftaxis.selectAll('*').remove()\n\n\t/*\nif(tk.bins) {\n\t// not in use\n\ttk.data=null\n\tvar barheight=tk.axisheight\n\tvar binw=block.width/bincount\n\ttk.height=tk.toppad+barheight+tk.bottompad\n\tvar maxvalue=Math.max.apply(null,bins)\n\tvar yscale=d3.scale.log().domain([1,maxvalue]).range([barheight,0])\n\tsja.f.axis_applystyle({\n\t\taxis:tk.leftaxis.call(\n\t\t\td3.svg.axis().scale(yscale).orient('left').ticks(6,'.0f')\n\t\t),\n\t\tcolor:'black',\n\t\tshowline:true\n\t})\n\ttk.glider.selectAll().data(bins).enter().append('rect')\n\t\t.attr('x',function(d,i){ return binw*i })\n\t\t.attr('y',function(d){ return tk.toppad+(d==0 ? 0 : yscale(d))})\n\t\t.attr('height',function(d){return barheight-(d==0 ? barheight : yscale(d))})\n\t\t.attr({\n\t\t\twidth:binw,\n\t\t\tfill:'black'\n\t\t\t})\n\tblock.block_setheight()\n\tif(tk.onrender) {\n\t\ttk.onrender(tk)\n\t}\n\treturn\n}\n\t*/\n\n\tif (tk.readcountcutoff) {\n\t\tconst newj = []\n\t\tfor (const j of tk.data) {\n\t\t\tif (j.data) {\n\t\t\t\t// multi sample, filter on samples\n\t\t\t\tconst newsamples = []\n\t\t\t\tfor (const s of j.data) {\n\t\t\t\t\tif (s.v >= tk.readcountcutoff) {\n\t\t\t\t\t\tnewsamples.push(s)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newsamples.length == 0) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tj.data = newsamples\n\t\t\t\tnewj.push(j)\n\t\t\t} else {\n\t\t\t\t// single sample\n\t\t\t\tif (j.v >= tk.readcountcutoff) {\n\t\t\t\t\tnewj.push(j)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttk.data = newj\n\t}\n\n\tif (tk.data.length == 0) {\n\t\ttk.height_main = 50\n\t\tblock.tkcloakoff(tk, { error: tk.name + ': No junction in view range' })\n\t\t// controller off\n\t\ttk.label_mcount.text('')\n\t\tif (tk.label_samplecount) {\n\t\t\t// only has this label when of multi-samples\n\t\t\ttk.label_samplecount.text('')\n\t\t}\n\t\tget_leftLabelMaxwidth(tk)\n\t\tblock.setllabel()\n\t\tblock.block_setheight()\n\t\t/*\n\tif(tk.onrender) {\n\t\ttk.onrender(tk)\n\t}\n\t*/\n\t\treturn\n\t}\n\n\t// tell # of unique junctions\n\ttk.label_mcount.text(tk.data.length + ' junction' + (tk.data.length > 1 ? 's' : ''))\n\n\t/*\nif(tk.totalsamplecount>1) {\n\ttk.label_samplecount.text(tk.totalsamplecount+' samples')\n}\n*/\n\n\tget_leftLabelMaxwidth(tk)\n\tblock.setllabel()\n\n\tjunctiontype2color(tk, block)\n\n\t// all graphs go in here\n\tconst mg = tk.glider.append('g')\n\n\ttk.data.sort((a, b) => {\n\t\treturn a._x - b._x\n\t})\n\n\t/*\nwhen multi-sample, use max # of samples for a junction in view range\nif single sample, use max junction read count\n*/\n\tlet maxsamplecount = 0\n\n\t// disc radius\n\tif (tk.totalsamplecount > 1) {\n\t\t/*\n\tmulti-sample\n\twill show >1 sample count in disc\n\tand may show piechart for sample stratification\n\tso need to slightly increase disc radius to fit these\n\t*/\n\t\tmaxsamplecount = tk.data.reduce((max, j) => Math.max(max, j.data.length), 0)\n\n\t\tconst radius = 5\n\t\tlet mrd = 0 // max radius\n\t\tconst w = Math.pow(radius, 2) * Math.PI // unit area\n\t\tif (maxsamplecount <= 10) {\n\t\t\tmrd = w * maxsamplecount * 0.9\n\t\t} else if (maxsamplecount <= 100) {\n\t\t\tmrd = w * 10\n\t\t} else if (maxsamplecount <= 1000) {\n\t\t\tmrd = w * 14\n\t\t} else {\n\t\t\tmrd = w * 20\n\t\t}\n\t\tconst sf_discradius = scaleLinear()\n\t\t\t.domain([\n\t\t\t\t1,\n\t\t\t\tmaxsamplecount * 0.5 + 0.1,\n\t\t\t\tmaxsamplecount * 0.6 + 0.1,\n\t\t\t\tmaxsamplecount * 0.7 + 0.1,\n\t\t\t\tmaxsamplecount * 0.8 + 0.1,\n\t\t\t\tmaxsamplecount\n\t\t\t])\n\t\t\t.range([w, w + (mrd - w) * 0.8, w + (mrd - w) * 0.85, w + (mrd - w) * 0.9, w + (mrd - w) * 0.95, mrd])\n\t\tlet maxradius = 0\n\t\tfor (const j of tk.data) {\n\t\t\tj.radius = Math.sqrt(sf_discradius(j.data.length) / Math.PI)\n\t\t\tif (j.data.length > 1) {\n\t\t\t\t// more than 1 sample, to show #sample in disc, so to adjust disc radius\n\t\t\t\tmg.append('text')\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('font-size', Math.max(minfontsize, j.radius))\n\t\t\t\t\t.text(j.data.length)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tconst b = this.getBBox()\n\t\t\t\t\t\tconst newrad = Math.sqrt(Math.pow(b.width, 2) + Math.pow(b.height, 2)) / 2\n\t\t\t\t\t\tj.radius = Math.max(j.radius, newrad)\n\t\t\t\t\t})\n\t\t\t\t\t.remove()\n\t\t\t}\n\t\t\tj.rimwidth = j.rimcount ? Math.max(2, j.radius / 6) : 0\n\t\t\tj.radius2 = j.radius + j.rimwidth + (j.rimwidth > 0 ? 1 : 0)\n\t\t\tmaxradius = Math.max(maxradius, j.radius2)\n\t\t}\n\t\ttk.maxradius = maxradius\n\t} else {\n\t\t/*\n\tsingle sample\n\tdisc size by read count\n\tno text in disc\n\t*/\n\t\tmaxsamplecount = tk.data.reduce((max, j) => Math.max(max, j.data[0].v), 0)\n\n\t\tconst radius = 5\n\t\tlet mrd = 0 // max radius\n\t\tconst w = Math.pow(radius, 2) * Math.PI // unit area\n\t\tif (maxsamplecount <= 10) {\n\t\t\tmrd = w * maxsamplecount * 0.9\n\t\t} else if (maxsamplecount <= 100) {\n\t\t\tmrd = w * 5\n\t\t} else if (maxsamplecount <= 1000) {\n\t\t\tmrd = w * 7\n\t\t} else {\n\t\t\tmrd = w * 10\n\t\t}\n\t\tconst sf_discradius = scaleLinear()\n\t\t\t.domain([\n\t\t\t\t1,\n\t\t\t\tmaxsamplecount * 0.5 + 0.1,\n\t\t\t\tmaxsamplecount * 0.6 + 0.1,\n\t\t\t\tmaxsamplecount * 0.7 + 0.1,\n\t\t\t\tmaxsamplecount * 0.8 + 0.1,\n\t\t\t\tmaxsamplecount\n\t\t\t])\n\t\t\t.range([w, w + (mrd - w) * 0.8, w + (mrd - w) * 0.85, w + (mrd - w) * 0.9, w + (mrd - w) * 0.95, mrd])\n\t\tlet maxradius = 0\n\t\tfor (const j of tk.data) {\n\t\t\tj.radius = Math.sqrt(sf_discradius(j.data[0].v) / Math.PI)\n\t\t\tj.rimwidth = j.rimcount ? Math.max(2, j.radius / 6) : 0\n\t\t\tj.radius2 = j.radius + j.rimwidth + (j.rimwidth > 0 ? 1 : 0)\n\t\t\tmaxradius = Math.max(maxradius, j.radius2)\n\t\t}\n\t\ttk.maxradius = maxradius\n\t}\n\n\t// y position\n\tlet maxread = 0,\n\t\tmaxmedian = 0,\n\t\tmaxmedianradius = 0\n\n\tfor (const j of tk.data) {\n\t\tfor (const s of j.data) {\n\t\t\tmaxread = Math.max(s.v, maxread)\n\t\t}\n\t\tif (j.data.length == 1) {\n\t\t\t// even for single sample, still set j.median\n\t\t\tj.median = j.data[0].v\n\t\t} else {\n\t\t\tconst readlst = j.data.map(s => s.v)\n\t\t\treadlst.sort((a, b) => a - b)\n\t\t\tj.median = readlst[Math.floor(j.data.length / 2)]\n\t\t}\n\t\tif (j.median > maxmedian) {\n\t\t\tmaxmedian = j.median\n\t\t\tmaxmedianradius = j.radius\n\t\t}\n\t}\n\n\ttk.yscale = scaleLog()\n\t\t.domain([tk.readcountcutoff || 1, maxread])\n\t\t.range([tk.axisheight, 0])\n\n\tclient.axisstyle({\n\t\taxis: tk.leftaxis.call(axisRight().scale(tk.yscale).ticks(6, '.0f')),\n\t\tcolor: 'black',\n\t\tshowline: true\n\t})\n\n\t// set y position, also pad height for lower discs\n\t// all vertical heights set\n\ttk.height_main = tk.toppad + tk.axisheight + tk.maxradius * 4 + tk.padheight + tk.lowpad + tk.legheight + tk.bottompad\n\n\t// as soon as height is determined, create <g> for splice events, since glider has been emptied\n\ttk.eventsg = tk.glider.append('g').attr('transform', 'translate(0,' + (tk.height_main - tk.toppad) + ')')\n\n\tautomode(tk, null, block.width)\n\n\t// svg\n\tmg.attr('transform', 'translate(0,' + (tk.height_main - tk.toppad - tk.bottompad) + ')')\n\n\t{\n\t\t// top line\n\t\tconst topy = -tk.legheight - tk.lowpad - tk.maxradius * 4 - tk.padheight - tk.axisheight\n\t\tmg.append('line')\n\t\t\t.attr('x1', 0)\n\t\t\t.attr('y1', topy)\n\t\t\t.attr('y2', topy)\n\t\t\t.attr('x2', block.width)\n\t\t\t.attr('stroke', '#858585')\n\t\t\t.attr('stroke-opacity', 0.2)\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t// bottom line\n\t\tmg.append('line')\n\t\t\t.attr('x1', 0)\n\t\t\t.attr('y1', topy + tk.axisheight)\n\t\t\t.attr('y2', topy + tk.axisheight)\n\t\t\t.attr('x2', block.width)\n\t\t\t.attr('stroke', '#858585')\n\t\t\t.attr('stroke-opacity', 0.2)\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\tlet v = 10\n\t\twhile (v <= maxread) {\n\t\t\t// order of magnitude line\n\t\t\tmg.append('line')\n\t\t\t\t.attr('x1', 0)\n\t\t\t\t.attr('y1', topy + tk.yscale(v))\n\t\t\t\t.attr('y2', topy + tk.yscale(v))\n\t\t\t\t.attr('x2', block.width)\n\t\t\t\t.attr('stroke', '#858585')\n\t\t\t\t.attr('stroke-opacity', 0.2)\n\t\t\t\t.attr('stroke-dasharray', '4,4')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\tv *= 10\n\t\t}\n\t}\n\n\tconst jug = mg\n\t\t.selectAll()\n\t\t.data(tk.data)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr('transform', d => set_jug(d))\n\t\t.each(function (j) {\n\t\t\tj.jugg = this\n\t\t})\n\n\ttk.jug = jug\n\n\t// highlight junctions?\n\tif (tk.hljunctions) {\n\t\tjug.attr('class', d => {\n\t\t\tfor (const j of tk.hljunctions) {\n\t\t\t\tif (d.chr == j.chr && d.start == j.start && d.stop == j.stop) {\n\t\t\t\t\treturn 'sja_pulse'\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\t}\n\n\tjug\n\t\t.append('line')\n\t\t.attr('stroke', d => d.color)\n\t\t.attr('x1', d => set_leg_x1(d))\n\t\t.attr('y2', d => set_leg_y(d, tk))\n\t\t.attr('stroke-opacity', d => set_lineopacity(d))\n\t\t.each(function (d) {\n\t\t\td.leg1 = this\n\t\t})\n\t\t.classed('sja_jug_leg1', true)\n\tjug\n\t\t.append('line')\n\t\t.attr('stroke', d => d.color)\n\t\t.attr('x2', d => set_leg_x2(d))\n\t\t.attr('y1', d => set_leg_y(d, tk))\n\t\t.attr('stroke-opacity', d => set_lineopacity(d))\n\t\t.classed('sja_jug_leg2', true)\n\t\t.each(function (d) {\n\t\t\td.leg2 = this\n\t\t})\n\tconst jug2 = jug\n\t\t.append('g')\n\t\t.attr('class', 'sja_jug_jug2')\n\t\t.attr('transform', d => set_jug2(d, tk))\n\n\tjug2\n\t\t.append('line')\n\t\t.attr('stroke', d => d.color)\n\t\t.classed('sja_jug_stem', true)\n\t\t.attr('stroke-dasharray', '2,2')\n\t\t.attr('shape-rendering', 'crispEdges')\n\t\t.attr('y1', d => set_stem_y1(d))\n\t\t.attr('y2', d => set_stem_y2(d, tk))\n\t\t.attr('stroke-opacity', d => set_lineopacity(d))\n\t\t.each(function (d) {\n\t\t\td.stem = this\n\t\t})\n\tjug2\n\t\t.append('circle')\n\t\t.attr('r', d => d.radius)\n\t\t.attr('fill', d => d.color)\n\t\t.attr('stroke', 'white')\n\t\t.attr('fill-opacity', 0.5)\n\n\t// text in disc\n\tjug2\n\t\t.filter(d => d.data.length > 1)\n\t\t.append('text')\n\t\t.text(d => d.data.length)\n\t\t.attr('font-size', d => Math.max(minfontsize, d.radius))\n\t\t.attr('fill-opacity', d => set_discnum(d))\n\t\t.classed('sja_jug_discnum', true)\n\t\t.attr('fill', 'white')\n\t\t.attr('font-family', client.font)\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('dominant-baseline', 'central')\n\n\t/*\n\tarcs\n\tnot in use\nvar arcfunc=d3.svg.arc()\n\t.innerRadius(function(d){return d.radius+1})\n\t.outerRadius(function(d){return d.radius+1+d.rimwidth})\n\t.startAngle(0)\n\t.endAngle(function(d){return Math.PI*2*d.rimcount/d.data.length})\njug2.filter(function(d){return d.rimwidth>0})\n\t.append('path')\n\t.attr('d',arcfunc)\n\t.attr('fill',function(d){return d.color})\n\t.attr('fill-opacity',function(d){return set_rim(d)})\n\t.attr('class','sja_jug_rim')\n*/\n\n\t// kick\n\tjug2\n\t\t.append('circle')\n\t\t.attr('r', d => d.radius)\n\t\t.attr('stroke', d => d.color)\n\t\t.classed('sja_aa_disckick', true)\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('stroke-opacity', 0)\n\t\t.on('mouseover', (event, d) => {\n\t\t\tjug.selectAll('.sja_jug_leg1').attr('stroke-opacity', 0.2)\n\t\t\tjug.selectAll('.sja_jug_leg2').attr('stroke-opacity', 0.2)\n\t\t\tjug.selectAll('.sja_jug_stem').attr('stroke-opacity', 0.2)\n\t\t\td3select(d.leg1).attr('stroke-opacity', 1)\n\t\t\td3select(d.leg2).attr('stroke-opacity', 1)\n\t\t\td3select(d.stem).attr('stroke-opacity', 1)\n\t\t\tif (d.mode == modefold) {\n\t\t\t\tfoldedjunctioninfo(d, tk)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst circle = event.target.getBoundingClientRect()\n\t\t\texpandedjunctioninfo(d, tk, circle)\n\t\t})\n\t\t.on('mouseout', () => {\n\t\t\ttk.pica.g.selectAll('*').remove()\n\t\t\ttk.tktip.hide()\n\t\t\tjug.selectAll('.sja_jug_leg1').attr('stroke-opacity', d => set_lineopacity(d))\n\t\t\tjug.selectAll('.sja_jug_leg2').attr('stroke-opacity', d => set_lineopacity(d))\n\t\t\tjug.selectAll('.sja_jug_stem').attr('stroke-opacity', d => set_lineopacity(d))\n\t\t})\n\t\t.on('mousedown', event => {\n\t\t\t/*\n\t\tallow shift jug manually\n\t\t*/\n\t\t\tevent.stopPropagation()\n\t\t})\n\t\t.on('click', (event, d) => {\n\t\t\tif (d.mode == modefold) {\n\t\t\t\td.mode = moderaise\n\t\t\t} else if (d.mode == moderaise) {\n\t\t\t\tif (d.data.length == 1) {\n\t\t\t\t\t// single sample, or just 1 sample in a multi sample track\n\t\t\t\t\td.mode = modefold\n\t\t\t\t} else {\n\t\t\t\t\t// show dots for sample\n\t\t\t\t\td.mode = modesample\n\t\t\t\t\tjunctionsamplespread(d, tk, block)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\td.mode = modefold\n\t\t\t}\n\t\t\td.modefix = true\n\t\t\thoriplace(tk.data, block.width, tk)\n\t\t})\n\thoriplace(tk.data, block.width, tk)\n\n\tfunction set_lineopacity(d) {\n\t\t// do not take this function out!\n\t\treturn 0.5\n\t\t//return .3+.7 * (d.data ? d.data.length : d.v) / maxsamplecount\n\t}\n\n\tblock.onloadalltk.push(() => {\n\t\tspliceeventanalyze(tk, block)\n\t})\n\n\t// done\n\tblock.tkcloakoff(tk, {})\n\tblock.block_setheight()\n}\n\nexport function horiplace(lst, width, tk) {\n\t/*\n\tj._x: theoretical x pos of jug, wild if one foot is way out of view range\n\tj.x0: actual x of left foot\n\tj.x1: actual x of right foot\n\t*/\n\n\tconst todo = []\n\tfor (const i of lst) {\n\t\t// target x\n\t\tif (i.x0 < 0) {\n\t\t\t// left foot out of range\n\t\t\ti.tox = i.x1 - i.radius2 * 2\n\t\t} else if (i.x1 > width) {\n\t\t\t// right foot out\n\t\t\ti.tox = i.x0 + i.radius2 * 2\n\t\t} else {\n\t\t\t// both in\n\t\t\ti.tox = i._x\n\t\t}\n\t\tif (i.mode == modefold) {\n\t\t\t//i.x=Math.min(Math.max(i.radius2,i._x), width-i.radius2)\n\t\t\ti.x = i.tox\n\t\t} else {\n\t\t\ttodo.push(i)\n\t\t}\n\t}\n\n\t/*\n\tno longer does shifting\n\t*/\n\tfor (const i of lst) {\n\t\ti.x = i.tox\n\t}\n\tset_all(tk)\n\treturn\n\t// !!! why return before this code block !!!\n\t// todo.sort((a, b) => {\n\t// \treturn a.tox - b.tox\n\t// })\n\n\t// // push all to left\n\t// // set initial x for all for shifting\n\t// let cumx = todo.length == 0 ? 0 : todo[0].radius2\n\t// for (const i of todo) {\n\t// \ti.x = cumx + i.radius2\n\t// \tcumx += i.radius2 * 2\n\t// \t/*\n\t// \ti.x=cumx+i.radius2\n\t// \tif(i.x0<0) {\n\t// \t\t// left out\n\t// \t\ti.x=Math.max(i.x, i.x1-i.radius2*2)\n\t// \t} else if(i.x1>width) {\n\t// \t\ti.x=Math.max(i.x, i.x0+i.radius2*2)\n\t// \t}\n\t// \tcumx=i.x+i.radius2\n\t// \t*/\n\t// }\n\n\t// for (let i = 0; i < todo.length; i++) {\n\t// \twhile (1) {\n\t// \t\tlet currsum = 0,\n\t// \t\t\tnewsum = 0\n\t// \t\tfor (let j = i; j < todo.length; j++) {\n\t// \t\t\tconst k = todo[j]\n\t// \t\t\t// detect conditions to stop\n\t// \t\t\tif (j > 0) {\n\t// \t\t\t\tconst prev = todo[j - 1]\n\t// \t\t\t\tif (prev.x + prev.radius2 <= k.x - k.radius2) {\n\t// \t\t\t\t\t// not overlapping with previous\n\t// \t\t\t\t\tif (k.x >= k.tox) {\n\t// \t\t\t\t\t\t// so it can stop\n\t// \t\t\t\t\t\tbreak\n\t// \t\t\t\t\t}\n\t// \t\t\t\t}\n\t// \t\t\t} else {\n\t// \t\t\t\tif (k.x >= k.tox) {\n\t// \t\t\t\t\t// the first one, it can stop too\n\t// \t\t\t\t\tbreak\n\t// \t\t\t\t}\n\t// \t\t\t}\n\t// \t\t\tconst z = todo[todo.length - 1]\n\t// \t\t\tif (z.x + z.radius2 >= width) {\n\t// \t\t\t\t// last one out of range\n\t// \t\t\t\tbreak\n\t// \t\t\t}\n\t// \t\t\tcurrsum += Math.abs(k.x - k.tox)\n\t// \t\t\tk.x++\n\t// \t\t\tnewsum += Math.abs(k.x - k.tox)\n\t// \t\t}\n\t// \t\tif (newsum < currsum) {\n\t// \t\t} else {\n\t// \t\t\t// reject\n\t// \t\t\tfor (let j = i; j < todo.length; j++) {\n\t// \t\t\t\ttodo[j].x--\n\t// \t\t\t}\n\t// \t\t\tbreak\n\t// \t\t}\n\t// \t}\n\t// }\n\t// set_all(tk)\n}\n\nexport function automode(tk, usemode, blockwidth) {\n\t/*\nno longer fold junctions\n*/\n\tfor (const i of tk.data) {\n\t\tif (!i.mode) i.mode = moderaise\n\t}\n\treturn\n\n\tconst samplecountlst = []\n\tfor (let i = 0; i < tk.data.length; i++) {\n\t\tsamplecountlst.push({\n\t\t\tidx: i,\n\t\t\tcount: tk.data[i].data ? tk.data[i].data.length : tk.data[i].v\n\t\t})\n\t}\n\tsamplecountlst.sort((a, b) => b.count - a.count)\n\tlet cumx = 0\n\tfor (const cc of samplecountlst) {\n\t\tconst d = tk.data[cc.idx]\n\t\tif (!d.mode) {\n\t\t\t// no mode, only happens in first-time loading data and no usemode imposed\n\t\t\tcumx += d.radius2 * 2\n\t\t\td.mode = cumx >= blockwidth ? modefold : moderaise\n\t\t} else {\n\t\t\tif (d.modefix) {\n\t\t\t\t// won't alter mode\n\t\t\t\tif (d.mode != modefold) {\n\t\t\t\t\tcumx += d.radius2 * 2\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (usemode) {\n\t\t\t\t\td.mode = usemode\n\t\t\t\t\tif (d.mode != modefold) {\n\t\t\t\t\t\tcumx += d.radius2 * 2\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcumx += d.radius2 * 2\n\t\t\t\t\td.mode = cumx >= blockwidth ? modefold : moderaise\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction set_jug(d) {\n\treturn 'translate(' + d.x + ',0)'\n}\nfunction set_leg_x1(d) {\n\treturn d.x0 - d.x\n}\nfunction set_leg_x2(d) {\n\treturn d.x1 - d.x\n}\nfunction set_discnum(d) {\n\treturn d.mode == modefold ? 0 : 1\n}\nfunction set_pillar(d) {\n\tif (d.mode == modesample) return d.radius * 2\n\treturn 0\n}\nfunction set_stem_y1(d) {\n\tif (d.mode == modefold) return d.radius\n\treturn d.radius2\n}\nfunction set_rim(d) {\n\treturn d.mode == modefold ? 0 : 0.7\n}\nfunction set_qmg(d, tk) {\n\tif (d.mode == modesample)\n\t\treturn 'translate(0,-' + (tk.legheight + tk.maxradius * 4 + tk.lowpad + tk.padheight) + ') scale(1)'\n\treturn 'translate(0,0) scale(0)'\n}\nfunction set_leg_y(d, tk) {\n\tif (d.mode == modefold) return -tk.legheight\n\treturn -tk.legheight - tk.lowpad - tk.maxradius * 2\n}\nfunction set_jug2(d, tk) {\n\tif (d.mode == modefold) return 'translate(0,-' + (tk.legheight + tk.lowpad + d.radius) + ')'\n\tif (d.mode == moderaise)\n\t\treturn (\n\t\t\t'translate(0,-' +\n\t\t\t(tk.legheight + tk.lowpad + tk.maxradius * 4 + tk.padheight + tk.axisheight - tk.yscale(d.median)) +\n\t\t\t')'\n\t\t)\n\treturn 'translate(0,-' + (tk.legheight + tk.lowpad + tk.maxradius * 3 + tk.padheight) + ')'\n}\nfunction set_stem_y2(d, tk) {\n\tif (d.mode == modefold) return d.radius + tk.lowpad\n\tif (d.mode == moderaise) return tk.padheight + tk.maxradius * 2 + tk.axisheight - tk.yscale(d.median)\n\treturn tk.maxradius + tk.padheight\n}\nfunction set_all(tk) {\n\tconst dur = 500\n\tif (tk.totalsamplecount > 1) {\n\t\ttk.jug\n\t\t\t.selectAll('.sja_jug_qmg')\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('transform', d => set_qmg(d, tk))\n\t\ttk.jug\n\t\t\t.selectAll('.sja_jug_discnum')\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('fill-opacity', d => set_discnum(d))\n\t\t/*\n\t\ttk.jug.selectAll('.sja_jug_pillar')\n\t\t\t.attr('width',(d)=> set_pillar(d))\n\t\t\t*/\n\t}\n\ttk.jug\n\t\t.selectAll('.sja_jug_leg1')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('y2', d => set_leg_y(d, tk))\n\t\t.attr('x1', d => set_leg_x1(d))\n\ttk.jug\n\t\t.selectAll('.sja_jug_leg2')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('y1', d => set_leg_y(d, tk))\n\t\t.attr('x2', d => set_leg_x2(d))\n\ttk.jug\n\t\t.selectAll('.sja_jug_jug2')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => set_jug2(d, tk))\n\ttk.jug\n\t\t.selectAll('.sja_jug_stem')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('y2', d => set_stem_y2(d, tk))\n\t\t.attr('y1', d => set_stem_y1(d))\n\t/*\n\ttk.jug.selectAll('.sja_jug_rim')\n\t\t.transition().duration(dur)\n\t\t.attr('fill-opacity',(d)=> set_rim(d))\n\t\t*/\n\ttk.jug\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => set_jug(d))\n}\n\nfunction junctiontype2color(tk, block) {\n\t// figure out color for junctions\n\tfor (const j of tk.data) {\n\t\tj.color = common.defaultcolor\n\t}\n\tif (tk.nocatepreconfig) {\n\t\t/* no preconfig info\n\t\tdetect types from data\n\t\trefresh legend everytime\n\t\t*/\n\t\tlet categories = {}\n\t\tif (tk.categories) {\n\t\t\t// has category from previous data load\n\t\t\tcategories = tk.categories\n\t\t}\n\t\tlet hasnewtype = false\n\t\tfor (const j of tk.data) {\n\t\t\tif (j.type) {\n\t\t\t\tif (!categories[j.type]) {\n\t\t\t\t\thasnewtype = true\n\t\t\t\t\tcategories[j.type] = {\n\t\t\t\t\t\tlabel: j.type\n\t\t\t\t\t}\n\t\t\t\t\t// known/novel hardcoded types\n\t\t\t\t\tif (j.type.toLowerCase() == 'known') {\n\t\t\t\t\t\tcategories[j.type].color = '#0C72A8' // '#659AC7'\n\t\t\t\t\t} else if (j.type.toLowerCase() == 'novel') {\n\t\t\t\t\t\tcategories[j.type].color = '#A80C33' // '#C86569'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcategories[j.type].color = colorfunc(j.type)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hasnewtype) {\n\t\t\ttk.categories = categories\n\t\t\tif (!tk.tr_legend) {\n\t\t\t\tconst [tr, td] = legend_newrow(block, tk.name)\n\t\t\t\ttk.tr_legend = tr\n\t\t\t\ttk.td_legend = td\n\t\t\t\ttr.style('display', 'none')\n\t\t\t\tclient.appear(tr, 'table-row')\n\t\t\t}\n\t\t\tclient.category2legend(tk.categories, tk.td_legend)\n\t\t}\n\t}\n\tif (tk.categories) {\n\t\t// now apply color, no matter preconfigured or runtime\n\t\tfor (const j of tk.data) {\n\t\t\tif (j.type && tk.categories[j.type]) {\n\t\t\t\tj.color = tk.categories[j.type].color\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction foldedjunctioninfo(d, tk) {\n\t// d is junction\n\tconst fontsize = 15\n\tlet pad = 5,\n\t\ty = pad,\n\t\twidth = 0\n\tconst bg = tk.pica.g\n\t\t.append('rect')\n\t\t.attr('stroke', d.color)\n\t\t.attr('shape-rendering', 'crispEdges')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0.8)\n\tif (d.type) {\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.text(d.type)\n\t\t\t.attr('fill', d.color)\n\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('x', pad)\n\t\t\t.attr('y', y + fontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.each(function () {\n\t\t\t\twidth = this.getBBox().width\n\t\t\t})\n\t\ty += fontsize\n\t}\n\tif (d.data) {\n\t\t// multi-sample\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.text(d.data.length + ' sample' + (d.data.length > 1 ? 's' : ''))\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('x', pad)\n\t\t\t.attr('y', y + fontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.each(function () {\n\t\t\t\twidth = Math.max(width, this.getBBox().width)\n\t\t\t})\n\t\ty += fontsize\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.text(d.median + ' median')\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('x', pad)\n\t\t\t.attr('y', y + fontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.each(function () {\n\t\t\t\twidth = Math.max(width, this.getBBox().width)\n\t\t\t})\n\t\ty += fontsize\n\t} else {\n\t\t// single sample\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.text(d.v + ' reads')\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('x', pad)\n\t\t\t.attr('y', y + fontsize / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.each(function () {\n\t\t\t\twidth = Math.max(width, this.getBBox().width)\n\t\t\t})\n\t\ty += fontsize\n\t}\n\ty += pad\n\tbg.attr('width', pad * 2 + width).attr('height', y)\n\ttk.pica.g\n\t\t.append('line')\n\t\t.attr('stroke', d.color)\n\t\t.attr('shape-rendering', 'crispEdges')\n\t\t.attr('x1', 30)\n\t\t.attr('x2', 30)\n\t\t.attr('y1', y)\n\t\t.attr('y2', y + 15)\n\ty += 15\n\ttk.pica.g.attr(\n\t\t'transform',\n\t\t'translate(' +\n\t\t\t(d.x - 30) +\n\t\t\t',' +\n\t\t\t(tk.toppad + tk.axisheight + tk.maxradius * 4 + tk.padheight - d.radius * 2 - y) +\n\t\t\t')'\n\t)\n}\n\nfunction expandedjunctioninfo(d, tk, circle) {\n\ttk.tktip.clear()\n\tconst holder = tk.tktip.d\n\tif (d.type) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.text(d.type)\n\t\t\t.classed('sja_mcdot', true)\n\t\t\t.style('background-color', d.color)\n\t\t\t.style('padding', '1px 8px')\n\t\t\t.style('margin-bottom', '3px')\n\t}\n\tholder\n\t\t.append('div')\n\t\t.html(\n\t\t\tcommon.bplen(d.stop - d.start) +\n\t\t\t\t' <span style=\"font-size:.8em;\">' +\n\t\t\t\td.chr +\n\t\t\t\t':' +\n\t\t\t\t(d.start + 1) +\n\t\t\t\t'-' +\n\t\t\t\t(d.stop + 1) +\n\t\t\t\t'</span>'\n\t\t)\n\tif (d.data) {\n\t\t// multi-sample\n\t\tif (d.data.length > 1) {\n\t\t\tholder.append('div').html(d.data.length + ' <span style=\"font-size:.8em;color:#858585\">samples</span>')\n\t\t\tif (d.rimcount) {\n\t\t\t\tholder\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.html(d.rimcount + ' <span style=\"font-size:.8em;color:#858585\">show ' + tk.rimwhat + '</span>')\n\t\t\t}\n\t\t\tholder.append('div').html(d.median + ' <span style=\"font-size:.8em;color:#858585\">median read count</span>')\n\t\t} else if (d.data.length == 1) {\n\t\t\t// only one sample\n\t\t\tsamplejunctiontooltip(d, d.data[0], tk, holder)\n\t\t}\n\t} else {\n\t\t// single sample\n\t\tholder.append('div').html(d.v + ' <span style=\"font-size:.8em;color:#858585\">read count</span>')\n\t}\n\n\tif (d.spliceevents && d.spliceevents.length > 0) {\n\t\tconst renderdiv = holder.append('div').style('margin', '10px 0px')\n\t\tdisplayspliceevents(d.spliceevents, renderdiv)\n\t}\n\ttk.tktip.show(circle.left + circle.width, circle.top - 50)\n}\n\nfunction junctionsamplespread(j, tk, block) {\n\t/*\n\tcalled by clicking a junction disc\n\tbeeswarm of samples\n\t*/\n\n\tif (j.qmg) {\n\t\tj.qmg.remove()\n\t}\n\n\t/*\n\tfor(const d of j.data) {\n\t\tnot in use\n\t\tget data from study\n\t\tif(tk.metadata) {\n\t\t\tlet v=tk.metadata.anno[d.patient]\n\t\t\tif(!v) {\n\t\t\t\tv=tk.metadata.anno[d.sample]\n\t\t\t}\n\t\t\tif(v) {\n\t\t\t\td.metadata=v\n\t\t\t} else {\n\t\t\t\td.metadata=null\n\t\t\t}\n\t\t} else {\n\t\t\td.metadata=null\n\t\t}\n\t}\n\t\t*/\n\n\tif (tk.cohortsetting && tk.cohortsetting.uselevelidx != undefined) {\n\t\t/*\n\t\tapply chosen level of cohort to categorize samples\n\t\tuse level, get the text key for each sample, and get color for key\n\t\t*/\n\n\t\tfor (const d of j.data) {\n\t\t\tif (!d[tk.cohortsetting.cohort.levels[0].k]) {\n\t\t\t\t/*\n\t\t\t\tthis sample has no value for the 1st level\n\t\t\t\tunannotated sample\n\t\t\t\t*/\n\t\t\t\td.color = 'gray'\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// for each applied level, get key\n\t\t\tconst levelkeys = []\n\t\t\tfor (let lidx = 0; lidx <= tk.cohortsetting.uselevelidx; lidx++) {\n\t\t\t\tconst levelvalue = d[tk.cohortsetting.cohort.levels[lidx].k]\n\t\t\t\tif (levelvalue) {\n\t\t\t\t\tlevelkeys.push(levelvalue)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst str = levelkeys.join(tk.cohortsetting.levelseparator)\n\t\t\td.color = tk.cohortsetting.colorfunc(str)\n\t\t}\n\t}\n\n\tj.swarm = beeswarm()\n\t\t.data(j.data)\n\t\t.distributeOn(d => tk.axisheight - tk.yscale(d.v))\n\t\t.radius(tk.qmradius)\n\t\t.orientation('vertical')\n\t\t.side('symetric')\n\t\t.arrange()\n\n\tconst jugg = d3select(j.jugg)\n\n\t/*\n\tpillar\n\tdoesn't work well\n\n\tjugg.append('rect')\n\t\t.classed('sja_jug_pillar sja_bgbox',true)\n\t\t.attr('fill','yellow')\n\t\t.attr('fill-opacity',0)\n\t\t.attr('stroke','none')\n\t\t.attr('y',-(tk.legheight+tk.maxradius*4+tk.lowpad+tk.padheight+tk.axisheight))\n\t\t.attr('height',tk.axisheight)\n\t\t.attr('x',-j.radius)\n\t\t.attr('width', set_pillar(j))\n\t\t.attr('shape-rendering','crispEdges')\n\t\t.on('mousedown',()=>{\n\t\t\tevent.stopPropagation()\n\t\t})\n\t\t.on('click',()=>{\n\t\t\tj.pillarrect=event.target // for modifying pillar rect when removing junction from matrix table\n\t\t\tconst added=matrixjunctionchange(j,tk,block)\n\t\t\tj.pillarrect.style.stroke = added ? d.color : 'none'\n\t\t})\n\t\t*/\n\n\tj.qmg = jugg.append('g').attr('class', 'sja_jug_qmg').attr('transform', set_qmg(j, tk))\n\n\tconst opacity = 0.8\n\n\tj.qmg\n\t\t.selectAll()\n\t\t.data(j.swarm)\n\t\t.enter()\n\t\t.append('circle')\n\t\t.attr('cx', 0)\n\t\t.attr('cy', bee => -bee.y)\n\t\t.attr('r', tk.qmradius)\n\t\t.attr('fill', bee => {\n\t\t\treturn bee.datum.color || 'green'\n\t\t\t/*\n\t\t\tstudy metadata, not in use\n\t\t\tif(!tk.metadata) return 'green'\n\t\t\t// md applied\n\t\t\tif(!bee.datum.metadata) return '#858585'\n\t\t\treturn bee.datum.metadata.color\n\t\t\t*/\n\t\t})\n\t\t.attr('fill-opacity', opacity)\n\t\t.on('mousedown', event => event.stopPropagation())\n\t\t.on('mousemove', event => event.stopPropagation())\n\t\t.on('mouseover', (event, bee) => {\n\t\t\t// mouse over a single sample, tiny dot\n\t\t\td3select(event.target).attr('fill-opacity', 1)\n\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\ttk.tktip.clear()\n\t\t\ttk.tktip.show(p.left + 20, p.top - 40)\n\t\t\tsamplejunctiontooltip(j, bee.datum, tk, tk.tktip.d)\n\t\t})\n\t\t.on('mouseout', event => d3select(event.target).attr('fill-opacity', opacity))\n\t\t.on('click', (event, bee) => {\n\t\t\tif (tk.tracks) {\n\t\t\t\t// FIXME need cohort\n\t\t\t\t/*\n\t\t\t\tlet thissampletk=null\n\t\t\t\tfor(const t of tk.tracks) {\n\t\t\t\t\tif(t.tkid==bee.datum.tkid) {\n\t\t\t\t\t\tthissampletk=t\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!thissampletk) {\n\t\t\t\t\tconsole.log('member junction track not found for '+bee.datum.tkid)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttkhandleclick(block,thissampletk)\n\t\t\t\t*/\n\t\t\t\treturn\n\t\t\t}\n\t\t})\n\t\t.transition()\n\t\t.attr('cx', bee => bee.x)\n}\n\nfunction samplejunctiontooltip(j, sample, tk, holder) {\n\t/*\n\tfor tk.tracks[] case, tooltip for a single sample\n\tj: junction\n\tsample: j.data[?], datum for a sample\n\t*/\n\tif (sample.sample) {\n\t\tholder.append('div').html(sample.sample)\n\t} else if (sample.name) {\n\t\tholder.append('div').html(sample.name)\n\t} else if (sample.patient || sample.sampletype) {\n\t\tif (sample.patient) {\n\t\t\tholder.append('div').html(sample.patient + ' <span style=\"font-size:.7em;color:#858585\">patient</span>')\n\t\t}\n\t\tif (sample.sampletype) {\n\t\t\tholder.append('div').html(sample.sampletype + ' <span style=\"font-size:.7em;color:#858585\">sample type</span>')\n\t\t}\n\t} else if (sample.tkid) {\n\t\t// neither label available, show member tk name\n\t\tfor (const t of tk.tracks) {\n\t\t\tif (t.tkid == sample.tkid) {\n\t\t\t\tholder.append('div').text(t.name || 'unnamed member')\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif (tk.cohortsetting && tk.cohortsetting.cohort && tk.cohortsetting.cohort.levels) {\n\t\t// a block track from ds, with ds.cohort supplied\n\t\tfor (const lev of tk.cohortsetting.cohort.levels) {\n\t\t\tif (sample[lev.k]) {\n\t\t\t\tholder\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.html(sample[lev.k] + ' <span style=\"font-size:.7em;color:#858585\">' + lev.label + '</span>')\n\t\t\t}\n\t\t}\n\t}\n\n\tholder.append('div').html(sample.v + ' <span style=\"font-size:.7em;color:#858585\">read count</span>')\n\n\tif (sample.metadata) {\n\t\t// FIXME\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.html(\n\t\t\t\t'<span style=\"background-color:' +\n\t\t\t\t\tsample.metadata.color +\n\t\t\t\t\t'\" class=sja_mcdot>&nbsp;</span> ' +\n\t\t\t\t\tsample.metadata.value +\n\t\t\t\t\t' <span style=\"font-size:.7em;color:#858585\">' +\n\t\t\t\t\ttk.metadata.m.label +\n\t\t\t\t\t'</span>'\n\t\t\t)\n\t}\n\n\tif (sample.hasrim) {\n\t\tholder.append('div').text(tk.rimwhat)\n\t}\n\n\tif (j.spliceevents) {\n\t\t/*\n\t\tcompute splice event percentage for this sample\n\t\tTODO exonskip only!\n\t\t*/\n\t\tconst evtidx = getdefault_exonskipalt(j.spliceevents)\n\t\tconst evt = j.spliceevents[evtidx]\n\t\tconst skipwhichexon =\n\t\t\t'exon ' + evt.skippedexon.map(i => i + 1).join(',') + ' ' + (evt.isskipexon ? 'skip' : 'alt. use')\n\t\t// find out percentage\n\t\t// junction B count of this sample\n\t\tlet jbcount = 0\n\t\tif (evt.junctionB && evt.junctionB.data) {\n\t\t\tfor (const d of evt.junctionB.data) {\n\t\t\t\tif (d.tkid == sample.tkid) {\n\t\t\t\t\tjbcount = d.v\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet acountsum = 0\n\t\tif (evt.junctionAlst) {\n\t\t\tfor (const ja of evt.junctionAlst) {\n\t\t\t\tif (ja && ja.data) {\n\t\t\t\t\tfor (const d of ja.data) {\n\t\t\t\t\t\tif (d.tkid == sample.tkid) {\n\t\t\t\t\t\t\tacountsum += d.v\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet percent\n\t\tif (jbcount == 0) {\n\t\t\tpercent = 0\n\t\t} else {\n\t\t\tpercent = Math.ceil((100 * jbcount) / (jbcount + acountsum / evt.junctionAlst.length))\n\t\t}\n\t\tholder.append('div').html(percent + '% <span style=\"font-size:.7em;color:#858585;\">' + skipwhichexon + '</span>')\n\t}\n}\n\nfunction get_leftLabelMaxwidth(tk) {\n\tconst collectlabw = []\n\ttk.tklabel.each(function () {\n\t\tcollectlabw.push(this.getBBox().width)\n\t})\n\tif (tk.label_mcount) {\n\t\ttk.label_mcount.each(function () {\n\t\t\tcollectlabw.push(this.getBBox().width)\n\t\t})\n\t}\n\t/*\n\tif(tk.label_samplecount) {\n\t\ttk.label_samplecount.each(function(){\n\t\t\tcollectlabw.push(this.getBBox().width)\n\t\t})\n\t}\n\t*/\n\ttk.leftLabelMaxwidth = Math.max(...collectlabw)\n}\n", "import { scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { schemeCategory10 } from 'd3-scale-chromatic'\nimport { select as d3select } from 'd3-selection'\nimport { transition } from 'd3-transition'\nimport * as client from './client'\nimport { dofetch3 } from '#common/dofetch'\nimport * as common from '#shared/common.js'\nimport * as coord from './coord'\nimport { legend_newrow } from './block.legend'\n//import {tkhandleclick} from './block.tk.menu'\nimport { rendertk, horiplace, automode } from './block.tk.junction.renderjunctions'\n\n/*\nfactory:\n\njunctionfromtemplate()\njunctionmaketk()\njunctionload()\n\ntwo types of junction track:\n\n1. fixeddata, a given junction-sample matrix, no tabix files and query thereof\n2. .tracks[]\n one tabix file per member track\n the list of samples for each track must always be retrieved from tabix track header:\n ensure consistency with the actual data columns\n\t allow standalone track to be displayed with 0 config\n\n\ntk.categories\n\tshow in legend\n\ntk.cohortsetting\n\tcohort setting to multi sample track\n\tfor block-tracks coming from a server-dataset, the cohort belongs to the dataset\n\tcohort contains disease group/subgroup hierarchy\n\tsamples from the junction track must have disease annotation for stratify to work\n\tshow in legend\n\n\n*/\n\nconst binpxw = 5 // 5px bins\nexport const modefold = 1\nexport const moderaise = 2\nexport const modesample = 3\n\nconst labyspace = 5\n\nfunction makeTk(tk, block) {\n\ttk.leftaxis = tk.gleft.append('g')\n\n\tlet laby = labyspace + block.labelfontsize\n\n\t// controller - # junctions\n\tconst thistip = new client.Menu({ padding: 'none' })\n\ttk.label_mcount = block.maketklefthandle(tk, laby).on('click', event => {\n\t\tlabel_mcount_fillpane(tk, block, thistip)\n\t})\n\n\tlaby += labyspace + block.labelfontsize\n\n\ttk.totalsamplecount = 0\n\ttk.height_main = 100\n\n\t// no longer shows sample handle: label_samplecount\n\n\t// config\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', event => configpanel(tk, block))\n\n\tif (tk.categories || tk.cohortsetting) {\n\t\t/*\n\twill show legend for either categories or cohort setting\n\t*/\n\t\tconst [tr, td] = legend_newrow(block, tk.name)\n\t\ttk.tr_legend = tr\n\t\ttk.td_legend = td\n\t}\n\n\tif (tk.categories) {\n\t\t// static\n\t\tclient.category2legend(tk.categories, tk.td_legend)\n\t}\n\n\tif (tk.cohortsetting) {\n\t\t/*\n\tfrom dsblocktracklst\n\tthe ds has cohort that governs the sample hierarchy\n\n\tinitiation will be done once the .headersamples is set\n\t*/\n\t\ttk.cohortsetting.holder = tk.td_legend.append('div').style('margin-top', '10px')\n\t\ttk.cohortsetting.legendholder = tk.cohortsetting.holder.append('div')\n\t}\n}\n\nexport function junctionload(tk, block) {\n\tif (tk.uninitialized) {\n\t\tmakeTk(tk, block)\n\t\tdelete tk.uninitialized\n\t}\n\tif ((block.zoomedin || block.resized) && tk.data) {\n\t\t/*\n\tpreviously showing junctions, then zoom in, no server request\n\t*/\n\t\tconst junc = []\n\t\tfor (const i of tk.data) {\n\t\t\tconst oldx = i.x // must keep old x before zooming in\n\t\t\tconst e = j2block(i, block)\n\t\t\tif (e) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif ((i.x0 >= 0 && i.x0 <= block.width) || (i.x1 >= 0 && i.x1 <= block.width)) {\n\t\t\t\ti.x = oldx\n\t\t\t\tjunc.push(i)\n\t\t\t}\n\t\t}\n\t\trendertk(junc, tk, block)\n\t\treturn\n\t}\n\n\tif (tk.fixeddata) {\n\t\t// no server request\n\t\tblock.tkcloakon(tk)\n\t\tconst junc2 = []\n\t\tfor (const j of tk.fixeddata) {\n\t\t\tconst j2 = {\n\t\t\t\tchr: j.chr,\n\t\t\t\tstart: j.start,\n\t\t\t\tstop: j.stop,\n\t\t\t\tdata: j.data,\n\t\t\t\ttype: j.type\n\t\t\t}\n\t\t\tconst e = j2block(j2, block)\n\t\t\tif (e) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tjunc2.push(j2)\n\t\t}\n\n\t\ttk.totalsamplecount = tk.tracks[0].samplecount\n\n\t\ttk.axisheight = 200\n\t\ttk.legheight = 50\n\t\ttk.bottompad = 0\n\t\ttk.qmradius = 2\n\t\ttk.lowpad = 15\n\t\ttk.padheight = 10\n\n\t\trendertk(junc2, tk, block)\n\t\treturn\n\t}\n\n\tif (!tk.tracks) {\n\t\tblock.tkcloakoff(tk, { error: 'neither .tracks[] or .fixeddata[] are available' })\n\t\ttk.height_main = 50\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\n\t// load member files from .tracks[]\n\n\tblock.block_setheight()\n\tblock.tkcloakon(tk)\n\n\tconst bincount = Math.ceil(block.width / binpxw)\n\tlet bins = null\n\n\t// for progress bar, if more than 1 in .tracks\n\tlet donenum = 0\n\tconst tasks = []\n\tconst allfiledata = []\n\tfor (const t of tk.tracks) {\n\t\tconst getheader = new Promise((resolve, reject) => {\n\t\t\tif (t.rnapegfile) {\n\t\t\t\tt.samplecount = 1\n\t\t\t\treturn resolve()\n\t\t\t}\n\t\t\tif (t.samplecount != undefined && t.checkedheader) return resolve()\n\t\t\t/*\n\t\t#sample is unknown for this track, try loading header line like a vcf\n\t\tt.checkedheader=true to make sure the header will be loaded only once\n\t\tthis can happen if the file has no header, and do not have data at current view range\n\t\t*/\n\t\t\tconst par = {}\n\t\t\tif (t.file) {\n\t\t\t\tpar.file = t.file\n\t\t\t} else {\n\t\t\t\tpar.url = t.url\n\t\t\t\tif (t.indexURL) par.indexURL = t.indexURL\n\t\t\t}\n\t\t\tdofetch3('tabixheader', { body: par }).then(data => {\n\t\t\t\tif (data.error) return reject('cannot load header for member track ' + t.name + ': ' + data.error)\n\t\t\t\tt.checkedheader = true\n\t\t\t\tconst str = data.lines.join('')\n\n\t\t\t\t/*\n\t\t\tsamples should be provided as the comment line but is optional !!\n\t\t\t*/\n\t\t\t\tif (!str) {\n\t\t\t\t\t/*\n\t\t\t\tno header line\n\t\t\t\tallow tabix file to have no header line\n\t\t\t\tif so, when actual junction data is retrieved later, will set t.samplecount by actual # of samples, and the samples/columns remain nameless\n\t\t\t\t*/\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\thas header line\n\t\t\t\theader of a column can be a string of sample name, or a json object to smuggle in structure info, e.g. to go with cohort stratification\n\t\t\t\t*/\n\n\t\t\t\t\tconst l = str.trim().split('\\t')\n\t\t\t\t\tt.headersamples = []\n\t\t\t\t\tfor (let i = 5; i < l.length; i++) {\n\t\t\t\t\t\tconst str = l[i]\n\n\t\t\t\t\t\tlet j = null // may be parsed into json\n\n\t\t\t\t\t\tif (str[0] == '{' && str[str.length - 1] == '}') {\n\t\t\t\t\t\t\t// try parse\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tj = JSON.parse(str)\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.error('header line field [' + i + '] is broken json: ' + str)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j) {\n\t\t\t\t\t\t\t// success\n\t\t\t\t\t\t\tj.tkid = Math.random().toString()\n\t\t\t\t\t\t\tt.headersamples.push(j)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.headersamples.push({\n\t\t\t\t\t\t\t\tname: l[i],\n\t\t\t\t\t\t\t\ttkid: Math.random().toString()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tt.samplecount = t.headersamples.length\n\t\t\t\t\ttk.totalsamplecount += t.samplecount\n\t\t\t\t\t/*\n\t\t\t\tif(tk.totalsamplecount>1) {\n\t\t\t\t\ttk.label_samplecount.text(tk.totalsamplecount+' samples')\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\t}\n\t\t\t\tresolve()\n\t\t\t})\n\t\t})\n\n\t\tconst getdata = new Promise((resolve, reject) => {\n\t\t\tgetheader\n\t\t\t\t.then(() => {\n\t\t\t\t\tconst par = {\n\t\t\t\t\t\tgenome: block.genome.name,\n\t\t\t\t\t\trglst: block.tkarg_maygm(t)\n\t\t\t\t\t}\n\t\t\t\t\tif (bincount) par.bincount = bincount\n\t\t\t\t\tif (t.file || t.rnapegfile) {\n\t\t\t\t\t\tpar.file = t.file || t.rnapegfile\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpar.url = t.url\n\t\t\t\t\t\tif (t.indexURL) par.indexURL = t.indexURL\n\t\t\t\t\t}\n\t\t\t\t\tif (t.rnapegfile) {\n\t\t\t\t\t\tpar.isrnapeg = 1\n\t\t\t\t\t}\n\t\t\t\t\tdofetch3('junction', { body: par }).then(data => {\n\t\t\t\t\t\tdonenum++\n\t\t\t\t\t\tif (tk.tracks.length > 1) {\n\t\t\t\t\t\t\tblock.tkprogress(tk, donenum / tk.tracks.length)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!data) reject('server error for getting member track ' + t.name)\n\t\t\t\t\t\tif (data.error) reject('Cannot get data: ' + data.error)\n\t\t\t\t\t\tif (!data.lst && !data.bins) reject('wrong response when getting data for ' + t.name)\n\t\t\t\t\t\tif (data.lst) {\n\t\t\t\t\t\t\t// actual junction data retrieved\n\n\t\t\t\t\t\t\tif (data.lst[0] && data.lst[0].rawdata && t.samplecount == undefined) {\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\tdidn't get sample count from tabix header, or no header\n\t\t\t\t\t\tget the count from actual data\n\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t\tt.samplecount = data.lst[0].rawdata.length\n\t\t\t\t\t\t\t\ttk.totalsamplecount += t.samplecount\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\tif(tk.totalsamplecount>1) {\n\t\t\t\t\t\t\ttk.label_samplecount.text(tk.totalsamplecount+' samples')\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (bins) {\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t// current junction data to bin\n\t\t\t\t\t\t// not in use\n\t\t\t\t\t\tvar binw=(block.stop-block.start)/bincount\n\t\t\t\t\t\tdata.lst.forEach(function(j){\n\t\t\t\t\t\t\tif(j.start>=block.start && j.start<=block.stop) {\n\t\t\t\t\t\t\t\tbins[Math.floor((j.start-block.start)/binw)]+=j.v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(j.stop>=block.start && j.stop<=block.stop) {\n\t\t\t\t\t\t\t\tbins[Math.floor((j.stop-block.start)/binw)]+=j.v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst thisfilejunctions = []\n\n\t\t\t\t\t\t\t\tfor (const k of data.lst) {\n\t\t\t\t\t\t\t\t\tk.data = []\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < k.rawdata.length; i++) {\n\t\t\t\t\t\t\t\t\t\tconst v = k.rawdata[i]\n\t\t\t\t\t\t\t\t\t\tif (!Number.isInteger(v) || v <= 0) {\n\t\t\t\t\t\t\t\t\t\t\t// invalid read count value\n\t\t\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst s = { v: v }\n\t\t\t\t\t\t\t\t\t\tif (t.headersamples) {\n\t\t\t\t\t\t\t\t\t\t\tconst s0 = t.headersamples[i]\n\t\t\t\t\t\t\t\t\t\t\tif (s0) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor (const _k in s0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ts[_k] = s0[_k]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t\t\tno file header\n\t\t\t\t\t\t\t\t\ttransfer some attributes\n\t\t\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t\t\t\t\tif (t.name) s.name = t.name\n\t\t\t\t\t\t\t\t\t\t\tif (t.sample) s.sample = t.sample\n\t\t\t\t\t\t\t\t\t\t\tif (t.patient) s.patient = t.patient\n\t\t\t\t\t\t\t\t\t\t\tif (t.sampeltype) s.sampletype = t.sampletype\n\t\t\t\t\t\t\t\t\t\t\tif (t.tkid) s.tkid = t.tkid\n\t\t\t\t\t\t\t\t\t\t\tif (t.file) s.file = t.file\n\t\t\t\t\t\t\t\t\t\t\tif (t.url) s.url = t.url\n\t\t\t\t\t\t\t\t\t\t\tif (t.indexURL) s.indexURL = t.indexURL\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tk.data.push(s)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdelete k.rawdata\n\t\t\t\t\t\t\t\t\tthisfilejunctions.push(k)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve(thisfilejunctions)\n\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\tnot in use\n\n\t\t\t\t\t\tif(junc.length>300) {\n\t\t\t\t\t\t\t// too many junctions, convert to bin\n\t\t\t\t\t\t\tconst binw=(block.stop-block.start)/bincount\n\t\t\t\t\t\t\tbins=[]\n\t\t\t\t\t\t\tfor(var i=0; i<bincount; i++) {\n\t\t\t\t\t\t\t\tbins.push(0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tjunc.forEach(function(j){\n\t\t\t\t\t\t\t\t//var sum=j.data.reduce(function(sum,i){return sum+i.v},0)\n\t\t\t\t\t\t\t\tvar sum=0\n\t\t\t\t\t\t\t\tj.data.forEach(function(i){sum+=i.v})\n\t\t\t\t\t\t\t\tif(j.start>=block.start && j.start<=block.stop) {\n\t\t\t\t\t\t\t\t\tbins[Math.floor((j.start-block.start)/binw)]+=sum\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(j.stop>=block.start && j.stop<=block.stop) {\n\t\t\t\t\t\t\t\t\tbins[Math.floor((j.stop-block.start)/binw)]+=sum\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tjunc=[]\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t/*\n\t\t\t\t\tnot in use\n\n\t\t\t\t\tif(!bins) {\n\t\t\t\t\t\tbins=data.bins\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor(var i=0; i<data.bins.length; i++) {\n\t\t\t\t\t\t\tbins[i]+=data.bins[i]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(junc.length>0) {\n\t\t\t\t\t\t// existing junc data to bin\n\t\t\t\t\t\tvar binw=(block.stop-block.start)/bins.length\n\t\t\t\t\t\tjunc.forEach(function(j){\n\t\t\t\t\t\t\t//var sum=j.data.reduce(function(sum,i){return sum+i.v},0)\n\t\t\t\t\t\t\tvar sum=0\n\t\t\t\t\t\t\t\tj.data.forEach(function(i){sum+=i.v})\n\t\t\t\t\t\t\tif(j.start>=block.start && j.start<=block.stop) {\n\t\t\t\t\t\t\t\tbins[Math.floor((j.start-block.start)/binw)]+=sum\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(j.stop>=block.start && j.stop<=block.stop) {\n\t\t\t\t\t\t\t\tbins[Math.floor((j.stop-block.start)/binw)]+=sum\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tjunc=[]\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => reject(err))\n\t\t})\n\n\t\ttasks.push(getdata)\n\t}\n\n\tPromise.all(tasks)\n\t\t.then(data => {\n\t\t\tconst junc = []\n\t\t\tdata.forEach(dat => {\n\t\t\t\tif (!dat) return\n\t\t\t\tdat.forEach(k => {\n\t\t\t\t\t// find and merge to matching junctions\n\t\t\t\t\tlet notfound = true\n\t\t\t\t\tfor (const j of junc) {\n\t\t\t\t\t\tif (j.start == k.start && j.stop == k.stop) {\n\t\t\t\t\t\t\tj.data = j.data.concat(k.data)\n\t\t\t\t\t\t\tnotfound = false\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (notfound) {\n\t\t\t\t\t\tjunc.push(k)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tfor (const j of junc) {\n\t\t\t\tj2block(j, block)\n\t\t\t}\n\n\t\t\tfor (const j of junc) {\n\t\t\t\tsmuggleattributes(j)\n\t\t\t}\n\n\t\t\tif (!tk.axisheight) {\n\t\t\t\t/*\n\t\tINITSETSIZE\n\t\tthe axisheight and other sizes has not been set\n\t\twill set them here now\n\t\t*/\n\n\t\t\t\tif (tk.totalsamplecount > 1) {\n\t\t\t\t\t// multi-sample\n\t\t\t\t\ttk.axisheight = 200\n\t\t\t\t\ttk.legheight = 50\n\t\t\t\t\ttk.bottompad = 0\n\t\t\t\t\ttk.qmradius = 2\n\t\t\t\t\ttk.lowpad = 15\n\t\t\t\t\ttk.padheight = 10\n\t\t\t\t} else {\n\t\t\t\t\ttk.axisheight = 100\n\t\t\t\t\ttk.legheight = 20\n\t\t\t\t\ttk.bottompad = 0\n\t\t\t\t\ttk.lowpad = 10\n\t\t\t\t\ttk.padheight = 10\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\tthis is also the first time the track has been loaded\n\t\trun whatever necessary for the initial tk load\n\t\t*/\n\t\t\t\tif (tk.cohortsetting) {\n\t\t\t\t\t/*\n\t\t\tmember tk .headersamples has been set\n\t\t\tinitiate cohort setting\n\t\t\tso that legend by .cohort.level[.uselevelidx] can be made with .headersamples\n\t\t\t*/\n\t\t\t\t\tinitcohortsetting(tk, block)\n\t\t\t\t}\n\t\t\t}\n\t\t\trendertk(junc, tk, block)\n\t\t})\n\t\t.catch(err => {\n\t\t\t// clear tk\n\t\t\ttk.glider.selectAll('*').remove()\n\t\t\tblock.tkcloakoff(tk, { error: err })\n\t\t\tblock.block_setheight()\n\t\t})\n}\n\nfunction j2block(j, block) {\n\tconst starthit = block.seekcoord(j.chr, j.start)[0]\n\tif (!starthit) {\n\t\treturn true\n\t}\n\tconst stophit = block.seekcoord(j.chr, j.stop)[0]\n\tif (!stophit) {\n\t\treturn true\n\t}\n\n\t// if both start/stop are out of view range, skip this junction\n\tconst startout = starthit.x < 0 || starthit.x > block.width\n\tconst stopout = stophit.x < 0 || stophit.x > block.width\n\n\tif (startout && stopout) {\n\t\treturn true\n\t}\n\n\tj.x0 = starthit.x\n\tj.x1 = stophit.x\n\tj.x = (j.x0 + j.x1) / 2\n\tj._x = j.x\n\tif (!j.modefix) {\n\t\tj.mode = moderaise\n\t}\n\treturn false\n}\n\nfunction smuggleattributes(j) {\n\t/*\n\tadditional attributes for junctions can be found in j.type\n\t*/\n}\n\nfunction label_mcount_fillpane(tk, block, tip) {\n\ttip.clear()\n\tconst holder = tip.d\n\n\t// 1 - show types and read count\n\tconst types = new Map()\n\tfor (const j of tk.data) {\n\t\tif (!j.type) continue\n\t\tif (!types.has(j.type)) {\n\t\t\ttypes.set(j.type, [])\n\t\t}\n\t\tif (j.data) {\n\t\t\t// multi track\n\t\t\ttypes.get(j.type).push(j.data.map(i => i.v))\n\t\t} else {\n\t\t\ttypes.get(j.type).push(j.v)\n\t\t}\n\t}\n\tif (types.size) {\n\t\tconst d = holder.append('div').style('margin', '8px')\n\t\tfor (const [type, valuelst] of types) {\n\t\t\td.append('div')\n\t\t\t\t.style('margin', '2px')\n\t\t\t\t.html(\n\t\t\t\t\tvaluelst.length +\n\t\t\t\t\t\t' <span style=\"font-size:.8em;color:' +\n\t\t\t\t\t\ttk.categories[type].color +\n\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\ttype +\n\t\t\t\t\t\t' junction' +\n\t\t\t\t\t\t(valuelst.length > 1 ? 's' : '') +\n\t\t\t\t\t\t'</span>'\n\t\t\t\t)\n\t\t\t// min/max of junctions of this type\n\t\t\tlet vlst = valuelst\n\t\t\tif (tk.tracks) {\n\t\t\t\tvlst = []\n\t\t\t\tfor (const l of valuelst) {\n\t\t\t\t\tvlst.push(...l)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (vlst.length == 1) {\n\t\t\t\t// only single value, don't bother min max\n\t\t\t} else {\n\t\t\t\td.append('table')\n\t\t\t\t\t.style('margin-left', '20px')\n\t\t\t\t\t.html(\n\t\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\t\tMath.max(...vlst) +\n\t\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">max read count</td></tr>' +\n\t\t\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\t\tMath.min(...vlst) +\n\t\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">min</td></tr>' +\n\t\t\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\t\tMath.ceil(vlst.reduce((i, j) => j + i, 0) / vlst.length) +\n\t\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">mean</td></tr>'\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 2 - no type, show min/max\n\t\tlet vlst = []\n\t\tif (tk.tracks) {\n\t\t\tfor (const j of tk.data) {\n\t\t\t\tvlst.push(...j.data.map(i => i.v))\n\t\t\t}\n\t\t} else {\n\t\t\tvlst = tk.data.map(j => j.v)\n\t\t}\n\t\tif (vlst.length > 1) {\n\t\t\tholder\n\t\t\t\t.append('table')\n\t\t\t\t.html(\n\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\tMath.max(...vlst) +\n\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">max read count</td></tr>' +\n\t\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\tMath.min(...vlst) +\n\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">min</td></tr>' +\n\t\t\t\t\t\t'<tr><td style=\"text-align:right;\">' +\n\t\t\t\t\t\tMath.ceil(vlst.reduce((i, j) => j + i, 0) / vlst.length) +\n\t\t\t\t\t\t'</td><td style=\"color:#858585;font-size:.7em\">mean</td></tr>'\n\t\t\t\t)\n\t\t}\n\t}\n\t// 3 - set mode button\n\tholder\n\t\t.append('div')\n\t\t.text('Fold')\n\t\t.classed('sja_menuoption', true)\n\t\t.on('click', event => {\n\t\t\ttip.hide()\n\t\t\tfor (const j of tk.data) {\n\t\t\t\tj.mode = modefold\n\t\t\t\tj.modefix = true\n\t\t\t}\n\t\t\thoriplace(tk.data, block.width, tk)\n\t\t})\n\tholder\n\t\t.append('div')\n\t\t.text('Expand')\n\t\t.classed('sja_menuoption', true)\n\t\t.on('click', event => {\n\t\t\ttip.hide()\n\t\t\tfor (const j of tk.data) {\n\t\t\t\tj.modefix = false\n\t\t\t}\n\t\t\tautomode(tk, null, block.width)\n\t\t\tfor (const j of tk.data) {\n\t\t\t\tj.modefix = true\n\t\t\t}\n\t\t\thoriplace(tk.data, block.width, tk)\n\t\t})\n\t// 4 - download\n\tholder\n\t\t.append('div')\n\t\t.text('Download')\n\t\t.classed('sja_menuoption', true)\n\t\t.on('click', event => {\n\t\t\ttip.hide()\n\t\t\tdownloadjunctions(tk)\n\t\t})\n\ttip.showunder(tk.label_mcount.node())\n}\n\nfunction label_samplecount_fillpane(tk, block, tip) {\n\ttip.clear()\n\tconst holder = tip.d\n\n\tconst hash = new Map()\n\t/*\n\tk: tkid\n\tv: {\n\t\ttkobj:,\n\t\ttypes:Map(), type to read count list\n\t\treadcountlst:[], if has no type\n\t\t}\n\t*/\n\tfor (const t of tk.tracks) {\n\t\tconst value = { tkobj: t }\n\t\tif (tk.categories) {\n\t\t\tvalue.types = new Map()\n\t\t} else {\n\t\t\tvalue.readcountlst = []\n\t\t}\n\t\thash.set(t.tkid, value)\n\t}\n\t// sample 2 junction count\n\tfor (const j of tk.data) {\n\t\tfor (const jsample of j.data) {\n\t\t\tconst thissample = hash.get(jsample.tkid)\n\t\t\tif (!thissample) {\n\t\t\t\t// should not happen\n\t\t\t\tconsole.log('unknown sample from tk.data: ' + jsample.tkid)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (j.type) {\n\t\t\t\tif (!thissample.types.has(j.type)) {\n\t\t\t\t\tthissample.types.set(j.type, [])\n\t\t\t\t}\n\t\t\t\tthissample.types.get(j.type).push(jsample.v)\n\t\t\t} else {\n\t\t\t\tthissample.readcountlst.push(jsample.v)\n\t\t\t}\n\t\t}\n\t}\n\tconst samplesortlst = [...hash]\n\tsamplesortlst.sort((a, b) => {\n\t\tlet ajunctioncount = 0\n\t\tif (a[1].types) {\n\t\t\tfor (const readcountlst of a[1].types.values()) {\n\t\t\t\tajunctioncount += readcountlst.length\n\t\t\t}\n\t\t} else {\n\t\t\tajunctioncount = a[1].readcountlst.length\n\t\t}\n\t\tlet bjunctioncount = 0\n\t\tif (b[1].types) {\n\t\t\tfor (const readcountlst of b[1].types.values()) {\n\t\t\t\tbjunctioncount += readcountlst.length\n\t\t\t}\n\t\t} else {\n\t\t\tbjunctioncount = b[1].readcountlst.length\n\t\t}\n\t\treturn bjunctioncount - ajunctioncount\n\t})\n\tconst scrollholder = holder.append('div')\n\tif (samplesortlst.length > 16) {\n\t\tscrollholder\n\t\t\t.style('height', '300px')\n\t\t\t.style('padding', '5px')\n\t\t\t//.style('border','solid 1px #ededed')\n\t\t\t.style('overflow-y', 'scroll')\n\t\t\t.style('resize', 'vertical')\n\t}\n\tconst table = scrollholder.append('table')\n\t// has 3 columns\n\t// 1. track shown or not\n\t// 2. tk button\n\t// 3. junction data stat\n\tfor (const tmp of samplesortlst) {\n\t\tconst sampledata = tmp[1]\n\t\tconst tr = table.append('tr')\n\t\tconst td1 = tr.append('td').style('color', '#ccc').style('font-size', '.7em')\n\t\t// whether the track of this sample has been shown\n\t\tfor (const t of block.tklst) {\n\t\t\tif (t.tkid == sampledata.tkobj.tkid) {\n\t\t\t\t// this sample tk is hot\n\t\t\t\ttd1.text('SHOWN')\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tconst td2 = tr\n\t\t\t.append('td')\n\t\t\t.text(sampledata.tkobj.name)\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.on('click', event => {\n\t\t\t\ttkhandleclick(block, sampledata.tkobj, td1)\n\t\t\t})\n\t\tconst td3 = tr.append('td').style('padding-left', '5px')\n\t\tif (sampledata.readcountlst) {\n\t\t\tconst max = Math.max(...sampledata.readcountlst)\n\t\t\ttd3.html(\n\t\t\t\tsampledata.readcountlst.length +\n\t\t\t\t\t' <span style=\"font-size:.8em\">junction' +\n\t\t\t\t\t(sampledata.readcountlst > 1 ? 's' : '') +\n\t\t\t\t\t', max: ' +\n\t\t\t\t\tmax +\n\t\t\t\t\t'</span>'\n\t\t\t)\n\t\t} else if (sampledata.types && sampledata.types.size > 0) {\n\t\t\tfor (const [type, readcountlst] of sampledata.types) {\n\t\t\t\ttd3\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.classed('sja_mcdot', true)\n\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t\t.style('background-color', tk.categories[type].color)\n\t\t\t\t\t.text(readcountlst.length)\n\t\t\t\ttd3\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text('max: ' + Math.max(...readcountlst))\n\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t}\n\t\t} else {\n\t\t\ttd3.text('no data').style('color', '#aaa').style('font-size', '.7em')\n\t\t}\n\t}\n\ttip.showunder(tk.label_samplecount.node())\n}\n\nfunction downloadjunctions(tk) {\n\tconst txt = []\n\tif (tk.file || tk.url) {\n\t\t// single track\n\t\tif (tk.data) {\n\t\t\ttxt.push('chromosome\\tstart\\tstop\\tread_count' + (tk.categories ? '\\ttype' : ''))\n\t\t\tfor (const j of tk.data) {\n\t\t\t\ttxt.push(j.chr + '\\t' + j.start + '\\t' + j.stop + '\\t' + j.v + (tk.categories ? '\\t' + j.type : ''))\n\t\t\t}\n\t\t}\n\t} else if (tk.tracks) {\n\t\tif (tk.data) {\n\t\t\tconst header = ['chromosome\\tstart\\tstop' + (tk.categories ? '\\ttype' : '')]\n\t\t\tfor (const t of tk.tracks) {\n\t\t\t\tconst lst = []\n\t\t\t\tif (t.patient) lst.push(t.patient)\n\t\t\t\tif (t.sampletype) lst.push(t.sampletype)\n\t\t\t\tif (lst.length == 0) {\n\t\t\t\t\tlst.push(t.name)\n\t\t\t\t}\n\t\t\t\theader.push(lst.join(', '))\n\t\t\t}\n\t\t\ttxt.push(header.join('\\t'))\n\t\t\tfor (const j of tk.data) {\n\t\t\t\tconst lst = [j.chr + '\\t' + j.start + '\\t' + j.stop + (tk.categories ? '\\t' + j.type : '')]\n\t\t\t\tconst hash = new Map()\n\t\t\t\tfor (const jsample of j.data) {\n\t\t\t\t\thash.set(jsample.tkid, jsample.v)\n\t\t\t\t}\n\t\t\t\tfor (const t of tk.tracks) {\n\t\t\t\t\tlst.push(hash.has(t.tkid) ? hash.get(t.tkid) : '')\n\t\t\t\t}\n\t\t\t\ttxt.push(lst.join('\\t'))\n\t\t\t}\n\t\t}\n\t}\n\n\tclient.export_data(tk.name, [{ label: 'Splice junction', text: txt.join('\\n') }])\n}\n\nfunction configpanel(tk, block) {\n\ttk.tkconfigtip.clear().showunder(tk.config_handle.node())\n\tconst holder = tk.tkconfigtip.d\n\n\t// read count\n\t{\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\trow.append('span').html('Read count cutoff&nbsp;')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.property('value', tk.readcountcutoff || 0)\n\t\t\t.attr('type', 'number')\n\t\t\t.style('width', '50px')\n\t\t\t.on('keyup', event => {\n\t\t\t\tif (!client.keyupEnter(event)) return\n\t\t\t\tconst v = Number.parseFloat(event.target.value)\n\t\t\t\tif (v == 0) {\n\t\t\t\t\tif (tk.readcountcutoff) {\n\t\t\t\t\t\t// cutoff has been set, cancel and refetch data\n\t\t\t\t\t\ttk.readcountcutoff = 0\n\t\t\t\t\t\tjunctionload(tk, block)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// cutoff has not been set, do nothing\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!v || v < 0) {\n\t\t\t\t\t// invalid value\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// set cutoff\n\t\t\t\tif (tk.readcountcutoff) {\n\t\t\t\t\t// cutoff has been set\n\t\t\t\t\tif (tk.readcountcutoff == v) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (tk.readcountcutoff > v) {\n\t\t\t\t\t\t// lower cutoff\n\t\t\t\t\t\ttk.readcountcutoff = v\n\t\t\t\t\t\tjunctionload(tk, block)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// raise cutoff\n\t\t\t\t\t\ttk.readcountcutoff = v\n\t\t\t\t\t\trendertk(tk.data, tk, block)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// cutoff has not been set\n\t\t\t\t\ttk.readcountcutoff = v\n\t\t\t\t\tjunctionload(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t\tconst note = row.append('div').style('font-size', '.7em').style('color', '#858585')\n\t\tif (tk.totalsamplecount > 1) {\n\t\t\t// multi sample\n\t\t\tnote.text('For a junction, samples with read count lower than cutoff will not be shown.')\n\t\t} else {\n\t\t\t// single sample\n\t\t\tnote.text('Junctions with read count lower than cutoff will not be shown.')\n\t\t}\n\t}\n}\n\nfunction initcohortsetting(tk, block) {\n\t/*\n\tcalled when .headersamples is set\n\tor if tk.tracks, need to find some other time to do it\n\n\tsamples from this track are annotated with cohort\n\twill create legend to show how samples are stratified\n\twill create controls for dynamic stratification\n\tcreate an independent row in td_legend to show them\n\n\tcohortsetting.cohort\n\t\t.levels[] for sample disease hierarchy\n\t\n\tTODO\n\tuse genomic mutations to stratify samples\n\t*/\n\n\tif (!tk.cohortsetting.cohort) {\n\t\tclient.sayerror(tk.cohortsetting.holder, '.cohort missing from tk.cohortsetting')\n\t\treturn\n\t}\n\tif (!tk.cohortsetting.cohort.levels) {\n\t\tclient.sayerror(tk.cohortsetting.holder, '.levels missing from tk.cohortsetting.cohort')\n\t\treturn\n\t}\n\tif (!tk.cohortsetting.cohort.levels[0]) {\n\t\tclient.sayerror(tk.cohortsetting.holder, 'tk.cohortsetting.cohort.levels[0] is invalid')\n\t\treturn\n\t}\n\n\ttk.cohortsetting.levelseperator = '.'\n\n\t// set which level to use\n\t// array idx of cohort.levels[]\n\ttk.cohortsetting.uselevelidx = 0\n\tsetcohortlegend_usecohortlevel(tk, block)\n}\n\nfunction setcohortlegend_usecohortlevel(tk, block) {\n\t/*\n\tcall when setting cohortsetting.uselevelidx\n\tonly to generate legend\n\t*/\n\n\ttk.cohortsetting.legendholder.selectAll('*').remove()\n\n\t// each time level is set, reset colorfunc\n\ttk.cohortsetting.colorfunc = scaleOrdinal(schemeCategory10)\n\n\tconst stratkey2count = new Map()\n\t// k: string, v:{ count, label }\n\n\tfor (const t of tk.tracks) {\n\t\tfor (const s of t.headersamples) {\n\t\t\tif (!s[tk.cohortsetting.cohort.levels[0].k]) {\n\t\t\t\t// sample has no level 0 key, unannotated\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst thissamplekeys = []\n\t\t\tfor (let lidx = 0; lidx <= tk.cohortsetting.uselevelidx; lidx++) {\n\t\t\t\tconst thislevelkey = s[tk.cohortsetting.cohort.levels[lidx].k]\n\t\t\t\tif (thislevelkey) {\n\t\t\t\t\tthissamplekeys.push(thislevelkey)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// key of this sample\n\t\t\tconst str = thissamplekeys.join(tk.cohortsetting.levelseperator)\n\t\t\tif (!stratkey2count.has(str)) {\n\t\t\t\tstratkey2count.set(str, {\n\t\t\t\t\tcount: 0,\n\t\t\t\t\tlabel: s[tk.cohortsetting.cohort.levels[tk.cohortsetting.uselevelidx].full]\n\t\t\t\t})\n\t\t\t}\n\t\t\tstratkey2count.get(str).count++\n\t\t}\n\t}\n\n\tconst sorteditems = [...stratkey2count].sort((a, b) => b[1].count - a[1].count)\n\n\tfor (const item of sorteditems) {\n\t\tconst color = tk.cohortsetting.colorfunc(item[0])\n\t\tconst label = item[1].label\n\t\tconst row = tk.cohortsetting.legendholder.append('div').style('margin-top', '5px')\n\t\trow\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t.style('background-color', color)\n\t\t\t.style('margin-right', '10px')\n\t\t\t.html('&nbsp;&nbsp;')\n\t\trow.append('div').style('display', 'inline-block').text(label)\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["exports", "beeswarm", "data", "str"]
7
- }