@sjcrh/proteinpaint-client 2.217.0 → 2.218.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.
- package/dist/2dmaf-BZWQ4YZF.js +1362 -0
- package/dist/AggMatrixInput-OXUENYYF.js +402 -0
- package/dist/AggregateMatrix-7PYLWY3X.js +37 -0
- package/dist/AppHeader-QOLLABH4.js +826 -0
- package/dist/BoxPlot-PDRYKWXF.js +1233 -0
- package/dist/CorrelationVolcano-Z3ABRHL6.js +613 -0
- package/dist/Cuminc-ATQT3KDO.js +1217 -0
- package/dist/DE-5LMMF5QB.js +85 -0
- package/dist/DEinput-Y2VXYH54.js +497 -0
- package/dist/DM-ACIWRZS2.js +86 -0
- package/dist/DifferentialAnalysis-23WQKT6I.js +235 -0
- package/dist/Disco-5UBCTVTY.js +3384 -0
- package/dist/Disco.UI-6YCIW3QK.js +239 -0
- package/dist/DmrPlot-R7UOGAVY.js +361 -0
- package/dist/DmrPlot-R7UOGAVY.js.map +7 -0
- package/dist/GB-QZZG4DHJ.js +1388 -0
- package/dist/GSEA-3WW4GEXE.js +870 -0
- package/dist/GeneExpInput-PW6HP5LO.js +38 -0
- package/dist/Geomap-YDUXJ65P.js +80 -0
- package/dist/HicApp-CXHLK5UM.js +2240 -0
- package/dist/IDCViewer-ID46XKWW.js +10808 -0
- package/dist/NumBinaryEditor-7HEQD3UO.js +274 -0
- package/dist/NumBinaryEditor.unit.spec-CE5FZMLZ.js +308 -0
- package/dist/NumContEditor-7J4IODVT.js +100 -0
- package/dist/NumContEditor.unit.spec-H3DEDHGO.js +160 -0
- package/dist/NumCustomBinEditor-URE4NOZI.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-XE5AUM45.js +393 -0
- package/dist/NumDiscreteEditor-PBV2QXRU.js +165 -0
- package/dist/NumDiscreteEditor.unit.spec-2TWQ7DAZ.js +229 -0
- package/dist/NumRegularBinEditor-MG27BRWO.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-6NJLP3BX.js +274 -0
- package/dist/NumSplineEditor-ZZKMWU2V.js +205 -0
- package/dist/NumSplineEditor.unit.spec-T3C2YPU5.js +220 -0
- package/dist/NumericDensity-BUEAEQZD.js +29 -0
- package/dist/NumericDensity.unit.spec-XZ77VRO7.js +414 -0
- package/dist/NumericHandler-RW2NAEBZ.js +30 -0
- package/dist/NumericHandler.unit.spec-BQGTQBV6.js +210 -0
- package/dist/ProteomeInput-RL6IDTOA.js +610 -0
- package/dist/Regression-EVGHTLUT.js +1412 -0
- package/dist/RunChart2-NK2KWOZ7.js +744 -0
- package/dist/SC-QWJ72SI3.js +1290 -0
- package/dist/SC-QWJ72SI3.js.map +7 -0
- package/dist/Violin-2HIRC6A2.js +1095 -0
- package/dist/Volcano-H55O7GBI.js +2453 -0
- package/dist/Volcano-H55O7GBI.js.map +7 -0
- package/dist/Wsi-M2XRJBGL.js +636 -0
- package/dist/Wsi-M2XRJBGL.js.map +7 -0
- package/dist/adSandbox-T2HORPLC.js +29 -0
- package/dist/animatedBubbleChart-PS7KMVSY.js +542 -0
- package/dist/app-FKPGNJDN.js +38 -0
- package/dist/app-NPGVS6X4.js +28 -0
- package/dist/app.js +14 -14
- package/dist/bam-QQ54FE3A.js +872 -0
- package/dist/barchart-4DLCN7NL.js +38 -0
- package/dist/barchart2-H65GFNNQ.js +305 -0
- package/dist/block-RAYA73ZN.js +6232 -0
- package/dist/block.init-VE3TQWH4.js +29 -0
- package/dist/block.mds.expressionrank-YLFQQHZJ.js +350 -0
- package/dist/block.mds.geneboxplot-6V44H7EC.js +819 -0
- package/dist/block.mds.junction-DEIUZOQK.js +1534 -0
- package/dist/block.mds.svcnv-PTP7JYS2.js +6408 -0
- package/dist/block.svg-RGDXDKV6.js +155 -0
- package/dist/block.tk.aicheck-MFXHYAIN.js +274 -0
- package/dist/block.tk.bam-ICTVSRQ6.js +1897 -0
- package/dist/block.tk.bedgraphdot-X5AYHRUJ.js +375 -0
- package/dist/block.tk.bigwig.ui-FS3DA5JQ.js +202 -0
- package/dist/block.tk.hicstraw-MBBA3H4E.js +814 -0
- package/dist/block.tk.junction-L3YVWWOR.js +2353 -0
- package/dist/block.tk.junction.textmatrixui-PU3C7W6B.js +190 -0
- package/dist/block.tk.ld-SNKUZDPW.js +90 -0
- package/dist/block.tk.menu-NARHQW7Y.js +1050 -0
- package/dist/block.tk.pgv-NVNFNJZ6.js +934 -0
- package/dist/brainImaging-KHFLAPHC.js +550 -0
- package/dist/brainRegions-MQL2KZOQ.js +213 -0
- package/dist/bubbleHeatmap-U3GAF5AV.js +374 -0
- package/dist/cellTypeBubbleHeatmap-5ENEMDCZ.js +274 -0
- package/dist/chunk-25Q4AX4L.js +102 -0
- package/dist/chunk-2GQSPQ3U.js +1273 -0
- package/dist/chunk-2GQSPQ3U.js.map +7 -0
- package/dist/chunk-2RILGMXS.js +22873 -0
- package/dist/chunk-2RILGMXS.js.map +7 -0
- package/dist/chunk-2WWCHIXZ.js +194 -0
- package/dist/chunk-3AO7OZLF.js +294 -0
- package/dist/chunk-3DZJ64RQ.js +56 -0
- package/dist/chunk-3QZHRQ55.js +26 -0
- package/dist/chunk-3ZM5PZXA.js +240 -0
- package/dist/chunk-43FVCJXV.js +2685 -0
- package/dist/chunk-43WVK5KI.js +96 -0
- package/dist/chunk-4ZOKEHK4.js +516 -0
- package/dist/chunk-5M4U6S3E.js +103 -0
- package/dist/chunk-5O4GAKJT.js +49 -0
- package/dist/chunk-5Q6TANNH.js +274 -0
- package/dist/chunk-5WBIVXMG.js +134 -0
- package/dist/chunk-65FN7LIA.js +255 -0
- package/dist/chunk-6HVJJT3Y.js +6360 -0
- package/dist/chunk-6HVJJT3Y.js.map +7 -0
- package/dist/chunk-7HTMIFVR.js +170 -0
- package/dist/chunk-AOKINHUU.js +2799 -0
- package/dist/chunk-APXULA6M.js +182 -0
- package/dist/chunk-C7O67FZJ.js +1844 -0
- package/dist/chunk-CCNV3WJO.js +281 -0
- package/dist/chunk-DAKRDL76.js +156 -0
- package/dist/chunk-EGQVMN6S.js +397 -0
- package/dist/chunk-ERCLZ433.js +217 -0
- package/dist/chunk-ESLXHJ7W.js +31 -0
- package/dist/chunk-ET2KFCXK.js +424 -0
- package/dist/chunk-EYIZTX33.js +263 -0
- package/dist/chunk-F2PHTKCI.js +243 -0
- package/dist/chunk-FJXUMOVQ.js +176 -0
- package/dist/chunk-HJCI33L4.js +140 -0
- package/dist/chunk-HKXBGMUT.js +80 -0
- package/dist/chunk-HNMKK33Y.js +38 -0
- package/dist/chunk-IKZAWD7P.js +480 -0
- package/dist/chunk-ILPJAASI.js +203 -0
- package/dist/chunk-JFZECJY2.js +562 -0
- package/dist/chunk-K6CZAEBF.js +119 -0
- package/dist/chunk-KXDK6ZOJ.js +13624 -0
- package/dist/chunk-L7LRBRUN.js +2960 -0
- package/dist/chunk-LMG7Y5IN.js +5799 -0
- package/dist/chunk-LMG7Y5IN.js.map +7 -0
- package/dist/chunk-LO624OGK.js +102 -0
- package/dist/chunk-LPDQ26OP.js +550 -0
- package/dist/chunk-M2XWAAIZ.js +340 -0
- package/dist/chunk-M37J6Z5U.js +1988 -0
- package/dist/chunk-M5SJ42E2.js +468 -0
- package/dist/chunk-MJREV2KW.js +692 -0
- package/dist/chunk-MRR5GPPP.js +466 -0
- package/dist/chunk-NSCNNQOY.js +56 -0
- package/dist/chunk-OAQLBII5.js +54 -0
- package/dist/chunk-OKHU7EJW.js +194 -0
- package/dist/chunk-OXVB4OZC.js +4373 -0
- package/dist/chunk-PDZED3RR.js +382 -0
- package/dist/chunk-PITPUAWX.js +182 -0
- package/dist/chunk-PVXG2BRT.js +59 -0
- package/dist/chunk-PX6MHRAN.js +141 -0
- package/dist/chunk-REIPTX7J.js +626 -0
- package/dist/chunk-RFE2VG6T.js +55 -0
- package/dist/chunk-RPFQOIYX.js +418 -0
- package/dist/chunk-S2NAGL4V.js +839 -0
- package/dist/chunk-T24YYODE.js +217 -0
- package/dist/chunk-TDP4PX2S.js +123 -0
- package/dist/chunk-TUPJEZSL.js +299 -0
- package/dist/chunk-UNXVW5OT.js +379 -0
- package/dist/chunk-UOWUMUAX.js +444 -0
- package/dist/chunk-V6EIPPMT.js +1339 -0
- package/dist/chunk-VGUO2BQ7.js +276 -0
- package/dist/chunk-VKWZPC73.js +37 -0
- package/dist/chunk-VQ5PDCAJ.js +5213 -0
- package/dist/chunk-VQK3UKNA.js +54 -0
- package/dist/chunk-WB5MHFHB.js +237 -0
- package/dist/chunk-WK6CPMXR.js +302 -0
- package/dist/chunk-WNUCR3UF.js +2334 -0
- package/dist/chunk-WNUCR3UF.js.map +7 -0
- package/dist/chunk-WRYNE3Q4.js +1219 -0
- package/dist/chunk-XA6LI63Y.js +54 -0
- package/dist/chunk-XJYVMXMZ.js +2279 -0
- package/dist/chunk-XJYVMXMZ.js.map +7 -0
- package/dist/chunk-Y7Y6X6E5.js +70 -0
- package/dist/chunk-YG57X4VD.js +257 -0
- package/dist/chunk-YPOIMSJR.js +34 -0
- package/dist/chunk-YS7Y257H.js +26152 -0
- package/dist/chunk-YS7Y257H.js.map +7 -0
- package/dist/chunk-ZRLON6PP.js +14 -0
- package/dist/chunk-ZSNZPH6G.js +339 -0
- package/dist/cohort-TPMJZ4OH.js +66 -0
- package/dist/cohortSunburst-SL5F36RM.js +684 -0
- package/dist/cohortSunburst-SL5F36RM.js.map +7 -0
- package/dist/condition-QROUALBG.js +323 -0
- package/dist/controls-GH37YWOP.js +30 -0
- package/dist/controls.config-ZYCDICYF.js +30 -0
- package/dist/correlation-JESMUFS6.js +91 -0
- package/dist/customdata.inputui-T2DLAZYJ.js +280 -0
- package/dist/dataDownload-Z7A6ZEH7.js +325 -0
- package/dist/databrowser.ui-ZVMGFYJ2.js +421 -0
- package/dist/dictionary-KXFUR3NL.js +109 -0
- package/dist/dnaMethylation-2YU2HDD4.js +29 -0
- package/dist/dnaMethylation.integration.spec-75Y5RSDO.js +194 -0
- package/dist/dofetch-G5ULIRMG.js +47 -0
- package/dist/e2pca-75VDPO7P.js +340 -0
- package/dist/ep-F2Z7TNAG.js +1247 -0
- package/dist/ep-F2Z7TNAG.js.map +7 -0
- package/dist/expclust.gdc.spec-PB66FFWD.js +298 -0
- package/dist/facet-2RY37EFR.js +515 -0
- package/dist/gb-WQQFYFGF.js +77 -0
- package/dist/geneExpClustering-ARVZDF6G.js +240 -0
- package/dist/geneExpression-FR33PKJW.js +309 -0
- package/dist/geneExpression-O7DR5SMR.js +29 -0
- package/dist/geneExpression.unit.spec-HGNDSTAI.js +124 -0
- package/dist/geneORA-RXXQT44V.js +269 -0
- package/dist/geneRanking-WDQZ7TI3.js +544 -0
- package/dist/geneVariant-6JYBWFEJ.js +32 -0
- package/dist/geneVariant-TKRG5VQN.js +285 -0
- package/dist/geneVariant.integration.spec-L2Q2DY67.js +499 -0
- package/dist/genefusion.ui-DBLMBU2D.js +299 -0
- package/dist/geneset-2ZQF7FET.js +199 -0
- package/dist/genomeBrowser.spec-E5RJD53Z.js +272 -0
- package/dist/grin2-MJ4SYAFO.js +66 -0
- package/dist/grin2-VXRMV7VA.js +945 -0
- package/dist/hierCluster-44FPBMNL.js +55 -0
- package/dist/hierCluster-SU4BDK6I.js +51 -0
- package/dist/hierCluster.config-4OZ65GKH.js +32 -0
- package/dist/hierCluster.integration.spec-CHNSKZD4.js +479 -0
- package/dist/hierCluster.interactivity-M72CEGCW.js +45 -0
- package/dist/hierCluster.renderers-RM43G7ZR.js +18 -0
- package/dist/imagePlot-UYMWFNI4.js +152 -0
- package/dist/importPlot-W3HPE4LZ.js +8 -0
- package/dist/isoformExpression-JEMJE5WY.js +31 -0
- package/dist/isoformExpression.unit.spec-GOK5LFME.js +233 -0
- package/dist/jspdf.es.min-KB3HW45U.js +40 -0
- package/dist/junction-2X4AS47T.js +32 -0
- package/dist/junction.customTerm-MVSIUY66.js +15 -0
- package/dist/junction.unit.spec-HA74XQYV.js +178 -0
- package/dist/launch.adhoc-PZAJ6J2S.js +33 -0
- package/dist/leftlabel.sample-7BZKFB3I.js +253 -0
- package/dist/lollipop-URSFH4ZE.js +162 -0
- package/dist/maf-CM3ETF4N.js +451 -0
- package/dist/maftimeline-CRQEUTRY.js +583 -0
- package/dist/matrix-IBWB4A3Z.js +50 -0
- package/dist/matrix-SOBGWBTY.js +55 -0
- package/dist/matrix.cells-GSKC6FXI.js +25 -0
- package/dist/matrix.config-4KU5X3LQ.js +33 -0
- package/dist/matrix.data-XC2OTBTR.js +22 -0
- package/dist/matrix.groups-THXKRQSD.js +25 -0
- package/dist/matrix.integration.spec-GKHH4RSR.js +3156 -0
- package/dist/matrix.interactivity-ITXMM2ZP.js +33 -0
- package/dist/matrix.layout-D6SRLAXS.js +35 -0
- package/dist/matrix.legend-OWQAMHI2.js +19 -0
- package/dist/matrix.renderers-J66OAQUZ.js +30 -0
- package/dist/matrix.serieses-P5I4E2NB.js +18 -0
- package/dist/matrix.sort-CXBXF75N.js +25 -0
- package/dist/matrix.sort.unit.spec-RSXBKXC5.js +464 -0
- package/dist/matrix.sorterUi-WEZRKU63.js +15 -0
- package/dist/matrix.sorterUi.unit.spec-6EULDV43.js +334 -0
- package/dist/matrix.unit.spec-D4ZLDVDT.js +146 -0
- package/dist/mavb-5JAD6CPN.js +726 -0
- package/dist/mavb-5JAD6CPN.js.map +7 -0
- package/dist/mds.fimo-CQFREH3A.js +509 -0
- package/dist/mds.samplescatterplot-XLJITURG.js +1545 -0
- package/dist/mds.survivalplot-MLRD27QP.js +472 -0
- package/dist/multivalue-KJQCYBHA.js +79 -0
- package/dist/numericDictTermCluster-ZOU6R4XP.js +62 -0
- package/dist/oncomatrix-4RHDDJDC.js +286 -0
- package/dist/oncomatrix.spec-JA6DT4PP.js +439 -0
- package/dist/plot.2dvaf-VJWPWCOY.js +368 -0
- package/dist/plot.app-JNEOGNVW.js +32 -0
- package/dist/plot.barplot-YELRBXUB.js +93 -0
- package/dist/plot.boxplot-HNFOB3TV.js +142 -0
- package/dist/plot.brainImaging-AZYEGF3U.js +51 -0
- package/dist/plot.disco-L6PGGZJI.js +98 -0
- package/dist/plot.ssgq-UM64SSXW.js +130 -0
- package/dist/plot.vaf2cov-DKUKJRUP.js +249 -0
- package/dist/polar2-4YHPENAV.js +228 -0
- package/dist/profileForms-KMECFO3K.js +937 -0
- package/dist/profilePlot-3AXSIXCK.js +45 -0
- package/dist/proteinView-QWHOTL35.js +1346 -0
- package/dist/proteomeCohortCompare-DL2QLFL3.js +866 -0
- package/dist/pseudbulk.unit.spec-IWR7EZ7O.js +82 -0
- package/dist/pseudobulk-IC525IZ2.js +31 -0
- package/dist/purify.es-34NJ2D5A.js +1986 -0
- package/dist/purify.es-34NJ2D5A.js.map +7 -0
- package/dist/qualitative-LK2QEYHU.js +34 -0
- package/dist/qualitative-YY4NQGO5.js +241 -0
- package/dist/radar2-TJUPENQF.js +323 -0
- package/dist/radarFacility2-Q7LBWLCV.js +331 -0
- package/dist/rememberedGvQ.unit.spec-2GBLM5AO.js +210 -0
- package/dist/render-AHR6SCQX.js +29 -0
- package/dist/report-BPHJTRTO.js +213 -0
- package/dist/sampleView-CS2FB3K3.js +39 -0
- package/dist/samplelst-A3DHKP6U.js +102 -0
- package/dist/samplematrix-5X7MFT3G.js +2188 -0
- package/dist/sc-RCYXZMN6.js +77 -0
- package/dist/scatter-2ITGMX5N.js +921 -0
- package/dist/scatter-OAL4YOCA.js +84 -0
- package/dist/selectGenomeWithTklst-PB5KDW2N.js +125 -0
- package/dist/singleCellCellType-FEFNOHOP.js +29 -0
- package/dist/singleCellCellType.unit.spec-V2I32V23.js +150 -0
- package/dist/singleCellGeneExpression-RUQQMKDE.js +29 -0
- package/dist/singleCellGeneExpression.unit.spec-VCMJRMT7.js +144 -0
- package/dist/singleCellNumericValue-JLXZQWNT.js +29 -0
- package/dist/singleCellNumericValue.unit.spec-XVCZEN5K.js +412 -0
- package/dist/singleCellPlot-4EBYWOJ2.js +44 -0
- package/dist/singlecell-UKZJAYVH.js +1562 -0
- package/dist/singlecell-VNRWPXGV.js +77 -0
- package/dist/snp-2RJDJQZC.js +29 -0
- package/dist/snp.unit.spec-Z4DNBFAH.js +167 -0
- package/dist/snplocus-OZLIZ7R7.js +200 -0
- package/dist/snplst-EVRJ4OCL.js +36 -0
- package/dist/spliceevent.a53ss.diagram-N5UXX4OX.js +142 -0
- package/dist/spliceevent.exonskip.diagram-WBNFLW4V.js +274 -0
- package/dist/spliceevent.noeventdiagram-EI72A6L3.js +451 -0
- package/dist/ssGSEA-NONMMNF7.js +29 -0
- package/dist/ssGSEA.unit.spec-7JDPNLZA.js +79 -0
- package/dist/stattable-NNUHKPF4.js +112 -0
- package/dist/studyCatalog-KMLE7Q55.js +457 -0
- package/dist/summarizeCnvGeneexp-AHCGPQLE.js +154 -0
- package/dist/summarizeGeneexpSurvival-NCST7HDQ.js +101 -0
- package/dist/summarizeMutationCnv-VUTQYXO6.js +155 -0
- package/dist/summarizeMutationDiagnosis-TFU2HUHQ.js +31 -0
- package/dist/summarizeMutationSurvival-F4CJILS3.js +95 -0
- package/dist/summary-QQZW7BEE.js +40 -0
- package/dist/summary.integration.spec-FILIPD3W.js +405 -0
- package/dist/summaryInput-RMY226Y3.js +238 -0
- package/dist/sunburst-Y4LNCKMR.js +274 -0
- package/dist/survival-4FYQHQHX.js +49 -0
- package/dist/survival-6GC267GY.js +1246 -0
- package/dist/survival.integration.spec-5ERXR6MG.js +609 -0
- package/dist/svg2pdf.es.min-KKHWPFWG.js +3157 -0
- package/dist/svgraph-XIQIA7OJ.js +1377 -0
- package/dist/svmr-45YJKRQP.js +3834 -0
- package/dist/svmr-45YJKRQP.js.map +7 -0
- package/dist/swimmer-643B5Q6F.js +741 -0
- package/dist/table-JQIBRXTJ.js +192 -0
- package/dist/termCollection-LU5NW6KT.js +247 -0
- package/dist/termCollection-XZCPBXRV.js +29 -0
- package/dist/termCollection.unit.spec-H5LBV3N4.js +295 -0
- package/dist/termCollectionFractionSelection-3YHOFXEL.js +38 -0
- package/dist/termCollectionFractionSelection.unit.spec-G5X3Y5YI.js +184 -0
- package/dist/tk-NPWNBXLB.js +37 -0
- package/dist/tk-YSW5NPW2.js +1116 -0
- package/dist/tp.ui-W6RG7V2A.js +1453 -0
- package/dist/tp.ui-W6RG7V2A.js.map +7 -0
- package/dist/tvs.categorical-TUX6KRZI.js +28 -0
- package/dist/tvs.condition-2CH25PLO.js +160 -0
- package/dist/tvs.dt-YKP3F75O.js +30 -0
- package/dist/tvs.dtcnv.categorical-QBJWJNHZ.js +31 -0
- package/dist/tvs.dtcnv.continuous-MV25OLBD.js +63 -0
- package/dist/tvs.dtfusion-SJ64HNKE.js +31 -0
- package/dist/tvs.dtitd-WQLHZK2P.js +31 -0
- package/dist/tvs.dtsnvindel-WMFJ7W7U.js +31 -0
- package/dist/tvs.dtsv-GKEC5OGA.js +31 -0
- package/dist/tvs.multivalue-LFWMQETN.js +84 -0
- package/dist/tvs.numeric-63NVZG7U.js +32 -0
- package/dist/tvs.samplelst-DEMMYRKK.js +95 -0
- package/dist/tvs.survival-M4QUVP5L.js +110 -0
- package/dist/tvs.termCollection-J367GZY3.js +118 -0
- package/dist/vocabulary-RAVWS5IS.js +32 -0
- package/dist/wsi.direct-UY3SIIAD.js +11514 -0
- package/dist/wsi.direct-UY3SIIAD.js.map +7 -0
- package/package.json +3 -3
- package/dist/2dmaf-RRHATFHO.js +0 -1362
- package/dist/AggMatrixInput-4UHBCXYH.js +0 -402
- package/dist/AggregateMatrix-IJE5CM5Y.js +0 -37
- package/dist/AppHeader-UXGLRW6C.js +0 -826
- package/dist/BoxPlot-GQYC22KY.js +0 -1233
- package/dist/CorrelationVolcano-5CWRWZTI.js +0 -613
- package/dist/Cuminc-TYHKAPRK.js +0 -1217
- package/dist/DE-UUFQGSOI.js +0 -85
- package/dist/DEinput-DU7MF4YY.js +0 -497
- package/dist/DM-SSI5KUBC.js +0 -86
- package/dist/DifferentialAnalysis-G6FE2MXY.js +0 -235
- package/dist/Disco-B3KGNEAW.js +0 -3384
- package/dist/Disco.UI-UNPUBQCN.js +0 -239
- package/dist/DmrPlot-27NGDMT4.js +0 -358
- package/dist/DmrPlot-27NGDMT4.js.map +0 -7
- package/dist/GB-SXACUA4V.js +0 -1388
- package/dist/GSEA-EHMBA3TF.js +0 -870
- package/dist/GeneExpInput-NDXISF2U.js +0 -38
- package/dist/Geomap-3CNT227W.js +0 -80
- package/dist/HicApp-VQBUB6EZ.js +0 -2240
- package/dist/IDCViewer-DTOE7KDX.js +0 -10808
- package/dist/NumBinaryEditor-IVZ4MMQT.js +0 -274
- package/dist/NumBinaryEditor.unit.spec-3BSQ6FM4.js +0 -308
- package/dist/NumContEditor-CUZHU3IO.js +0 -100
- package/dist/NumContEditor.unit.spec-SCQFD2Y7.js +0 -160
- package/dist/NumCustomBinEditor-UEEYZ4ZO.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-GYS35OQV.js +0 -393
- package/dist/NumDiscreteEditor-IT7NIXTV.js +0 -165
- package/dist/NumDiscreteEditor.unit.spec-LB6VLAWO.js +0 -229
- package/dist/NumRegularBinEditor-FF6UXZWN.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-Z4S5LH2C.js +0 -274
- package/dist/NumSplineEditor-IW5WEN3P.js +0 -205
- package/dist/NumSplineEditor.unit.spec-PAEN3SAD.js +0 -220
- package/dist/NumericDensity-CPJIQLYT.js +0 -29
- package/dist/NumericDensity.unit.spec-4KHECHVU.js +0 -414
- package/dist/NumericHandler-SEFTQJDM.js +0 -30
- package/dist/NumericHandler.unit.spec-UGDR3476.js +0 -210
- package/dist/ProteomeInput-NYPUYVN5.js +0 -610
- package/dist/Regression-WDSISHYL.js +0 -1412
- package/dist/RunChart2-2NPADXUR.js +0 -744
- package/dist/SC-EWDBPHEL.js +0 -1344
- package/dist/SC-EWDBPHEL.js.map +0 -7
- package/dist/Violin-POGGPCZY.js +0 -1095
- package/dist/Volcano-U2B4KEUL.js +0 -2452
- package/dist/Volcano-U2B4KEUL.js.map +0 -7
- package/dist/Wsi-G7OCAJ3R.js +0 -625
- package/dist/Wsi-G7OCAJ3R.js.map +0 -7
- package/dist/adSandbox-SUCX6DAQ.js +0 -29
- package/dist/animatedBubbleChart-SDBWJELZ.js +0 -542
- package/dist/app-ATQM5PKI.js +0 -28
- package/dist/app-BCKEWJCY.js +0 -38
- package/dist/bam-QK2ZLZDI.js +0 -872
- package/dist/barchart-RHDKI3NZ.js +0 -38
- package/dist/barchart2-CS3E6FOY.js +0 -305
- package/dist/block-RQ3HTJVP.js +0 -6232
- package/dist/block.init-T33F47DO.js +0 -29
- package/dist/block.mds.expressionrank-LQD6MN6Z.js +0 -350
- package/dist/block.mds.geneboxplot-N5XHHVR7.js +0 -819
- package/dist/block.mds.junction-JD4WQUSH.js +0 -1534
- package/dist/block.mds.svcnv-LCTYWXL2.js +0 -6408
- package/dist/block.svg-2F3RGTI3.js +0 -155
- package/dist/block.tk.aicheck-BOF6WZ5E.js +0 -274
- package/dist/block.tk.bam-5GBYEQBM.js +0 -1897
- package/dist/block.tk.bedgraphdot-LVQEP4RS.js +0 -375
- package/dist/block.tk.bigwig.ui-HHBO4JAC.js +0 -202
- package/dist/block.tk.hicstraw-JBO4UEOA.js +0 -814
- package/dist/block.tk.junction-S5S2N7FK.js +0 -2353
- package/dist/block.tk.junction.textmatrixui-DNQL7WB5.js +0 -190
- package/dist/block.tk.ld-JHQNR67E.js +0 -90
- package/dist/block.tk.menu-7JBJOY2O.js +0 -1050
- package/dist/block.tk.pgv-FQPREV6P.js +0 -934
- package/dist/brainImaging-HEWGZZNY.js +0 -550
- package/dist/brainRegions-QUGB7YUW.js +0 -213
- package/dist/bubbleHeatmap-OZRONGAX.js +0 -374
- package/dist/cellTypeBubbleHeatmap-N7NDE325.js +0 -274
- package/dist/chunk-2FWSNJEN.js +0 -54
- package/dist/chunk-2JIKMCJR.js +0 -34
- package/dist/chunk-3SPEW6R6.js +0 -102
- package/dist/chunk-5G6O5RYM.js +0 -123
- package/dist/chunk-65DO5IKM.js +0 -299
- package/dist/chunk-6D4HOTG7.js +0 -1844
- package/dist/chunk-6Q5SOSSU.js +0 -2685
- package/dist/chunk-7JHIUS54.js +0 -626
- package/dist/chunk-7X347XMF.js +0 -397
- package/dist/chunk-ABLG7GUS.js +0 -55
- package/dist/chunk-AFEFZ74T.js +0 -276
- package/dist/chunk-AIC43DTG.js +0 -243
- package/dist/chunk-AJXP4AV7.js +0 -182
- package/dist/chunk-AMW5LCUB.js +0 -424
- package/dist/chunk-AV2IH5K2.js +0 -156
- package/dist/chunk-B3WLXXGY.js +0 -263
- package/dist/chunk-BG6GAROI.js +0 -302
- package/dist/chunk-BIJOXCLN.js +0 -2277
- package/dist/chunk-BIJOXCLN.js.map +0 -7
- package/dist/chunk-BU6PAOGA.js +0 -103
- package/dist/chunk-BZV2BJDU.js +0 -13624
- package/dist/chunk-C2TII2FF.js +0 -96
- package/dist/chunk-CTFHEDG2.js +0 -550
- package/dist/chunk-CXEECHP5.js +0 -37
- package/dist/chunk-CZK4EV3Y.js +0 -1339
- package/dist/chunk-D35GNF3Y.js +0 -2325
- package/dist/chunk-D35GNF3Y.js.map +0 -7
- package/dist/chunk-DFZWE3TR.js +0 -170
- package/dist/chunk-DX23HAW7.js +0 -1219
- package/dist/chunk-E7XHA4YL.js +0 -1988
- package/dist/chunk-EDFBRXX2.js +0 -54
- package/dist/chunk-F23EQSGU.js +0 -26
- package/dist/chunk-F2EEQ7KG.js +0 -379
- package/dist/chunk-F5FFI7Z7.js +0 -468
- package/dist/chunk-FK5NL2DF.js +0 -141
- package/dist/chunk-FVZTRWAO.js +0 -692
- package/dist/chunk-GDHQVEIO.js +0 -217
- package/dist/chunk-GSVB4XNS.js +0 -2799
- package/dist/chunk-GVAV4VRI.js +0 -418
- package/dist/chunk-H2FELGYK.js +0 -140
- package/dist/chunk-HFKZGMVV.js +0 -839
- package/dist/chunk-HJARHSDC.js +0 -274
- package/dist/chunk-HWNQOADC.js +0 -182
- package/dist/chunk-HXRG7XYB.js +0 -54
- package/dist/chunk-J5KCTRJC.js +0 -80
- package/dist/chunk-JMFVXWDX.js +0 -59
- package/dist/chunk-KGX2OIR4.js +0 -203
- package/dist/chunk-L2NPLA43.js +0 -257
- package/dist/chunk-L2WOLNZK.js +0 -339
- package/dist/chunk-LQKMDIRB.js +0 -466
- package/dist/chunk-LSQ5AQ6Q.js +0 -562
- package/dist/chunk-MBQIHLGI.js +0 -1269
- package/dist/chunk-MBQIHLGI.js.map +0 -7
- package/dist/chunk-MFR4WWDM.js +0 -14
- package/dist/chunk-MU4Z2MX2.js +0 -340
- package/dist/chunk-NHMIMTJA.js +0 -281
- package/dist/chunk-NNDKYTUV.js +0 -25353
- package/dist/chunk-NNDKYTUV.js.map +0 -7
- package/dist/chunk-NPBN3PPZ.js +0 -6358
- package/dist/chunk-NPBN3PPZ.js.map +0 -7
- package/dist/chunk-NULQJF73.js +0 -56
- package/dist/chunk-NYO7YANQ.js +0 -294
- package/dist/chunk-OBNHXAYG.js +0 -194
- package/dist/chunk-PETYR7LC.js +0 -134
- package/dist/chunk-PLFPXOGX.js +0 -119
- package/dist/chunk-PQVHRM4L.js +0 -5213
- package/dist/chunk-QLUTQPZE.js +0 -240
- package/dist/chunk-QNQ2ZYT7.js +0 -38
- package/dist/chunk-QYCPIVCX.js +0 -255
- package/dist/chunk-RZ2THVK4.js +0 -516
- package/dist/chunk-S4IZ4VM7.js +0 -31
- package/dist/chunk-SFUDTUXF.js +0 -382
- package/dist/chunk-SUT75MRI.js +0 -102
- package/dist/chunk-SYLYLOHK.js +0 -56
- package/dist/chunk-TEFWF3SK.js +0 -176
- package/dist/chunk-TPSVPMAN.js +0 -70
- package/dist/chunk-V4ZKHM6D.js +0 -2960
- package/dist/chunk-V7DNHPZD.js +0 -4373
- package/dist/chunk-VPMQDTYR.js +0 -194
- package/dist/chunk-VV6JIG4D.js +0 -444
- package/dist/chunk-WTAPOH2W.js +0 -22699
- package/dist/chunk-WTAPOH2W.js.map +0 -7
- package/dist/chunk-WU3YXPRE.js +0 -217
- package/dist/chunk-X2HWRISK.js +0 -480
- package/dist/chunk-X77QVINS.js +0 -49
- package/dist/chunk-XXFLJWTQ.js +0 -237
- package/dist/chunk-ZPWBYHNE.js +0 -5799
- package/dist/chunk-ZPWBYHNE.js.map +0 -7
- package/dist/cohort-ATIZW34H.js +0 -66
- package/dist/cohortSunburst-WQK2UV25.js +0 -686
- package/dist/cohortSunburst-WQK2UV25.js.map +0 -7
- package/dist/condition-SGJIDZNB.js +0 -323
- package/dist/controls-JQCMGPXP.js +0 -30
- package/dist/controls.config-WQHVQAIJ.js +0 -30
- package/dist/correlation-S3MN3L5Q.js +0 -91
- package/dist/customdata.inputui-LGTGMJBZ.js +0 -280
- package/dist/dataDownload-FAWN2WKE.js +0 -325
- package/dist/databrowser.ui-KF3LWQXG.js +0 -421
- package/dist/dictionary-EVLEOT72.js +0 -109
- package/dist/dnaMethylation-J3SPEM4S.js +0 -29
- package/dist/dnaMethylation.integration.spec-CTA53YCT.js +0 -194
- package/dist/dofetch-3C3MI5NR.js +0 -47
- package/dist/e2pca-PTWPY5WP.js +0 -340
- package/dist/ep-MS4LQQDR.js +0 -1245
- package/dist/ep-MS4LQQDR.js.map +0 -7
- package/dist/expclust.gdc.spec-S5FE4MMD.js +0 -298
- package/dist/facet-FSOIZJCA.js +0 -515
- package/dist/gb-YDEOK7NW.js +0 -77
- package/dist/geneExpClustering-37JKKFW3.js +0 -240
- package/dist/geneExpression-G6ODP3VY.js +0 -29
- package/dist/geneExpression-VQPRFNKE.js +0 -309
- package/dist/geneExpression.unit.spec-ZHXCUG6Q.js +0 -124
- package/dist/geneORA-E3PSS3CI.js +0 -269
- package/dist/geneRanking-MK3YYINC.js +0 -544
- package/dist/geneVariant-LEMAVFOY.js +0 -32
- package/dist/geneVariant-NNSB7JLS.js +0 -285
- package/dist/geneVariant.integration.spec-6CC5UAOP.js +0 -499
- package/dist/genefusion.ui-5NCQIQPN.js +0 -299
- package/dist/geneset-ZX4V3CFB.js +0 -199
- package/dist/genomeBrowser.spec-J7ISXY6H.js +0 -272
- package/dist/grin2-GN3DQNON.js +0 -945
- package/dist/grin2-LBGBBB4L.js +0 -66
- package/dist/hierCluster-5JURTKAZ.js +0 -55
- package/dist/hierCluster-BJ5VBPXR.js +0 -51
- package/dist/hierCluster.config-4EERP4KK.js +0 -32
- package/dist/hierCluster.integration.spec-VR4GULRV.js +0 -479
- package/dist/hierCluster.interactivity-SMTQOKUY.js +0 -45
- package/dist/hierCluster.renderers-PAME7BWU.js +0 -18
- package/dist/imagePlot-4LMIKBVE.js +0 -152
- package/dist/importPlot-3CG6ASNH.js +0 -8
- package/dist/isoformExpression-VCDNKTZ6.js +0 -31
- package/dist/isoformExpression.unit.spec-ZXYY37TA.js +0 -233
- package/dist/jspdf.es.min-V7ONHJJV.js +0 -40
- package/dist/junction-5DXJO4PS.js +0 -32
- package/dist/junction.customTerm-UOPUSEOE.js +0 -15
- package/dist/junction.unit.spec-F35E3GJW.js +0 -178
- package/dist/launch.adhoc-V2HTCQGD.js +0 -33
- package/dist/leftlabel.sample-V7O2EC36.js +0 -253
- package/dist/lollipop-RNRZLG64.js +0 -162
- package/dist/maf-W6SF6BJS.js +0 -451
- package/dist/maftimeline-NABCAMHG.js +0 -583
- package/dist/matrix-JC6AJT2N.js +0 -55
- package/dist/matrix-UCHESWVK.js +0 -50
- package/dist/matrix.cells-B4L42TBM.js +0 -25
- package/dist/matrix.config-6US3AAH7.js +0 -33
- package/dist/matrix.data-FYFXYDA3.js +0 -22
- package/dist/matrix.groups-Y7DEG3GS.js +0 -25
- package/dist/matrix.integration.spec-KXX7SFX5.js +0 -3156
- package/dist/matrix.interactivity-NHWG4WCC.js +0 -33
- package/dist/matrix.layout-5DQNT7DD.js +0 -35
- package/dist/matrix.legend-OY7IF6AS.js +0 -19
- package/dist/matrix.renderers-GYOXGHPU.js +0 -30
- package/dist/matrix.serieses-657TLDAV.js +0 -18
- package/dist/matrix.sort-IMA2ES3T.js +0 -25
- package/dist/matrix.sort.unit.spec-S6BAFYPR.js +0 -464
- package/dist/matrix.sorterUi-77F36Q5H.js +0 -15
- package/dist/matrix.sorterUi.unit.spec-V5NVQGD5.js +0 -334
- package/dist/matrix.unit.spec-R4NMTZYQ.js +0 -146
- package/dist/mavb-MRCVMBPD.js +0 -723
- package/dist/mavb-MRCVMBPD.js.map +0 -7
- package/dist/mds.fimo-5DCH5BEM.js +0 -509
- package/dist/mds.samplescatterplot-VIBCS5M6.js +0 -1545
- package/dist/mds.survivalplot-AZ7LJDZZ.js +0 -472
- package/dist/multivalue-4QKGYYW2.js +0 -79
- package/dist/numericDictTermCluster-GLLG6IK2.js +0 -62
- package/dist/oncomatrix-R32ZPMX7.js +0 -286
- package/dist/oncomatrix.spec-BMK6LMBS.js +0 -439
- package/dist/plot.2dvaf-46FT53MF.js +0 -368
- package/dist/plot.app-7EE4YCV4.js +0 -32
- package/dist/plot.barplot-FK4J2G7K.js +0 -93
- package/dist/plot.boxplot-ATY4LK3X.js +0 -142
- package/dist/plot.brainImaging-S7B547V4.js +0 -51
- package/dist/plot.disco-K5MMC2GD.js +0 -98
- package/dist/plot.ssgq-B3OVMZFD.js +0 -130
- package/dist/plot.vaf2cov-RBHDQULW.js +0 -249
- package/dist/polar2-GECELCTG.js +0 -228
- package/dist/profileForms-2USYOA34.js +0 -937
- package/dist/profilePlot-YGD2CF6P.js +0 -45
- package/dist/proteinView-FCPWJLGU.js +0 -1346
- package/dist/proteomeCohortCompare-TYYUF5A5.js +0 -866
- package/dist/pseudbulk.unit.spec-UVVRP6NR.js +0 -82
- package/dist/pseudobulk-ZIN5VJGB.js +0 -31
- package/dist/purify.es-3S3RVH5Y.js +0 -1594
- package/dist/purify.es-3S3RVH5Y.js.map +0 -7
- package/dist/qualitative-27BZGASV.js +0 -34
- package/dist/qualitative-N4F6NITI.js +0 -241
- package/dist/radar2-X465RPJX.js +0 -323
- package/dist/radarFacility2-AE7BA62N.js +0 -331
- package/dist/rememberedGvQ.unit.spec-4PDIU5RY.js +0 -210
- package/dist/render-TD2QWOHT.js +0 -29
- package/dist/report-3Y2OWDF7.js +0 -213
- package/dist/sampleView-BUMMYRHJ.js +0 -39
- package/dist/samplelst-BWK53BLI.js +0 -102
- package/dist/samplematrix-RQU43UYR.js +0 -2188
- package/dist/sc-LCBFWCZZ.js +0 -77
- package/dist/scatter-6S5I7OW3.js +0 -921
- package/dist/scatter-MJELX75N.js +0 -84
- package/dist/selectGenomeWithTklst-WAVXHXR5.js +0 -125
- package/dist/singleCellCellType-WMCAJ7JF.js +0 -29
- package/dist/singleCellCellType.unit.spec-4Z46ZT5Q.js +0 -150
- package/dist/singleCellGeneExpression-7Q5ZJT4R.js +0 -29
- package/dist/singleCellGeneExpression.unit.spec-6C7PDGRH.js +0 -144
- package/dist/singleCellNumericValue-QGYITZRC.js +0 -29
- package/dist/singleCellNumericValue.unit.spec-MQUKPEZJ.js +0 -412
- package/dist/singleCellPlot-JJMFJ2KQ.js +0 -44
- package/dist/singlecell-J23S3JR2.js +0 -1562
- package/dist/singlecell-Y4OGUWEC.js +0 -77
- package/dist/snp-IO6TKWGD.js +0 -29
- package/dist/snp.unit.spec-X7ILEEPO.js +0 -167
- package/dist/snplocus-Z2NGIKMO.js +0 -200
- package/dist/snplst-XCS2FCQV.js +0 -36
- package/dist/spliceevent.a53ss.diagram-F3S4BRVG.js +0 -142
- package/dist/spliceevent.exonskip.diagram-AXCDJKH4.js +0 -274
- package/dist/spliceevent.noeventdiagram-UK3X667E.js +0 -451
- package/dist/ssGSEA-ZRPNQKJ5.js +0 -29
- package/dist/ssGSEA.unit.spec-DG5ZHLC7.js +0 -79
- package/dist/stattable-XYSC3CYU.js +0 -112
- package/dist/studyCatalog-Y75LMI62.js +0 -457
- package/dist/summarizeCnvGeneexp-H2NP7VLU.js +0 -154
- package/dist/summarizeGeneexpSurvival-HTCD3VQQ.js +0 -101
- package/dist/summarizeMutationCnv-UEGXWK2P.js +0 -155
- package/dist/summarizeMutationDiagnosis-MJGWP7IT.js +0 -31
- package/dist/summarizeMutationSurvival-55JW5LA6.js +0 -95
- package/dist/summary-HJO23RGB.js +0 -40
- package/dist/summary.integration.spec-OWI2C2N5.js +0 -405
- package/dist/summaryInput-RL2JXRDE.js +0 -238
- package/dist/sunburst-JFY6V5E2.js +0 -274
- package/dist/survival-6FLR4YCJ.js +0 -1246
- package/dist/survival-PBBU6PA5.js +0 -49
- package/dist/survival.integration.spec-WAKTGYGP.js +0 -609
- package/dist/svg2pdf.es.min-NIFE2BIE.js +0 -3157
- package/dist/svgraph-WD3DUZV7.js +0 -1377
- package/dist/svmr-AP6ZFO7S.js +0 -3832
- package/dist/svmr-AP6ZFO7S.js.map +0 -7
- package/dist/swimmer-VPKSBV6V.js +0 -741
- package/dist/table-GX3VJLPZ.js +0 -192
- package/dist/termCollection-QE7U5QBD.js +0 -29
- package/dist/termCollection-YQ332WKB.js +0 -247
- package/dist/termCollection.unit.spec-ELLN7VRA.js +0 -295
- package/dist/termCollectionFractionSelection-V3RP5KAT.js +0 -38
- package/dist/termCollectionFractionSelection.unit.spec-JR7Q7TJI.js +0 -184
- package/dist/tk-GD2KJM5W.js +0 -1116
- package/dist/tk-J5VPFEX6.js +0 -37
- package/dist/tp.ui-5K3AAXDW.js +0 -1449
- package/dist/tp.ui-5K3AAXDW.js.map +0 -7
- package/dist/tvs.categorical-RPACB4VU.js +0 -28
- package/dist/tvs.condition-O6JBUM6D.js +0 -160
- package/dist/tvs.dt-5EVBSRX3.js +0 -30
- package/dist/tvs.dtcnv.categorical-Y5YHBZNC.js +0 -31
- package/dist/tvs.dtcnv.continuous-WP322QUP.js +0 -63
- package/dist/tvs.dtfusion-CCMUFDMQ.js +0 -31
- package/dist/tvs.dtitd-P3ED3MWA.js +0 -31
- package/dist/tvs.dtsnvindel-X2MXPLC6.js +0 -31
- package/dist/tvs.dtsv-4FOWFNVV.js +0 -31
- package/dist/tvs.multivalue-IRF467ZK.js +0 -84
- package/dist/tvs.numeric-C7FDCGCS.js +0 -32
- package/dist/tvs.samplelst-CBU6ATI5.js +0 -95
- package/dist/tvs.survival-3K5ASAXV.js +0 -110
- package/dist/tvs.termCollection-MXEWO6KJ.js +0 -118
- package/dist/vocabulary-GQBHDP3K.js +0 -32
- package/dist/wsi.direct-25JUHWEF.js +0 -8339
- package/dist/wsi.direct-25JUHWEF.js.map +0 -7
- /package/dist/{2dmaf-RRHATFHO.js.map → 2dmaf-BZWQ4YZF.js.map} +0 -0
- /package/dist/{AggMatrixInput-4UHBCXYH.js.map → AggMatrixInput-OXUENYYF.js.map} +0 -0
- /package/dist/{AggregateMatrix-IJE5CM5Y.js.map → AggregateMatrix-7PYLWY3X.js.map} +0 -0
- /package/dist/{AppHeader-UXGLRW6C.js.map → AppHeader-QOLLABH4.js.map} +0 -0
- /package/dist/{BoxPlot-GQYC22KY.js.map → BoxPlot-PDRYKWXF.js.map} +0 -0
- /package/dist/{CorrelationVolcano-5CWRWZTI.js.map → CorrelationVolcano-Z3ABRHL6.js.map} +0 -0
- /package/dist/{Cuminc-TYHKAPRK.js.map → Cuminc-ATQT3KDO.js.map} +0 -0
- /package/dist/{DE-UUFQGSOI.js.map → DE-5LMMF5QB.js.map} +0 -0
- /package/dist/{DEinput-DU7MF4YY.js.map → DEinput-Y2VXYH54.js.map} +0 -0
- /package/dist/{DM-SSI5KUBC.js.map → DM-ACIWRZS2.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-G6FE2MXY.js.map → DifferentialAnalysis-23WQKT6I.js.map} +0 -0
- /package/dist/{Disco-B3KGNEAW.js.map → Disco-5UBCTVTY.js.map} +0 -0
- /package/dist/{Disco.UI-UNPUBQCN.js.map → Disco.UI-6YCIW3QK.js.map} +0 -0
- /package/dist/{GB-SXACUA4V.js.map → GB-QZZG4DHJ.js.map} +0 -0
- /package/dist/{GSEA-EHMBA3TF.js.map → GSEA-3WW4GEXE.js.map} +0 -0
- /package/dist/{GeneExpInput-NDXISF2U.js.map → GeneExpInput-PW6HP5LO.js.map} +0 -0
- /package/dist/{Geomap-3CNT227W.js.map → Geomap-YDUXJ65P.js.map} +0 -0
- /package/dist/{HicApp-VQBUB6EZ.js.map → HicApp-CXHLK5UM.js.map} +0 -0
- /package/dist/{IDCViewer-DTOE7KDX.js.map → IDCViewer-ID46XKWW.js.map} +0 -0
- /package/dist/{NumBinaryEditor-IVZ4MMQT.js.map → NumBinaryEditor-7HEQD3UO.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-3BSQ6FM4.js.map → NumBinaryEditor.unit.spec-CE5FZMLZ.js.map} +0 -0
- /package/dist/{NumContEditor-CUZHU3IO.js.map → NumContEditor-7J4IODVT.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-SCQFD2Y7.js.map → NumContEditor.unit.spec-H3DEDHGO.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-UEEYZ4ZO.js.map → NumCustomBinEditor-URE4NOZI.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-GYS35OQV.js.map → NumCustomBinEditor.unit.spec-XE5AUM45.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-IT7NIXTV.js.map → NumDiscreteEditor-PBV2QXRU.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-LB6VLAWO.js.map → NumDiscreteEditor.unit.spec-2TWQ7DAZ.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-FF6UXZWN.js.map → NumRegularBinEditor-MG27BRWO.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-Z4S5LH2C.js.map → NumRegularBinEditor.unit.spec-6NJLP3BX.js.map} +0 -0
- /package/dist/{NumSplineEditor-IW5WEN3P.js.map → NumSplineEditor-ZZKMWU2V.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-PAEN3SAD.js.map → NumSplineEditor.unit.spec-T3C2YPU5.js.map} +0 -0
- /package/dist/{NumericDensity-CPJIQLYT.js.map → NumericDensity-BUEAEQZD.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-4KHECHVU.js.map → NumericDensity.unit.spec-XZ77VRO7.js.map} +0 -0
- /package/dist/{NumericHandler-SEFTQJDM.js.map → NumericHandler-RW2NAEBZ.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-UGDR3476.js.map → NumericHandler.unit.spec-BQGTQBV6.js.map} +0 -0
- /package/dist/{ProteomeInput-NYPUYVN5.js.map → ProteomeInput-RL6IDTOA.js.map} +0 -0
- /package/dist/{Regression-WDSISHYL.js.map → Regression-EVGHTLUT.js.map} +0 -0
- /package/dist/{RunChart2-2NPADXUR.js.map → RunChart2-NK2KWOZ7.js.map} +0 -0
- /package/dist/{Violin-POGGPCZY.js.map → Violin-2HIRC6A2.js.map} +0 -0
- /package/dist/{adSandbox-SUCX6DAQ.js.map → adSandbox-T2HORPLC.js.map} +0 -0
- /package/dist/{animatedBubbleChart-SDBWJELZ.js.map → animatedBubbleChart-PS7KMVSY.js.map} +0 -0
- /package/dist/{app-ATQM5PKI.js.map → app-FKPGNJDN.js.map} +0 -0
- /package/dist/{app-BCKEWJCY.js.map → app-NPGVS6X4.js.map} +0 -0
- /package/dist/{bam-QK2ZLZDI.js.map → bam-QQ54FE3A.js.map} +0 -0
- /package/dist/{barchart-RHDKI3NZ.js.map → barchart-4DLCN7NL.js.map} +0 -0
- /package/dist/{barchart2-CS3E6FOY.js.map → barchart2-H65GFNNQ.js.map} +0 -0
- /package/dist/{block-RQ3HTJVP.js.map → block-RAYA73ZN.js.map} +0 -0
- /package/dist/{block.init-T33F47DO.js.map → block.init-VE3TQWH4.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-LQD6MN6Z.js.map → block.mds.expressionrank-YLFQQHZJ.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-N5XHHVR7.js.map → block.mds.geneboxplot-6V44H7EC.js.map} +0 -0
- /package/dist/{block.mds.junction-JD4WQUSH.js.map → block.mds.junction-DEIUZOQK.js.map} +0 -0
- /package/dist/{block.mds.svcnv-LCTYWXL2.js.map → block.mds.svcnv-PTP7JYS2.js.map} +0 -0
- /package/dist/{block.svg-2F3RGTI3.js.map → block.svg-RGDXDKV6.js.map} +0 -0
- /package/dist/{block.tk.aicheck-BOF6WZ5E.js.map → block.tk.aicheck-MFXHYAIN.js.map} +0 -0
- /package/dist/{block.tk.bam-5GBYEQBM.js.map → block.tk.bam-ICTVSRQ6.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-LVQEP4RS.js.map → block.tk.bedgraphdot-X5AYHRUJ.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-HHBO4JAC.js.map → block.tk.bigwig.ui-FS3DA5JQ.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-JBO4UEOA.js.map → block.tk.hicstraw-MBBA3H4E.js.map} +0 -0
- /package/dist/{block.tk.junction-S5S2N7FK.js.map → block.tk.junction-L3YVWWOR.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-DNQL7WB5.js.map → block.tk.junction.textmatrixui-PU3C7W6B.js.map} +0 -0
- /package/dist/{block.tk.ld-JHQNR67E.js.map → block.tk.ld-SNKUZDPW.js.map} +0 -0
- /package/dist/{block.tk.menu-7JBJOY2O.js.map → block.tk.menu-NARHQW7Y.js.map} +0 -0
- /package/dist/{block.tk.pgv-FQPREV6P.js.map → block.tk.pgv-NVNFNJZ6.js.map} +0 -0
- /package/dist/{brainImaging-HEWGZZNY.js.map → brainImaging-KHFLAPHC.js.map} +0 -0
- /package/dist/{brainRegions-QUGB7YUW.js.map → brainRegions-MQL2KZOQ.js.map} +0 -0
- /package/dist/{bubbleHeatmap-OZRONGAX.js.map → bubbleHeatmap-U3GAF5AV.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-N7NDE325.js.map → cellTypeBubbleHeatmap-5ENEMDCZ.js.map} +0 -0
- /package/dist/{chunk-3SPEW6R6.js.map → chunk-25Q4AX4L.js.map} +0 -0
- /package/dist/{chunk-VPMQDTYR.js.map → chunk-2WWCHIXZ.js.map} +0 -0
- /package/dist/{chunk-NYO7YANQ.js.map → chunk-3AO7OZLF.js.map} +0 -0
- /package/dist/{chunk-NULQJF73.js.map → chunk-3DZJ64RQ.js.map} +0 -0
- /package/dist/{chunk-F23EQSGU.js.map → chunk-3QZHRQ55.js.map} +0 -0
- /package/dist/{chunk-QLUTQPZE.js.map → chunk-3ZM5PZXA.js.map} +0 -0
- /package/dist/{chunk-6Q5SOSSU.js.map → chunk-43FVCJXV.js.map} +0 -0
- /package/dist/{chunk-C2TII2FF.js.map → chunk-43WVK5KI.js.map} +0 -0
- /package/dist/{chunk-RZ2THVK4.js.map → chunk-4ZOKEHK4.js.map} +0 -0
- /package/dist/{chunk-BU6PAOGA.js.map → chunk-5M4U6S3E.js.map} +0 -0
- /package/dist/{chunk-X77QVINS.js.map → chunk-5O4GAKJT.js.map} +0 -0
- /package/dist/{chunk-HJARHSDC.js.map → chunk-5Q6TANNH.js.map} +0 -0
- /package/dist/{chunk-PETYR7LC.js.map → chunk-5WBIVXMG.js.map} +0 -0
- /package/dist/{chunk-QYCPIVCX.js.map → chunk-65FN7LIA.js.map} +0 -0
- /package/dist/{chunk-DFZWE3TR.js.map → chunk-7HTMIFVR.js.map} +0 -0
- /package/dist/{chunk-GSVB4XNS.js.map → chunk-AOKINHUU.js.map} +0 -0
- /package/dist/{chunk-AJXP4AV7.js.map → chunk-APXULA6M.js.map} +0 -0
- /package/dist/{chunk-6D4HOTG7.js.map → chunk-C7O67FZJ.js.map} +0 -0
- /package/dist/{chunk-NHMIMTJA.js.map → chunk-CCNV3WJO.js.map} +0 -0
- /package/dist/{chunk-AV2IH5K2.js.map → chunk-DAKRDL76.js.map} +0 -0
- /package/dist/{chunk-7X347XMF.js.map → chunk-EGQVMN6S.js.map} +0 -0
- /package/dist/{chunk-WU3YXPRE.js.map → chunk-ERCLZ433.js.map} +0 -0
- /package/dist/{chunk-S4IZ4VM7.js.map → chunk-ESLXHJ7W.js.map} +0 -0
- /package/dist/{chunk-AMW5LCUB.js.map → chunk-ET2KFCXK.js.map} +0 -0
- /package/dist/{chunk-B3WLXXGY.js.map → chunk-EYIZTX33.js.map} +0 -0
- /package/dist/{chunk-AIC43DTG.js.map → chunk-F2PHTKCI.js.map} +0 -0
- /package/dist/{chunk-TEFWF3SK.js.map → chunk-FJXUMOVQ.js.map} +0 -0
- /package/dist/{chunk-H2FELGYK.js.map → chunk-HJCI33L4.js.map} +0 -0
- /package/dist/{chunk-J5KCTRJC.js.map → chunk-HKXBGMUT.js.map} +0 -0
- /package/dist/{chunk-QNQ2ZYT7.js.map → chunk-HNMKK33Y.js.map} +0 -0
- /package/dist/{chunk-X2HWRISK.js.map → chunk-IKZAWD7P.js.map} +0 -0
- /package/dist/{chunk-KGX2OIR4.js.map → chunk-ILPJAASI.js.map} +0 -0
- /package/dist/{chunk-LSQ5AQ6Q.js.map → chunk-JFZECJY2.js.map} +0 -0
- /package/dist/{chunk-PLFPXOGX.js.map → chunk-K6CZAEBF.js.map} +0 -0
- /package/dist/{chunk-BZV2BJDU.js.map → chunk-KXDK6ZOJ.js.map} +0 -0
- /package/dist/{chunk-V4ZKHM6D.js.map → chunk-L7LRBRUN.js.map} +0 -0
- /package/dist/{chunk-SUT75MRI.js.map → chunk-LO624OGK.js.map} +0 -0
- /package/dist/{chunk-CTFHEDG2.js.map → chunk-LPDQ26OP.js.map} +0 -0
- /package/dist/{chunk-MU4Z2MX2.js.map → chunk-M2XWAAIZ.js.map} +0 -0
- /package/dist/{chunk-E7XHA4YL.js.map → chunk-M37J6Z5U.js.map} +0 -0
- /package/dist/{chunk-F5FFI7Z7.js.map → chunk-M5SJ42E2.js.map} +0 -0
- /package/dist/{chunk-FVZTRWAO.js.map → chunk-MJREV2KW.js.map} +0 -0
- /package/dist/{chunk-LQKMDIRB.js.map → chunk-MRR5GPPP.js.map} +0 -0
- /package/dist/{chunk-SYLYLOHK.js.map → chunk-NSCNNQOY.js.map} +0 -0
- /package/dist/{chunk-EDFBRXX2.js.map → chunk-OAQLBII5.js.map} +0 -0
- /package/dist/{chunk-OBNHXAYG.js.map → chunk-OKHU7EJW.js.map} +0 -0
- /package/dist/{chunk-V7DNHPZD.js.map → chunk-OXVB4OZC.js.map} +0 -0
- /package/dist/{chunk-SFUDTUXF.js.map → chunk-PDZED3RR.js.map} +0 -0
- /package/dist/{chunk-HWNQOADC.js.map → chunk-PITPUAWX.js.map} +0 -0
- /package/dist/{chunk-JMFVXWDX.js.map → chunk-PVXG2BRT.js.map} +0 -0
- /package/dist/{chunk-FK5NL2DF.js.map → chunk-PX6MHRAN.js.map} +0 -0
- /package/dist/{chunk-7JHIUS54.js.map → chunk-REIPTX7J.js.map} +0 -0
- /package/dist/{chunk-ABLG7GUS.js.map → chunk-RFE2VG6T.js.map} +0 -0
- /package/dist/{chunk-GVAV4VRI.js.map → chunk-RPFQOIYX.js.map} +0 -0
- /package/dist/{chunk-HFKZGMVV.js.map → chunk-S2NAGL4V.js.map} +0 -0
- /package/dist/{chunk-GDHQVEIO.js.map → chunk-T24YYODE.js.map} +0 -0
- /package/dist/{chunk-5G6O5RYM.js.map → chunk-TDP4PX2S.js.map} +0 -0
- /package/dist/{chunk-65DO5IKM.js.map → chunk-TUPJEZSL.js.map} +0 -0
- /package/dist/{chunk-F2EEQ7KG.js.map → chunk-UNXVW5OT.js.map} +0 -0
- /package/dist/{chunk-VV6JIG4D.js.map → chunk-UOWUMUAX.js.map} +0 -0
- /package/dist/{chunk-CZK4EV3Y.js.map → chunk-V6EIPPMT.js.map} +0 -0
- /package/dist/{chunk-AFEFZ74T.js.map → chunk-VGUO2BQ7.js.map} +0 -0
- /package/dist/{chunk-CXEECHP5.js.map → chunk-VKWZPC73.js.map} +0 -0
- /package/dist/{chunk-PQVHRM4L.js.map → chunk-VQ5PDCAJ.js.map} +0 -0
- /package/dist/{chunk-HXRG7XYB.js.map → chunk-VQK3UKNA.js.map} +0 -0
- /package/dist/{chunk-XXFLJWTQ.js.map → chunk-WB5MHFHB.js.map} +0 -0
- /package/dist/{chunk-BG6GAROI.js.map → chunk-WK6CPMXR.js.map} +0 -0
- /package/dist/{chunk-DX23HAW7.js.map → chunk-WRYNE3Q4.js.map} +0 -0
- /package/dist/{chunk-2FWSNJEN.js.map → chunk-XA6LI63Y.js.map} +0 -0
- /package/dist/{chunk-TPSVPMAN.js.map → chunk-Y7Y6X6E5.js.map} +0 -0
- /package/dist/{chunk-L2NPLA43.js.map → chunk-YG57X4VD.js.map} +0 -0
- /package/dist/{chunk-2JIKMCJR.js.map → chunk-YPOIMSJR.js.map} +0 -0
- /package/dist/{chunk-MFR4WWDM.js.map → chunk-ZRLON6PP.js.map} +0 -0
- /package/dist/{chunk-L2WOLNZK.js.map → chunk-ZSNZPH6G.js.map} +0 -0
- /package/dist/{cohort-ATIZW34H.js.map → cohort-TPMJZ4OH.js.map} +0 -0
- /package/dist/{condition-SGJIDZNB.js.map → condition-QROUALBG.js.map} +0 -0
- /package/dist/{controls-JQCMGPXP.js.map → controls-GH37YWOP.js.map} +0 -0
- /package/dist/{controls.config-WQHVQAIJ.js.map → controls.config-ZYCDICYF.js.map} +0 -0
- /package/dist/{correlation-S3MN3L5Q.js.map → correlation-JESMUFS6.js.map} +0 -0
- /package/dist/{customdata.inputui-LGTGMJBZ.js.map → customdata.inputui-T2DLAZYJ.js.map} +0 -0
- /package/dist/{dataDownload-FAWN2WKE.js.map → dataDownload-Z7A6ZEH7.js.map} +0 -0
- /package/dist/{databrowser.ui-KF3LWQXG.js.map → databrowser.ui-ZVMGFYJ2.js.map} +0 -0
- /package/dist/{dictionary-EVLEOT72.js.map → dictionary-KXFUR3NL.js.map} +0 -0
- /package/dist/{dnaMethylation-J3SPEM4S.js.map → dnaMethylation-2YU2HDD4.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-CTA53YCT.js.map → dnaMethylation.integration.spec-75Y5RSDO.js.map} +0 -0
- /package/dist/{dofetch-3C3MI5NR.js.map → dofetch-G5ULIRMG.js.map} +0 -0
- /package/dist/{e2pca-PTWPY5WP.js.map → e2pca-75VDPO7P.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-S5FE4MMD.js.map → expclust.gdc.spec-PB66FFWD.js.map} +0 -0
- /package/dist/{facet-FSOIZJCA.js.map → facet-2RY37EFR.js.map} +0 -0
- /package/dist/{gb-YDEOK7NW.js.map → gb-WQQFYFGF.js.map} +0 -0
- /package/dist/{geneExpClustering-37JKKFW3.js.map → geneExpClustering-ARVZDF6G.js.map} +0 -0
- /package/dist/{geneExpression-VQPRFNKE.js.map → geneExpression-FR33PKJW.js.map} +0 -0
- /package/dist/{geneExpression-G6ODP3VY.js.map → geneExpression-O7DR5SMR.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-ZHXCUG6Q.js.map → geneExpression.unit.spec-HGNDSTAI.js.map} +0 -0
- /package/dist/{geneORA-E3PSS3CI.js.map → geneORA-RXXQT44V.js.map} +0 -0
- /package/dist/{geneRanking-MK3YYINC.js.map → geneRanking-WDQZ7TI3.js.map} +0 -0
- /package/dist/{geneVariant-LEMAVFOY.js.map → geneVariant-6JYBWFEJ.js.map} +0 -0
- /package/dist/{geneVariant-NNSB7JLS.js.map → geneVariant-TKRG5VQN.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-6CC5UAOP.js.map → geneVariant.integration.spec-L2Q2DY67.js.map} +0 -0
- /package/dist/{genefusion.ui-5NCQIQPN.js.map → genefusion.ui-DBLMBU2D.js.map} +0 -0
- /package/dist/{geneset-ZX4V3CFB.js.map → geneset-2ZQF7FET.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-J7ISXY6H.js.map → genomeBrowser.spec-E5RJD53Z.js.map} +0 -0
- /package/dist/{grin2-LBGBBB4L.js.map → grin2-MJ4SYAFO.js.map} +0 -0
- /package/dist/{grin2-GN3DQNON.js.map → grin2-VXRMV7VA.js.map} +0 -0
- /package/dist/{hierCluster-5JURTKAZ.js.map → hierCluster-44FPBMNL.js.map} +0 -0
- /package/dist/{hierCluster-BJ5VBPXR.js.map → hierCluster-SU4BDK6I.js.map} +0 -0
- /package/dist/{hierCluster.config-4EERP4KK.js.map → hierCluster.config-4OZ65GKH.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-VR4GULRV.js.map → hierCluster.integration.spec-CHNSKZD4.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-SMTQOKUY.js.map → hierCluster.interactivity-M72CEGCW.js.map} +0 -0
- /package/dist/{hierCluster.renderers-PAME7BWU.js.map → hierCluster.renderers-RM43G7ZR.js.map} +0 -0
- /package/dist/{imagePlot-4LMIKBVE.js.map → imagePlot-UYMWFNI4.js.map} +0 -0
- /package/dist/{importPlot-3CG6ASNH.js.map → importPlot-W3HPE4LZ.js.map} +0 -0
- /package/dist/{isoformExpression-VCDNKTZ6.js.map → isoformExpression-JEMJE5WY.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-ZXYY37TA.js.map → isoformExpression.unit.spec-GOK5LFME.js.map} +0 -0
- /package/dist/{jspdf.es.min-V7ONHJJV.js.map → jspdf.es.min-KB3HW45U.js.map} +0 -0
- /package/dist/{junction-5DXJO4PS.js.map → junction-2X4AS47T.js.map} +0 -0
- /package/dist/{junction.customTerm-UOPUSEOE.js.map → junction.customTerm-MVSIUY66.js.map} +0 -0
- /package/dist/{junction.unit.spec-F35E3GJW.js.map → junction.unit.spec-HA74XQYV.js.map} +0 -0
- /package/dist/{launch.adhoc-V2HTCQGD.js.map → launch.adhoc-PZAJ6J2S.js.map} +0 -0
- /package/dist/{leftlabel.sample-V7O2EC36.js.map → leftlabel.sample-7BZKFB3I.js.map} +0 -0
- /package/dist/{lollipop-RNRZLG64.js.map → lollipop-URSFH4ZE.js.map} +0 -0
- /package/dist/{maf-W6SF6BJS.js.map → maf-CM3ETF4N.js.map} +0 -0
- /package/dist/{maftimeline-NABCAMHG.js.map → maftimeline-CRQEUTRY.js.map} +0 -0
- /package/dist/{matrix-JC6AJT2N.js.map → matrix-IBWB4A3Z.js.map} +0 -0
- /package/dist/{matrix-UCHESWVK.js.map → matrix-SOBGWBTY.js.map} +0 -0
- /package/dist/{matrix.cells-B4L42TBM.js.map → matrix.cells-GSKC6FXI.js.map} +0 -0
- /package/dist/{matrix.config-6US3AAH7.js.map → matrix.config-4KU5X3LQ.js.map} +0 -0
- /package/dist/{matrix.data-FYFXYDA3.js.map → matrix.data-XC2OTBTR.js.map} +0 -0
- /package/dist/{matrix.groups-Y7DEG3GS.js.map → matrix.groups-THXKRQSD.js.map} +0 -0
- /package/dist/{matrix.integration.spec-KXX7SFX5.js.map → matrix.integration.spec-GKHH4RSR.js.map} +0 -0
- /package/dist/{matrix.interactivity-NHWG4WCC.js.map → matrix.interactivity-ITXMM2ZP.js.map} +0 -0
- /package/dist/{matrix.layout-5DQNT7DD.js.map → matrix.layout-D6SRLAXS.js.map} +0 -0
- /package/dist/{matrix.legend-OY7IF6AS.js.map → matrix.legend-OWQAMHI2.js.map} +0 -0
- /package/dist/{matrix.renderers-GYOXGHPU.js.map → matrix.renderers-J66OAQUZ.js.map} +0 -0
- /package/dist/{matrix.serieses-657TLDAV.js.map → matrix.serieses-P5I4E2NB.js.map} +0 -0
- /package/dist/{matrix.sort-IMA2ES3T.js.map → matrix.sort-CXBXF75N.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-S6BAFYPR.js.map → matrix.sort.unit.spec-RSXBKXC5.js.map} +0 -0
- /package/dist/{matrix.sorterUi-77F36Q5H.js.map → matrix.sorterUi-WEZRKU63.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-V5NVQGD5.js.map → matrix.sorterUi.unit.spec-6EULDV43.js.map} +0 -0
- /package/dist/{matrix.unit.spec-R4NMTZYQ.js.map → matrix.unit.spec-D4ZLDVDT.js.map} +0 -0
- /package/dist/{mds.fimo-5DCH5BEM.js.map → mds.fimo-CQFREH3A.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-VIBCS5M6.js.map → mds.samplescatterplot-XLJITURG.js.map} +0 -0
- /package/dist/{mds.survivalplot-AZ7LJDZZ.js.map → mds.survivalplot-MLRD27QP.js.map} +0 -0
- /package/dist/{multivalue-4QKGYYW2.js.map → multivalue-KJQCYBHA.js.map} +0 -0
- /package/dist/{numericDictTermCluster-GLLG6IK2.js.map → numericDictTermCluster-ZOU6R4XP.js.map} +0 -0
- /package/dist/{oncomatrix-R32ZPMX7.js.map → oncomatrix-4RHDDJDC.js.map} +0 -0
- /package/dist/{oncomatrix.spec-BMK6LMBS.js.map → oncomatrix.spec-JA6DT4PP.js.map} +0 -0
- /package/dist/{plot.2dvaf-46FT53MF.js.map → plot.2dvaf-VJWPWCOY.js.map} +0 -0
- /package/dist/{plot.app-7EE4YCV4.js.map → plot.app-JNEOGNVW.js.map} +0 -0
- /package/dist/{plot.barplot-FK4J2G7K.js.map → plot.barplot-YELRBXUB.js.map} +0 -0
- /package/dist/{plot.boxplot-ATY4LK3X.js.map → plot.boxplot-HNFOB3TV.js.map} +0 -0
- /package/dist/{plot.brainImaging-S7B547V4.js.map → plot.brainImaging-AZYEGF3U.js.map} +0 -0
- /package/dist/{plot.disco-K5MMC2GD.js.map → plot.disco-L6PGGZJI.js.map} +0 -0
- /package/dist/{plot.ssgq-B3OVMZFD.js.map → plot.ssgq-UM64SSXW.js.map} +0 -0
- /package/dist/{plot.vaf2cov-RBHDQULW.js.map → plot.vaf2cov-DKUKJRUP.js.map} +0 -0
- /package/dist/{polar2-GECELCTG.js.map → polar2-4YHPENAV.js.map} +0 -0
- /package/dist/{profileForms-2USYOA34.js.map → profileForms-KMECFO3K.js.map} +0 -0
- /package/dist/{profilePlot-YGD2CF6P.js.map → profilePlot-3AXSIXCK.js.map} +0 -0
- /package/dist/{proteinView-FCPWJLGU.js.map → proteinView-QWHOTL35.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-TYYUF5A5.js.map → proteomeCohortCompare-DL2QLFL3.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-UVVRP6NR.js.map → pseudbulk.unit.spec-IWR7EZ7O.js.map} +0 -0
- /package/dist/{pseudobulk-ZIN5VJGB.js.map → pseudobulk-IC525IZ2.js.map} +0 -0
- /package/dist/{qualitative-27BZGASV.js.map → qualitative-LK2QEYHU.js.map} +0 -0
- /package/dist/{qualitative-N4F6NITI.js.map → qualitative-YY4NQGO5.js.map} +0 -0
- /package/dist/{radar2-X465RPJX.js.map → radar2-TJUPENQF.js.map} +0 -0
- /package/dist/{radarFacility2-AE7BA62N.js.map → radarFacility2-Q7LBWLCV.js.map} +0 -0
- /package/dist/{rememberedGvQ.unit.spec-4PDIU5RY.js.map → rememberedGvQ.unit.spec-2GBLM5AO.js.map} +0 -0
- /package/dist/{render-TD2QWOHT.js.map → render-AHR6SCQX.js.map} +0 -0
- /package/dist/{report-3Y2OWDF7.js.map → report-BPHJTRTO.js.map} +0 -0
- /package/dist/{sampleView-BUMMYRHJ.js.map → sampleView-CS2FB3K3.js.map} +0 -0
- /package/dist/{samplelst-BWK53BLI.js.map → samplelst-A3DHKP6U.js.map} +0 -0
- /package/dist/{samplematrix-RQU43UYR.js.map → samplematrix-5X7MFT3G.js.map} +0 -0
- /package/dist/{sc-LCBFWCZZ.js.map → sc-RCYXZMN6.js.map} +0 -0
- /package/dist/{scatter-6S5I7OW3.js.map → scatter-2ITGMX5N.js.map} +0 -0
- /package/dist/{scatter-MJELX75N.js.map → scatter-OAL4YOCA.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-WAVXHXR5.js.map → selectGenomeWithTklst-PB5KDW2N.js.map} +0 -0
- /package/dist/{singleCellCellType-WMCAJ7JF.js.map → singleCellCellType-FEFNOHOP.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-4Z46ZT5Q.js.map → singleCellCellType.unit.spec-V2I32V23.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-7Q5ZJT4R.js.map → singleCellGeneExpression-RUQQMKDE.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-6C7PDGRH.js.map → singleCellGeneExpression.unit.spec-VCMJRMT7.js.map} +0 -0
- /package/dist/{singleCellNumericValue-QGYITZRC.js.map → singleCellNumericValue-JLXZQWNT.js.map} +0 -0
- /package/dist/{singleCellNumericValue.unit.spec-MQUKPEZJ.js.map → singleCellNumericValue.unit.spec-XVCZEN5K.js.map} +0 -0
- /package/dist/{singleCellPlot-JJMFJ2KQ.js.map → singleCellPlot-4EBYWOJ2.js.map} +0 -0
- /package/dist/{singlecell-J23S3JR2.js.map → singlecell-UKZJAYVH.js.map} +0 -0
- /package/dist/{singlecell-Y4OGUWEC.js.map → singlecell-VNRWPXGV.js.map} +0 -0
- /package/dist/{snp-IO6TKWGD.js.map → snp-2RJDJQZC.js.map} +0 -0
- /package/dist/{snp.unit.spec-X7ILEEPO.js.map → snp.unit.spec-Z4DNBFAH.js.map} +0 -0
- /package/dist/{snplocus-Z2NGIKMO.js.map → snplocus-OZLIZ7R7.js.map} +0 -0
- /package/dist/{snplst-XCS2FCQV.js.map → snplst-EVRJ4OCL.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-F3S4BRVG.js.map → spliceevent.a53ss.diagram-N5UXX4OX.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-AXCDJKH4.js.map → spliceevent.exonskip.diagram-WBNFLW4V.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-UK3X667E.js.map → spliceevent.noeventdiagram-EI72A6L3.js.map} +0 -0
- /package/dist/{ssGSEA-ZRPNQKJ5.js.map → ssGSEA-NONMMNF7.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-DG5ZHLC7.js.map → ssGSEA.unit.spec-7JDPNLZA.js.map} +0 -0
- /package/dist/{stattable-XYSC3CYU.js.map → stattable-NNUHKPF4.js.map} +0 -0
- /package/dist/{studyCatalog-Y75LMI62.js.map → studyCatalog-KMLE7Q55.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-H2NP7VLU.js.map → summarizeCnvGeneexp-AHCGPQLE.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-HTCD3VQQ.js.map → summarizeGeneexpSurvival-NCST7HDQ.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-UEGXWK2P.js.map → summarizeMutationCnv-VUTQYXO6.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-MJGWP7IT.js.map → summarizeMutationDiagnosis-TFU2HUHQ.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-55JW5LA6.js.map → summarizeMutationSurvival-F4CJILS3.js.map} +0 -0
- /package/dist/{summary-HJO23RGB.js.map → summary-QQZW7BEE.js.map} +0 -0
- /package/dist/{summary.integration.spec-OWI2C2N5.js.map → summary.integration.spec-FILIPD3W.js.map} +0 -0
- /package/dist/{summaryInput-RL2JXRDE.js.map → summaryInput-RMY226Y3.js.map} +0 -0
- /package/dist/{sunburst-JFY6V5E2.js.map → sunburst-Y4LNCKMR.js.map} +0 -0
- /package/dist/{survival-PBBU6PA5.js.map → survival-4FYQHQHX.js.map} +0 -0
- /package/dist/{survival-6FLR4YCJ.js.map → survival-6GC267GY.js.map} +0 -0
- /package/dist/{survival.integration.spec-WAKTGYGP.js.map → survival.integration.spec-5ERXR6MG.js.map} +0 -0
- /package/dist/{svg2pdf.es.min-NIFE2BIE.js.map → svg2pdf.es.min-KKHWPFWG.js.map} +0 -0
- /package/dist/{svgraph-WD3DUZV7.js.map → svgraph-XIQIA7OJ.js.map} +0 -0
- /package/dist/{swimmer-VPKSBV6V.js.map → swimmer-643B5Q6F.js.map} +0 -0
- /package/dist/{table-GX3VJLPZ.js.map → table-JQIBRXTJ.js.map} +0 -0
- /package/dist/{termCollection-YQ332WKB.js.map → termCollection-LU5NW6KT.js.map} +0 -0
- /package/dist/{termCollection-QE7U5QBD.js.map → termCollection-XZCPBXRV.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-ELLN7VRA.js.map → termCollection.unit.spec-H5LBV3N4.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-V3RP5KAT.js.map → termCollectionFractionSelection-3YHOFXEL.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-JR7Q7TJI.js.map → termCollectionFractionSelection.unit.spec-G5X3Y5YI.js.map} +0 -0
- /package/dist/{tk-J5VPFEX6.js.map → tk-NPWNBXLB.js.map} +0 -0
- /package/dist/{tk-GD2KJM5W.js.map → tk-YSW5NPW2.js.map} +0 -0
- /package/dist/{tvs.categorical-RPACB4VU.js.map → tvs.categorical-TUX6KRZI.js.map} +0 -0
- /package/dist/{tvs.condition-O6JBUM6D.js.map → tvs.condition-2CH25PLO.js.map} +0 -0
- /package/dist/{tvs.dt-5EVBSRX3.js.map → tvs.dt-YKP3F75O.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-Y5YHBZNC.js.map → tvs.dtcnv.categorical-QBJWJNHZ.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-WP322QUP.js.map → tvs.dtcnv.continuous-MV25OLBD.js.map} +0 -0
- /package/dist/{tvs.dtfusion-CCMUFDMQ.js.map → tvs.dtfusion-SJ64HNKE.js.map} +0 -0
- /package/dist/{tvs.dtitd-P3ED3MWA.js.map → tvs.dtitd-WQLHZK2P.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-X2MXPLC6.js.map → tvs.dtsnvindel-WMFJ7W7U.js.map} +0 -0
- /package/dist/{tvs.dtsv-4FOWFNVV.js.map → tvs.dtsv-GKEC5OGA.js.map} +0 -0
- /package/dist/{tvs.multivalue-IRF467ZK.js.map → tvs.multivalue-LFWMQETN.js.map} +0 -0
- /package/dist/{tvs.numeric-C7FDCGCS.js.map → tvs.numeric-63NVZG7U.js.map} +0 -0
- /package/dist/{tvs.samplelst-CBU6ATI5.js.map → tvs.samplelst-DEMMYRKK.js.map} +0 -0
- /package/dist/{tvs.survival-3K5ASAXV.js.map → tvs.survival-M4QUVP5L.js.map} +0 -0
- /package/dist/{tvs.termCollection-MXEWO6KJ.js.map → tvs.termCollection-J367GZY3.js.map} +0 -0
- /package/dist/{vocabulary-GQBHDP3K.js.map → vocabulary-RAVWS5IS.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/block.ds.itemtable.js", "../src/block.ds.vcf.js", "../src/block.ds.sun1.js", "../src/block.sunburst.js", "../src/block.ds.numericmode.js", "../src/block.ds.js", "../src/block.legend.js"],
|
|
4
|
-
"sourcesContent": ["import * as client from './client'\nimport * as common from '#shared/common.js'\nimport * as vcf from '#shared/vcf.js'\nimport { stratify } from 'd3-hierarchy'\n\n/*\n\n********************** EXPORTED\n\nitemtable()\nruntimeattr_snvindel()\nruntimeattr_sv()\nruntimeattr_itd()\nruntimeattr_del()\nruntimeattr_trunc()\n\nquery_vcfcohorttrack()\n\n\n********************** INTERNAL\n\ntable_snvindel\ntable_sv\ntable_itd\ntable_truncation\ntable_del\ntable_sort\n\nvcfmdetail\nmayshowcovmafplot\nmayshowgermline2dvaf\nmayshowgenotype2boxplot\n\nvcfvepbutton\nvcfannbutton\n\nmay_info2singletable\nmay_info2table\ninfo2table_value\n*/\n\nconst separatorvp = '__'\n\nexport function itemtable(arg) {\n\t/*\n\t.mlst\n\t.block\n\t.tk\n\t.pane\n\t.holder\n\t*/\n\n\tconst { mlst, tk, block } = arg\n\tif (!mlst || mlst.length == 0) return\n\tlet holder\n\tif (arg.pane) {\n\t\tconst pane = client.newpane({ x: arg.x, y: arg.y })\n\t\tpane.header.html(mlst2headerhtml(mlst))\n\t\tholder = pane.body\n\t} else {\n\t\tholder = arg.holder\n\t}\n\tif (!holder) {\n\t\tconsole.error('no holder provided for showing table')\n\t\treturn\n\t}\n\n\t/*\n\tmlst can be a mixture of dt\n\tshow separate table for each datatype\n\tfollowing incrementally adds components to the mlst panel\n\t*/\n\tconst dt2mlst = new Map()\n\tfor (const m of mlst) {\n\t\tif (!dt2mlst.has(m.dt)) {\n\t\t\tdt2mlst.set(m.dt, [])\n\t\t}\n\t\tdt2mlst.get(m.dt).push(m)\n\t}\n\n\t/**** a very quick fix!\n\tin any type of variant, only set this when mlst is just one variant with occurrence=1\n\tso that variant2samples can append rows to it (not in use)\n\t*/\n\tdelete tk.__singlevariant_table\n\n\tfor (const [dt, lst] of dt2mlst) {\n\t\tconst div = holder.append('div').style('margin', '10px')\n\t\tif (dt2mlst.size > 1) {\n\t\t\tdiv.append('p').text(common.dt2label[dt]).style('color', '#858585')\n\t\t}\n\t\tswitch (dt) {\n\t\t\tcase common.dtsnvindel:\n\t\t\t\ttable_snvindel(lst, div, tk, block)\n\t\t\t\tbreak\n\t\t\tcase common.dtsv:\n\t\t\tcase common.dtfusionrna:\n\t\t\t\ttable_sv(lst, div, tk, block)\n\t\t\t\tbreak\n\t\t\tcase common.dtitd:\n\t\t\t\ttable_itd(lst, div, tk, block.genome)\n\t\t\t\tbreak\n\t\t\tcase common.dtnloss:\n\t\t\tcase common.dtcloss:\n\t\t\t\ttable_truncation(lst, div, tk, block.genome)\n\t\t\t\tbreak\n\t\t\tcase common.dtdel:\n\t\t\t\ttable_del(lst, div, tk, block.genome)\n\t\t\t\tbreak\n\t\t\tcase common.dtcnv:\n\t\t\t\tdiv.append('p').text('cnv not supported yet')\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tdiv.append('p').text('unknown dt: ' + dt)\n\t\t}\n\t}\n\n\thandle_samplecart(mlst, holder, tk, block)\n}\n\nfunction mlst2headerhtml(mlst) {\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tconst c = common.mclass[m.class]\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\treturn (\n\t\t\t\t'<span style=\"font-weight:bold;color:' +\n\t\t\t\tc.color +\n\t\t\t\t'\">' +\n\t\t\t\t(m.mname ? m.mname : m.pos ? m.chr + ':' + (m.pos + 1) : '') +\n\t\t\t\t'</span> <span style=\"font-size:80%\">' +\n\t\t\t\tc.label +\n\t\t\t\t'</span>'\n\t\t\t)\n\t\t}\n\t\tif (m.dt == common.dtsv || m.dt == common.dtfusionrna) {\n\t\t\tconst names = []\n\t\t\tfor (let i = 0; i < m.pairlst.length; i++) {\n\t\t\t\tif (i == 0) names.push(m.pairlst[i].a.name ? m.pairlst[i].a.name : m.pairlst[i].a.chr)\n\t\t\t\tnames.push(m.pairlst[i].b.name ? m.pairlst[i].b.name : m.pairlst[i].b.chr)\n\t\t\t}\n\t\t\treturn names.join(' - ') + ' <span style=\"font-size:80%\">' + c.label + '</span>'\n\t\t}\n\t\tif (\n\t\t\tm.dt == common.dtnloss ||\n\t\t\tm.dt == common.dtcloss ||\n\t\t\tm.dt == common.dtitd ||\n\t\t\tm.dt == common.dtdel ||\n\t\t\tm.dt == common.dtcnv\n\t\t) {\n\t\t\treturn '<span style=\"font-size:80%\">' + c.label + '</span>'\n\t\t}\n\t\treturn 'unknown dt ' + m.dt\n\t}\n\tconst set = new Set()\n\tfor (const m of mlst) {\n\t\tset.add(m.dt)\n\t}\n\tif (set.size == 1) {\n\t\tconst dt = [...set][0]\n\t\treturn mlst.length + ' ' + common.dt2label[dt]\n\t}\n\treturn mlst.length + ' mutations'\n}\n\nfunction table_snvindel(mlst, holder, tk, block) {\n\tif (tk.ds && tk.ds.id2vcf) {\n\t\tif (mlst.length == 1) {\n\t\t\tconst vcfobj = tk.ds.id2vcf[mlst[0].vcfid]\n\t\t\tif (!vcfobj) {\n\t\t\t\tholder.append('p').text('No vcf config file (id: ' + mlst[0].vcfid + ')')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tvcfmdetail(mlst[0], vcfobj, holder, tk, block)\n\t\t\treturn\n\t\t}\n\t\t// vcf item is only shown one at a time, but not in a table\n\t\tfor (const m of mlst) {\n\t\t\tconst vcfobj = tk.ds.id2vcf[m.vcfid]\n\t\t\tif (!vcfobj) {\n\t\t\t\tholder.append('p').text('No vcf config file (id: ' + m.vcfid + ')')\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst d = holder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.on('click', event => {\n\t\t\t\t\tconst pane = client.newpane({ x: event.clientX + 100, y: Math.max(100, event.clientY - 100) })\n\t\t\t\t\tvcfmdetail(m, vcfobj, pane.body, tk, block)\n\t\t\t\t})\n\t\t\tif (m.mname) {\n\t\t\t\td.append('span').html(\n\t\t\t\t\tm.mname + '\\t<span style=\"font-size:80%;color:#858585\">' + common.mclass[m.class].label + '</span>'\n\t\t\t\t)\n\t\t\t} else if (m.csq) {\n\t\t\t\td.append('span').html(\n\t\t\t\t\tm.csq[0]._mname + '\\t<span style=\"font-size:80%;color:#858585\">' + m.csq[0].Consequence + '</span>'\n\t\t\t\t)\n\t\t\t}\n\t\t\td.append('span').html(\n\t\t\t\t' ' +\n\t\t\t\t\tm.chr +\n\t\t\t\t\t':' +\n\t\t\t\t\t(m.pos + 1) +\n\t\t\t\t\t' <span style=\"font-size:70%\">REF</span> ' +\n\t\t\t\t\tm.ref +\n\t\t\t\t\t' <span style=\"font-size:70%\">ALT</span> ' +\n\t\t\t\t\tm.alt\n\t\t\t)\n\t\t}\n\t\treturn\n\t}\n\tconst hasSNP = block.genome.hasSNP\n\tconst snpfind = {\n\t\tchr: null,\n\t\tbprange: [], // {start/stop}\n\t\tholder: null,\n\t\tsays: null\n\t}\n\tconst variantpage = {\n\t\tset: new Map(),\n\t\t// k: chr SEP pos SEP ref SEP mut\n\t\t// v: {mname, class}\n\t\tbutholder: null\n\t}\n\tfor (const m of mlst) {\n\t\tif (hasSNP && m.chr && m.pos) {\n\t\t\tsnpfind.chr = m.chr\n\t\t\tlet nf = true\n\t\t\tfor (const r of snpfind.bprange) {\n\t\t\t\tif (r.start <= m.pos && r.stop >= m.pos) {\n\t\t\t\t\tnf = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (nf) {\n\t\t\t\tsnpfind.bprange.push({ start: m.pos, stop: m.pos + 1 })\n\t\t\t}\n\t\t}\n\t}\n\tif (!tk.snvindelattr) {\n\t\truntimeattr_snvindel(tk, mlst)\n\t}\n\n\tif (block.variantPageCall_snv) {\n\t\t// variant page button moved to panel top, per jinghui 1/25/2023\n\t\tvariantpage.butholder = holder.append('div').style('margin', '10px')\n\t}\n\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tsnpfind.alleleLst = [m.ref, m.alt]\n\t\tif (block.variantPageCall_snv) {\n\t\t\tif (m.chr != undefined && m.pos != undefined && m.ref != undefined && m.alt != undefined) {\n\t\t\t\tvariantpage.set.set(m.chr + separatorvp + m.pos + separatorvp + m.ref + separatorvp + m.alt, {\n\t\t\t\t\tmname: m.mname,\n\t\t\t\t\tclass: m.class\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tconst data = []\n\t\tfor (const atr of tk.snvindelattr) {\n\t\t\tif (atr.lst) {\n\t\t\t\tconst kvlst = []\n\t\t\t\tfor (const at of atr.lst) {\n\t\t\t\t\tif (at.ismaf) {\n\t\t\t\t\t\tconst v = at.get(m)\n\t\t\t\t\t\tkvlst.push({\n\t\t\t\t\t\t\tk: at.label,\n\t\t\t\t\t\t\tv: v\n\t\t\t\t\t\t\t\t? Number.isFinite(v.f)\n\t\t\t\t\t\t\t\t\t? '<span style=\"color:' +\n\t\t\t\t\t\t\t\t\t at.fill +\n\t\t\t\t\t\t\t\t\t '\">' +\n\t\t\t\t\t\t\t\t\t (v.f * 100).toFixed(0) +\n\t\t\t\t\t\t\t\t\t '% (' +\n\t\t\t\t\t\t\t\t\t v.v1 +\n\t\t\t\t\t\t\t\t\t '/' +\n\t\t\t\t\t\t\t\t\t v.v2 +\n\t\t\t\t\t\t\t\t\t ')</span>'\n\t\t\t\t\t\t\t\t\t: 'n/a'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkvlst.push({ k: at.label, v: at.get(m) })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (kvlst.length) {\n\t\t\t\t\tdata.push({ k: atr.label, kvlst: kvlst })\n\t\t\t\t}\n\t\t\t} else if (atr.ismaf) {\n\t\t\t\tconst v = atr.get(m)\n\t\t\t\tdata.push({\n\t\t\t\t\tk: atr.label,\n\t\t\t\t\tv: v\n\t\t\t\t\t\t? Number.isFinite(v.f)\n\t\t\t\t\t\t\t? '<span style=\"color:' +\n\t\t\t\t\t\t\t atr.fill +\n\t\t\t\t\t\t\t '\">' +\n\t\t\t\t\t\t\t (v.f * 100).toFixed(0) +\n\t\t\t\t\t\t\t '% (' +\n\t\t\t\t\t\t\t v.v1 +\n\t\t\t\t\t\t\t '/' +\n\t\t\t\t\t\t\t v.v2 +\n\t\t\t\t\t\t\t ')</span>'\n\t\t\t\t\t\t\t: 'n/a'\n\t\t\t\t\t\t: ''\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tlet v = atr.get(m)\n\t\t\t\tif (atr.hover) {\n\t\t\t\t\tconst hs = atr.hover(m)\n\t\t\t\t\tif (hs) {\n\t\t\t\t\t\tv += ' <span style=\"color:#aaa;font-size:80%\">' + hs + '</span>'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata.push({ k: atr.label, v: v })\n\t\t\t}\n\t\t}\n\t\tconst table = client.make_table_2col(holder, data)\n\t\tif (hasSNP) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').attr('colspan', 2).style('color', '#9e9e9e').text('dbSNP')\n\t\t\tsnpfind.says = tr.append('td').text('loading...')\n\t\t}\n\t\t// a row of possible buttons\n\t\t// - highlight samples in epaint\n\t\t// - legend\n\t\tconst buttonrow = holder.append('div').style('margin-top', '10px')\n\t\tif (tk.eplst) {\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, buttonrow, mlst)\n\t\t\t}\n\t\t}\n\t\tif (tk.ds && tk.ds.snvindel_legend) {\n\t\t\tbuttonrow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Legend')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (legenddiv.style('display') == 'none') {\n\t\t\t\t\t\tclient.appear(legenddiv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclient.disappear(legenddiv)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\tconst legenddiv = buttonrow\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('width', '400px')\n\t\t\t\t.html(tk.ds.snvindel_legend)\n\t\t}\n\t} else {\n\t\t// many m\n\t\tif (block.variantPageCall_snv) {\n\t\t\tfor (const m of mlst) {\n\t\t\t\tif (m.chr != undefined && m.pos != undefined && m.ref != undefined && m.alt != undefined) {\n\t\t\t\t\tvariantpage.set.set(m.chr + separatorvp + m.pos + separatorvp + m.ref + separatorvp + m.alt, {\n\t\t\t\t\t\tmname: m.mname,\n\t\t\t\t\t\tclass: m.class\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst table = holder\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '3px')\n\t\t\t.style('border-collapse', 'separate')\n\t\t\t.style('margin', '0px 7px 7px 0px')\n\t\t\t.style('font-size', '90%')\n\t\t\t.style('color', 'black')\n\t\t\t.style('background-color', 'white')\n\t\ttable_sort(mlst, table, tk.snvindelattr, tk)\n\t\t// button rows, bottom\n\t\tconst buttrow = holder.append('div').style('margin', '10px 5px')\n\t\t/*\n\t\tif (block.variantPageCall_snv) {\n\t\t\tvariantpage.butholder = buttrow.append('span')\n\t\t}\n\t\t*/\n\t\tlet h_col, h_snp, h_exp, h_leg\n\t\tbuttrow\n\t\t\t.append('button')\n\t\t\t.text('Table columns')\n\t\t\t.on('click', function () {\n\t\t\t\tif (h_col.style('display') == 'block') {\n\t\t\t\t\tthis.style.color = 'black'\n\t\t\t\t\tclient.disappear(h_col)\n\t\t\t\t} else {\n\t\t\t\t\tthis.style.color = 'red'\n\t\t\t\t\tclient.appear(h_col)\n\t\t\t\t}\n\t\t\t})\n\t\tif (hasSNP && snpfind.bprange.length) {\n\t\t\tsnpfind.button = buttrow\n\t\t\t\t.append('button')\n\t\t\t\t.text('loading...')\n\t\t\t\t.on('click', function () {\n\t\t\t\t\tif (h_snp.style('display') == 'block') {\n\t\t\t\t\t\tthis.style.color = 'black'\n\t\t\t\t\t\tclient.disappear(h_snp)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.style.color = 'red'\n\t\t\t\t\t\tclient.appear(h_snp)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\tif (tk.eplst) {\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, buttrow, mlst)\n\t\t\t}\n\t\t}\n\t\tif (tk.ds && tk.ds.snvindel_legend) {\n\t\t\tbuttrow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Legend')\n\t\t\t\t.on('click', function () {\n\t\t\t\t\tif (h_leg.style('display') == 'block') {\n\t\t\t\t\t\tthis.style.color = 'black'\n\t\t\t\t\t\tclient.disappear(h_leg)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.style.color = 'red'\n\t\t\t\t\t\tclient.appear(h_leg)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\th_col = holder.append('div').style('margin', '10px').style('display', 'none')\n\t\tfor (const at of tk.snvindelattr) {\n\t\t\tconst id = Math.random()\n\t\t\tconst check = h_col.append('input').attr('type', 'checkbox').attr('id', id)\n\t\t\tif (!at.hide) check.attr('checked', true)\n\t\t\tcheck.on('change', () => {\n\t\t\t\tat.hide = !check.node().checked\n\t\t\t\ttable_sort(mlst, table, tk.snvindelattr, tk)\n\t\t\t})\n\t\t\th_col.append('label').attr('for', id).text(at.label)\n\t\t\th_col.append('br')\n\t\t}\n\t\tif (hasSNP) {\n\t\t\th_snp = holder.append('div').style('margin', '10px').style('display', 'none')\n\t\t\tsnpfind.holder = h_snp\n\t\t\tsnpfind.says = h_snp\n\t\t}\n\t\tif (tk.ds && tk.ds.snvindel_legend) {\n\t\t\th_leg = holder.append('div').style('display', 'none').style('width', '300px').html(tk.ds.snvindel_legend)\n\t\t}\n\t}\n\n\tif (hasSNP && snpfind.bprange.length) {\n\t\tclient\n\t\t\t.may_findmatchingsnp(snpfind.chr, snpfind.bprange, block.genome, snpfind.alleleLst)\n\t\t\t.then(hits => {\n\t\t\t\tif (!hits || hits.length == 0) throw { message: 'no SNP' }\n\t\t\t\tsnpfind.says.text('')\n\t\t\t\tif (snpfind.button) {\n\t\t\t\t\tsnpfind.button.text(hits.length + ' SNP' + (hits.length > 1 ? 's' : ''))\n\t\t\t\t}\n\t\t\t\tfor (const item of hits) {\n\t\t\t\t\tconst d = snpfind.says.append('div')\n\t\t\t\t\tclient.snp_printhtml(item, d)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tsnpfind.says.text(err.message)\n\t\t\t\tif (snpfind.button) {\n\t\t\t\t\tsnpfind.button.attr('disabled', true)\n\t\t\t\t}\n\t\t\t\tif (err.stack) console.log(err.stack)\n\t\t\t})\n\t}\n\tif (block.variantPageCall_snv) {\n\t\t// call variant page button generator\n\t\tconst vlst = []\n\t\tfor (const [what, m] of variantpage.set) {\n\t\t\tconst l = what.split(separatorvp)\n\t\t\tvlst.push({\n\t\t\t\tchr: l[0],\n\t\t\t\tposition: Number.parseInt(l[1]) + 1,\n\t\t\t\trefallele: l[2],\n\t\t\t\taltallele: l[3],\n\t\t\t\tclass: m.class,\n\t\t\t\taachange: m.mname\n\t\t\t})\n\t\t}\n\t\tif (vlst.length == 1) {\n\t\t\t// only one variant, call to generate button\n\t\t\tconst variant = vlst[0]\n\t\t\tvariant.container = variantpage.butholder\n\t\t\tblock.variantPageCall_snv(variant)\n\t\t} else if (vlst.length > 1) {\n\t\t\t// 2 or more variants\n\t\t\tvariantpage.butholder\n\t\t\t\t.append('div')\n\t\t\t\t.classed('sja_variantpagesnv', true)\n\t\t\t\t.text('Variant Page')\n\t\t\t\t.on('click', event => {\n\t\t\t\t\tconst table = tk.tktip.clear().showunder(event.target).d.append('table')\n\t\t\t\t\tfor (const variant of vlst) {\n\t\t\t\t\t\tconst tr = table.append('tr')\n\t\t\t\t\t\t// aa change\n\t\t\t\t\t\ttr.append('td').text(variant.aachange)\n\t\t\t\t\t\t// class\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.text(common.mclass[variant.class].label)\n\t\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t\t.style('color', common.mclass[variant.class].color)\n\t\t\t\t\t\t// genomic change\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.text(variant.chr + ':' + variant.position + ' ' + variant.refallele + '>' + variant.altallele)\n\t\t\t\t\t\t\t.attr('font-size', '.7em')\n\t\t\t\t\t\t// vp button\n\t\t\t\t\t\tvariant.container = tr.append('td')\n\t\t\t\t\t\tblock.variantPageCall_snv(variant)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n}\n\nfunction table_sort(mlst, table, attrlst, tk, trclick) {\n\ttable.selectAll('*').remove()\n\tlet sortkey = null\n\tfor (const a1 of attrlst) {\n\t\tif (a1.lst) {\n\t\t\tfor (const a2 of a1.lst) {\n\t\t\t\tif (a2.sort) sortkey = a2\n\t\t\t}\n\t\t} else if (a1.sort) sortkey = a1\n\t}\n\tif (sortkey) {\n\t\tmlst.sort((x, y) => {\n\t\t\tconst a = sortkey.get(x)\n\t\t\tconst b = sortkey.get(y)\n\t\t\tif (sortkey.ismaf) {\n\t\t\t\tif (a == undefined) {\n\t\t\t\t\tif (b == undefined) return 0\n\t\t\t\t\treturn 1\n\t\t\t\t} else {\n\t\t\t\t\tif (b == undefined) return -1\n\t\t\t\t\treturn sortkey.descend ? b.f - a.f : a.f - b.f\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a == undefined || a === '') {\n\t\t\t\tif (b == undefined || b === '') return 0\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\tif (b == undefined || b === '') return -1\n\t\t\tif (typeof a == 'string') {\n\t\t\t\tif (a < b) return sortkey.descend ? 1 : -1\n\t\t\t\tif (a > b) return sortkey.descend ? -1 : 1\n\t\t\t}\n\t\t\tif (typeof a == 'number') return sortkey.descend ? b - a : a - b\n\t\t\treturn 0\n\t\t})\n\t}\n\t// header row 1\n\tconst headtr = table.append('tr')\n\t// header row 2\n\tconst headtr2 = table.append('tr')\n\t// column 1, numerator\n\theadtr.append('td').attr('rowspan', 2)\n\tfor (const atr of attrlst) {\n\t\tif (atr.hide) continue\n\t\tif (atr.lst) {\n\t\t\theadtr\n\t\t\t\t.append('td')\n\t\t\t\t.attr('colspan', atr.lst.length)\n\t\t\t\t.style('color', '#aaa')\n\t\t\t\t.style('border-bottom', 'solid 1px #ccc')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.html(atr.label)\n\t\t\tfor (const at of atr.lst) {\n\t\t\t\theadtr2\n\t\t\t\t\t.append('td')\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.html(at.label + (at.sort ? (at.descend ? ' ▼' : ' ▲') : ''))\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (at.sort) {\n\t\t\t\t\t\t\t// already sorting on this one\n\t\t\t\t\t\t\tat.descend = !at.descend\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const a1 of attrlst) {\n\t\t\t\t\t\t\tif (a1.lst) {\n\t\t\t\t\t\t\t\tfor (const a2 of a1.lst) a2.sort = false\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ta1.sort = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tat.sort = true\n\t\t\t\t\t\ttable_sort(mlst, table, attrlst, tk, trclick)\n\t\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\theadtr\n\t\t\t\t.append('td')\n\t\t\t\t.attr('rowspan', 2)\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.html(atr.label + (atr.sort ? (atr.descend ? ' ▼' : ' ▲') : ''))\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (atr.sort) {\n\t\t\t\t\t\t// already sorting on this one\n\t\t\t\t\t\tatr.descend = !atr.descend\n\t\t\t\t\t}\n\t\t\t\t\tfor (const a1 of attrlst) {\n\t\t\t\t\t\tif (a1.lst) {\n\t\t\t\t\t\t\tfor (const a2 of a1.lst) a2.sort = false\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ta1.sort = false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tatr.sort = true\n\t\t\t\t\ttable_sort(mlst, table, attrlst, tk, trclick)\n\t\t\t\t})\n\t\t}\n\t}\n\tconst showcount = mlst.length > 1000 ? 900 : mlst.length\n\tfor (let i = 0; i < showcount; i++) {\n\t\tconst s = mlst[i]\n\t\tconst tr = table.append('tr').attr('class', 'sja_tr')\n\t\tif (trclick) {\n\t\t\ttr.on('click', () => trclick(s))\n\t\t}\n\t\tif (tk.eplst) {\n\t\t\ttr.on('mouseover', (event, m) => {\n\t\t\t\tfor (const ep of tk.eplst) ep.may_hl([s], true)\n\t\t\t}).on('mouseout', (event, m) => {\n\t\t\t\tfor (const ep of tk.eplst) ep.may_hl([s], false)\n\t\t\t})\n\t\t}\n\t\ttr.append('td')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.text(i + 1)\n\t\tfor (const atr of attrlst) {\n\t\t\tif (atr.hide) continue\n\t\t\tif (atr.lst) {\n\t\t\t\tfor (const at of atr.lst) {\n\t\t\t\t\tconst td = tr.append('td')\n\t\t\t\t\tif (at.ismaf) {\n\t\t\t\t\t\t// scattered maf fields\n\t\t\t\t\t\tconst v = at.get(s)\n\t\t\t\t\t\tif (v && typeof v == 'object') {\n\t\t\t\t\t\t\t// FIXME ep.p.maf returns data for both snv and fusion, but !!!\n\t\t\t\t\t\t\tif (v.v2 == 0) {\n\t\t\t\t\t\t\t\ttd.text('0/0')\n\t\t\t\t\t\t\t\ttd.attr('aria-label', 'No coverage')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclient.fillbar(td, v, at)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttd.html(at.get(s))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst td = tr.append('td')\n\t\t\t\tif (atr.hover) {\n\t\t\t\t\tconst hs = atr.hover(s)\n\t\t\t\t\tif (hs != undefined) {\n\t\t\t\t\t\ttd.attr('aria-label', hs)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (atr.tablecellwidth) {\n\t\t\t\t\ttd.style('width', atr.tablecellwidth).style('word-break', 'break-all')\n\t\t\t\t}\n\t\t\t\tif (atr.ismaf) {\n\t\t\t\t\t// scattered maf fields\n\t\t\t\t\tconst v = atr.get(s)\n\t\t\t\t\tif (v) {\n\t\t\t\t\t\tif (v.v2 == 0) {\n\t\t\t\t\t\t\ttd.text('0/0')\n\t\t\t\t\t\t\ttd.attr('aria-label', 'No coverage')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclient.fillbar(td, v, atr)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttd.html(atr.get(s))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction tinylab(t) {\n\treturn '<span style=\"font-size:70%;color:#858585\">' + t + '</span>'\n}\n\nfunction vcfmdetail(m, vcfobj, holder, tk, block) {\n\t/*\n\tfor a single variant from vcf\n\tcan be from a single vcf, or multiple vcf\n\tthe variant can have .sampledata[]\n\tif \n\t*/\n\n\tif (!vcfobj) {\n\t\tholder.append('p').text('vcfobj config object missing')\n\t\treturn\n\t}\n\n\t// first row of buttons\n\n\tconst row1 = holder.append('div').style('margin-top', '10px')\n\trow1.append('span').text(m.type).style('padding-right', '10px')\n\trow1\n\t\t.append('span')\n\t\t.text(m.chr + ':' + (m.pos + 1))\n\t\t.style('padding-right', '10px')\n\n\tif (m.dt == common.dtsnvindel) {\n\t\t// alleles\n\t\trow1\n\t\t\t.append('span')\n\t\t\t.style('padding-right', '10px')\n\t\t\t.html(tinylab('REF') + ' ' + m.ref + ' ' + tinylab('ALT') + ' ' + m.alt)\n\t\tif (block.variantPageCall_snv) {\n\t\t\tconst variant = {\n\t\t\t\tchr: m.chr,\n\t\t\t\tposition: m.pos + 1,\n\t\t\t\trefallele: m.ref,\n\t\t\t\taltallele: m.alt,\n\t\t\t\tcontainer: row1.append('span').style('padding-left', '20px')\n\t\t\t}\n\t\t\tblock.variantPageCall_snv(variant)\n\t\t}\n\n\t\tif (tk.button4variant) {\n\t\t\tmake_button4variant(row1, m, tk.button4variant)\n\t\t}\n\t\tif (tk.url4variant) {\n\t\t\tmake_url4variant(row1, m, tk.url4variant)\n\t\t}\n\t}\n\n\tif (vcfobj.info && vcfobj.info.CSQ && vcfobj.info.CSQ.csqheader && m.csq) {\n\t\t// has VEP\n\t\tvcfvepbutton(m.csq, row1, tk, vcfobj.info.CSQ.csqheader)\n\t}\n\n\tif (vcfobj.info && vcfobj.info.ANN && vcfobj.info.ANN.annheader && m.ann) {\n\t\t// has ANN\n\t\tvcfannbutton(m.ann, row1, tk, vcfobj.info.ANN.annheader)\n\t}\n\n\tif (tk.variant2img) {\n\t\tvariant2imgbutton(m, row1, holder.append('div'), tk, block)\n\t}\n\n\t// if the variant has sample-level data\n\t// condition testingdoesn't make sense that .sampledata[] is there for all\n\n\tconst div = holder.append('div')\n\tif (mayshowgenotype2boxplot(m, tk, div)) {\n\t\t// boxplot shown\n\t\tdiv.style('margin-top', '10px')\n\t} else if (m.sampledata) {\n\t\tconst wait = div.append('div')\n\n\t\tPromise.resolve()\n\t\t\t.then(() => {\n\t\t\t\tif (m.sampledata.length == 0 && tk.ds.vcfcohorttrack) {\n\t\t\t\t\t// query cohort vcfobj file for sample info about this variant\n\t\t\t\t\twait.text('Loading ...')\n\n\t\t\t\t\treturn query_vcfcohorttrack(m, tk, block).then(m2 => {\n\t\t\t\t\t\tif (!m2) {\n\t\t\t\t\t\t\t// no hit\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm.sampledata = m2.sampledata\n\t\t\t\t\t\treturn\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\twait.remove()\n\t\t\t\tif (m.sampledata.length == 0) {\n\t\t\t\t\t// no sample\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (m.sampledata.length == 1) {\n\t\t\t\t\t// single sample\n\t\t\t\t\tsingleSample2table(m, tk, div)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\tmultiple samples\n\t\t\tmay show some kind of plots\n\t\t\t*/\n\n\t\t\t\tif (mayshowgermline2dvaf(m, tk, div)) {\n\t\t\t\t\tdiv.style('margin-top', '10px')\n\t\t\t\t} else if (mayshowcovmafplot(m, tk, div)) {\n\t\t\t\t\tdiv.style('margin-top', '10px')\n\t\t\t\t} else if (mayshowgenotype2boxplot(m, tk, div)) {\n\t\t\t\t\tdiv.style('margin-top', '10px')\n\t\t\t\t} else {\n\t\t\t\t\tvcfsamplelistbutton(m, row1, tk)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\twait.text(err)\n\t\t\t})\n\t}\n\n\tif (vcfobj.infopipejoin) {\n\t\t// for allele info only!\n\t\t// designed for old clinvar vcf, no longer used\n\t\tconst lst0 = []\n\t\tif (m.altinfo) {\n\t\t\tfor (const k of vcfobj.infopipejoin) {\n\t\t\t\tconst tmp = m.altinfo[k.key]\n\t\t\t\tif (tmp) {\n\t\t\t\t\tif (Array.isArray(tmp)) {\n\t\t\t\t\t\tlst0.push(tmp)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlst0.push(tmp.split(/[,|]/))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlst0.push([])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (lst0.length) {\n\t\t\tconst row2 = holder.append('div')\n\t\t\tfor (let i = 0; i < lst0[0].length; i++) {\n\t\t\t\tconst lst = []\n\t\t\t\tfor (let j = 0; j < vcfobj.infopipejoin.length; j++) {\n\t\t\t\t\tconst k = vcfobj.infopipejoin[j]\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tk: k.label,\n\t\t\t\t\t\tv: k.values ? k.values[lst0[j][i]] : lst0[j][i]\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tclient\n\t\t\t\t\t.make_table_2col(row2, lst)\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('border', 'solid 1px black')\n\t\t\t\t\t.style('margin', '20px')\n\t\t\t}\n\t\t}\n\t}\n\n\tmay_info2singletable(m, holder, tk)\n\tmay_info2table(m, holder, tk)\n\n\tconst altkey2category = {} // alt allele\n\tconst lockey2category = {} // locus\n\tif (tk.vcfinfofilter) {\n\t\tfor (const mcset of tk.vcfinfofilter.lst) {\n\t\t\tif (mcset.categories) {\n\t\t\t\tif (mcset.altalleleinfo) {\n\t\t\t\t\taltkey2category[mcset.altalleleinfo.key] = mcset.categories\n\t\t\t\t} else if (mcset.locusinfo) {\n\t\t\t\t\tlockey2category[mcset.locusinfo.key] = mcset.categories\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t{\n\t\t// alt allele info\n\t\tconst lst = []\n\t\tfor (const k in m.altinfo) {\n\t\t\t// value from altinfo maybe array\n\t\t\tconst infovalue = Array.isArray(m.altinfo[k]) ? m.altinfo[k] : [m.altinfo[k]]\n\t\t\tlet showvalue\n\t\t\tif (altkey2category[k]) {\n\t\t\t\tshowvalue = infovalue.map(i => {\n\t\t\t\t\tconst cat = altkey2category[k][i]\n\t\t\t\t\tif (cat) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'<span style=\"padding:1px 3px;background:' +\n\t\t\t\t\t\t\tcat.color +\n\t\t\t\t\t\t\t';color:' +\n\t\t\t\t\t\t\t(cat.textcolor || 'black') +\n\t\t\t\t\t\t\t';\">' +\n\t\t\t\t\t\t\ti +\n\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn i\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tshowvalue = infovalue\n\t\t\t}\n\t\t\tlst.push({\n\t\t\t\tk: k,\n\t\t\t\tv:\n\t\t\t\t\tshowvalue.join(', ') +\n\t\t\t\t\t(vcfobj.info && vcfobj.info[k]\n\t\t\t\t\t\t? ' <span style=\"font-size:70%;color:#858585\">' + vcfobj.info[k].Description + '</span>'\n\t\t\t\t\t\t: '')\n\t\t\t})\n\t\t}\n\t\tif (lst.length) {\n\t\t\tholder.append('h3').text('Alternative allele:')\n\t\t\tclient.make_table_2col(holder, lst)\n\t\t}\n\t}\n\n\t{\n\t\t// locus info\n\t\tconst lst = []\n\t\tfor (const k in m.info) {\n\t\t\tif (tk.info2table && tk.info2table[k]) {\n\t\t\t\t// already shown in previous section\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst infovalue = Array.isArray(m.info[k]) ? m.info[k] : [m.info[k]]\n\t\t\tlet showvalue\n\t\t\tif (lockey2category[k]) {\n\t\t\t\tshowvalue = infovalue.map(i => {\n\t\t\t\t\tconst cat = lockey2category[k][i]\n\t\t\t\t\tif (cat) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'<span style=\"padding:1px 3px;background:' +\n\t\t\t\t\t\t\tcat.color +\n\t\t\t\t\t\t\t';color:' +\n\t\t\t\t\t\t\t(cat.textcolor || 'black') +\n\t\t\t\t\t\t\t';\">' +\n\t\t\t\t\t\t\ti +\n\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn i\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tshowvalue = infovalue\n\t\t\t}\n\t\t\tlst.push({\n\t\t\t\tk: k,\n\t\t\t\tv:\n\t\t\t\t\tshowvalue.join(', ') +\n\t\t\t\t\t(vcfobj.info && vcfobj.info[k]\n\t\t\t\t\t\t? ' <span style=\"font-size:70%;color:#858585\">' + vcfobj.info[k].Description + '</span>'\n\t\t\t\t\t\t: '')\n\t\t\t})\n\t\t}\n\t\tif (lst.length) {\n\t\t\tholder.append('h3').text('This locus:')\n\t\t\tclient.make_table_2col(holder, lst)\n\t\t}\n\t}\n}\n\nfunction may_info2singletable(m, holder, tk) {\n\t// from a csq-like field, only show first item as a vertical table with each row as a field of icfg.fields[]\n\tif (!tk.info2singletable) return\n\tfor (const infokey in tk.info2singletable) {\n\t\tconst icfg = tk.info2singletable[infokey]\n\t\tconst rawvaluelst = m.info[infokey]\n\t\tif (!rawvaluelst || !rawvaluelst[0]) continue\n\t\tconst table = []\n\t\tconst lst = rawvaluelst[0].split(icfg.col_separator)\n\t\tfor (let i = 0; i < icfg.fields.length; i++) {\n\t\t\tif (icfg.fields[i].hide) continue\n\t\t\ttable.push({\n\t\t\t\tk: icfg.fields[i].name,\n\t\t\t\tv: info2table_value(icfg, lst, i)\n\t\t\t})\n\t\t}\n\t\tclient.make_table_2col(holder, table)\n\t}\n}\n\nfunction may_info2table(m, holder, tk) {\n\tif (!tk.info2table) return\n\tfor (const infokey in tk.info2table) {\n\t\tconst icfg = tk.info2table[infokey]\n\t\tconst rawvaluelst = m.info[infokey]\n\t\tif (!rawvaluelst) continue\n\n\t\tif (icfg.separate_tables) {\n\t\t\tconst tables = JSON.parse(JSON.stringify(icfg.separate_tables))\n\t\t\ttables.forEach(i => (i.rows = []))\n\t\t\tfor (const row of rawvaluelst) {\n\t\t\t\tconst lst = row.split(icfg.col_separator)\n\t\t\t\tconst field2value = new Map()\n\t\t\t\tfor (let i = 0; i < icfg.fields.length; i++) {\n\t\t\t\t\tfield2value.set(icfg.fields[i].name, lst[i])\n\t\t\t\t}\n\t\t\t\tfor (const t of tables) {\n\t\t\t\t\tif (t.groupers.reduce((i, j) => (field2value.get(j.field) == j.value ? i : false), true)) {\n\t\t\t\t\t\tt.rows.push(field2value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const t of tables) {\n\t\t\t\tif (t.rows.length == 0) continue\n\t\t\t\tholder.append('h3').html(t.headhtml)\n\t\t\t\tconst table = holder\n\t\t\t\t\t.append('table')\n\t\t\t\t\t.style('border-spacing', '2px')\n\t\t\t\t\t.style('border-collapse', 'separate')\n\t\t\t\t\t.style('font-size', '90%')\n\t\t\t\tconst tr = table.append('tr')\n\t\t\t\tfor (const field of icfg.fields) {\n\t\t\t\t\tif (field.hide) continue\n\t\t\t\t\ttr.append('td').text(field.name)\n\t\t\t\t}\n\t\t\t\tfor (const row of t.rows) {\n\t\t\t\t\tconst tr = table.append('tr').attr('class', 'sja_tr')\n\t\t\t\t\tconst lst = icfg.fields.map(i => row.get(i.name))\n\t\t\t\t\tfor (let i = 0; i < icfg.fields.length; i++) {\n\t\t\t\t\t\tif (icfg.fields[i].hide) continue\n\t\t\t\t\t\tconst td = tr.append('td')\n\t\t\t\t\t\ttd.html(info2table_value(icfg, lst, i))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tconst table = holder\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '2px')\n\t\t\t.style('border-collapse', 'separate')\n\t\t\t.style('font-size', '90%')\n\t\tconst tr = table.append('tr')\n\t\tfor (const field of icfg.fields) {\n\t\t\tif (field.hide) continue\n\t\t\ttr.append('td').text(field.name)\n\t\t}\n\t\tfor (const row of rawvaluelst) {\n\t\t\tconst tr = table.append('tr').attr('class', 'sja_tr')\n\t\t\tconst lst = row.split(icfg.col_separator)\n\t\t\tfor (let i = 0; i < icfg.fields.length; i++) {\n\t\t\t\tif (icfg.fields[i].hide) continue\n\t\t\t\tconst td = tr.append('td')\n\t\t\t\ttd.html(info2table_value(icfg, lst, i))\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\nat index i, to match field config \"icfg.fields[i]\" with raw value \"lst[i]\" to produce a display value\n\nicfg: dataset.info2table\nlst: array of fields of a variant\ni: array index of both icfg.fields[] and lst[]\n*/\nfunction info2table_value(icfg, lst, i) {\n\tconst field = icfg.fields[i]\n\tif (field.hide) return\n\tlet value = lst[i]\n\tif (value == undefined) return\n\t// field config attributes are processed based on order of precedence\n\tif (field.eval) {\n\t\t// somehow decodeURIComponent() won't work here!!\n\t\t// TODO: use a more specific string-to-code conversion\n\t\t// per https://esbuild.github.io/content-types/#direct-eval\n\t\tvalue = (0, eval)('\"' + value + '\"')\n\t}\n\tif (field.isurl) return '<a href=' + value + ' target=_blank>' + value + '</a>'\n\tif (field.appendUrl) {\n\t\tif (field.separator) {\n\t\t\treturn value\n\t\t\t\t.split(field.separator)\n\t\t\t\t.map(v => '<a href=' + field.appendUrl + v + ' target=_blank>' + v + '</a>')\n\t\t\t\t.join(', ')\n\t\t}\n\t\treturn '<a href=' + field.appendUrl + value + ' target=_blank>' + value + '</a>'\n\t}\n\tif (field.insert2url) {\n\t\treturn '<a href=' + field.insert2url.left + value + field.insert2url.right + ' target=_blank>' + value + '</a>'\n\t}\n\tif (field.ampersand2br) return value.replace(/&/g, '<br>')\n\tif (field.urlMatchLst) {\n\t\t// 31566309_(PubMed), or 168986_(ASCO)\n\t\tconst lowervalue = value.toLowerCase()\n\t\tconst id = lowervalue.split(field.urlMatchLst.separator)[field.urlMatchLst.idIndex]\n\t\tif (id) {\n\t\t\tfor (const type of field.urlMatchLst.types) {\n\t\t\t\tif (lowervalue.indexOf(type.type) != -1) {\n\t\t\t\t\tif (type.appendUrl) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'<span style=\"font-size:.7em\">' +\n\t\t\t\t\t\t\ttype.type.toUpperCase() +\n\t\t\t\t\t\t\t'</span> <a href=' +\n\t\t\t\t\t\t\ttype.appendUrl +\n\t\t\t\t\t\t\tid +\n\t\t\t\t\t\t\t' target=_blank>' +\n\t\t\t\t\t\t\tid +\n\t\t\t\t\t\t\t'</a>'\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\treturn value\n}\n\nfunction mayephl_butt(ep, holder, mlst) {\n\tlet notfound = true\n\tfor (const m of mlst) {\n\t\tif (m[ep.p.sampletype] in ep.sampletype2value) {\n\t\t\tnotfound = false\n\t\t\tbreak\n\t\t}\n\t}\n\tif (notfound) {\n\t\treturn\n\t\t/*\n\t\tholder\n\t\t\t.append('button')\n\t\t\t.text(ep.p.sampletype + ' not in ' + ep.p.name)\n\t\t\t.attr('disabled', 1)\n\t\t\t*/\n\t}\n\tlet hl = false\n\tholder\n\t\t.append('button')\n\t\t.text('Highlight in ' + ep.p.name)\n\t\t.on('click', () => {\n\t\t\thl = !hl\n\t\t\tep.may_hl(mlst, hl)\n\t\t})\n}\n\nfunction table_sv(mlst, holder, tk, block) {\n\tconst graphholder = holder.append('div').style('margin-bottom', '10px')\n\ttosvgraph(mlst[0].pairlst, block, graphholder)\n\tif (!tk.svattr) {\n\t\truntimeattr_sv(tk, mlst)\n\t}\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tconst data = []\n\t\tfor (const at of tk.svattr) {\n\t\t\tdata.push({ k: at.label, v: at.get(m) })\n\t\t}\n\t\tconst table = client.make_table_2col(holder, data)\n\t\tif (tk.eplst) {\n\t\t\tconst butrow = holder.append('div').style('margin-top', '10px')\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tconst table = holder\n\t\t.append('table')\n\t\t.style('font-size', '90%')\n\t\t.style('border-spacing', '2px')\n\t\t.style('border-collapse', 'separate')\n\tconst tr = table.append('tr')\n\tfor (const at of tk.svattr) {\n\t\ttr.append('td').text(at.label)\n\t}\n\ttable_sort(mlst, table, tk.svattr, tk, m => {\n\t\tgraphholder.selectAll('*').remove()\n\t\ttosvgraph(m.pairlst, block, graphholder)\n\t})\n\tif (tk.eplst) {\n\t\tconst butrow = holder.append('div').style('margin-top', '5px')\n\t\tfor (const ep of tk.eplst) {\n\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t}\n\t}\n}\n\nfunction tosvgraph(pairlst, block, holder) {\n\tfor (const p of pairlst) {\n\t\tif (p.a.isoform) {\n\t\t\tp.a.gm = { isoform: p.a.isoform }\n\t\t}\n\t\tif (p.b.isoform) {\n\t\t\tp.b.gm = { isoform: p.b.isoform }\n\t\t}\n\t}\n\tconst svarg = {\n\t\tjwt: block.jwt,\n\t\thostURL: block.hostURL,\n\t\tpairlst: pairlst,\n\t\tgenome: block.genome,\n\t\tholder: holder\n\t}\n\timport('./svgraph').then(p => {\n\t\tp.default(svarg)\n\t})\n}\n\nfunction table_itd(mlst, holder, tk, genome) {\n\tif (!tk.itdattr) {\n\t\truntimeattr_itd(tk, mlst)\n\t}\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tconst data = []\n\t\tfor (const at of tk.itdattr) {\n\t\t\tdata.push({ k: at.label, v: at.get(m) })\n\t\t}\n\t\tconst table = client.make_table_2col(holder, data)\n\t\tif (tk.eplst) {\n\t\t\tconst butrow = holder.append('div').style('margin-top', '10px')\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tconst table = holder\n\t\t.append('table')\n\t\t.style('font-size', '90%')\n\t\t.style('border-spacing', '2px')\n\t\t.style('border-collapse', 'separate')\n\tconst tr = table.append('tr')\n\tfor (const at of tk.itdattr) {\n\t\ttr.append('td').text(at.label)\n\t}\n\ttable_sort(mlst, table, tk.itdattr, tk)\n\tif (tk.eplst) {\n\t\tconst butrow = holder.append('div').style('margin-top', '5px')\n\t\tfor (const ep of tk.eplst) {\n\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t}\n\t}\n}\n\nfunction table_del(mlst, holder, tk, genome) {\n\tif (!tk.delattr) {\n\t\truntimeattr_del(tk, mlst)\n\t}\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tconst data = []\n\t\tfor (const at of tk.delattr) {\n\t\t\tdata.push({ k: at.label, v: at.get(m) })\n\t\t}\n\t\tconst table = client.make_table_2col(holder, data)\n\t\tif (tk.eplst) {\n\t\t\tconst butrow = holder.append('div').style('margin-top', '10px')\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tconst table = holder\n\t\t.append('table')\n\t\t.style('font-size', '90%')\n\t\t.style('border-spacing', '2px')\n\t\t.style('border-collapse', 'separate')\n\tconst tr = table.append('tr')\n\tfor (const at of tk.delattr) {\n\t\ttr.append('td').text(at.label)\n\t}\n\ttable_sort(mlst, table, tk.delattr, tk)\n\tif (tk.eplst) {\n\t\tconst butrow = holder.append('div').style('margin-top', '5px')\n\t\tfor (const ep of tk.eplst) {\n\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t}\n\t}\n}\n\nfunction table_truncation(mlst, holder, tk, genome) {\n\tif (!tk.truncattr) {\n\t\truntimeattr_trunc(tk, mlst)\n\t}\n\tif (mlst.length == 1) {\n\t\tconst m = mlst[0]\n\t\tconst data = []\n\t\tfor (const at of tk.truncattr) {\n\t\t\tdata.push({ k: at.label, v: at.get(m) })\n\t\t}\n\t\tconst table = client.make_table_2col(holder, data)\n\t\tif (tk.eplst) {\n\t\t\tconst butrow = holder.append('div').style('margin-top', '10px')\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tconst table = holder\n\t\t.append('table')\n\t\t.style('font-size', '90%')\n\t\t.style('border-spacing', '2px')\n\t\t.style('border-collapse', 'separate')\n\tconst tr = table.append('tr')\n\tfor (const at of tk.truncattr) {\n\t\ttr.append('td').text(at.label)\n\t}\n\ttable_sort(mlst, table, tk.truncattr, tk)\n\tif (tk.eplst) {\n\t\tconst butrow = holder.append('div').style('margin-top', '5px')\n\t\tfor (const ep of tk.eplst) {\n\t\t\tmayephl_butt(ep, butrow, mlst)\n\t\t}\n\t}\n}\n\nexport function runtimeattr_snvindel(tk, mlst) {\n\ttk.snvindelattr = []\n\tif (tk.ds && tk.ds.snvindel_attributes) {\n\t\t// use predefined\n\t\tfor (const a of tk.ds.snvindel_attributes) {\n\t\t\ttk.snvindelattr.push(a)\n\t\t}\n\t} else {\n\t\t// ds-free or nothing available from ds, figure out from data\n\t\tconst nouse = new Set(['pos', 'aapos', 'rnapos', 'dt', 'vcfid', 'isrim1', 'isrim2', 'alt', '__x'])\n\t\tif (tk.ds.cohort && tk.ds.cohort.levels) {\n\t\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\t\tnouse.add(l.k)\n\t\t\t}\n\t\t}\n\t\tconst lst = []\n\t\tfor (const k in mlst[0]) {\n\t\t\tif (nouse.has(k)) continue\n\t\t\tswitch (k) {\n\t\t\t\tcase 'chr':\n\t\t\t\t\tlst.push({ label: 'Genome pos.', get: m => m.chr + ':' + (m.pos + 1) })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'class':\n\t\t\t\t\tlst.push({ label: 'Class', get: m => common.mclass[m.class].label })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'mname':\n\t\t\t\t\tlst.push({ label: 'Mutation', get: m => m.mname })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ref':\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tlabel: 'Allele',\n\t\t\t\t\t\tlst: [\n\t\t\t\t\t\t\t{ label: 'Ref', get: m => m.ref },\n\t\t\t\t\t\t\t{ label: 'Alt', get: m => m.alt }\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'pmid':\n\t\t\t\t\tlst.push(caller_pmid())\n\t\t\t\t\tbreak\n\t\t\t\tcase 'maf_tumor':\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tget: m => m.maf_tumor,\n\t\t\t\t\t\tismaf: true,\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 12,\n\t\t\t\t\t\tlabel: 'Tumor MAF',\n\t\t\t\t\t\tfill: '#ff4d4d',\n\t\t\t\t\t\tfillbg: '#ffcccc'\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'maf_normal':\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tget: m => m.maf_normal,\n\t\t\t\t\t\tismaf: true,\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 12,\n\t\t\t\t\t\tlabel: 'Germline MAF',\n\t\t\t\t\t\tfill: '#4d4dff',\n\t\t\t\t\t\tfillbg: '#ccccff'\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tlst.push({ label: k, get: m => m[k] })\n\t\t\t}\n\t\t}\n\t\ttk.snvindelattr = lst\n\t}\n\tif (tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\ttk.snvindelattr.push({\n\t\t\t\tlabel: l.label || l.k,\n\t\t\t\thide: l.hide,\n\t\t\t\tget: m => {\n\t\t\t\t\tif (m[l.k])\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tm[l.k] +\n\t\t\t\t\t\t\t(l.full ? (m[l.full] ? ' <span style=\"font-size:.8em;color:#858585\">' + m[l.full] + '</span>' : '') : '')\n\t\t\t\t\t\t)\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\tif (tk.eplst) {\n\t\tfor (const ep of tk.eplst) {\n\t\t\tif (!ep.p) {\n\t\t\t\tconsole.error('no config object for epaint')\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (ep.p.maf) {\n\t\t\t\t// both maf and expression value\n\t\t\t\ttk.snvindelattr.push({\n\t\t\t\t\tlabel: ep.p.name,\n\t\t\t\t\tlst: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: ep.p.datatype,\n\t\t\t\t\t\t\tget: m => {\n\t\t\t\t\t\t\t\tconst s = m[ep.p.sampletype]\n\t\t\t\t\t\t\t\tif (!s) return ''\n\t\t\t\t\t\t\t\treturn ep.sampletype2value[s]\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\tlabel: ep.p.maf.label,\n\t\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\t\theight: 12,\n\t\t\t\t\t\t\tfill: ep.p.hlcolor,\n\t\t\t\t\t\t\tfillbg: ep.p.hlcolor2,\n\t\t\t\t\t\t\tget: ep.p.maf.get,\n\t\t\t\t\t\t\treadcountcredible: ep.p.maf.readcountcredible,\n\t\t\t\t\t\t\tismaf: true\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// only expression value\n\t\t\t\ttk.snvindelattr.push({\n\t\t\t\t\tlabel: ep.p.name + ' ' + ep.p.datatype,\n\t\t\t\t\tget: m => {\n\t\t\t\t\t\tconst s = m[ep.p.sampletype]\n\t\t\t\t\t\tif (!s) return ''\n\t\t\t\t\t\treturn ep.sampletype2value[s]\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function runtimeattr_trunc(tk, mlst) {\n\tconst skipset = new Set([\n\t\t'__x',\n\t\t'mname',\n\t\t'gene',\n\t\t'strand',\n\t\t'isoform',\n\t\t'aapos',\n\t\t'rnapos',\n\t\t'chr',\n\t\t'pos',\n\t\t'class',\n\t\t'dt',\n\t\t'rnaposition',\n\t\t'partner'\n\t])\n\ttk.truncattr = []\n\tfor (const m of mlst) {\n\t\tif (m.sample) {\n\t\t\ttk.truncattr.push({ label: 'Sample', get: m => m.sample })\n\t\t\tskipset.add('sample')\n\t\t\tbreak\n\t\t}\n\t}\n\ttk.truncattr.push({\n\t\tlabel: 'Position',\n\t\tget: m => m.chr + ':' + m.pos\n\t})\n\tconst dtset = new Set()\n\tfor (const m of mlst) {\n\t\tdtset.add(m.dt)\n\t}\n\tif (dtset.size > 1) {\n\t\ttk.truncattr.push({\n\t\t\tlabel: 'Truncated',\n\t\t\tget: m => (m.dt == common.dtnloss ? 'N-term' : 'C-term')\n\t\t})\n\t}\n\tfor (const m of mlst) {\n\t\tif (m.pmid) {\n\t\t\ttk.truncattr.push(caller_pmid())\n\t\t\tskipset.add('pmid')\n\t\t\tbreak\n\t\t}\n\t}\n\tfor (const m of mlst) {\n\t\tif (m.partner) {\n\t\t\t// cicero exports\n\t\t\ttk.truncattr.push({\n\t\t\t\tget: m => {\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tfor (const k in m.partner) {\n\t\t\t\t\t\tlst.push(k + ': ' + m.partner[k])\n\t\t\t\t\t}\n\t\t\t\t\treturn lst.join(' ')\n\t\t\t\t},\n\t\t\t\tlabel: 'Translocation'\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\t}\n\tif (tk.ds && tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\tskipset.add(l.k)\n\t\t\tskipset.add(l.full)\n\t\t\ttk.truncattr.push({\n\t\t\t\tlabel: l.label || l.k,\n\t\t\t\t//hide:l.hide,\n\t\t\t\tget: m =>\n\t\t\t\t\tm[l.k] ? m[l.k] + (l.full ? ' <span style=\"color:#858585;font-size:.8em\">' + m[l.full] + '</span>' : '') : ''\n\t\t\t})\n\t\t}\n\t}\n\tfor (const k in mlst[0]) {\n\t\tif (skipset.has(k)) continue\n\t\ttk.truncattr.push({ label: k, get: m => m[k] })\n\t}\n}\n\nexport function runtimeattr_del(tk, mlst) {\n\tconst skipset = new Set([\n\t\t'__x',\n\t\t'mname',\n\t\t'isoform',\n\t\t'aapos',\n\t\t'rnapos',\n\t\t'chr',\n\t\t'pos',\n\t\t'class',\n\t\t'dt',\n\t\t'rnaposition',\n\t\t'rnadellength',\n\t\t'a',\n\t\t'b'\n\t])\n\ttk.delattr = []\n\tfor (const m of mlst) {\n\t\tif (m.sample) {\n\t\t\ttk.delattr.push({ label: 'Sample', get: m => m.sample })\n\t\t\tskipset.add('sample')\n\t\t\tbreak\n\t\t}\n\t}\n\ttk.delattr.push({\n\t\tlabel: 'Position',\n\t\tget: m => m.chr + ':' + m.pos\n\t})\n\ttk.delattr.push({\n\t\tlabel: 'Del. length',\n\t\tget: m => m.rnadellength + ' bp'\n\t})\n\tfor (const m of mlst) {\n\t\tif (m.pmid) {\n\t\t\ttk.delattr.push(caller_pmid())\n\t\t\tskipset.add('pmid')\n\t\t\tbreak\n\t\t}\n\t}\n\tif (tk.ds && tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\tskipset.add(l.k)\n\t\t\tskipset.add(l.full)\n\t\t\ttk.delattr.push({\n\t\t\t\tlabel: l.label || l.k,\n\t\t\t\t//hide:l.hide,\n\t\t\t\tget: m =>\n\t\t\t\t\tm[l.k] ? m[l.k] + (l.full ? ' <span style=\"color:#858585;font-size:.8em\">' + m[l.full] + '</span>' : '') : ''\n\t\t\t})\n\t\t}\n\t}\n\tfor (const k in mlst[0]) {\n\t\tif (skipset.has(k)) continue\n\t\ttk.delattr.push({ label: k, get: m => m[k] })\n\t}\n}\n\nexport function runtimeattr_itd(tk, mlst) {\n\tconst skipset = new Set([\n\t\t'__x',\n\t\t'mname',\n\t\t'isoform',\n\t\t'aapos',\n\t\t'rnapos',\n\t\t'chr',\n\t\t'pos',\n\t\t'class',\n\t\t'dt',\n\t\t'rnaposition',\n\t\t'rnaduplength',\n\t\t'a',\n\t\t'b'\n\t])\n\ttk.itdattr = []\n\tfor (const m of mlst) {\n\t\tif (m.sample) {\n\t\t\ttk.itdattr.push({ label: 'Sample', get: m => m.sample })\n\t\t\tskipset.add('sample')\n\t\t\tbreak\n\t\t}\n\t}\n\ttk.itdattr.push({\n\t\tlabel: 'Position',\n\t\tget: m => m.chr + ':' + m.pos\n\t})\n\ttk.itdattr.push({\n\t\tlabel: 'Dup. length',\n\t\tget: m => m.rnaduplength + ' bp'\n\t})\n\tfor (const m of mlst) {\n\t\tif (m.pmid) {\n\t\t\ttk.itdattr.push(caller_pmid())\n\t\t\tskipset.add('pmid')\n\t\t\tbreak\n\t\t}\n\t}\n\tif (tk.ds && tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\tskipset.add(l.k)\n\t\t\tskipset.add(l.full)\n\t\t\ttk.itdattr.push({\n\t\t\t\tlabel: l.label || l.k,\n\t\t\t\t//hide:l.hide,\n\t\t\t\tget: m =>\n\t\t\t\t\tm[l.k] ? m[l.k] + (l.full ? ' <span style=\"color:#858585;font-size:.8em\">' + m[l.full] + '</span>' : '') : ''\n\t\t\t})\n\t\t}\n\t}\n\tfor (const k in mlst[0]) {\n\t\tif (skipset.has(k)) continue\n\t\ttk.itdattr.push({ label: k, get: m => m[k] })\n\t}\n}\n\nexport function runtimeattr_sv(tk, mlst) {\n\tconst skipset = new Set([\n\t\t'__x',\n\t\t'mname',\n\t\t'aapos',\n\t\t'chr',\n\t\t'class',\n\t\t'dt',\n\t\t'inframe',\n\t\t'origin',\n\t\t'pos',\n\t\t'rnapos',\n\t\t'strand',\n\t\t'useNterm',\n\t\t'pairlst'\n\t])\n\ttk.svattr = []\n\tfor (const m of mlst) {\n\t\tif (m.sample) {\n\t\t\ttk.svattr.push({ label: 'Sample', get: m => m.sample })\n\t\t\tskipset.add('sample')\n\t\t\tbreak\n\t\t}\n\t}\n\ttk.svattr.push({\n\t\tlabel: 'Genomic breakpoint',\n\t\tget: m => {\n\t\t\tif (!m.pairlst) return 'no pairlst'\n\t\t\tconst lst = m.pairlst.map(\n\t\t\t\tp =>\n\t\t\t\t\t(p.a.name ? '<strong>' + p.a.name + '</strong> ' : '') +\n\t\t\t\t\t(p.a.chr\n\t\t\t\t\t\t? '<span style=\"color:#858585\">' +\n\t\t\t\t\t\t p.a.chr +\n\t\t\t\t\t\t ':' +\n\t\t\t\t\t\t (p.a.position + 1) +\n\t\t\t\t\t\t ' ' +\n\t\t\t\t\t\t (p.a.strand == '+' ? 'forward' : 'reverse') +\n\t\t\t\t\t\t '</span> ➜ '\n\t\t\t\t\t\t: '') +\n\t\t\t\t\t(p.b.name ? '<strong>' + p.b.name + '</strong> ' : '') +\n\t\t\t\t\t(p.b.chr\n\t\t\t\t\t\t? '<span style=\"color:#858585\">' +\n\t\t\t\t\t\t p.b.chr +\n\t\t\t\t\t\t ':' +\n\t\t\t\t\t\t (p.b.position + 1) +\n\t\t\t\t\t\t ' ' +\n\t\t\t\t\t\t (p.b.strand == '+' ? 'forward' : 'reverse') +\n\t\t\t\t\t\t '</span>'\n\t\t\t\t\t\t: '')\n\t\t\t)\n\t\t\treturn lst.join('<br>')\n\t\t}\n\t})\n\tfor (const m of mlst) {\n\t\tif (m.pairlst[0].a.rnaposition != undefined) {\n\t\t\ttk.svattr.push({\n\t\t\t\tlabel: 'RNA breakpoint',\n\t\t\t\tget: m => {\n\t\t\t\t\tif (!m.pairlst) return 'no pairlst'\n\t\t\t\t\tconst lst = m.pairlst.map(\n\t\t\t\t\t\tp =>\n\t\t\t\t\t\t\t(p.a.name ? '<strong>' + p.a.name + '</strong> ' : '') +\n\t\t\t\t\t\t\t'<span style=\"color:#858585\">r.' +\n\t\t\t\t\t\t\t(p.a.rnaposition + 1) +\n\t\t\t\t\t\t\t'</span> ➜ ' +\n\t\t\t\t\t\t\t(p.b.name ? '<strong>' + p.b.name + '</strong> ' : '') +\n\t\t\t\t\t\t\t'<span style=\"color:#858585\">r.' +\n\t\t\t\t\t\t\t(p.b.rnaposition + 1) +\n\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t)\n\t\t\t\t\treturn lst.join('<br>')\n\t\t\t\t}\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\t}\n\tfor (const m of mlst) {\n\t\tif (m.pmid) {\n\t\t\ttk.svattr.push(caller_pmid())\n\t\t\tskipset.add('pmid')\n\t\t\tbreak\n\t\t}\n\t}\n\t// cosmic attr\n\tlet hastn = false\n\tfor (const m of mlst) {\n\t\tif (hastn) break\n\t\tfor (const p of m.pairlst) {\n\t\t\tif (p.translocationname) {\n\t\t\t\ttk.svattr.push({\n\t\t\t\t\tget: m => m.pairlst.map(i => (i.translocationname ? i.translocationname : '')).join('_'),\n\t\t\t\t\tlabel: 'Translocation name'\n\t\t\t\t})\n\t\t\t\thastn = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif (mlst[0].pairlst[0].a.ratio != undefined) {\n\t\ttk.svattr.push({\n\t\t\tlabel: 'Chimeric reads ratio',\n\t\t\tget: m => {\n\t\t\t\tconst lst = []\n\t\t\t\tconst w = 40,\n\t\t\t\t\th = 12,\n\t\t\t\t\tfill = '#FF850A',\n\t\t\t\t\tfillbg = '#FFCF9E'\n\t\t\t\tfor (const i of m.pairlst) {\n\t\t\t\t\tlst.push(\n\t\t\t\t\t\t(i.a.name ? i.a.name : i.a.chr) +\n\t\t\t\t\t\t\t' <svg width=' +\n\t\t\t\t\t\t\tw +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t'><g><title>' +\n\t\t\t\t\t\t\ti.a.ratio +\n\t\t\t\t\t\t\t'</title><rect width=' +\n\t\t\t\t\t\t\tw +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t' fill=\"' +\n\t\t\t\t\t\t\tfillbg +\n\t\t\t\t\t\t\t'\"></rect>' +\n\t\t\t\t\t\t\t'<rect width=' +\n\t\t\t\t\t\t\tw * i.a.ratio +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t' fill=\"' +\n\t\t\t\t\t\t\tfill +\n\t\t\t\t\t\t\t'\"></rect>' +\n\t\t\t\t\t\t\t'</g></svg>' +\n\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t(i.b.name ? i.b.name : i.b.chr) +\n\t\t\t\t\t\t\t' <svg width=' +\n\t\t\t\t\t\t\tw +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t'><g><title>' +\n\t\t\t\t\t\t\ti.b.ratio +\n\t\t\t\t\t\t\t'</title><rect width=' +\n\t\t\t\t\t\t\tw +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t' fill=\"' +\n\t\t\t\t\t\t\tfillbg +\n\t\t\t\t\t\t\t'\"></rect>' +\n\t\t\t\t\t\t\t'<rect width=' +\n\t\t\t\t\t\t\tw * i.b.ratio +\n\t\t\t\t\t\t\t' height=' +\n\t\t\t\t\t\t\th +\n\t\t\t\t\t\t\t' fill=\"' +\n\t\t\t\t\t\t\tfill +\n\t\t\t\t\t\t\t'\"></rect>' +\n\t\t\t\t\t\t\t'</g></svg>'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn lst.join('<br>')\n\t\t\t}\n\t\t})\n\t}\n\ttk.svattr.push({\n\t\tlabel: 'Frame',\n\t\tget: m => {\n\t\t\tfunction label(f) {\n\t\t\t\tif (f == 0)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'<span style=\"white-space:nowrap;background-color:' +\n\t\t\t\t\t\tclient.coloroutframe +\n\t\t\t\t\t\t';font-size:80%;color:white;padding:1px 3px\">OUT of frame</span>'\n\t\t\t\t\t)\n\t\t\t\tif (f == 1)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'<span style=\"white-space:nowrap;background-color:' +\n\t\t\t\t\t\tclient.colorinframe +\n\t\t\t\t\t\t';font-size:80%;color:white;padding:1px 3px\">IN frame</span>'\n\t\t\t\t\t)\n\t\t\t\tif (f == 2)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'<span style=\"white-space:nowrap;background-color:' +\n\t\t\t\t\t\tclient.colorinframe +\n\t\t\t\t\t\t';font-size:80%;color:white;padding:1px 3px\">IN frame</span> <span style=\"font-size:80%;color:#858585\">promoter fusion</span>'\n\t\t\t\t\t)\n\t\t\t\tif (f == 3)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'<span style=\"white-space:nowrap;background-color:' +\n\t\t\t\t\t\tclient.colorinframe +\n\t\t\t\t\t\t';font-size:80%;color:white;padding:1px 3px\">IN frame</span> <span style=\"font-size:80%;color:#858585\">alternative promoter</span>'\n\t\t\t\t\t)\n\t\t\t\treturn 'err (' + f + ')'\n\t\t\t}\n\t\t\tconst lst = []\n\t\t\tfor (const p of m.pairlst) {\n\t\t\t\tif (p.frame != undefined) {\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tframe: p.frame,\n\t\t\t\t\t\ta: p.a.name ? p.a.name : p.a.chr,\n\t\t\t\t\t\tb: p.b.name ? p.b.name : p.b.chr\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lst.length == 1) return label(lst[0].frame)\n\t\t\treturn lst.map(l => l.a + '-' + l.b + ': ' + label(l.frame)).join('<br>')\n\t\t}\n\t})\n\tif (tk.ds && tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\tskipset.add(l.k)\n\t\t\tskipset.add(l.full)\n\t\t\ttk.svattr.push({\n\t\t\t\tlabel: l.label || l.k,\n\t\t\t\thide: l.hide,\n\t\t\t\tget: m =>\n\t\t\t\t\tm[l.k] ? m[l.k] + (l.full ? ' <span style=\"color:#858585;font-size:.8em\">' + m[l.full] + '</span>' : '') : ''\n\t\t\t})\n\t\t}\n\t}\n\tfor (const k in mlst[0]) {\n\t\tif (skipset.has(k)) continue\n\t\ttk.svattr.push({ label: k, get: m => m[k] })\n\t}\n}\n\nfunction caller_pmid(m) {\n\treturn {\n\t\tget: m => {\n\t\t\tif (!m.pmid) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (typeof m.pmid == 'number') {\n\t\t\t\treturn '<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/' + m.pmid + '>' + m.pmid + '</a>'\n\t\t\t}\n\t\t\tconst lst = m.pmid.split(',')\n\t\t\tconst out = []\n\t\t\tfor (const i of lst) {\n\t\t\t\tif (i == '') continue\n\t\t\t\tconst j = Number.parseInt(i)\n\t\t\t\tif (Number.isNaN(j)) {\n\t\t\t\t\tout.push(i)\n\t\t\t\t} else {\n\t\t\t\t\tout.push('<a target=_blank href=https://pubmed.ncbi.nlm.nih.gov/' + i + '>' + i + '</a>')\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out.join(' ')\n\t\t},\n\t\tlabel: 'PubMed'\n\t}\n}\n\nfunction vcfsamplelistbutton(m, holder, tk) {\n\t/*\n\tfor sample objects about this variant loaded from cohort vcf\n\tat header of itemtable\n\tmake a sample button\n\tclick to list samples\n\n\tthe variant is present is because at least 1 of the sample passed sample annotation filter\n\tso don't show samples that are filtered!\n\t*/\n\n\tlet samplelst = m.sampledata\n\t// check against annotation filter\n\n\tif (\n\t\ttk.ds &&\n\t\ttk.ds.cohort &&\n\t\ttk.ds.cohort.annotation &&\n\t\ttk.ds.cohort.key4annotation &&\n\t\ttk.ds.cohort.sampleattribute &&\n\t\ttk.ds.cohort.sampleattribute.runtimelst\n\t) {\n\t\tsamplelst = []\n\t\tfor (const s0 of m.sampledata) {\n\t\t\tconst s0name = s0.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\tif (!s0name) continue\n\n\t\t\tconst av = tk.ds.cohort.annotation[s0name]\n\t\t\tif (av) {\n\t\t\t\tlet hidden = false\n\t\t\t\tfor (const attr of tk.ds.cohort.sampleattribute.runtimelst) {\n\t\t\t\t\tif (attr.key && attr.key.k && attr.key.hiddenvalues && attr.key.hiddenvalues.size) {\n\t\t\t\t\t\tconst v = av[attr.key.k]\n\t\t\t\t\t\tif (attr.key.hiddenvalues.has(v)) {\n\t\t\t\t\t\t\thidden = true\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\tif (hidden) continue\n\t\t\t}\n\t\t\tsamplelst.push(s0)\n\t\t}\n\t}\n\n\tholder\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('margin-right', '10px')\n\t\t.text(samplelst.length + ' sample' + (samplelst.length > 1 ? 's' : ''))\n\t\t.on('click', event => {\n\t\t\ttk.tktip.showunder(event.target).clear()\n\t\t\tconst table = tk.tktip.d.append('table')\n\t\t\tconst tr = table.append('tr').style('font-size', '.8em').style('color', '#858585')\n\t\t\ttr.append('td').text('Name')\n\t\t\ttr.append('td').text('Genotype')\n\n\t\t\tlet hasgt = false\n\t\t\tif (samplelst[0].DP != undefined) {\n\t\t\t\ttr.append('td').text('Read depth')\n\t\t\t\thasgt = true\n\t\t\t}\n\t\t\tlet hascount = false\n\t\t\tif (samplelst[0].allele2readcount) {\n\t\t\t\ttr.append('td').text('Allele read count')\n\t\t\t\thascount = true\n\t\t\t}\n\t\t\tfor (const s of samplelst) {\n\t\t\t\tconst tr = table.append('tr')\n\t\t\t\ttr.append('td').text(s.sampleobj.name)\n\t\t\t\ttr.append('td').style('padding-left', '10px').text(s.genotype)\n\t\t\t\tif (hasgt) {\n\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t.style('padding-left', '10px')\n\t\t\t\t\t\t.text(s.DP || '')\n\t\t\t\t}\n\t\t\t\tif (hascount) {\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tfor (const a in s.allele2readcount) {\n\t\t\t\t\t\tlst.push(a + ':' + s.allele2readcount[a])\n\t\t\t\t\t}\n\t\t\t\t\ttr.append('td').style('padding-left', '10px').text(lst.join(', '))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n}\n\nfunction vcfvepbutton(csqlst, holder, tk, headers) {\n\tholder\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('margin-right', '10px')\n\t\t.text('VEP annotation')\n\t\t.on('click', event => {\n\t\t\ttk.tktip.clear()\n\t\t\ttk.tktip.showunder(event.target)\n\t\t\tfor (const item of csqlst) {\n\t\t\t\tlet blown = false\n\t\t\t\tlet thislabel\n\t\t\t\t{\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tif (item.HGVSp) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">HGVSp</span> ' + item.HGVSp)\n\t\t\t\t\t} else if (item.HGVSc) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">HGVSc</span> ' + item.HGVSc)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlst.push('no_HGVS')\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Consequence) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">CONSEQUENCE</span> ' + item.Consequence)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlst.push('no_consequence')\n\t\t\t\t\t}\n\t\t\t\t\tthislabel = lst.join(' ')\n\t\t\t\t}\n\t\t\t\tconst box = tk.tktip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.style('margin', '5px')\n\t\t\t\t\t.html(thislabel)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (blown) {\n\t\t\t\t\t\t\tblown = false\n\t\t\t\t\t\t\tbox.html(thislabel)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tblown = true\n\t\t\t\t\t\t\tbox.text('')\n\t\t\t\t\t\t\tconst lst = []\n\t\t\t\t\t\t\tfor (const h of headers) {\n\t\t\t\t\t\t\t\tconst v = item[h.name]\n\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\tlst.push({ k: h.name, v: v })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclient.make_table_2col(box, lst)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t/*\n\t\t// show controls\n\t\tconst div=tk.tktip.d.append('div').style('margin-top','10px')\n\t\tfor(const h of headers) {\n\t\t\tconst row=div.append('div')\n\t\t\tconst id=Math.random()\n\t\t\tconst input=row.append('input')\n\t\t\t\t.attr('type','checkbox')\n\t\t\t\t.style('margin-right','5px')\n\t\t\t\t.attr('id',id)\n\t\t\t\t.on('change',(event)=>{\n\t\t\t\t\th.hidden = !event.target.checked\n\t\t\t\t\tshowtable()\n\t\t\t\t})\n\t\t\tif(!h.hidden) {\n\t\t\t\tinput.attr('checked',1)\n\t\t\t}\n\t\t\trow.append('label')\n\t\t\t\t.text(h.name)\n\t\t\t\t.attr('for',id)\n\t\t}\n\t\t*/\n\t\t})\n}\n\nfunction vcfannbutton(annolst, holder, tk, headers) {\n\tholder\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('margin-right', '10px')\n\t\t.text('Annotation')\n\t\t.on('click', event => {\n\t\t\ttk.tktip.clear()\n\t\t\ttk.tktip.showunder(event.target)\n\t\t\tfor (const item of annolst) {\n\t\t\t\tlet blown = false\n\t\t\t\tlet thislabel\n\t\t\t\t{\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tif (item['HGVS.p']) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">HGVS.p</span> ' + item['HGVS.p'])\n\t\t\t\t\t} else if (item['HGVS.c']) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">HGVS.c</span> ' + item['HGVS.c'])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlst.push('no_HGVS')\n\t\t\t\t\t}\n\t\t\t\t\tif (item.Annotation) {\n\t\t\t\t\t\tlst.push('<span style=\"font-size:.7em;color:#858585\">Annotation</span> ' + item.Annotation)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlst.push('no_annotation')\n\t\t\t\t\t}\n\t\t\t\t\tthislabel = lst.join(' ')\n\t\t\t\t}\n\t\t\t\tconst box = tk.tktip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.style('margin', '5px')\n\t\t\t\t\t.html(thislabel)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (blown) {\n\t\t\t\t\t\t\tblown = false\n\t\t\t\t\t\t\tbox.html(thislabel)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tblown = true\n\t\t\t\t\t\t\tbox.text('')\n\t\t\t\t\t\t\tconst lst = []\n\t\t\t\t\t\t\tfor (const h of headers) {\n\t\t\t\t\t\t\t\tconst v = item[h.name]\n\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\tlst.push({ k: h.name, v: v })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclient.make_table_2col(box, lst)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t})\n}\n\nfunction variant2imgbutton(m, buttonrow, imgholder, tk, block) {\n\tlet loaded = false\n\n\tbuttonrow\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('margin-right', '10px')\n\t\t.text('Image')\n\t\t.on('click', async () => {\n\t\t\tif (loaded) return\n\t\t\tloaded = true\n\t\t\tconst wait = imgholder.append('div').style('margin', '20px').text('Loading...')\n\t\t\ttry {\n\t\t\t\tconst data = await client.dofetch('img', {\n\t\t\t\t\tfile: [\n\t\t\t\t\t\ttk.variant2img.path,\n\t\t\t\t\t\tm.chr + '.' + (m.pos + 1) + '.' + m.ref + '.' + m.alt + '.' + tk.variant2img.ext\n\t\t\t\t\t].join('/')\n\t\t\t\t})\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\twait.remove()\n\t\t\t\timgholder\n\t\t\t\t\t.append('img')\n\t\t\t\t\t.attr('src', data.src)\n\t\t\t\t\t.style('width', data.size.width + 'px')\n\t\t\t\t\t.style('height', data.size.height + 'px')\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error loading image')\n\t\t\t}\n\t\t})\n}\n\nfunction mayshowcovmafplot(m, tk, holder) {\n\tif (!tk.ds.vaf2coverageplot) {\n\t\treturn false\n\t}\n\tif (!m.sampledata) {\n\t\treturn false\n\t}\n\n\t/*\n\tmay show cov-maf plot for samples from a vcf variant\n\tplottable samples should have .DP and valid read count for this allele\n\n\tm.sampledata[ {} ]\n\t\t.sampleobj\n\t\t\t.<k4a>\n\t\t.DP\n\t\t.allele2readcount\n\n\tdivide samples to groups by sampletype, make separate plot for each group\n\t*/\n\n\tconst nostlst = []\n\t/*\n\tsamples without sampletype, or vaf2coverageplot.samplegroupkey is not set\n\t*/\n\n\tconst st2lst = {}\n\t/*\n\tk: sampletype\n\tv: list of samples\n\twill not use if no vaf2coverageplot.samplegroupkey\n\t*/\n\n\tconst categorycount = new Map() // use then vaf2coverageplot.categories is set\n\n\tlet err = 0\n\tfor (const s of m.sampledata) {\n\t\tif (!s.allele2readcount) {\n\t\t\t// this is required\n\t\t\terr++\n\t\t\tcontinue\n\t\t}\n\n\t\tif (s.DP == undefined) {\n\t\t\ts.DP = 0\n\t\t\tfor (const k in s.allele2readcount) {\n\t\t\t\ts.DP += s.allele2readcount[k]\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\tif alt allele is missing from the hash\n\t\ttreat the coverage of it as zero\n\t\t*/\n\t\tconst altv = s.allele2readcount[m.alt] || 0\n\n\t\tif (altv > s.DP) {\n\t\t\tconsole.log('alt coverage > DP: ' + altv + ' ' + s.DP)\n\t\t\tcontinue\n\t\t}\n\n\t\t// is a plottable sample\n\t\t// ss is object to go to plotter\n\t\tconst ss = {\n\t\t\tsampleobj: {},\n\t\t\tmut: altv,\n\t\t\ttotal: s.DP,\n\t\t\tmaf: s.DP == 0 ? 0 : altv / s.DP,\n\t\t\tgenotype: s.genotype\n\t\t}\n\n\t\t// transfer metadata\n\t\tif (s.sampleobj) {\n\t\t\tif (tk.ds.cohort && tk.ds.cohort.annotation && tk.ds.cohort.key4annotation) {\n\t\t\t\tconst k4a = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\tif (k4a) {\n\t\t\t\t\tconst n = tk.ds.cohort.annotation[k4a]\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tif (tk.ds.cohort.levels) {\n\t\t\t\t\t\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\t\t\t\t\t\tif (!n[l.k]) continue\n\t\t\t\t\t\t\t\tss.sampleobj[l.label || l.k] =\n\t\t\t\t\t\t\t\t\tn[l.k] +\n\t\t\t\t\t\t\t\t\t(l.full && n[l.full] ? ' <span style=\"font-size:.8em;color:#858585\">' + n[l.full] + '</span>' : '')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// also add k4a\n\t\t\t\t\t\t\tss.sampleobj[tk.ds.cohort.key4annotation] = k4a\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (const k in n) {\n\t\t\t\t\t\t\t\tss.sampleobj[k] = n[k]\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} else {\n\t\t\t\tfor (const k in s.sampleobj) {\n\t\t\t\t\tss.sampleobj[k] = s.sampleobj[k]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tk.ds.vaf2coverageplot.categorykey && tk.ds.vaf2coverageplot.categories) {\n\t\t\t/*\n\t\t\ttry to assign color to this sample by category\n\t\t\thardcoded: .categorykey only found in .sampleobj but not ds.cohort.annotation\n\t\t\t*/\n\t\t\tconst k = ss.sampleobj[tk.ds.vaf2coverageplot.categorykey]\n\t\t\tif (k && tk.ds.vaf2coverageplot.categories[k]) {\n\t\t\t\t// is valid category, assign color\n\t\t\t\tss.color = tk.ds.vaf2coverageplot.categories[k].color\n\t\t\t\t// count 4 legend\n\t\t\t\tif (!categorycount.has(k)) {\n\t\t\t\t\tcategorycount.set(k, 0)\n\t\t\t\t}\n\t\t\t\tcategorycount.set(k, categorycount.get(k) + 1)\n\n\t\t\t\t// will swap the attribute\n\t\t\t\tdelete ss.sampleobj[tk.ds.vaf2coverageplot.categorykey]\n\t\t\t\tss.sampleobj[tk.ds.vaf2coverageplot.categorylabel] = k\n\t\t\t}\n\t\t}\n\n\t\tif (tk.ds.vaf2coverageplot.samplegroupkey) {\n\t\t\t// will try to group samples\n\t\t\t/*\n\t\t\thardcoded\n\t\t\tsamplegroupkey will only be taken from ss.sampleobj\n\t\t\tbut not ds.cohort.annotation\n\t\t\t*/\n\t\t\tif (ss.sampleobj && ss.sampleobj[tk.ds.vaf2coverageplot.samplegroupkey]) {\n\t\t\t\tconst k = ss.sampleobj[tk.ds.vaf2coverageplot.samplegroupkey]\n\t\t\t\tif (!st2lst[k]) {\n\t\t\t\t\tst2lst[k] = []\n\t\t\t\t}\n\t\t\t\tst2lst[k].push(ss)\n\t\t\t} else {\n\t\t\t\t// no sampletype\n\t\t\t\tnostlst.push(ss)\n\t\t\t}\n\t\t} else {\n\t\t\t// not to group samples\n\t\t\tnostlst.push(ss)\n\t\t}\n\t}\n\n\tif (err) {\n\t\tconsole.log('skipped ' + err + ' items')\n\t}\n\n\t// group to be plotted\n\tconst plotgroups = []\n\n\tif (nostlst.length) {\n\t\tplotgroups.push({\n\t\t\tname: 'no ' + (tk.ds.vaf2coverageplot.samplegroupkey || 'sampletype'),\n\t\t\tlst: nostlst\n\t\t})\n\t}\n\tfor (const k in st2lst) {\n\t\tplotgroups.push({\n\t\t\tname: k,\n\t\t\tlst: st2lst[k]\n\t\t})\n\t}\n\n\tif (plotgroups.length == 0) {\n\t\treturn false\n\t}\n\n\tif (categorycount.size > 0) {\n\t\t// will show legend for counts per category\n\t\tconst div = holder.append('div').style('margin', '20px 20px 0px 20px')\n\t\tfor (const [k, count] of categorycount) {\n\t\t\tconst c = tk.ds.vaf2coverageplot.categories[k]\n\t\t\tconst row = div.append('div').style('margin-bottom', '3px')\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t.style('background-color', c.color)\n\t\t\t\t.html(' ')\n\t\t\t// stop showing #sample as people may confuse with #patient\n\t\t\t//.text(count)\n\t\t\trow\n\t\t\t\t.append('span')\n\t\t\t\t.style('color', c.color)\n\t\t\t\t.text(c.label || k)\n\t\t}\n\t}\n\n\tconst row = holder.append('div').style('margin-bottom', '10px')\n\n\timport('./old/plot.vaf2cov').then(plotter => {\n\t\t/*\n\t\timport plotter, then plot all groups\n\t\teach plot will return data point -> svg cross,\n\t\tso to enable mouse over a sample in one plot, and highlight samples from other plots of the same patient\n\t\t*/\n\n\t\tconst name2sgp = {}\n\n\t\tfor (const g of plotgroups) {\n\t\t\tlet div = row.append('div').style('display', 'inline-block').style('vertical-align', 'top')\n\n\t\t\tif (plotgroups.length > 1) {\n\t\t\t\t// more than 1 group, emphasis\n\t\t\t\tdiv\n\t\t\t\t\t.style('margin-right', '30px')\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-top', '10px')\n\t\t\t\t\t.style('padding', '3px 10px')\n\t\t\t\t\t.style('background-color', '#aaa')\n\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t.text(g.name.toUpperCase())\n\t\t\t\tdiv = div.append('div').style('border', 'solid 1px #aaa')\n\t\t\t}\n\n\t\t\tconst arg = {\n\t\t\t\tholder: div,\n\t\t\t\tdata: g.lst,\n\t\t\t\tname: g.name,\n\t\t\t\ttip: tk.tktip,\n\t\t\t\tautomax: true,\n\t\t\t\tmouseover: d => {\n\t\t\t\t\tif (!d.sampleobj) return\n\t\t\t\t\tfor (const groupname in name2sgp) {\n\t\t\t\t\t\tif (groupname == g.name) continue\n\t\t\t\t\t\tname2sgp[groupname]\n\t\t\t\t\t\t\t.filter(d2 => {\n\t\t\t\t\t\t\t\treturn d2.sampleobj.patient == d.sampleobj.patient\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.each(d2 => {\n\t\t\t\t\t\t\t\td2.crosshair1.attr('transform', 'scale(2.5)')\n\t\t\t\t\t\t\t\td2.crosshair2.attr('transform', 'scale(2.5)')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmouseout: d => {\n\t\t\t\t\tif (!d.sampleobj) return\n\t\t\t\t\tfor (const groupname in name2sgp) {\n\t\t\t\t\t\tif (groupname == g.name) continue\n\t\t\t\t\t\tname2sgp[groupname]\n\t\t\t\t\t\t\t.filter(d2 => {\n\t\t\t\t\t\t\t\treturn d2.sampleobj.patient == d.sampleobj.patient\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.each(d2 => {\n\t\t\t\t\t\t\t\td2.crosshair1.attr('transform', 'scale(1)')\n\t\t\t\t\t\t\t\td2.crosshair2.attr('transform', 'scale(1)')\n\t\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\tname2sgp[g.name] = plotter.default(arg)\n\t\t}\n\t})\n\treturn true\n}\n\nexport function query_vcfcohorttrack(m, tk, block) {\n\t/*\n\tquery shadow track to get sample data for cov-vaf plot\n\t*/\n\n\tconst vobj = tk.ds.vcfcohorttrack\n\n\treturn Promise.resolve()\n\t\t.then(() => {\n\t\t\tif (vobj.info) {\n\t\t\t\t// info already loaded for cohort vcf file, next\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst par = {\n\t\t\t\tjwt: block.jwt,\n\t\t\t\tfile: vobj.file,\n\t\t\t\turl: vobj.url,\n\t\t\t\tindexURL: vobj.indexURL,\n\t\t\t\theader: 1\n\t\t\t}\n\n\t\t\t// info not loaded for cohort vcf\n\t\t\treturn fetch(\n\t\t\t\tnew Request(block.hostURL + '/vcf', {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tbody: JSON.stringify(par)\n\t\t\t\t})\n\t\t\t).then(data => {\n\t\t\t\treturn data.json()\n\t\t\t})\n\t\t})\n\t\t.then(data => {\n\t\t\tif (data == null) return\n\t\t\t// parse meta lines\n\t\t\tif (!data.metastr) throw { message: 'no meta lines for the cohort vcf file ' }\n\t\t\tif (!data.chrstr) throw { message: 'no chromosome names found for the cohort vcf file' }\n\t\t\tconst [info, format, samples, errs] = vcf.vcfparsemeta(data.metastr.split('\\n'))\n\t\t\tif (errs) throw { message: 'vcf meta error for the cohort vcf file: ' + errs.join('; ') }\n\t\t\tvobj.info = info\n\t\t\tvobj.format = format\n\n\t\t\tif (vobj.samplenamemap) {\n\t\t\t\tvobj.samples = samples.map(vobj.samplenamemap)\n\t\t\t} else {\n\t\t\t\tvobj.samples = samples\n\t\t\t}\n\n\t\t\tvobj.nochr = common.contigNameNoChr(block.genome, data.chrstr.split('\\n'))\n\n\t\t\treturn\n\t\t})\n\t\t.then(() => {\n\t\t\t// fetch sample data from cohort vcf\n\t\t\tconst par = {\n\t\t\t\tjwt: block.jwt,\n\t\t\t\tfile: vobj.file,\n\t\t\t\turl: vobj.url,\n\t\t\t\tindexURL: vobj.indexURL,\n\t\t\t\trglst: [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: vobj.nochr ? m.chr.replace('chr', '') : m.chr,\n\t\t\t\t\t\tstart: m.pos + 1,\n\t\t\t\t\t\tstop: m.pos + 1\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t\treturn fetch(\n\t\t\t\tnew Request(block.hostURL + '/vcf', {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tbody: JSON.stringify(par)\n\t\t\t\t})\n\t\t\t)\n\t\t\t\t.then(data => {\n\t\t\t\t\treturn data.json()\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.error) throw { message: 'Error querying vcf file: ' + data.error }\n\t\t\t\t\tconst lines = data.linestr ? data.linestr.trim().split('\\n') : []\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tconst [err, mlst, altinvalid] = vcf.vcfparseline(line, vobj)\n\t\t\t\t\t\tfor (const m2 of mlst) {\n\t\t\t\t\t\t\tif (m2.pos == m.pos && m2.ref == m.ref && m2.alt == m.alt) {\n\t\t\t\t\t\t\t\treturn m2\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\treturn null\n\t\t\t\t})\n\t\t})\n}\n\nfunction make_url4variant(holder, m, items) {\n\tfor (const item of items) {\n\t\tif (!item.makeurl) continue\n\t\tconst url = item.makeurl(m)\n\t\tif (!url) {\n\t\t\t// somehow this variant cannot yield a url, ignore\n\t\t\tcontinue\n\t\t}\n\t\tholder\n\t\t\t.append('a')\n\t\t\t.attr('href', url)\n\t\t\t.attr('target', '_blank')\n\t\t\t.text(item.makelabel ? item.makelabel(m) : item.label || 'link')\n\t\t\t.style('margin-right', '10px')\n\t}\n}\n\nfunction make_button4variant(holder, m, lst) {\n\tlst.forEach(item => {\n\t\tif (!item.makebutton) return\n\t\tconst div = holder.append('div').style('display', 'inline-block').style('margin', '0px 10px 2px 3px')\n\t\titem.makebutton(m, div.node())\n\t})\n}\n\nfunction mayshowgermline2dvaf(m, tk, holder) {\n\tconst cfg = tk.ds.germline2dvafplot\n\tif (!cfg) return false\n\n\tconst ik = cfg.individualkey\n\n\tconst individualset = new Map()\n\n\tlet err = 0\n\tfor (const s of m.sampledata) {\n\t\tif (s.DP == undefined || !s.allele2readcount) {\n\t\t\terr++\n\t\t\tcontinue\n\t\t}\n\t\t/*\n\t\tif alt allele is missing from the hash\n\t\ttreat the coverage of it as zero\n\t\t*/\n\t\tconst altv = s.allele2readcount[m.alt] || 0\n\t\tif (altv > s.DP) {\n\t\t\tconsole.log('alt coverage > DP: ' + altv + ' ' + s.DP)\n\t\t\tcontinue\n\t\t}\n\n\t\tconst individual = s.sampleobj[ik]\n\t\tif (!individual) {\n\t\t\tcontinue\n\t\t}\n\t\tconst sampletype = s.sampleobj[cfg.sampletypekey]\n\t\tif (!sampletype) {\n\t\t\tcontinue\n\t\t}\n\t\tif (!individualset.has(individual)) {\n\t\t\tconst obj = {\n\t\t\t\tsampletypes: {}\n\t\t\t}\n\t\t\tfor (const k in s.sampleobj) {\n\t\t\t\tobj[k] = s.sampleobj[k]\n\t\t\t}\n\n\t\t\tindividualset.set(individual, obj)\n\t\t}\n\t\tindividualset.get(individual).sampletypes[sampletype] = {\n\t\t\ttotal: s.DP,\n\t\t\tvaf: s.DP == 0 ? 0 : altv / s.DP\n\t\t}\n\t}\n\n\tif (err) {\n\t\tconsole.log(err + ' samples has no valid DP/allele2readcount')\n\t}\n\n\t// for yleftsampletype and yrightsampletype, each add a new datapoint\n\tconst data = []\n\tfor (const [k, obj] of individualset) {\n\t\tif (!obj.sampletypes[cfg.xsampletype]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif (obj.sampletypes[cfg.yleftsampletype]) {\n\t\t\tconst n = {}\n\t\t\tfor (const k in obj) {\n\t\t\t\tn[k] = obj[k]\n\t\t\t}\n\t\t\tn.sampletypes = {}\n\t\t\tn.sampletypes[cfg.xsampletype] = obj.sampletypes[cfg.xsampletype]\n\t\t\tn.sampletypes[cfg.yleftsampletype] = obj.sampletypes[cfg.yleftsampletype]\n\t\t\tdata.push(n)\n\t\t}\n\n\t\tif (cfg.yrightsampletype && obj.sampletypes[cfg.yrightsampletype]) {\n\t\t\tconst n = {}\n\t\t\tfor (const k in obj) {\n\t\t\t\tn[k] = obj[k]\n\t\t\t}\n\t\t\tn.sampletypes = {}\n\t\t\tn.sampletypes[cfg.xsampletype] = obj.sampletypes[cfg.xsampletype]\n\t\t\tn.sampletypes[cfg.yrightsampletype] = obj.sampletypes[cfg.yrightsampletype]\n\t\t\tdata.push(n)\n\t\t}\n\t}\n\tif (data.length) {\n\t\tconst div = holder.append('div').style('display', 'inline-block')\n\t\timport('./old/plot.2dvaf').then(p => {\n\t\t\tp.default(data, cfg, div)\n\t\t})\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunction mayshowgenotype2boxplot(m, tk, holder) {\n\tconst cfg = tk.ds.genotype2boxplot\n\tif (!cfg) return false\n\n\tif (cfg.boxplotvaluekey) {\n\t\tconst v = m.info[cfg.boxplotvaluekey]\n\t\tif (!v) return false\n\t\tconst tmp = v.split('|')\n\t\tconst plots = []\n\t\tfor (const s of tmp) {\n\t\t\tconst x = s.split('/')\n\n\t\t\tconst p1 = Number.parseFloat(x[1])\n\t\t\tconst p2 = Number.parseFloat(x[2])\n\t\t\tconst p3 = Number.parseFloat(x[3])\n\t\t\tconst p4 = Number.parseFloat(x[4])\n\t\t\tconst p5 = Number.parseFloat(x[5])\n\t\t\tif (Number.isNaN(p1) || Number.isNaN(p2) || Number.isNaN(p3) || Number.isNaN(p4) || Number.isNaN(p5)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tplots.push({\n\t\t\t\tlabel: x[0],\n\t\t\t\tcolor: '#4F8F38',\n\t\t\t\tminvalue: p1,\n\t\t\t\tmaxvalue: p5,\n\t\t\t\tpercentile: {\n\t\t\t\t\tp05: p1,\n\t\t\t\t\tp25: p2,\n\t\t\t\t\tp50: p3,\n\t\t\t\t\tp75: p4,\n\t\t\t\t\tp95: p5\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tconst div = holder.append('div').style('display', 'inline-block')\n\t\timport('./old/plot.boxplot').then(p => {\n\t\t\tconst err = p.default({\n\t\t\t\tholder: div,\n\t\t\t\taxislabel: cfg.axislabel,\n\t\t\t\tlist: plots\n\t\t\t})\n\t\t\tif (err) {\n\t\t\t\tclient.sayerror(div, 'Boxplot: ' + err)\n\t\t\t}\n\t\t})\n\t\treturn true\n\t}\n\n\tif (!tk.ds.cohort || !tk.ds.cohort.annotation || !tk.ds.cohort.key4annotation) {\n\t\tconsole.log('genotype2boxplot but ds.cohort is incomplete')\n\t\treturn false\n\t}\n\n\tconst gt2samples = new Map()\n\tm.sampledata.forEach(s => {\n\t\tif (!s.genotype) return\n\t\tconst k4a = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\tif (!k4a) return\n\t\tconst n = tk.ds.cohort.annotation[k4a]\n\t\tif (!n) return\n\t\tconst value = n[cfg.sampleannotationkey]\n\t\tif (!Number.isFinite(value)) return\n\t\tif (!gt2samples.has(s.genotype)) {\n\t\t\tgt2samples.set(s.genotype, [])\n\t\t}\n\t\tgt2samples.get(s.genotype).push({\n\t\t\tvalue: value,\n\t\t\tkey: k4a\n\t\t})\n\t})\n\n\tif (gt2samples.size == 0) {\n\t\treturn false\n\t}\n\n\tconst groups = []\n\tfor (const [genotype, samples] of gt2samples) {\n\t\tgroups.push({\n\t\t\tlabel: genotype,\n\t\t\tcolor: '#4F8F38',\n\t\t\tsamples: samples\n\t\t})\n\t}\n\tconst div = holder.append('div').style('display', 'inline-block')\n\timport('./old/plot.boxplot').then(p => {\n\t\tconst err = p.default({\n\t\t\tholder: div,\n\t\t\taxislabel: cfg.axislabel,\n\t\t\tlist: groups\n\t\t})\n\t\tif (err) {\n\t\t\tclient.sayerror(div, 'Boxplot: ' + err)\n\t\t}\n\t})\n\treturn true\n}\n\nfunction singleSample2table(m, tk, holder) {\n\t// only 1 sample\n\tconst s = m.sampledata[0]\n\tconst lst = []\n\tif (s.genotype) {\n\t\tlst.push({ k: 'genotype', v: s.genotype })\n\t}\n\tif (s.DP != undefined) {\n\t\tlst.push({ k: 'total reads', v: s.DP })\n\t}\n\tif (s.allele2readcount && s.allele2readcount[m.alt] != undefined) {\n\t\tlst.push({ k: 'alt reads', v: s.allele2readcount[m.alt] })\n\t} else {\n\t\tmay_addformat_singlesample(lst, m, tk)\n\t}\n\tif (s.sampleobj) {\n\t\tif (tk.ds.cohort && tk.ds.cohort.annotation && tk.ds.cohort.key4annotation) {\n\t\t\tconst k4a = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\tif (k4a) {\n\t\t\t\t// has valid key\n\n\t\t\t\tlst.push({ k: tk.ds.cohort.key4annotation, v: k4a })\n\n\t\t\t\tconst na = tk.ds.cohort.annotation[k4a]\n\n\t\t\t\tif (na) {\n\t\t\t\t\t// can find annotation\n\n\t\t\t\t\tif (tk.ds.cohort.levels) {\n\t\t\t\t\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\t\t\t\t\tif (!na[l.k]) continue\n\n\t\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\t\tk: l.label || l.k,\n\t\t\t\t\t\t\t\tv:\n\t\t\t\t\t\t\t\t\tna[l.k] +\n\t\t\t\t\t\t\t\t\t(l.full && na[l.full] ? ' <span style=\"font-size:.8em;color:#858585\">' + na[l.full] + '</span>' : '')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// no levels, show all from annotation\n\t\t\t\t\t\tfor (const k in na) {\n\t\t\t\t\t\t\tif (k == 'color') continue\n\t\t\t\t\t\t\tlst.push({ k: k, v: na[k] })\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} else if (s.sampleobj.name) {\n\t\t\tlst.push({ k: 'name', v: s.sampleobj.name })\n\t\t}\n\t}\n\tclient.make_table_2col(holder, lst)\n}\n\nfunction may_addformat_singlesample(lst, m, tk) {\n\t// quick fix: may add format\n\tlet vcfobj\n\tif (m.vcfid && tk.ds && tk.ds.id2vcf) vcfobj = tk.ds.id2vcf[m.vcfid]\n\tif (!vcfobj) return\n\tif (!vcfobj.format) return\n\tconst s = m.sampledata[0]\n\tfor (const formatfield in vcfobj.format) {\n\t\tconst formatdesc = vcfobj.format[formatfield]\n\t\tif (!(formatfield in s)) continue\n\t\t/* following are duplicated from block.mds.svcnv.clickitem.js, lines 1629\n\t\t */\n\t\t// if the FORMAT has per-allele value, like AD in vcf 4.2+\n\t\tlet isperallelevalue = formatdesc.Number == 'R' || formatdesc.Number == 'A'\n\t\tif (!isperallelevalue) {\n\t\t\tif (formatfield == 'AD') {\n\t\t\t\t// vcf 4.1 has AD as '.'\n\t\t\t\tisperallelevalue = true\n\t\t\t}\n\t\t}\n\n\t\tif (isperallelevalue) {\n\t\t\t// per allele value\n\n\t\t\tconst alleles = []\n\t\t\tconst values = []\n\t\t\tlet altvalue\n\n\t\t\t// add alt first\n\t\t\tfor (const ale in s[formatfield]) {\n\t\t\t\tif (ale == m.ref) continue\n\t\t\t\talleles.push(ale)\n\t\t\t\taltvalue = s[formatfield][ale]\n\t\t\t\tvalues.push(altvalue)\n\t\t\t}\n\n\t\t\t// add ref after alt\n\t\t\tconst refvalue = s[formatfield][m.ref]\n\t\t\tif (refvalue != undefined) {\n\t\t\t\talleles.push(m.ref)\n\t\t\t\tvalues.push(refvalue)\n\t\t\t}\n\n\t\t\tlet barsvg\n\t\t\tif (refvalue + altvalue > 0) {\n\t\t\t\tbarsvg = client.fillbar(null, { f: altvalue / (altvalue + refvalue) })\n\t\t\t}\n\n\t\t\tlst.push({\n\t\t\t\tk: formatfield,\n\t\t\t\tv:\n\t\t\t\t\t(barsvg ? barsvg + ' ' : '') +\n\t\t\t\t\t'<span style=\"font-size:.8em;opacity:.5\">' +\n\t\t\t\t\talleles.join(' / ') +\n\t\t\t\t\t'</span> ' +\n\t\t\t\t\tvalues.join(' / ') +\n\t\t\t\t\t(formatdesc.Description\n\t\t\t\t\t\t? ' <span style=\"font-size:.7em;opacity:.5\">' + formatdesc.Description + '</span>'\n\t\t\t\t\t\t: '')\n\t\t\t})\n\t\t} else {\n\t\t\tlst.push({\n\t\t\t\tk: formatfield,\n\t\t\t\tv: s[formatfield]\n\t\t\t})\n\t\t}\n\t}\n}\n\nfunction handle_samplecart(mlst, holder, tk, block) {\n\tif (!block.samplecart || !tk.ds || !tk.ds.sampleselectable) return\n\t/* select sample API applicable to this track\n\twill make one single button for selecting sample, independent of how many datatypes\n\t*/\n\tconst sampleset = new Set()\n\tfor (const m of mlst) {\n\t\tif (m.sample) {\n\t\t\t// FIXME hardcoded attribute\n\t\t\tsampleset.add(m.sample)\n\t\t}\n\t}\n\tif (sampleset.size == 0) {\n\t\t// no samples\n\t\treturn\n\t}\n\t// note for selection, try to use mname\n\tconst nameset = new Set()\n\tfor (const m of mlst) {\n\t\tconst classlab = common.mclass[m.class].label\n\t\tlet thisnote\n\t\tif (m.dt == common.dtfusionrna || m.dt == common.dtsv) {\n\t\t\tif (m.mname) {\n\t\t\t\tif (m.useNterm) {\n\t\t\t\t\tthisnote = (block.usegm ? block.usegm.name + '-' : '') + m.mname + ' ' + classlab\n\t\t\t\t} else {\n\t\t\t\t\tthisnote = m.mname + (block.usegm ? '-' + block.usegm.name : '') + ' ' + classlab\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthisnote = (block.usegm ? block.usegm.name : '') + ' ' + classlab\n\t\t\t}\n\t\t} else {\n\t\t\tthisnote = (m.mname ? m.mname + ' ' : '') + classlab + (block.usegm ? ' in ' + block.usegm.name : '')\n\t\t}\n\t\tnameset.add(thisnote)\n\t}\n\tlet note\n\tif (nameset.size == 1) {\n\t\tnote = 'having ' + [...nameset][0]\n\t} else {\n\t\tnote = 'having mutations' + (block.usegm ? ' in ' + block.usegm.name : '')\n\t}\n\n\tblock.samplecart.setBtns({\n\t\tsamplelst: [...sampleset],\n\t\tid: nameset.size ? [...nameset][0] : block.usegm ? block.usegm.name : '',\n\t\tbasket: 'Gene Mutation',\n\t\tcontainer: holder.append('div').style('margin-left', '10px').append('div')\n\t})\n}\n", "import * as client from './client'\nimport * as vcf from '#shared/vcf.js'\nimport * as coord from './coord'\nimport * as common from '#shared/common.js'\nimport { load2tk } from './block.ds'\n\n/*\n\nload vcf for vcf track, should be custom track from embedding api\n\nif has vcfcohorttrack, server will not preload the header, must be loaded here along with first data request\n\n\n********************** EXPORTED\n\nloadvcftk\ndata2tk\n\n\n*/\n\nexport function loadvcftk(block, tk) {\n\t// single file\n\n\tlet vcfconfig = null\n\tfor (const id in tk.ds.id2vcf) {\n\t\tvcfconfig = tk.ds.id2vcf[id]\n\t}\n\tif (!vcfconfig) {\n\t\tblock.tkcloakoff(tk, { error: 'no vcf config found' })\n\t\treturn\n\t}\n\n\tPromise.resolve()\n\t\t.then(() => {\n\t\t\tif (!vcfconfig.headernotloaded) return\n\t\t\tdelete vcfconfig.headernotloaded\n\t\t\tconst arg = ['genome=' + block.genome.name]\n\t\t\tif (vcfconfig.file) {\n\t\t\t\targ.push('file=' + vcfconfig.file)\n\t\t\t} else {\n\t\t\t\targ.push('url=' + vcfconfig.url)\n\t\t\t\tif (vcfconfig.indexURL) arg.push('indexURL=' + vcfconfig.indexURL)\n\t\t\t}\n\t\t\treturn client.dofetch2('vcfheader?' + arg.join('&')).then(data => {\n\t\t\t\tif (data.error) throw { message: data.error }\n\t\t\t\tif (!data.metastr) throw { message: 'no meta lines for vcf file ' + tk.name }\n\t\t\t\tconst [info, format, samples, errs] = vcf.vcfparsemeta(data.metastr.split('\\n'))\n\t\t\t\tif (errs) throw { error: 'vcf meta error for file ' + tk.name + ': ' + errs.join('; ') }\n\t\t\t\tvcfconfig.info = info\n\t\t\t\tvcfconfig.format = format\n\t\t\t\tif (vcfconfig.samplenamemap) {\n\t\t\t\t\tvcfconfig.samples = samples.map(vcfconfig.samplenamemap)\n\t\t\t\t} else {\n\t\t\t\t\tvcfconfig.samples = samples\n\t\t\t\t}\n\t\t\t\tvcfconfig.nochr = data.nochr\n\t\t\t})\n\t\t})\n\t\t.then(() => {\n\t\t\t// load m data for vcf\n\t\t\tconst arg = {\n\t\t\t\tfile: vcfconfig.file,\n\t\t\t\turl: vcfconfig.url,\n\t\t\t\tindexURL: vcfconfig.indexURL,\n\t\t\t\trglst: block.tkarg_maygm(tk)\n\t\t\t}\n\t\t\tif (vcfconfig.nochr) {\n\t\t\t\tfor (const r of arg.rglst) {\n\t\t\t\t\tr.chr = r.chr.replace('chr', '')\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn client.dofetch2('vcf', { method: 'POST', body: JSON.stringify(arg) }).then(data => {\n\t\t\t\tif (data.error) throw { message: data.error }\n\t\t\t\tconst lines = data.linestr ? data.linestr.trim().split('\\n') : []\n\t\t\t\tload2tk([{ vcfid: vcfconfig.vcfid, lines: lines }], block, tk)\n\t\t\t\treturn\n\t\t\t})\n\t\t})\n\t\t.catch(err => {\n\t\t\tif (err.stack) console.log(err.stack)\n\t\t\treturn err.message\n\t\t})\n\t\t.then(errmsg => {\n\t\t\tblock.tkcloakoff(tk, { error: errmsg })\n\t\t})\n}\n\nexport function data2tk(data, tk, block) {\n\tconst vcfconfig = tk.ds.id2vcf[data.vcfid]\n\tif (!vcfconfig) {\n\t\tblock.error('vcf not found by id: ' + data.vcfid)\n\t\treturn\n\t}\n\tif (!data.lines) {\n\t\tblock.error('no vcf lines from vcf file ' + data.vcfid)\n\t\treturn\n\t}\n\n\tconst errors = []\n\n\tfor (const line of data.lines) {\n\t\tconst [errmsg, mlst, altinvalid] = vcf.vcfparseline(line, vcfconfig)\n\t\tif (errmsg) {\n\t\t\terrors.push(errmsg)\n\t\t}\n\t\tif (!mlst) {\n\t\t\t// error\n\t\t\tcontinue\n\t\t}\n\n\t\tfor (const m of mlst) {\n\t\t\tif (m.alt == 'NON_REF') {\n\t\t\t\t// discard such from gVCF\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (tk.ds.discardsymbolicallele && m.issymbolicallele) {\n\t\t\t\t// user setting\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (block.usegm) {\n\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\tm.aapos = t.aapos\n\t\t\t}\n\t\t\tm.vcfid = data.vcfid\n\n\t\t\t/* what problem is this?\n\t\t\tif(m2.ref.length>m2.alt.length) {\n\t\t\t\tconst nt1=m2.ref[0]\n\t\t\t\tconst nt2=m2.alt[0]\n\t\t\t\tif(common.basecolor[nt1] && common.basecolor[nt2] && nt1==nt2) {\n\t\t\t\t\tis small deletion, both alleles are valid nucleotides\n\t\t\t\t\tfirst nt of both alleles are the same and it's the padding base\n\t\t\t\t\ttrim the padding base, shift the m.pos\n\t\t\t\t\tm2.ref=m2.ref.substr(1)\n\t\t\t\t\tif(m2.alt.length==1) {\n\t\t\t\t\t\tm2.alt='-'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm2.alt=m2.alt.substr(1)\n\t\t\t\t\t}\n\t\t\t\t\tm2.pos++\n\t\t\t\t\tif(block.usegm) {\n\t\t\t\t\t\tconst t=coord.genomic2gm(m2.pos,block.usegm)\n\t\t\t\t\t\tm2.rnapos=t.rnapos\n\t\t\t\t\t\tm2.aapos=t.aapos\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t*/\n\n\t\t\tcommon.vcfcopymclass(m, block)\n\n\t\t\ttk.mlst.push(m)\n\t\t}\n\t}\n\tif (!tk.dstk_novcferror && errors.length) {\n\t\tblock.error(\n\t\t\terrors[0] + (errors.length == 1 ? '' : ' and ' + (errors.length - 1) + ' more errors with the VCF track')\n\t\t)\n\t}\n}\n", "import { select as d3select } from 'd3-selection'\nimport { stratify, partition } from 'd3-hierarchy'\nimport { arc as d3arc } from 'd3-shape'\nimport { rgb as d3rgb } from 'd3-color'\nimport { itemtable } from './block.ds.itemtable'\nimport { stratinput } from '#shared/tree.js'\nimport { scaleOrdinal } from 'd3-scale'\nimport { schemeCategory10 } from 'd3-scale-chromatic'\nimport * as client from './client'\n\nexport default function (tk, block, arg) {\n\t/*\narg:\n\t.cx\n\t.cy\n\t\tcircle center x/y\n\t\toffset in tk.glider\n\t.mlst\n\t\tfrom tk.mlst[]\n\t.label\n\t.cohort\n\t\t.root\n\t\t\tif available, the cohort has all its samples stratified by levels[], and ready to present percentage in given sub set\n\t\t.levels[]\n\t\t.key2color - hardcoded colors\n\t\t.suncolor\n\n\t.noclickring\n\t.m2detail\n*/\n\n\tif (!arg.cohort) {\n\t\tconsole.error('arg.cohort missing')\n\t\treturn\n\t}\n\tif (!arg.cohort.levels) {\n\t\tconsole.error('arg.cohort.levels missing')\n\t\treturn\n\t}\n\n\tif (!arg.cohort.key2color && !arg.cohort.suncolor) {\n\t\t// auto color maker\n\t\targ.cohort.suncolor = scaleOrdinal(schemeCategory10)\n\t}\n\n\tlet itemlst\n\n\tif (!arg.cohort.annotation) {\n\t\titemlst = arg.mlst\n\t\t// itemlst must not be empty\n\t} else {\n\t\tif (!arg.cohort.key4annotation) {\n\t\t\tconsole.error('arg.cohort.key4annotation missing')\n\t\t\treturn\n\t\t}\n\t\t/*\n\tmlst:\n\t\tfor official ds with maf-db:\n\t\t\tone m is a variant in a sample\n\t\tfor multi-sample vcf:\n\t\t\tm.sampledata has per-sample info\n\twill normalize such and put to itemlst, each contains necessary annotation that match .cohort.levels and can be used to make sunburst\n\t*/\n\n\t\titemlst = []\n\n\t\tif (arg.mlst[0].sampledata) {\n\t\t\t// multi-sample vcf\n\t\t\tfor (const m of arg.mlst) {\n\t\t\t\tif (!m.sampledata) {\n\t\t\t\t\t// error\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\tconst k4a = s.sampleobj[arg.cohort.key4annotation]\n\t\t\t\t\tif (!k4a) {\n\t\t\t\t\t\t// this sample dont map to a proper key for cohort.annotation\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst sanno = arg.cohort.annotation[k4a]\n\t\t\t\t\tif (!sanno) {\n\t\t\t\t\t\t// not annotated\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst s2 = {\n\t\t\t\t\t\tk4a: k4a\n\t\t\t\t\t}\n\t\t\t\t\tfor (const l of arg.cohort.levels) {\n\t\t\t\t\t\ts2[l.k] = sanno[l.k]\n\t\t\t\t\t\tif (l.full) {\n\t\t\t\t\t\t\ts2[l.full] = sanno[l.full]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\titemlst.push(s2)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// each m is one variant per sample\n\t\t\tfor (const m of arg.mlst) {\n\t\t\t\tconst k4a = m[arg.cohort.key4annotation]\n\t\t\t\tif (!k4a) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst sanno = arg.cohort.annotation[k4a]\n\t\t\t\tif (!sanno) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst s2 = {\n\t\t\t\t\tk4a: k4a\n\t\t\t\t}\n\t\t\t\tfor (const l of arg.cohort.levels) {\n\t\t\t\t\ts2[l.k] = sanno[l.k]\n\t\t\t\t\tif (l.full) {\n\t\t\t\t\t\ts2[l.full] = sanno[l.full]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titemlst.push(s2)\n\t\t\t}\n\t\t}\n\n\t\tif (itemlst.length == 0) {\n\t\t\t/*\n\t\tsince itemlst is recalculated, it maybe empty\n\t\tterminate\n\t\t*/\n\t\t\tif (arg.m2detail) {\n\t\t\t\titemtable({\n\t\t\t\t\tmlst: [arg.m2detail],\n\t\t\t\t\tpane: true,\n\t\t\t\t\tx: arg.cx,\n\t\t\t\t\ty: arg.cy,\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\titemtable({\n\t\t\t\t\tmlst: arg.mlst,\n\t\t\t\t\tpane: true,\n\t\t\t\t\tx: arg.cx,\n\t\t\t\t\ty: arg.cy,\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\n\tlet cx = arg.cx,\n\t\tcy = arg.cy,\n\t\tdur1 = 500,\n\t\tdur2 = 250\n\tconst g = tk.glider.append('g').attr('transform', 'translate(' + cx + ',' + cy + ')')\n\tconst pica = tk.pica\n\tconst eye = g.append('g')\n\tconst ring = g.append('g')\n\tconst sun = {\n\t\tg: g,\n\t\teye: eye,\n\t\tring: ring,\n\t\tpica: pica,\n\t\tbusy: false\n\t}\n\n\tlet radius = Math.log(itemlst.length) * 24\n\tif (radius > tk.height * 0.42) {\n\t\tradius = tk.height * 0.42\n\t} else if (radius < tk.height * 0.2) {\n\t\tradius = tk.height * 0.2\n\t}\n\t// radius is set, shift g if it get outside\n\tlet newcx = cx,\n\t\tnewcy = cy\n\tif (cx - radius < 0) {\n\t\tnewcx = radius\n\t} else if (cx + radius > block.width) {\n\t\tnewcx = block.width - radius\n\t}\n\tif (cy - radius < 0) {\n\t\tnewcy = radius\n\t} else if (cy + radius > tk.height) {\n\t\tnewcy = tk.height - radius\n\t}\n\tif (newcx != cx || newcy != cy) {\n\t\tg.transition()\n\t\t\t.delay(dur1 + dur2)\n\t\t\t.attr('transform', 'translate(' + newcx + ',' + newcy + ')')\n\t\tcx = newcx\n\t\tcy = newcy\n\t}\n\t// hierarchy\n\tconst dat = stratinput(itemlst, arg.cohort.levels)\n\tconst root = stratify()(dat)\n\troot.sum(i => i.value)\n\troot.sort((a, b) => b.value - a.value)\n\tpartition().size([1, Math.pow(radius, 2)])(root)\n\t// blocker\n\teye.append('circle').attr('r', radius).attr('fill', 'white').attr('fill-opacity', 0)\n\n\tlet emptyspace\n\tconst arcfunc = d3arc()\n\t\t.startAngle(d => Math.PI * 2 * d.x0)\n\t\t.endAngle(d => Math.PI * 2 * d.x1)\n\t\t.innerRadius(d => {\n\t\t\tif (!d.parent) {\n\t\t\t\temptyspace = Math.sqrt(d.y1) - radius / 15\n\t\t\t\treturn emptyspace\n\t\t\t}\n\t\t\treturn Math.sqrt(d.y0)\n\t\t})\n\t\t.outerRadius(d => {\n\t\t\td.outradius = Math.sqrt(d.y1)\n\t\t\treturn d.outradius\n\t\t})\n\n\tring\n\t\t.selectAll()\n\t\t.data(root.descendants())\n\t\t.enter()\n\t\t.append('path')\n\t\t.attr('d', arcfunc)\n\t\t.attr('stroke', 'white')\n\t\t.attr('fill', d => {\n\t\t\tif (!d.parent) {\n\t\t\t\t// is root\n\t\t\t\treturn 'white'\n\t\t\t}\n\t\t\tlet key\n\t\t\tif (d.children) {\n\t\t\t\tkey = d.id\n\t\t\t} else {\n\t\t\t\tif (!d.parent.parent) {\n\t\t\t\t\t// parent is root, still use self\n\t\t\t\t\tkey = d.id\n\t\t\t\t} else {\n\t\t\t\t\tkey = d.parent.id\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// what color\n\t\t\tlet c\n\t\t\tif (arg.cohort.key2color) {\n\t\t\t\tc = arg.cohort.key2color[key]\n\t\t\t\tif (!c) {\n\t\t\t\t\tconsole.log(key)\n\t\t\t\t\tc = '#858585'\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tc = arg.cohort.suncolor(key)\n\t\t\t}\n\t\t\td._color = c\n\n\t\t\treturn c\n\t\t})\n\t\t.on('mouseover', (event, d) => {\n\t\t\tif (!d.parent) return\n\t\t\tif (sun.busy) return\n\n\t\t\tevent.target.setAttribute('fill', d3rgb(d._color).darker(0.5).toString())\n\t\t\tslicemouseover(d, pica, arg, cx, cy, tk, block)\n\t\t})\n\t\t.on('mouseout', (event, d) => {\n\t\t\tpica.g.selectAll('*').remove()\n\t\t\tif (!d.parent) return\n\t\t\tevent.target.setAttribute('fill', d._color)\n\t\t})\n\n\t\t.on('click', (event, d) => {\n\t\t\t// clicking on slice\n\t\t\tif (arg.noclickring) {\n\t\t\t\t// no clicking rings\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!d.parent) {\n\t\t\t\t// root not clickable\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (arg.cohort.annotation) {\n\t\t\t\t// external annotation\n\t\t\t\tif (d.data.lst.length == 1) {\n\t\t\t\t\t// single sample\n\t\t\t\t\tshowsinglesample(d.data.lst[0].k4a, arg.cohort.annotation[d.data.lst[0].k4a], event.clientX, event.clientY)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tshowmanysample(d.data.lst, arg.cohort, event.clientX, event.clientY)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// old style official ds\n\t\t\titemtable({\n\t\t\t\tmlst: d.data.lst,\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY,\n\t\t\t\ttk: tk,\n\t\t\t\tblock: block,\n\t\t\t\tpane: true\n\t\t\t})\n\t\t})\n\n\tconst eyeheight = emptyspace * 2\n\tring\n\t\t.attr('transform', 'scale(.3,.3)')\n\t\t.attr('fill-opacity', 0)\n\t\t.transition()\n\t\t.duration(dur1)\n\t\t.attr('transform', 'scale(1,1)')\n\t\t.attr('fill-opacity', 1)\n\t\t.on('end', () => {\n\t\t\teye.shutter = eye\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', -emptyspace)\n\t\t\t\t.attr('y', -emptyspace)\n\t\t\t\t.attr('width', emptyspace * 2)\n\t\t\t\t.attr('height', 0)\n\t\t\t\t.attr('fill', '#ededed')\n\t\t\t\t.on('click', () => remove(sun))\n\t\t\teye.shutter\n\t\t\t\t.transition()\n\t\t\t\t.duration(dur2)\n\t\t\t\t.attr('height', emptyspace * 2)\n\t\t\t\t.on('end', () => {\n\t\t\t\t\t// shutter done, add things\n\t\t\t\t\teye.fore = eye.append('g')\n\t\t\t\t\tconst fontsize1 = Math.min(eyeheight / (arg.label.length * client.textlensf), emptyspace * 0.6)\n\t\t\t\t\teye.fore\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(arg.label)\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t\t.attr('font-family', 'Arial')\n\t\t\t\t\t\t.attr('font-size', fontsize1)\n\t\t\t\t\tconst fontsize = Math.min(\n\t\t\t\t\t\t18,\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t(emptyspace * 0.7) / (itemlst.length.toString().length * client.textlensf),\n\t\t\t\t\t\t\t(emptyspace - fontsize1 / 2) * 0.7\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\teye.fore\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(itemlst.length)\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t\t\t\t.attr('y', -fontsize1 / 2 - 2)\n\t\t\t\t\t\t.attr('font-family', 'Arial')\n\t\t\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t\teye\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', -emptyspace)\n\t\t\t\t\t\t.attr('y', -emptyspace)\n\t\t\t\t\t\t.attr('width', emptyspace * 2)\n\t\t\t\t\t\t.attr('height', emptyspace * 2)\n\t\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tif (sun.busy) return\n\t\t\t\t\t\t\tremove(sun)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mousedown', event => {\n\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\tlet cx0 = cx,\n\t\t\t\t\t\t\t\tcy0 = cy,\n\t\t\t\t\t\t\t\tmx = event.clientX,\n\t\t\t\t\t\t\t\tmy = event.clientY,\n\t\t\t\t\t\t\t\tbody = d3select(document.body)\n\t\t\t\t\t\t\tbody\n\t\t\t\t\t\t\t\t.on('mousemove', event => {\n\t\t\t\t\t\t\t\t\tsun.busy = true // must set here but not mousedown\n\t\t\t\t\t\t\t\t\tcx = cx0 + event.clientX - mx\n\t\t\t\t\t\t\t\t\tcy = cy0 + event.clientY - my\n\t\t\t\t\t\t\t\t\tg.attr('transform', 'translate(' + cx + ',' + cy + ')')\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.on('mouseup', () => {\n\t\t\t\t\t\t\t\t\tsetTimeout(() => (sun.busy = false), 10)\n\t\t\t\t\t\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\n\t\t\t\t\t// button at bottom\n\t\t\t\t\tsun.listbutt = eye.append('g').attr('transform', 'translate(0,' + fontsize1 / 2 + ')')\n\t\t\t\t\tconst listbutt_bg = sun.listbutt\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', -eyeheight / 2)\n\t\t\t\t\t\t.attr('width', eyeheight)\n\t\t\t\t\t\t.attr('height', emptyspace - fontsize1 / 2)\n\t\t\t\t\t\t.attr('fill', '#d9d9d9')\n\t\t\t\t\tconst listbutt_text = sun.listbutt\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(arg.m2detail ? 'Show' : 'List')\n\t\t\t\t\t\t.attr('y', (emptyspace - fontsize1 / 2) / 2)\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('font-family', 'Arial')\n\t\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t\t\t\t.attr('font-size', Math.min(18, fontsize))\n\t\t\t\t\tsun.listbutt\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', -eyeheight / 2)\n\t\t\t\t\t\t.attr('width', eyeheight)\n\t\t\t\t\t\t.attr('height', emptyspace - fontsize1 / 2)\n\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\t\tlistbutt_bg.attr('fill', '#bababa')\n\t\t\t\t\t\t\tlistbutt_text.attr('fill', 'white')\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\tlistbutt_bg.attr('fill', '#d9d9d9')\n\t\t\t\t\t\t\tlistbutt_text.attr('fill', '#858585')\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('click', event => {\n\t\t\t\t\t\t\tif (arg.m2detail) {\n\t\t\t\t\t\t\t\tremove(sun)\n\t\t\t\t\t\t\t\titemtable({\n\t\t\t\t\t\t\t\t\tmlst: [arg.m2detail],\n\t\t\t\t\t\t\t\t\tpane: true,\n\t\t\t\t\t\t\t\t\tx: event.clientX - radius,\n\t\t\t\t\t\t\t\t\ty: event.clientY - radius * 2,\n\t\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\t\t\t\tremove(sun)\n\t\t\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\titemtable({\n\t\t\t\t\t\t\t\t\t\tmlst: arg.mlst,\n\t\t\t\t\t\t\t\t\t\tx: p.left,\n\t\t\t\t\t\t\t\t\t\ty: p.top,\n\t\t\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\t\t\t\t\tpane: true\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t500\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t})\n}\n\nfunction remove(sun) {\n\tsun.busy = true\n\tif (sun.eye.fore) {\n\t\tsun.eye.fore.remove()\n\t}\n\tif (sun.listbutt) {\n\t\tsun.listbutt.remove()\n\t}\n\tif (sun.eye.shutter) {\n\t\tsun.eye.shutter\n\t\t\t.transition()\n\t\t\t.attr('height', 0)\n\t\t\t.on('end', () => {\n\t\t\t\tsun.ring\n\t\t\t\t\t.transition()\n\t\t\t\t\t.attr('transform', 'scale(.5,.5)')\n\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t.on('end', () => {\n\t\t\t\t\t\tsun.g.remove()\n\t\t\t\t\t\tsun.pica.g.selectAll('*').remove()\n\t\t\t\t\t})\n\t\t\t})\n\t} else {\n\t\tsun.ring\n\t\t\t.transition()\n\t\t\t.attr('transform', 'scale(.5,.5)')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.on('end', () => {\n\t\t\t\tsun.g.remove()\n\t\t\t\tsun.pica.g.selectAll('*').remove()\n\t\t\t})\n\t}\n\tsun.pica.g.selectAll('*').remove()\n}\n\nfunction slicemouseover(d, pica, arg, cx, cy, tk, block) {\n\tconst cht = arg.cohort\n\n\tconst fontsize = 13\n\tconst barheight = 10\n\tconst ypad = 1\n\n\tlet toangle = (d.x0 + d.x1) / 2\n\t/*\n\tmid angle determines pica placement, \n\t*/\n\tif (toangle >= 0.375 && toangle <= 0.625) {\n\t\t// around PI, see if need to shift to >PI or <PI\n\t\t// get low point yoff given angle PI and d.outradius and placement in tk\n\t\tconst yoff = tk.yoff + cy + d.outradius\n\t\tconst alltkh = Number.parseFloat(block.svg.attr('height'))\n\n\t\t// need to get pica height by # of rows\n\t\tconst picaheight = fontsize + ypad + fontsize + (cht && cht.root ? ypad + barheight + 5 : 0)\n\n\t\tif (yoff >= alltkh - 30) {\n\t\t\t// not enough space in block at angle PI, shift\n\t\t\tif (toangle <= 0.5) {\n\t\t\t\ttoangle = Math.max(0.25, d.x0)\n\t\t\t} else {\n\t\t\t\ttoangle = Math.min(0.75, d.x1)\n\t\t\t}\n\t\t}\n\t}\n\n\tpica.g.selectAll('*').remove()\n\tconst x = cx + (d.outradius + 5) * Math.sin(Math.PI * 2 * toangle)\n\tconst y = cy - (d.outradius + 5) * Math.cos(Math.PI * 2 * toangle)\n\tpica.g.attr('transform', 'translate(' + x + ',' + y + ')')\n\n\tconst barwidth = 60\n\n\tlet bar = null,\n\t\tcohortsize = 0\n\n\tif (cht && cht.root) {\n\t\tbar = pica.g.append('g')\n\t\tbar\n\t\t\t.append('rect')\n\t\t\t.attr('width', barwidth + 4)\n\t\t\t.attr('height', barheight + 4)\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\tbar\n\t\t\t.append('rect')\n\t\t\t.attr('x', 2)\n\t\t\t.attr('y', 2)\n\t\t\t.attr('width', barwidth)\n\t\t\t.attr('height', barheight)\n\t\t\t.attr('fill', cht.fbarbg || '#ededed')\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\tcht.root.each(i => {\n\t\t\tif (i.id == d.id) {\n\t\t\t\tcohortsize = i.value\n\t\t\t}\n\t\t})\n\t\tif (cohortsize > 0) {\n\t\t\tbar\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', 2)\n\t\t\t\t.attr('y', 2)\n\t\t\t\t.attr('width', (barwidth * d.value) / cohortsize)\n\t\t\t\t.attr('height', barheight)\n\t\t\t\t.attr('fill', cht.fbarfg || '#858585')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t}\n\t}\n\tconst text0 = pica.g\n\t\t.append('text')\n\t\t.attr('stroke', 'white')\n\t\t.attr('stroke-width', 3)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', 'Arial')\n\tconst text = pica.g\n\t\t.append('text')\n\t\t.attr('fill', 'black')\n\t\t.attr('fill-opacity', 1)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', 'Arial')\n\t// FIXME \"sample\" hardcoded\n\tconst textt = d.data.name + ', ' + d.value + ' sample' + (d.value > 1 ? 's' : '')\n\ttext0.text(d.data.name)\n\ttext.text(d.data.name)\n\tconst text20 = pica.g\n\t\t.append('text')\n\t\t.attr('stroke', 'white')\n\t\t.attr('stroke-width', 3)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', 'Arial')\n\tconst text2 = pica.g\n\t\t.append('text')\n\t\t.attr('fill', 'black')\n\t\t.attr('fill-opacity', 1)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', 'Arial')\n\tconst tt = d.value + ' sample' + (d.value > 1 ? 's' : '') + (bar ? ' (' + cohortsize + ' total)' : '')\n\ttext20.text(tt)\n\ttext2.text(tt)\n\tconst textwidth = Math.max(text.node().getBBox().width, text2.node().getBBox().width)\n\n\tif (toangle < 0.25) {\n\t\ttext20.attr('y', bar ? -3 - barheight - ypad : 0)\n\t\ttext2.attr('y', bar ? -3 - barheight - ypad : 0)\n\t\ttext0.attr('y', (bar ? -3 - barheight - ypad : 0) - fontsize - ypad)\n\t\ttext.attr('y', (bar ? -3 - barheight - ypad : 0) - fontsize - ypad)\n\t\tif (bar) {\n\t\t\tbar.attr('transform', 'translate(0,-' + barheight + ')')\n\t\t}\n\t} else if (toangle < 0.5) {\n\t\ttext0.attr('dominant-baseline', 'hanging').attr('y', 0)\n\t\ttext.attr('dominant-baseline', 'hanging').attr('y', 0)\n\t\ttext20.attr('dominant-baseline', 'hanging').attr('y', ypad + fontsize)\n\t\ttext2.attr('dominant-baseline', 'hanging').attr('y', ypad + fontsize)\n\t\tif (bar) {\n\t\t\tbar.attr('transform', 'translate(0,' + (fontsize + ypad) * 2 + ')')\n\t\t}\n\t} else if (toangle < 0.75) {\n\t\ttext0.attr('dominant-baseline', 'hanging').attr('text-anchor', 'end').attr('y', 0)\n\t\ttext.attr('dominant-baseline', 'hanging').attr('text-anchor', 'end').attr('y', 0)\n\t\ttext20\n\t\t\t.attr('dominant-baseline', 'hanging')\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('y', ypad + fontsize)\n\t\ttext2\n\t\t\t.attr('dominant-baseline', 'hanging')\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('y', ypad + fontsize)\n\t\tif (bar) {\n\t\t\tbar.attr('transform', 'translate(-' + barwidth + ',' + (fontsize + ypad) * 2 + ')')\n\t\t}\n\t} else {\n\t\ttext20.attr('text-anchor', 'end').attr('y', bar ? -3 - barheight - ypad : 0)\n\t\ttext2.attr('text-anchor', 'end').attr('y', bar ? -3 - barheight - ypad : 0)\n\t\ttext0.attr('text-anchor', 'end').attr('y', (bar ? -3 - barheight - ypad : 0) - fontsize - ypad)\n\t\ttext.attr('text-anchor', 'end').attr('y', (bar ? -3 - barheight - ypad : 0) - fontsize - ypad)\n\t\tif (bar) {\n\t\t\tbar.attr('transform', 'translate(-' + barwidth + ',-' + barheight + ')')\n\t\t}\n\t}\n}\n\nfunction showsinglesample(samplename, anno, x, y) {\n\tconst lst = []\n\tfor (const k in anno) {\n\t\tlst.push({ k: k, v: anno[k] })\n\t}\n\tconst pane = client.newpane({ x: x, y: y })\n\tpane.header.text(samplename)\n\tclient.make_table_2col(pane.body, lst)\n}\n\nfunction showmanysample(samples, cohort, x, y) {\n\t// each sample has k4a\n\tconst attrset = new Set()\n\tfor (const s of samples) {\n\t\tconst a = cohort.annotation[s.k4a]\n\t\tfor (const k in a) {\n\t\t\tattrset.add(k)\n\t\t}\n\t}\n\tconst pane = client.newpane({ x: x, y: y })\n\tpane.header.text(samples.length + ' ' + cohort.key4annotation + 's')\n\tconst table = pane.body.append('table')\n\n\tconst headers = [...attrset]\n\t{\n\t\t// header\n\t\tconst tr = table.append('tr')\n\t\tfor (const h of headers) {\n\t\t\ttr.append('td').text(h).style('color', '#858585').style('font-size', '.7em')\n\t\t}\n\t}\n\n\tfor (const s of samples) {\n\t\tconst tr = table.append('tr').attr('class', 'sja_tr')\n\t\tconst anno = cohort.annotation[s.k4a]\n\t\tfor (const h of headers) {\n\t\t\ttr.append('td').text(anno[h] == undefined ? '' : anno[h])\n\t\t}\n\t}\n}\n", "import sun1 from './block.ds.sun1'\nimport { itemtable } from './block.ds.itemtable'\n\n/*\nmay show sunburst chart using several possible data sources\neither server-side computed summary, or client-side computed\n\ntodo: as the central place for making sunburst\nsunburst.js to replace sun1\n*/\n\nexport default async function(occurrence, mlst, cx, cy, tk, block) {\n\tif (tk.ds) {\n\t\t// legacy ds\n\t\tif (tk.ds.cohort) {\n\t\t\t// legacy cohort config on legacy ds\n\t\t\tlet showsunburst = false\n\t\t\tif (tk.ds.cohort.annotation) {\n\t\t\t\tif (tk.ds.cohort.variantsunburst) {\n\t\t\t\t\tshowsunburst = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no annotation, should be old-style official ds\n\t\t\t\t// FIXME update to new ds\n\t\t\t\t// or all update to mds altogether\n\t\t\t\tshowsunburst = true\n\t\t\t}\n\t\t\tif (showsunburst) {\n\t\t\t\tsun1(tk, block, {\n\t\t\t\t\tcx,\n\t\t\t\t\tcy,\n\t\t\t\t\tmlst: mlst,\n\t\t\t\t\tlabel: mlst[0].mname,\n\t\t\t\t\tcohort: tk.ds.cohort\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n", "import { scaleLinear } from 'd3-scale'\nimport { axisLeft } from 'd3-axis'\nimport { format as d3format } from 'd3-format'\nimport { arc as d3arc } from 'd3-shape'\nimport { rgb as d3rgb } from 'd3-color'\nimport { select as d3select } from 'd3-selection'\nimport { itemtable, query_vcfcohorttrack } from './block.ds.itemtable'\nimport * as client from './client'\nimport * as coord from './coord'\nimport * as common from '#shared/common.js'\nimport may_sunburst from './block.sunburst'\nimport {\n\tmlst_pretreat,\n\ttkdata_update_x,\n\tminbpwidth,\n\tdisclabelspacing,\n\tgetter_mcset_key,\n\tmiddlealignshift,\n\tepaint_may_hl,\n\tdone_tknodata\n} from './block.ds'\n\n/*\n\nnew:\n\tsamplebynumericvalue\n\n\nFIXME ITD stack bars not working\n\n\n********************** EXPORTED\n\nrendernumerictk()\n\n********************** INTERNAL\n\nnumeric_make()\n\n*/\n\nconst clustercrowdlimit = 7 // at least 8 px per disc, otherwise won't show mname label\n\nconst mnamegetter = s => {\n\tif (!s) return ''\n\t// trim too long names\n\tif (s.length > 25) {\n\t\treturn s.substr(0, 20) + '...'\n\t}\n\treturn s\n}\n\nexport function rendernumerictk(tk, block, originhidden) {\n\t/*\n\tmakes:\n\n\ttk.data\n\ttk.skewer2\n\n\t*/\n\n\tconst nm = tk.numericmode\n\n\tif (!nm.axisheight) {\n\t\tnm.axisheight = 100\n\t}\n\n\t// do not skip grouping!?\n\n\t// create group and plot anew\n\ttk.glider.selectAll('*').remove()\n\tdelete tk.skewer\n\n\tconst usemlst = mlst_pretreat(tk, block, originhidden)\n\n\tconst x2mlst = new Map()\n\tfor (const m of usemlst) {\n\t\tif (m.__x == undefined) {\n\t\t\t// dropped by filter\n\t\t\tcontinue\n\t\t}\n\t\tif (!x2mlst.has(m.__x)) {\n\t\t\tx2mlst.set(m.__x, [])\n\t\t}\n\t\tx2mlst.get(m.__x).push(m)\n\t}\n\tconst datagroup = []\n\tconst topxbins = []\n\t// by resolution\n\tif (block.exonsf >= minbpwidth) {\n\t\t// # pixel per nt is big enough\n\t\t// group by each nt\n\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\tdatagroup.push({\n\t\t\t\tchr: mlst[0].chr,\n\t\t\t\tpos: mlst[0].pos,\n\t\t\t\tmlst: mlst,\n\t\t\t\tx: x\n\t\t\t})\n\t\t}\n\t} else {\n\t\t// # pixel per nt is too small\n\t\tif (block.usegm && block.usegm.coding && block.gmmode != client.gmmode.genomic) {\n\t\t\t// by aa\n\t\t\t// in gmsum, rglst may include introns, need to distinguish symbolic and rglst introns, use __x difference by a exonsf*3 limit\n\t\t\tconst aa2mlst = new Map()\n\t\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\t\tif (mlst[0].chr != block.usegm.chr) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// TODO how to identify if mlst belongs to regulatory region rather than gm\n\t\t\t\tlet aapos = undefined\n\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\tif (Number.isFinite(m.aapos)) aapos = m.aapos\n\t\t\t\t}\n\t\t\t\tif (aapos == undefined) {\n\t\t\t\t\taapos = coord.genomic2gm(mlst[0].pos, block.usegm).aapos\n\t\t\t\t}\n\t\t\t\tif (aapos == undefined) {\n\t\t\t\t\tconsole.error('data item cannot map to aaposition')\n\t\t\t\t\tconsole.log(mlst[0])\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// this group can be anchored to a aa\n\t\t\t\tx2mlst.delete(x)\n\n\t\t\t\tif (!aa2mlst.has(aapos)) {\n\t\t\t\t\taa2mlst.set(aapos, [])\n\t\t\t\t}\n\t\t\t\tlet notmet = true\n\t\t\t\tfor (const lst of aa2mlst.get(aapos)) {\n\t\t\t\t\tif (Math.abs(lst[0].__x - mlst[0].__x) <= block.exonsf * 3) {\n\t\t\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\t\t\tlst.push(m)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnotmet = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (notmet) {\n\t\t\t\t\taa2mlst.get(aapos).push(mlst)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst utr5len = block.usegm.utr5 ? block.usegm.utr5.reduce((i, j) => i + j[1] - j[0], 0) : 0\n\t\t\tfor (const llst of aa2mlst.values()) {\n\t\t\t\tfor (const mlst of llst) {\n\t\t\t\t\tlet m = null\n\t\t\t\t\tfor (const m2 of mlst) {\n\t\t\t\t\t\tif (Number.isFinite(m2.rnapos)) m = m2\n\t\t\t\t\t}\n\t\t\t\t\tif (m == null) {\n\t\t\t\t\t\tconsole.log('trying to map mlst to codon, but no rnapos found')\n\t\t\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\t\t\tconsole.log(m)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tdatagroup.push({\n\t\t\t\t\t\tchr: mlst[0].chr,\n\t\t\t\t\t\tpos: m.pos,\n\t\t\t\t\t\tmlst: mlst,\n\t\t\t\t\t\tx: mlst[0].__x\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// leftover by px bin\n\t\tconst pxbin = []\n\t\tconst binpx = 2\n\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\tconst i = Math.floor(x / binpx)\n\t\t\tif (!pxbin[i]) {\n\t\t\t\tpxbin[i] = []\n\t\t\t}\n\t\t\tpxbin[i] = [...pxbin[i], ...mlst]\n\t\t}\n\t\tfor (const mlst of pxbin) {\n\t\t\tif (!mlst) continue\n\t\t\tconst xsum = mlst.reduce((i, j) => i + j.__x, 0)\n\t\t\tdatagroup.push({\n\t\t\t\tisbin: true,\n\t\t\t\tchr: mlst[0].chr,\n\t\t\t\tpos: mlst[0].pos,\n\t\t\t\tmlst: mlst,\n\t\t\t\tx: xsum / mlst.length\n\t\t\t})\n\t\t}\n\t}\n\n\tdatagroup.sort((a, b) => a.x - b.x)\n\n\tif (tk.data && block.pannedpx != undefined && (!block.usegm || block.gmmode == client.gmmode.genomic)) {\n\t\t// inherit genomic mode and panned\n\t\tconst pastmode = {}\n\t\tfor (const g of tk.data) {\n\t\t\tpastmode[g.chr + '.' + g.pos] = {\n\t\t\t\txoffset: g.xoffset\n\t\t\t}\n\t\t}\n\t\tfor (const g of datagroup) {\n\t\t\tconst k = g.chr + '.' + g.pos\n\t\t\tif (pastmode[k]) {\n\t\t\t\tg.xoffset = pastmode[k].xoffset\n\t\t\t}\n\t\t}\n\t}\n\ttk.data = datagroup\n\n\tnumeric_make(tk, block)\n\n\ttk.height_main =\n\t\ttk.toppad +\n\t\tnm.toplabelheight +\n\t\t//+disclabelspacing\n\t\tnm.maxradius +\n\t\tnm.axisheight +\n\t\tnm.maxradius +\n\t\ttk.stem1 +\n\t\ttk.stem2 +\n\t\ttk.stem3 +\n\t\tnm.bottomlabelheight +\n\t\ttk.bottompad\n\n\tif (!tk.data || tk.data.length == 0) {\n\t\tdone_tknodata(tk, block)\n\t\treturn\n\t}\n\n\t/*\n\tvariants loaded for this track\n\t*/\n}\n\nfunction color4disc(m, tk) {\n\tif (tk.vcfinfofilter && tk.vcfinfofilter.setidx4mclass != undefined) {\n\t\tconst mcset = tk.vcfinfofilter.lst[tk.vcfinfofilter.setidx4mclass]\n\n\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\n\t\tif (err || vlst == undefined) return 'black'\n\n\t\tfor (const v of vlst) {\n\t\t\tif (mcset.categories[v]) {\n\t\t\t\treturn mcset.categories[v].color\n\t\t\t} else {\n\t\t\t\treturn 'black'\n\t\t\t}\n\t\t}\n\t}\n\n\t// mclass\n\tif (common.mclass[m.class]) {\n\t\treturn common.mclass[m.class].color\n\t}\n\treturn 'black'\n}\n\nfunction numeric_make(tk, block) {\n\t/*\n\t */\n\n\tconst nm = tk.numericmode\n\n\t// ITD/DEL stacked bars XXX won't do\n\tconst stackbars = []\n\tfor (const d of tk.data) {\n\t\td.x0 = d.x\n\t\tif (d.xoffset != undefined) {\n\t\t\td.x = d.x0 + d.xoffset\n\t\t}\n\n\t\tcontinue\n\t\t// TODO\n\t\t// updates x\n\t\t// create stack bars\n\t\tfor (const g of d.groups) {\n\t\t\tg.aa = d // disc reference group\n\t\t\tlet rnaspan = null\n\t\t\tif (g.dt == common.dtitd) {\n\t\t\t\trnaspan = g.mlst[0].rnaduplength\n\t\t\t\tfor (const m of g.mlst) {\n\t\t\t\t\trnaspan = Math.max(rnaspan, m.rnaduplength)\n\t\t\t\t}\n\t\t\t} else if (g.dt == common.dtdel) {\n\t\t\t\trnaspan = g.mlst[0].rnadellength\n\t\t\t\tfor (const m of g.mlst) {\n\t\t\t\t\trnaspan = Math.max(rnaspan, m.rnadellength)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no business\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// no isInteger, rna position can have .5\n\t\t\tif (!Number.isFinite(rnaspan) || rnaspan < 0) {\n\t\t\t\t// support if genomic pos is available\n\t\t\t\tconsole.log('no rnaspan for stack bar from itd/del')\n\t\t\t\tconsole.log(g.mlst)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlet pxspan = null\n\t\t\tif (block.usegm) {\n\t\t\t\tconst rnapos = g.mlst[0].rnapos // rnapos should always be available!\n\t\t\t\tconst genomicpos = coord.rna2gmcoord(rnapos + rnaspan, block.usegm)\n\t\t\t\tconst hits = block.seekcoord(block.usegm.chr, genomicpos)\n\t\t\t\tif (hits.length > 0) {\n\t\t\t\t\tpxspan = hits[0].x - d.x\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(genomicpos + ' no hit on rglst')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!Number.isFinite(pxspan)) {\n\t\t\t\tconsole.log('no pxspan for stack bar from itd/del')\n\t\t\t\tconsole.log(g.mlst)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tg.stackbar = {\n\t\t\t\taa: d.mlst[0].aapos,\n\t\t\t\tpxspan: pxspan,\n\t\t\t\theight: 4, // fixed bar height\n\t\t\t\tgrp: g\n\t\t\t}\n\t\t\td.hasstackbar = true\n\t\t\tstackbars.push(g.stackbar)\n\t\t}\n\t}\n\t// todo: done stack bars\n\n\tlet stackbarmaxheight = 0 // for setting stem3\n\tif (stackbars.length > 0) {\n\t\t// XXX\n\t\tlet ypad = 1\n\t\tfor (let i = 0; i < stackbars.length; i++) {\n\t\t\tconst si = stackbars[i]\n\t\t\tconst overlap = []\n\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\tconst sj = stackbars[j]\n\t\t\t\tif (Math.max(si.aa, sj.aa) < Math.min(si.pxspan + si.aa, sj.pxspan + sj.aa)) {\n\t\t\t\t\toverlap.push(sj)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsi.y = 2\n\t\t\tfor (const sj of overlap) {\n\t\t\t\tif (Math.max(si.y, sj.y) < Math.min(si.y + si.height, sj.y + sj.height)) {\n\t\t\t\t\tsi.y = sj.y + sj.height + ypad\n\t\t\t\t}\n\t\t\t}\n\t\t\tstackbarmaxheight = Math.max(stackbarmaxheight, si.y + si.height)\n\t\t}\n\t}\n\n\t// diameter, also m label font size\n\tconst dotwidth = Math.max(14, block.width / 110)\n\n\tnm.dotwidth = dotwidth\n\tnm.maxradius = 0\n\n\tfor (const d of tk.data) {\n\t\tfor (const m of d.mlst) {\n\t\t\t// radius may be variable\n\t\t\tm.radius = dotwidth / 2\n\t\t\tnm.maxradius = Math.max(m.radius, nm.maxradius)\n\n\t\t\t// determine if has rim\n\t\t\tm.rimwidth = 0\n\n\t\t\tm.aa = d // m references data point\n\t\t}\n\t}\n\n\t/*\nset:\n- stack bar\n- stem size\n- dot radius\n\n*/\n\n\tconst showstem = adjustview(tk, block)\n\n\tnm.showsamplebar = showstem && tk.ds && tk.ds.samplebynumericvalue\n\n\tif (!nm.showsamplebar) {\n\t\t// do not show both at same time\n\t\tnm.showgenotypebyvalue = showstem && tk.ds && tk.ds.genotypebynumericvalue\n\t}\n\n\ttk.genotype2color.legend.style('display', nm.showsamplebar || nm.showgenotypebyvalue ? 'block' : 'none')\n\n\t// v is for variant-level values\n\tlet mcset\n\tlet vmin = null\n\tlet vmax = null\n\n\t// in case of plotting genotype circles, circle radius is set by relative # of samples\n\tlet genotypebyvaluesamplemax = 0\n\tlet genotypebyvaluecircleradiusscale = null\n\n\tif (nm.showsamplebar) {\n\t\tmcset = { name: tk.ds.samplebynumericvalue.axislabel }\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tif (!m.sampledata) continue\n\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\tconst sn = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\t\tif (!sn) continue\n\t\t\t\t\tconst a = tk.ds.cohort.annotation[sn]\n\t\t\t\t\tif (!a) continue\n\t\t\t\t\tconst v = a[tk.ds.samplebynumericvalue.attrkey]\n\t\t\t\t\tif (!Number.isFinite(v)) continue\n\t\t\t\t\tif (vmin == null) {\n\t\t\t\t\t\tvmin = v\n\t\t\t\t\t\tvmax = v\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvmin = Math.min(vmin, v)\n\t\t\t\t\t\tvmax = Math.max(vmax, v)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (nm.showgenotypebyvalue) {\n\t\tmcset = { name: tk.ds.genotypebynumericvalue.axislabel }\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tlet v = m.info[tk.ds.genotypebynumericvalue.refref.infokey]\n\t\t\t\tif (v != undefined) {\n\t\t\t\t\tif (vmin == null) {\n\t\t\t\t\t\tvmin = v\n\t\t\t\t\t\tvmax = v\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvmin = Math.min(vmin, v)\n\t\t\t\t\t\tvmax = Math.max(vmax, v)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv = m.info[tk.ds.genotypebynumericvalue.refalt.infokey]\n\t\t\t\tif (v != undefined) {\n\t\t\t\t\tif (vmin == null) {\n\t\t\t\t\t\tvmin = v\n\t\t\t\t\t\tvmax = v\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvmin = Math.min(vmin, v)\n\t\t\t\t\t\tvmax = Math.max(vmax, v)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv = m.info[tk.ds.genotypebynumericvalue.altalt.infokey]\n\t\t\t\tif (v != undefined) {\n\t\t\t\t\tif (vmin == null) {\n\t\t\t\t\t\tvmin = v\n\t\t\t\t\t\tvmax = v\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvmin = Math.min(vmin, v)\n\t\t\t\t\t\tvmax = Math.max(vmax, v)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// to get number of samples carrying each genotype\n\t\t\t\tlet num_refref = 0,\n\t\t\t\t\tnum_altalt = 0,\n\t\t\t\t\tnum_refalt = 0\n\n\t\t\t\tif (tk.ds.genotypebynumericvalue.refref.genotypeCountInfokey) {\n\t\t\t\t\t// get sample count from info field but not individuals\n\n\t\t\t\t\tlet v = m.info[tk.ds.genotypebynumericvalue.refref.genotypeCountInfokey]\n\t\t\t\t\tif (Number.isFinite(v)) {\n\t\t\t\t\t\tnum_refref = v\n\t\t\t\t\t}\n\t\t\t\t\tv = m.info[tk.ds.genotypebynumericvalue.refalt.genotypeCountInfokey]\n\t\t\t\t\tif (Number.isFinite(v)) {\n\t\t\t\t\t\tnum_refalt = v\n\t\t\t\t\t}\n\t\t\t\t\tv = m.info[tk.ds.genotypebynumericvalue.altalt.genotypeCountInfokey]\n\t\t\t\t\tif (Number.isFinite(v)) {\n\t\t\t\t\t\tnum_altalt = v\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!m.sampledata) continue\n\t\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\t\tif (!s.allele2readcount) continue\n\t\t\t\t\t\tif (s.allele2readcount[m.alt]) {\n\t\t\t\t\t\t\tif (s.allele2readcount[m.ref]) {\n\t\t\t\t\t\t\t\tnum_refalt++\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnum_altalt++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnum_refref++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgenotypebyvaluesamplemax = Math.max(genotypebyvaluesamplemax, num_refref, num_refalt, num_altalt)\n\t\t\t}\n\t\t}\n\n\t\t//genotypebyvaluecircleradiusscale = scaleLinear().domain([0, genotypebyvaluesamplemax]).range([4, 10])\n\t\t/*\n\tgenotypebyvaluecircleradiusscale = (x)=>{\n\t\treturn 2+ 8* (1 - Math.pow( (1- x/genotypebyvaluesamplemax), 4))\n\t}\n\t*/\n\t\tconst w = Math.pow(12 / 2, 2) * Math.PI // unit area\n\t\t/*\n\tlet mrd=0 // max disc radius\n\tif(genotypebyvaluesamplemax<=10) mrd=w*genotypebyvaluesamplemax*.9\n\telse if(genotypebyvaluesamplemax<=100) mrd=w*10\n\telse if(genotypebyvaluesamplemax<=1000) mrd=w*14\n\telse mrd=w*20\n\t*/\n\t\tconst mrd = w * 10\n\t\t// scale for disc radius\n\t\tgenotypebyvaluecircleradiusscale = scaleLinear()\n\t\t\t.domain([\n\t\t\t\t1,\n\t\t\t\tgenotypebyvaluesamplemax * 0.1,\n\t\t\t\tgenotypebyvaluesamplemax * 0.3,\n\t\t\t\tgenotypebyvaluesamplemax * 0.6,\n\t\t\t\tgenotypebyvaluesamplemax * 0.8,\n\t\t\t\tgenotypebyvaluesamplemax\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} else {\n\t\tmcset = tk.vcfinfofilter.lst[tk.vcfinfofilter.setidx4numeric]\n\n\t\t// get value for each m\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\t// default a valid number\n\t\t\t\tm._v = 0\n\n\t\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.log(err)\n\t\t\t\t} else if (vlst == undefined || vlst.length == 0) {\n\t\t\t\t} else {\n\t\t\t\t\tif (!Number.isFinite(vlst[0])) {\n\t\t\t\t\t\tconsole.log('invalid numerical value for variant: ' + vlst[0])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm._v = vlst[0]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (vmin == null) {\n\t\t\t\t\tvmin = m._v\n\t\t\t\t\tvmax = m._v\n\t\t\t\t} else {\n\t\t\t\t\tvmin = Math.min(m._v, vmin)\n\t\t\t\t\tvmax = Math.max(m._v, vmax)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst numscale = scaleLinear().domain([vmin, vmax]).range([0, nm.axisheight])\n\n\t// set m._y\n\tfor (const d of tk.data) {\n\t\tfor (const m of d.mlst) {\n\t\t\tm._y = numscale(m._v)\n\t\t}\n\t}\n\n\t/*\nset:\n.data[].width\n.data[].stemw\n.data[].xoffset\n.data[].x\n.data[].mlst[].xoff\n.data[].mlst[].rotate\n\n*/\n\n\tif (showstem) {\n\t\ttk.stem1 = 5\n\t\ttk.stem2 = 20\n\t\ttk.stem3 = 10 // should be determined by stackbars\n\t} else {\n\t\ttk.stem1 = 0\n\t\ttk.stem2 = 0\n\t\ttk.stem3 = 0\n\t}\n\n\t// get mname label width\n\tfor (const d of tk.data) {\n\t\tfor (const m of d.mlst) {\n\t\t\ttk.glider\n\t\t\t\t.append('text')\n\t\t\t\t.text(mnamegetter(m.mname))\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('font-size', m.radius * 2 - 2)\n\t\t\t\t.each(function () {\n\t\t\t\t\tm.labwidth = this.getBBox().width\n\t\t\t\t})\n\t\t\t\t.remove()\n\t\t}\n\t}\n\n\t// rotated labels, size protruding beyond y axis\n\tfor (const d of tk.data) {\n\t\t// reset all\n\t\tfor (const m of d.mlst) {\n\t\t\tdelete m.labattop\n\t\t\tdelete m.labatbottom\n\t\t}\n\t}\n\tif (showstem) {\n\t\t// show label for each disc, all rotated up\n\t\tfor (const d of tk.data) {\n\t\t\tif (d.mlst.length == 1) {\n\t\t\t\tconst m = d.mlst[0]\n\t\t\t\tm.labattop = true\n\t\t\t} else {\n\t\t\t\t// cluster\n\t\t\t\tif ((d.width - d.fixedgew) / (d.mlst.length - 1) < clustercrowdlimit) {\n\t\t\t\t\t// too crowded, no label\n\t\t\t\t} else {\n\t\t\t\t\t// show label for all m\n\t\t\t\t\tfor (const m of d.mlst) {\n\t\t\t\t\t\tm.labattop = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// no stem\n\t\t// sort items by v\n\t\tverticallabplace(tk)\n\t}\n\tnm.toplabelheight = 0\n\tnm.bottomlabelheight = 0\n\n\tif (nm.showsamplebar || nm.showgenotypebyvalue) {\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tnm.toplabelheight = Math.max(nm.toplabelheight, m.labwidth)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tif (m.labattop) {\n\t\t\t\t\tnm.toplabelheight = Math.max(nm.toplabelheight, m._y + m.labwidth - nm.axisheight)\n\t\t\t\t} else if (m.labatbottom) {\n\t\t\t\t\tnm.bottomlabelheight = Math.max(nm.bottomlabelheight, m.labwidth - m._y)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// adjust toplabelheight by tk labels\n\t{\n\t\tlet h = block.labelfontsize + tk.labyspace + block.labelfontsize // tk label and label_mcount\n\t\tif (tk.label_stratify) {\n\t\t\th += tk.label_stratify.length * (tk.labyspace + block.labelfontsize)\n\t\t}\n\t\tnm.toplabelheight = Math.max(nm.toplabelheight, h)\n\t}\n\n\t// 1: axis\n\ttk.leftaxis\n\t\t.attr('transform', 'translate(-' + dotwidth / 2 + ',' + (nm.toplabelheight + nm.maxradius) + ')')\n\t\t.selectAll('*')\n\t\t.remove()\n\t{\n\t\t// axis is inverse of numscale\n\t\tconst thisscale = scaleLinear().domain([vmin, vmax]).range([nm.axisheight, 0])\n\t\tconst thisaxis = axisLeft().scale(thisscale).ticks(4)\n\t\tif (mcset.numberIsInteger) {\n\t\t\tthisaxis.tickFormat(d3format('d'))\n\t\t\tif (vmax - vmin < 3) {\n\t\t\t\t/*\n\t\t\tmust do this to avoid axis showing redundant labels that doesn't make sense\n\t\t\te.g. -1 -2 -2\n\t\t\t*/\n\t\t\t\tthisaxis.ticks(vmax - vmin)\n\t\t\t}\n\t\t}\n\t\tclient.axisstyle({\n\t\t\taxis: tk.leftaxis.call(thisaxis),\n\t\t\tshowline: true,\n\t\t\tfontsize: dotwidth\n\t\t})\n\n\t\tif (vmin == vmax) {\n\t\t\ttk.leftaxis\n\t\t\t\t.append('text')\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('font-size', dotwidth)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('x', block.tkleftlabel_xshift)\n\t\t\t\t.attr('y', nm.axisheight)\n\t\t\t\t.text(vmin)\n\t\t\t\t.attr('fill', 'black')\n\t\t}\n\t\t// axis label, text must wrap\n\t\t{\n\t\t\t// read the max tick label width first\n\t\t\tlet maxw = 0\n\t\t\ttk.leftaxis.selectAll('text').each(function () {\n\t\t\t\tmaxw = Math.max(maxw, this.getBBox().width)\n\t\t\t})\n\t\t\tconst lst = mcset.name.split(' ')\n\t\t\tconst y = (nm.axisheight - lst.length * (dotwidth + 1)) / 2\n\t\t\tlet maxlabelw = 0\n\t\t\tlst.forEach((text, i) => {\n\t\t\t\ttk.leftaxis\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t.attr('font-size', dotwidth)\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t.attr('y', y + (dotwidth + 1) * i)\n\t\t\t\t\t.attr('x', -(maxw + 15))\n\t\t\t\t\t.text(text)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tmaxlabelw = Math.max(maxlabelw, this.getBBox().width + 15 + maxw)\n\t\t\t\t\t})\n\t\t\t})\n\n\t\t\ttk.leftLabelMaxwidth = Math.max(tk.leftLabelMaxwidth, maxlabelw)\n\t\t}\n\t}\n\n\tconst _g = tk.glider.append('g').attr('transform', 'translate(0,0)')\n\n\t_g.append('line')\n\t\t.attr('y1', nm.toplabelheight + nm.maxradius)\n\t\t.attr('y2', nm.toplabelheight + nm.maxradius)\n\t\t.attr('x2', block.width)\n\t\t.attr('stroke', '#ededed')\n\t\t.attr('shape-rendering', 'crispEdges')\n\t_g.append('line')\n\t\t.attr('y1', nm.toplabelheight + nm.maxradius + nm.axisheight)\n\t\t.attr('y2', nm.toplabelheight + nm.maxradius + nm.axisheight)\n\t\t.attr('x2', block.width)\n\t\t.attr('stroke', '#ededed')\n\t\t.attr('shape-rendering', 'crispEdges')\n\n\ttk.skewer2 = _g\n\t\t.selectAll()\n\t\t.data(tk.data)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr('class', 'sja_skg2')\n\t\t.each(function (d) {\n\t\t\t// compute radius for each group\n\t\t\td.g = this\n\t\t})\n\n\ttk.skewer2.attr(\n\t\t'transform',\n\t\td =>\n\t\t\t'translate(' +\n\t\t\td.x +\n\t\t\t',' +\n\t\t\t(nm.toplabelheight + disclabelspacing + nm.maxradius + nm.axisheight + nm.maxradius) +\n\t\t\t')'\n\t)\n\n\t// 2: stem\n\tif (showstem) {\n\t\ttk.skewer2\n\t\t\t.append('path')\n\t\t\t.attr('class', 'sja_aa_stem')\n\t\t\t.attr('d', d => skewer2_setstem(d, tk))\n\t\t\t.attr('stroke', d => color4disc(d.mlst[0], tk))\n\t\t\t.attr('fill', d => (d.mlst.length == 1 ? 'none' : '#ededed'))\n\t}\n\n\t// 3: discs\n\n\tconst discg = tk.skewer2\n\t\t.selectAll()\n\t\t.data(d => d.mlst)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr('class', 'sja_aa_discg')\n\t\t.each(function (m) {\n\t\t\tm.g = this\n\t\t})\n\n\tif (nm.showsamplebar) {\n\t\tdiscg.attr('transform', m => 'translate(' + m.xoff + ',0)')\n\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tif (!m.sampledata) continue\n\t\t\t\tconst g = d3select(m.g)\n\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\tconst sn = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\t\tif (!sn) continue\n\t\t\t\t\tconst a = tk.ds.cohort.annotation[sn]\n\t\t\t\t\tif (!a) continue\n\t\t\t\t\tconst v = a[tk.ds.samplebynumericvalue.attrkey]\n\t\t\t\t\tif (!Number.isFinite(v)) continue\n\t\t\t\t\tconst y = -numscale(v) - nm.maxradius\n\t\t\t\t\tconst hasref = s.allele2readcount[m.ref]\n\t\t\t\t\tconst hasalt = s.allele2readcount[m.alt]\n\t\t\t\t\tif (hasalt) continue\n\t\t\t\t\tg.append('line')\n\t\t\t\t\t\t.attr('x1', -m.radius)\n\t\t\t\t\t\t.attr('x2', m.radius)\n\t\t\t\t\t\t.attr('y1', y)\n\t\t\t\t\t\t.attr('y2', y)\n\t\t\t\t\t\t.attr('stroke', hasref ? (hasalt ? tk.genotype2color.ra : tk.genotype2color.rr) : tk.genotype2color.aa)\n\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\tconst lst = [{ k: tk.ds.cohort.key4annotation, v: sn }]\n\t\t\t\t\t\t\tfor (const k in a) {\n\t\t\t\t\t\t\t\tlst.push({ k: k, v: a[k] })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlst.push({ k: 'genotype', v: s.genotype })\n\t\t\t\t\t\t\ttk.tktip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\t\t\t\t\t\t\tevent.target.setAttribute('stroke-width', 3)\n\t\t\t\t\t\t\tevent.target.setAttribute('x1', -m.radius - 3)\n\t\t\t\t\t\t\tevent.target.setAttribute('x2', m.radius + 3)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', event => {\n\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\tevent.target.setAttribute('stroke-width', 1)\n\t\t\t\t\t\t\tevent.target.setAttribute('x1', -m.radius)\n\t\t\t\t\t\t\tevent.target.setAttribute('x2', m.radius)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\tconst sn = s.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\t\tif (!sn) continue\n\t\t\t\t\tconst a = tk.ds.cohort.annotation[sn]\n\t\t\t\t\tif (!a) continue\n\t\t\t\t\tconst v = a[tk.ds.samplebynumericvalue.attrkey]\n\t\t\t\t\tif (!Number.isFinite(v)) continue\n\t\t\t\t\tconst y = -numscale(v) - nm.maxradius\n\t\t\t\t\tconst hasref = s.allele2readcount[m.ref]\n\t\t\t\t\tconst hasalt = s.allele2readcount[m.alt]\n\t\t\t\t\tif (!hasalt) continue\n\t\t\t\t\tg.append('line')\n\t\t\t\t\t\t.attr('x1', -m.radius)\n\t\t\t\t\t\t.attr('x2', m.radius)\n\t\t\t\t\t\t.attr('y1', y)\n\t\t\t\t\t\t.attr('y2', y)\n\t\t\t\t\t\t.attr('stroke', hasref ? (hasalt ? tk.genotype2color.ra : tk.genotype2color.rr) : tk.genotype2color.aa)\n\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\tconst lst = [{ k: tk.ds.cohort.key4annotation, v: sn }]\n\t\t\t\t\t\t\tfor (const k in a) {\n\t\t\t\t\t\t\t\tlst.push({ k: k, v: a[k] })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlst.push({ k: 'genotype', v: s.genotype })\n\t\t\t\t\t\t\ttk.tktip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\t\t\t\t\t\t\tevent.target.setAttribute('stroke-width', 3)\n\t\t\t\t\t\t\tevent.target.setAttribute('x1', -m.radius - 3)\n\t\t\t\t\t\t\tevent.target.setAttribute('x2', m.radius + 3)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', event => {\n\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\tevent.target.setAttribute('stroke-width', 1)\n\t\t\t\t\t\t\tevent.target.setAttribute('x1', -m.radius)\n\t\t\t\t\t\t\tevent.target.setAttribute('x2', m.radius)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (nm.showgenotypebyvalue) {\n\t\tdiscg.attr('transform', m => 'translate(' + m.xoff + ',0)')\n\n\t\tfor (const d of tk.data) {\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tlet num_refref = 0,\n\t\t\t\t\tnum_altalt = 0,\n\t\t\t\t\tnum_refalt = 0\n\n\t\t\t\t// genotype count can either be encoded in INFO or figured from sampledata[]\n\t\t\t\tif (tk.ds.genotypebynumericvalue.refref.genotypeCountInfokey) {\n\t\t\t\t\t// from INFO\n\t\t\t\t\tnum_refref = m.info[tk.ds.genotypebynumericvalue.refref.genotypeCountInfokey]\n\t\t\t\t\tnum_altalt = m.info[tk.ds.genotypebynumericvalue.altalt.genotypeCountInfokey]\n\t\t\t\t\tnum_refalt = m.info[tk.ds.genotypebynumericvalue.refalt.genotypeCountInfokey]\n\t\t\t\t} else {\n\t\t\t\t\t// from samples, require matrix\n\t\t\t\t\tif (!m.sampledata) continue\n\t\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\t\tif (!s.allele2readcount) continue\n\t\t\t\t\t\tif (s.allele2readcount[m.alt]) {\n\t\t\t\t\t\t\tif (s.allele2readcount[m.ref]) {\n\t\t\t\t\t\t\t\tnum_refalt++\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnum_altalt++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnum_refref++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst g = d3select(m.g)\n\n\t\t\t\tif (num_refref) {\n\t\t\t\t\tconst v = m.info[tk.ds.genotypebynumericvalue.refref.infokey]\n\t\t\t\t\tif (v != undefined) {\n\t\t\t\t\t\tconst y = -numscale(v) - nm.maxradius\n\t\t\t\t\t\tg.append('circle')\n\t\t\t\t\t\t\t.attr('cy', y)\n\t\t\t\t\t\t\t//.attr('r', genotypebyvaluecircleradiusscale( num_refref) )\n\t\t\t\t\t\t\t.attr('r', Math.sqrt(genotypebyvaluecircleradiusscale(num_refref)) / Math.PI)\n\t\t\t\t\t\t\t.attr('stroke', tk.ds.genotypebynumericvalue.refref.color)\n\t\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY).clear()\n\t\t\t\t\t\t\t\tconst lst = [\n\t\t\t\t\t\t\t\t\t{ k: 'Variant', v: m.chr + ':' + (m.pos + 1) + ' ' + m.ref + '>' + m.alt },\n\t\t\t\t\t\t\t\t\t{ k: 'Genotype', v: 'Ref/Ref' },\n\t\t\t\t\t\t\t\t\t{ k: '#sample', v: num_refref },\n\t\t\t\t\t\t\t\t\t{ k: tk.ds.genotypebynumericvalue.axislabel, v: v }\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_refalt) {\n\t\t\t\t\tconst v = m.info[tk.ds.genotypebynumericvalue.refalt.infokey]\n\t\t\t\t\tif (v != undefined) {\n\t\t\t\t\t\tconst y = -numscale(v) - nm.maxradius\n\t\t\t\t\t\tg.append('circle')\n\t\t\t\t\t\t\t.attr('cy', y)\n\t\t\t\t\t\t\t//.attr('r', genotypebyvaluecircleradiusscale( num_refalt) )\n\t\t\t\t\t\t\t.attr('r', Math.sqrt(genotypebyvaluecircleradiusscale(num_refalt)) / Math.PI)\n\t\t\t\t\t\t\t.attr('stroke', tk.ds.genotypebynumericvalue.refalt.color)\n\t\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY).clear()\n\t\t\t\t\t\t\t\tconst lst = [\n\t\t\t\t\t\t\t\t\t{ k: 'Variant', v: m.chr + ':' + (m.pos + 1) + ' ' + m.ref + '>' + m.alt },\n\t\t\t\t\t\t\t\t\t{ k: 'Genotype', v: 'Ref/Alt' },\n\t\t\t\t\t\t\t\t\t{ k: '#sample', v: num_refalt },\n\t\t\t\t\t\t\t\t\t{ k: tk.ds.genotypebynumericvalue.axislabel, v: v }\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_altalt) {\n\t\t\t\t\tconst v = m.info[tk.ds.genotypebynumericvalue.altalt.infokey]\n\t\t\t\t\tif (v != undefined) {\n\t\t\t\t\t\tconst y = -numscale(v) - nm.maxradius\n\t\t\t\t\t\tg.append('circle')\n\t\t\t\t\t\t\t.attr('cy', y)\n\t\t\t\t\t\t\t//.attr('r', genotypebyvaluecircleradiusscale( num_altalt) )\n\t\t\t\t\t\t\t.attr('r', Math.sqrt(genotypebyvaluecircleradiusscale(num_altalt)) / Math.PI)\n\t\t\t\t\t\t\t.attr('stroke', tk.ds.genotypebynumericvalue.altalt.color)\n\t\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY).clear()\n\t\t\t\t\t\t\t\tconst lst = [\n\t\t\t\t\t\t\t\t\t{ k: 'Variant', v: m.chr + ':' + (m.pos + 1) + ' ' + m.ref + '>' + m.alt },\n\t\t\t\t\t\t\t\t\t{ k: 'Genotype', v: 'Alt/Alt' },\n\t\t\t\t\t\t\t\t\t{ k: '#sample', v: num_altalt },\n\t\t\t\t\t\t\t\t\t{ k: tk.ds.genotypebynumericvalue.axislabel, v: v }\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\ttk.tktip.hide()\n\t\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} else {\n\t\tdiscg.attr('transform', m => {\n\t\t\treturn 'translate(' + m.xoff + ',' + (m._y + nm.maxradius) * -1 + ')'\n\t\t})\n\n\t\t// actual disc\n\t\tconst discdot = discg.append('circle')\n\t\t// hollow disc\n\t\tdiscdot\n\t\t\t.filter(m => m.dt == common.dtitd || m.dt == common.dtdel || m.dt == common.dtnloss || m.dt == common.dtcloss)\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.attr('stroke', m => color4disc(m, tk))\n\t\t\t.attr('r', m => m.radius - 2)\n\t\t// full filled\n\t\tdiscdot\n\t\t\t.filter(m => m.dt == common.dtsnvindel || m.dt == common.dtsv || m.dt == common.dtfusionrna)\n\t\t\t.attr('fill', m => color4disc(m, tk))\n\t\t\t.attr('stroke', 'white')\n\t\t\t.attr('r', m => m.radius - 0.5)\n\t\t// masking half\n\t\tdiscg\n\t\t\t.filter(m => m.dt == common.dtfusionrna || m.dt == common.dtsv)\n\t\t\t.append('path')\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('stroke', 'none')\n\t\t\t.attr('d', m =>\n\t\t\t\td3arc()({\n\t\t\t\t\tinnerRadius: 0,\n\t\t\t\t\touterRadius: m.radius - 2,\n\t\t\t\t\tstartAngle: m.useNterm ? 0 : Math.PI,\n\t\t\t\t\tendAngle: m.useNterm ? Math.PI : Math.PI * 2\n\t\t\t\t})\n\t\t\t)\n\n\t\t// no text in disc\n\n\t\t// disc kick\n\t\tdiscg\n\t\t\t.append('circle')\n\t\t\t.attr('r', m => m.radius - 0.5)\n\t\t\t.attr('stroke', m => color4disc(m, tk))\n\t\t\t.attr('class', 'sja_aa_disckick')\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('stroke-opacity', 0)\n\n\t\t\t.on('mousedown', event => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t})\n\n\t\t\t.on('mouseover', (event, m) => {\n\t\t\t\tm_mouseover(m, tk)\n\t\t\t\tif (tk.disc_mouseover) {\n\t\t\t\t\ttk.disc_mouseover(m, event.target)\n\t\t\t\t} else {\n\t\t\t\t\tepaint_may_hl(tk, [m], true)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t.on('mouseout', (event, m) => {\n\t\t\t\tm_mouseout(m, tk)\n\t\t\t\tif (tk.disc_mouseout) {\n\t\t\t\t\ttk.disc_mouseout(m)\n\t\t\t\t} else {\n\t\t\t\t\tepaint_may_hl(tk, [m], false)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t.on('click', (event, m) => {\n\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\tm_click(m, p, tk, block)\n\t\t\t})\n\t}\n\n\t// m label\n\t// only make for those whose to appear on top or bottom\n\tconst textlabels = discg\n\t\t.filter(m => m.labattop || m.labatbottom)\n\t\t.append('text')\n\t\t.each(function (m) {\n\t\t\tm.textlabel = this\n\t\t})\n\t\t.text(m => mnamegetter(m.mname))\n\t\t.attr('font-family', client.font)\n\t\t.attr('font-size', m => {\n\t\t\tm._labfontsize = Math.max(12, m.radius * 1.2)\n\t\t\treturn m._labfontsize\n\t\t})\n\t\t.attr('fill', m => color4disc(m, tk))\n\t\t.attr('x', m =>\n\t\t\tnm.showsamplebar || nm.showgenotypebyvalue\n\t\t\t\t? nm.axisheight + nm.maxradius + 4\n\t\t\t\t: m.radius + m.rimwidth + disclabelspacing\n\t\t)\n\t\t.attr('y', m => m._labfontsize * middlealignshift)\n\t\t.attr('class', 'sja_aa_disclabel')\n\t\t.attr('transform', m => 'rotate(' + (m.labattop ? '-' : '') + '90)')\n\t\t.on('mousedown', event => {\n\t\t\tevent.stopPropagation()\n\t\t})\n\t\t.on('mouseover', (event, m) => m_mouseover(m, tk))\n\t\t.on('mouseout', (event, m) => m_mouseout(m, tk))\n\t\t.on('click', (event, m) => {\n\t\t\tm_click(m, { left: event.clientX, top: event.clientY }, tk, block)\n\t\t})\n\n\tif (tk.hlaachange) {\n\t\t// special effect for highlighted variants\n\t\ttextlabels.filter(m => tk.hlaachange.has(m.mname)).classed('sja_pulse', true)\n\t}\n\n\t// disc rims\n\t/*\nconst rimfunc=d3arc()\n\t.innerRadius(d => d.radius )\n\t.outerRadius(d => d.radius+d.rimwidth )\n\t.startAngle(0)\n\t.endAngle(d=>{\n\t\td.rim1_startangle= Math.PI*2*d.rim1count/d.mlst.length\n\t\treturn d.rim1_startangle\n\t\t})\ndiscg.append('path')\n\t.attr('d',rimfunc)\n\t.attr('fill',d=> color4disc(d.mlst[0]) )\n\t.attr('class','sja_aa_discrim')\n\t.attr('fill-opacity',0)\nconst rimfunc2=d3arc()\n\t.innerRadius(d=>d.radius+.5)\n\t.outerRadius(d=>d.radius+.5+d.rimwidth)\n\t.startAngle(d=>d.rim1_startangle)\n\t.endAngle(d=>d.rim1_startangle+Math.PI*2*d.rim2count/d.mlst.length)\ndiscg\n\t.filter(d=>d.rim2count>0)\n\t.append('path')\n\t.attr('d',rimfunc2)\n\t.attr('stroke',d=>color4disc(d.mlst[0]))\n\t.attr('fill','none')\n\t.attr('class','sja_aa_discrim')\n\t.attr('stroke-opacity',0)\n\t*/\n}\n\nfunction m_mouseover(m, tk) {\n\tif (m.textlabel) {\n\t\td3select(m.textlabel).attr('font-size', m._labfontsize * 1.1)\n\t}\n\tconst nm = tk.numericmode\n\tif (nm.showsamplebar) return\n\tif (nm.showgenotypebyvalue) return\n\n\t// pica moves to center of m disc\n\ttk.pica.g.attr(\n\t\t'transform',\n\t\t'translate(' + (m.aa.x + m.xoff) + ',' + (nm.toplabelheight + nm.maxradius + nm.axisheight - m._y) + ')'\n\t)\n\n\tconst linelen = 10\n\tconst boxpad = 4\n\tconst fontsize = m._labfontsize || 13 // _labfontsize is undefined if this m has no lab\n\tconst color = color4disc(m, tk)\n\n\tlet textw = 0,\n\t\tshowlab = false\n\t// measure text w for value\n\ttk.pica.g\n\t\t.append('text')\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', client.font)\n\t\t.text(m._v)\n\t\t.each(function () {\n\t\t\ttextw = this.getBBox().width\n\t\t})\n\t\t.remove()\n\tif (!m.labattop && !m.labatbottom) {\n\t\t// pica also show label\n\t\tshowlab = true\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.attr('font-size', fontsize)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.text(m.mname)\n\t\t\t.each(function () {\n\t\t\t\ttextw = Math.max(textw, this.getBBox().width)\n\t\t\t})\n\t\t\t.remove()\n\t}\n\tconst boxw = boxpad * 2 + textw\n\tlet boxx,\n\t\tlinex1,\n\t\tonleft = true\n\tif (boxw + linelen > m.aa.x + m.xoff) {\n\t\t// pica on right\n\t\tonleft = false\n\t\tlinex1 = m.radius + m.rimwidth\n\t\tboxx = linex1 + linelen\n\t} else {\n\t\t// on left\n\t\tlinex1 = -m.radius - m.rimwidth - linelen\n\t\tboxx = linex1 - boxw\n\t}\n\n\t// bg box for white rim\n\ttk.pica.g\n\t\t.append('rect')\n\t\t.attr('x', boxx - 2)\n\t\t.attr('y', -2 - boxpad - (showlab ? fontsize : fontsize / 2))\n\t\t.attr('width', 4 + boxw)\n\t\t.attr('height', 4 + boxpad * 2 + fontsize * (showlab ? 2 : 1))\n\t\t.attr('fill', 'white')\n\ttk.pica.g\n\t\t.append('line')\n\t\t.attr('x1', linex1)\n\t\t.attr('x2', linex1 + linelen)\n\t\t.attr('stroke', 'white')\n\t\t.attr('stroke-width', 3)\n\t\t.attr('shape-rendering', 'crispEdges')\n\ttk.pica.g\n\t\t.append('line')\n\t\t.attr('x1', linex1)\n\t\t.attr('x2', linex1 + linelen)\n\t\t.attr('stroke', color)\n\t\t.attr('shape-rendering', 'crispEdges')\n\ttk.pica.g\n\t\t.append('rect')\n\t\t.attr('x', boxx)\n\t\t.attr('y', -boxpad - (showlab ? fontsize : fontsize / 2))\n\t\t.attr('width', boxw)\n\t\t.attr('height', boxpad * 2 + fontsize * (showlab ? 2 : 1))\n\t\t.attr('fill', 'none')\n\t\t.attr('stroke', color)\n\t\t.attr('shape-rendering', 'crispEdges')\n\ttk.pica.g\n\t\t.append('text')\n\t\t.text(m._v)\n\t\t.attr('text-anchor', onleft ? 'end' : 'start')\n\t\t.attr('font-size', fontsize)\n\t\t.attr('font-family', client.font)\n\t\t.attr('x', onleft ? linex1 - boxpad : boxx + boxpad)\n\t\t.attr('y', showlab ? -fontsize / 2 : 0)\n\t\t.attr('fill', color)\n\t\t.attr('dominant-baseline', 'central')\n\tif (showlab) {\n\t\ttk.pica.g\n\t\t\t.append('text')\n\t\t\t.text(m.mname)\n\t\t\t.attr('text-anchor', onleft ? 'end' : 'start')\n\t\t\t.attr('font-size', fontsize)\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('x', onleft ? linex1 - boxpad : boxx + boxpad)\n\t\t\t.attr('y', showlab ? fontsize / 2 : 0)\n\t\t\t.attr('fill', color)\n\t\t\t.attr('dominant-baseline', 'central')\n\t}\n}\n\nfunction m_mouseout(m, tk) {\n\tif (m.textlabel) {\n\t\td3select(m.textlabel).attr('font-size', m._labfontsize)\n\t}\n\ttk.pica.g.selectAll('*').remove()\n}\n\nasync function m_click(m, p, tk, block) {\n\tif (m.dt == common.dtfusionrna || m.dt == common.dtsv) {\n\t\t// should not happen\n\t\titemtable({\n\t\t\tmlst: [m],\n\t\t\tpane: true,\n\t\t\tx: p.left - 10,\n\t\t\ty: p.top - 10,\n\t\t\ttk: tk,\n\t\t\tblock: block,\n\t\t\tsvgraph: true\n\t\t})\n\t\treturn\n\t}\n\n\tif (m.occurrence > 1) {\n\t\tif (\n\t\t\tawait may_sunburst(\n\t\t\t\tm.occurrence,\n\t\t\t\t[m],\n\t\t\t\tm.aa.x + m.xoff,\n\t\t\t\ttk.numericmode.toplabelheight + tk.numericmode.axisheight - m._y,\n\t\t\t\ttk,\n\t\t\t\tblock\n\t\t\t)\n\t\t)\n\t\t\treturn\n\t}\n\n\titemtable({\n\t\tmlst: [m],\n\t\tpane: true,\n\t\tx: p.left - 10,\n\t\ty: p.top - 10,\n\t\ttk: tk,\n\t\tblock: block\n\t})\n}\n\nfunction verticallabplace(tk) {\n\tconst mlst = []\n\tfor (const d of tk.data) {\n\t\tfor (const m of d.mlst) {\n\t\t\tmlst.push({\n\t\t\t\tm: m,\n\t\t\t\tw: 2 * (m.radius + m.rimwidth),\n\t\t\t\tx: d.x0,\n\t\t\t\ty: m._y\n\t\t\t})\n\t\t}\n\t}\n\n\tmlst.sort((i, j) => j.y - i.y) // descending\n\n\t// 1. labels pointing up, none has label yet\n\n\tfor (let i = 0; i < mlst.length; i++) {\n\t\tconst big = mlst[i]\n\t\tlet overlapwithdisc = false\n\t\tfor (let j = 0; j < i; j++) {\n\t\t\tconst small = mlst[j]\n\t\t\tif (Math.abs(big.x - small.x) < (big.w + small.w) / 2 - 2) {\n\t\t\t\toverlapwithdisc = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!overlapwithdisc) {\n\t\t\tbig.m.labattop = true\n\t\t}\n\t}\n\n\t// 2. labels pointing down\n\n\tfor (let i = mlst.length - 1; i >= 0; i--) {\n\t\tconst big = mlst[i]\n\t\tif (big.m.labattop) continue\n\t\tlet overlapwithlabeleddisc = false\n\t\tfor (let j = mlst.length - 1; j > i; j--) {\n\t\t\tconst small = mlst[j]\n\t\t\tif (small.m.labatbottom && Math.abs(small.x - big.x) < (small.w + big.w) / 2 - 2) {\n\t\t\t\toverlapwithlabeleddisc = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!overlapwithlabeleddisc) {\n\t\t\tbig.m.labatbottom = true\n\t\t}\n\t}\n}\n\nfunction skewer2_setstem(d, tk) {\n\tif (d.mlst.length == 1) {\n\t\treturn 'M0,0v' + tk.stem1 + 'l' + -d.xoffset + ',' + tk.stem2 + 'v' + tk.stem3\n\t}\n\t// funnel\n\treturn (\n\t\t'M0,0' +\n\t\t'v' +\n\t\ttk.stem1 + // vertical down\n\t\t'l' +\n\t\t-d.xoffset +\n\t\t',' +\n\t\ttk.stem2 + // slope 1\n\t\t'v' +\n\t\ttk.stem3 + // vertical down\n\t\t//+'h1' // to right 1\n\t\t'v-' +\n\t\ttk.stem3 + // veritical up\n\t\t'l' +\n\t\t(d.stemw + d.xoffset - 1) +\n\t\t',-' +\n\t\ttk.stem2 + // slope 2\n\t\t'v-' +\n\t\ttk.stem1\n\t)\n\t//+'Z'\n}\n\nfunction adjustview(tk, block) {\n\t/*\n\tself adjusting\n\tfor .data[], add:\n\t\t.x0\n\t\t.width\n\tfor .data[0].mlst[], add:\n\t\t.xoff\n\t\n\ttoggle between two views:\n\t1. cozy view, showing stem, x-shift, labels showing for all discs and point up\n\t2. crowded view, no stem, no x-shift, only show label for top/bottom items\n\n\t*/\n\n\tconst nm = tk.numericmode\n\n\tconst maxclusterwidth = 100\n\n\tlet sumwidth = 0\n\n\t// set initial width\n\n\tfor (const d of tk.data) {\n\t\tlet w = 0\n\t\tfor (const m of d.mlst) {\n\t\t\tw += 2 * (m.radius + m.rimwidth)\n\t\t}\n\n\t\tif (d.mlst.length == 1) {\n\t\t\td.width = w\n\t\t} else {\n\t\t\t// cluster, apply maximum allowed span\n\t\t\td.width = Math.min(maxclusterwidth, w)\n\n\t\t\tconst m0 = d.mlst[0]\n\t\t\tconst m1 = d.mlst[d.mlst.length - 1]\n\t\t\td.fixedgew = m0.radius + m0.rimwidth + m1.radius + m1.rimwidth\n\t\t}\n\n\t\tsumwidth += d.width\n\t}\n\n\tlet showstem = true\n\n\tif (sumwidth <= block.width) {\n\t\t// fits all\n\t\t// move all to left\n\t\tlet cum = 0\n\t\tfor (const d of tk.data) {\n\t\t\td.x = cum + d.mlst[0].radius + d.mlst[0].rimwidth\n\t\t\tcum += d.width\n\n\t\t\t// stemw required for placing\n\t\t\tif (d.mlst.length == 1) {\n\t\t\t\td.stemw = 0\n\t\t\t} else {\n\t\t\t\td.stemw = d.width - d.fixedgew\n\t\t\t}\n\t\t}\n\n\t\thoriplace1(tk.data, block.width)\n\n\t\tfor (const d of tk.data) {\n\t\t\td.xoffset = d.x - d.x0\n\n\t\t\tif (d.mlst.length == 1) {\n\t\t\t\td.mlst[0].xoff = 0\n\t\t\t\td.stemw = 0\n\t\t\t} else {\n\t\t\t\td.stemw = d.width - d.fixedgew\n\n\t\t\t\tconst span = d.stemw / (d.mlst.length - 1)\n\t\t\t\tfor (let i = 0; i < d.mlst.length; i++) {\n\t\t\t\t\td.mlst[i].xoff = span * i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t} else {\n\t\t/*\n\t\tover crowded\n\n\t\tlet singwidthsum = 0\n\t\tlet clustermcount = 0\n\t\tfor(const d of tk.data) {\n\t\t\tif(d.mlst.length==1) {\n\t\t\t\tsingwidthsum += d.width\n\t\t\t} else {\n\t\t\t\tclustermcount += d.mlst.length\n\t\t\t}\n\t\t}\n\n\t\tlet shrinkfactor=.99\n\t\twhile(1) {\n\t\t\tlet w=0\n\t\t\tfor(const d of tk.data) {\n\t\t\t\tif(d.mlst.length==1) {\n\t\t\t\t\tw+=d.width * shrinkfactor\n\t\t\t\t} else {\n\t\t\t\t\tif(d.shrinkfactor <= shrinkfactor) {\n\t\t\t\t\t\tw+=d.width\n\t\t\t\t\t} else {\n\t\t\t\t\t\tw+= d.originalwidth * shrinkfactor\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(w<=block.width) {\n\t\t\t\t// accept\n\t\t\t\tfor(const d of tk.data) {\n\t\t\t\t\td.width *= shrinkfactor\n\t\t\t\t\tif(d.mlst.length>1) {\n\t\t\t\t\t\td.shrinkfactor = shrinkfactor\n\t\t\t\t\t\tif(d.stemw<=0) {\n\t\t\t\t\t\t\tconsole.log('.stemw < 0')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tshrinkfactor-=.02\n\t\t}\n\t\t*/\n\n\t\t// do not shrink and horiplace\n\t\tfor (const d of tk.data) {\n\t\t\td.x = d.x0\n\t\t\td.xoffset = 0\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tm.xoff = 0\n\t\t\t}\n\t\t}\n\n\t\t// do not show stem\n\t\treturn false\n\t}\n}\n\nfunction horiplace1(items, allwidth) {\n\t/*\n\tonly for numeric\n\t*/\n\tfor (let i = 0; i < items.length; i++) {\n\t\tif (items[i].x0 < 0) continue\n\t\tif (items[i].x0 > allwidth) break\n\n\t\twhile (1) {\n\t\t\tlet currsum = 0,\n\t\t\t\tnewsum = 0\n\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\tconst t = items[j]\n\t\t\t\tif (t.x0 > allwidth) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcurrsum += Math.abs(t.x - t.x0 - t.stemw / 2)\n\t\t\t\tt.x++\n\t\t\t\tnewsum += Math.abs(t.x - t.x0 - t.stemw / 2)\n\t\t\t}\n\t\t\tif (items[i].x > items[i].x0 - items[i].stemw / 2) {\n\t\t\t\t// wind back to make sure stem [i] stem is straight\n\t\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\t\titems[j].x--\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tconst z = items[items.length - 1]\n\t\t\tif (z.x + z.width / 2 >= allwidth) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (newsum <= currsum) {\n\t\t\t\t// accept move\n\t\t\t} else {\n\t\t\t\t// reject move, procceed to next item\n\t\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\t\tif (items[j].x0 > allwidth) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// wind back\n\t\t\t\t\titems[j].x--\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n", "import { scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { arc as d3arc } from 'd3-shape'\nimport { select as d3select } from 'd3-selection'\nimport { itemtable } from './block.ds.itemtable'\nimport * as client from './client'\nimport * as coord from './coord'\nimport * as common from '#shared/common.js'\nimport { duplicate as svduplicate } from '#shared/bulk.sv.js'\nimport * as vcftk from './block.ds.vcf'\nimport { rendernumerictk } from './block.ds.numericmode'\nimport may_sunburst from './block.sunburst'\nimport { schemeCategory20 } from '#common/legacy-d3-polyfill'\n\n/*\na dstk can be vcf, server-hosted ds (sqlite and/or 1 or more vcf)\nhere do following things for dstk:\n- load data by querying server\n- parse and add data to the track\n- render the skewer track\n********************** EXPORTED \ndstkload(tk,block)\n\t- server query and load data from sqlite/vcf\nload2tk(datalst,block,tk)\n\t- add data to dstk\ndstkrender(tk, block)\ngetter_mcset_key\nepaint_may_hl\nmlst_pretreat\ndone_tknodata\n********************** INTERNAL\nrenderskewertk\nskewer_make()\nshowlegend_populationfrequencyfilter\nshowlegend_vcfinfofilter\nshowlegend_sampleattribute\nlegendmenu_vcfinfo\nlegendmenu_sampleattribute\ndsqueryresult_geneexpression()\ndsqueryresult_snvindelfusionitd()\n*/\n\n// vcfinfofilter in which a variant is not annotated by a given key\nconst vcfnotannotated_label = 'Not annotated'\n\n// for skewer track\nexport const middlealignshift = 0.3\nexport const disclabelspacing = 1 // px spacing between disc and label\n\n/*\ncutoff value of # pixel per bp\ncompared to exonsf\nwhen exonsf>:\n\tbasepairs are visible enough, and group mutation grps by basepair position\nelse exon<:\n\tbasepairs are too tiny and will group mutations by AA position\n*/\nexport const minbpwidth = 4\n\nconst modefold = 0\nconst modeshow = 1\n\nexport async function dstkload(tk, block) {\n\t/*\n\tthree sources of data\n\t1. vcf file, server query\n\t2. client in-memory data\n\t3. server ds.queries[]\n\t*/\n\n\ttry {\n\t\tif (!tk) throw 'no tk'\n\t\tif (!tk.ds) throw 'no ds'\n\n\t\tif (!block.gmmode || block.gmmode == client.gmmode.genomic) {\n\t\t\t// for dstk, only apply limit in genomic mode\n\t\t\tif (block.viewrangeabovelimit(tk.viewrangeupperlimit)) {\n\t\t\t\ttk.mlst = []\n\t\t\t\ttk.viewrangeupperlimit_above = true\n\t\t\t\tdstkrender(tk, block)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tdelete tk.viewrangeupperlimit_above\n\n\t\tif (tk.isvcf) {\n\t\t\t/* is one or a set of vcf tracks\n\t\t\tin this case won't require tk.ds (should be undefined)\n\t\t\tvcf-only, no mixture with db tk\n\t\t\t*/\n\t\t\tblock.tkcloakon(tk)\n\t\t\tvcftk.loadvcftk(block, tk)\n\t\t\treturn\n\t\t}\n\n\t\tif (block.ds2handle[tk.ds.label]) {\n\t\t\ttk.__handlesays = block.ds2handle[tk.ds.label].handlesays // quick fix\n\t\t}\n\n\t\tif (tk.ds.bulkdata || tk.ds.mlst) {\n\t\t\treturn await dstkload_fromclientdata(tk, block)\n\t\t}\n\n\t\t// will query the server-side ds.queries[]\n\t\tawait dstkload_fromdsquery(tk, block)\n\n\t\tmayAddSubtk_legacyDsFilter(tk, block)\n\n\t\ttk.ds.busy = false\n\t\tblock.tkcloakoff(tk, {})\n\t} catch (e) {\n\t\tif (e.stack) console.log(e.stack)\n\t\ttk.ds.busy = false\n\t\tblock.tkcloakoff(tk, { error: e.message || e })\n\t\tblock.setllabel(tk)\n\t\tblock.block_setheight()\n\t}\n}\n\nfunction mayAddSubtk_legacyDsFilter(tk, block) {\n\tif (!tk.legacyDsFilter) return\n\n\tif (!tk.legacyDsFilter.key || !tk.legacyDsFilter.value) throw 'legacyDsFilter is not {key,value}'\n\n\tconst mlst = tk.mlst.filter(m => m[tk.legacyDsFilter.key] == tk.legacyDsFilter.value)\n\tconst _ds = {\n\t\tlabel: tk.ds.label + ' - ' + tk.legacyDsFilter.value,\n\t\tbulkdata: {},\n\t\tparentname: tk.ds.label,\n\t\tiscustom: true,\n\t\tsampleselectable: tk.ds.sampleselectable\n\t}\n\t_ds.bulkdata[block.usegm.name.toUpperCase()] = mlst\n\tblock.addchilddsnoload(_ds)\n\tconst childtk = block.block_addtk_template({ type: client.tkt.ds, ds: _ds })\n\tdstkload(childtk, block)\n}\n\nasync function dstkload_fromclientdata(tk, block) {\n\t// custom ds with data stored on client\n\tif (block.usegm) {\n\t\tif (tk.__handlesays) {\n\t\t\ttk.__handlesays.style('background-color', '#ddd').style('color', 'black')\n\t\t}\n\t\tlet mlst = []\n\t\tif (tk.ds.bulkdata) {\n\t\t\tconst lst2 = tk.ds.bulkdata[block.usegm.name.toUpperCase()]\n\t\t\tif (lst2) {\n\t\t\t\tmlst = [...lst2]\n\t\t\t}\n\t\t}\n\t\tif (tk.ds.mlst) {\n\t\t\tfor (const m of tk.ds.mlst) {\n\t\t\t\tif (m.gene.toUpperCase() == block.usegm.name.toUpperCase()) {\n\t\t\t\t\tmlst.push(m)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (mlst.length) {\n\t\t\tconst isoformmatch = []\n\t\t\tfor (const m of mlst) {\n\t\t\t\tif (m.isoform && m.isoform == block.usegm.isoform) {\n\t\t\t\t\tisoformmatch.push(m)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isoformmatch.length) {\n\t\t\t\tload2tk([{ lst: isoformmatch }], block, tk)\n\t\t\t} else {\n\t\t\t\tthrow 'No data from ' + tk.ds.label + ' for ' + block.usegm.isoform\n\t\t\t}\n\t\t} else {\n\t\t\tthrow 'No data from ' + tk.ds.label + ' for ' + block.usegm.name\n\t\t}\n\t\tif (tk.ds.dbexpression && (!tk.eplst || tk.eplst.length == 0)) {\n\t\t\t// custom expression set\n\t\t\tconst par = {\n\t\t\t\tjwt: block.jwt,\n\t\t\t\tdb: tk.ds.dbexpression.dbfile,\n\t\t\t\ttablename: tk.ds.dbexpression.tablename,\n\t\t\t\tkeyname: tk.ds.dbexpression.keyname,\n\t\t\t\tkey: block.usegm.name\n\t\t\t}\n\t\t\tconst data = await client.dofetch2('dbdata', { method: 'POST', body: JSON.stringify(par) })\n\t\t\tif (data.error) throw data.error\n\t\t\tif (!tk.eplst) tk.eplst = []\n\t\t\tif (tk.ds.dbexpression.tidy) tk.ds.dbexpression.tidy(data.rows)\n\t\t\tconst eparg = {\n\t\t\t\tdata: data.rows,\n\t\t\t\texpp: tk.ds.dbexpression.config,\n\t\t\t\tblock,\n\t\t\t\tgenome: block.genome,\n\t\t\t\tgenename: block.usegm.name,\n\t\t\t\tdsname: tk.ds.label\n\t\t\t}\n\t\t\tconst p = await import('./ep')\n\t\t\ttk.eplst.push(new p.default(eparg))\n\t\t}\n\t} else {\n\t\t// genomic view\n\t\tconst mlst = []\n\t\tconst chrset = new Map()\n\t\tfor (const r of block.rglst) {\n\t\t\tif (!chrset.has(r.chr)) {\n\t\t\t\tchrset.set(r.chr, [])\n\t\t\t}\n\t\t\tchrset.get(r.chr).push(r)\n\t\t}\n\t\tconst allmlst = []\n\t\tif (tk.ds.bulkdata) {\n\t\t\tfor (const k in tk.ds.bulkdata) {\n\t\t\t\tallmlst.push(...tk.ds.bulkdata[k])\n\t\t\t}\n\t\t}\n\t\tif (tk.ds.mlst) {\n\t\t\tallmlst.push(...tk.ds.mlst)\n\t\t}\n\t\tfor (const m of allmlst) {\n\t\t\tswitch (m.dt) {\n\t\t\t\tcase common.dtsnvindel:\n\t\t\t\tcase common.dtitd:\n\t\t\t\tcase common.dtdel:\n\t\t\t\tcase common.dtnloss:\n\t\t\t\tcase common.dtcloss:\n\t\t\t\t\tif (!m.pos) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.chr && !chrset.has(m.chr)) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tfor (const r of chrset.get(m.chr)) {\n\t\t\t\t\t\tif (m.pos >= r.start && m.pos < r.stop) {\n\t\t\t\t\t\t\tmlst.push(m)\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\tbreak\n\t\t\t\tcase common.dtsv:\n\t\t\t\tcase common.dtfusionrna:\n\t\t\t\t\tif (!m.pairlst) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tlet hit = false\n\t\t\t\t\tfor (const pair of m.pairlst) {\n\t\t\t\t\t\t// a\n\t\t\t\t\t\tif (pair.a.chr && chrset.has(pair.a.chr)) {\n\t\t\t\t\t\t\tconst pos = pair.a.position || pair.a.pos\n\t\t\t\t\t\t\tif (pos) {\n\t\t\t\t\t\t\t\tfor (const r of chrset.get(pair.a.chr)) {\n\t\t\t\t\t\t\t\t\tif (pos >= r.start && pos < r.stop) {\n\t\t\t\t\t\t\t\t\t\thit = true\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// b\n\t\t\t\t\t\tif (pair.b.chr && chrset.has(pair.b.chr)) {\n\t\t\t\t\t\t\tconst pos = pair.b.position || pair.b.pos\n\t\t\t\t\t\t\tif (pos) {\n\t\t\t\t\t\t\t\tfor (const r of chrset.get(pair.b.chr)) {\n\t\t\t\t\t\t\t\t\tif (pos >= r.start && pos < r.stop) {\n\t\t\t\t\t\t\t\t\t\thit = true\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\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\tif (hit) {\n\t\t\t\t\t\tmlst.push(m)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t// end of switch\n\t\t\t}\n\t\t}\n\t\tif (mlst.length) {\n\t\t\tload2tk([{ lst: mlst }], block, tk)\n\t\t}\n\t}\n}\n\nasync function dstkload_fromdsquery(tk, block) {\n\tif (tk.__handlesays) tk.__handlesays.text('Loading...')\n\ttk.ds.busy = true\n\tblock.tkcloakon(tk)\n\n\tconst par = {\n\t\tgenome: block.genome.name,\n\t\tdsname: tk.ds.label,\n\t\trange: block.tkarg_maygm(tk)[0] // FIXME no support for rglst!\n\t}\n\tif (block.usegm) {\n\t\tpar.genename = block.usegm.name\n\t\tpar.isoform = block.usegm.isoform\n\t}\n\tif (tk.eplst) {\n\t\t// hard-coded\n\t\t// means this track has already been loaded\n\t\tpar.noexpression = 1\n\t}\n\tif (block.hidedatasetexpression) {\n\t\t// embed customization\n\t\tpar.noexpression = 1\n\t}\n\t// ?? how to define regulatory regions associated with a gene (retrieve and show it by default)\n\t// ?? how to retrieve data over regulatory region from a db\n\n\tconst data = await client.dofetch2('dsdata', { method: 'POST', body: JSON.stringify(par) })\n\tif (tk.__handlesays) {\n\t\ttk.__handlesays.text(tk.ds.label).style('background-color', '#ddd').style('color', 'black')\n\t}\n\tif (data.error) throw data.error\n\tload2tk(data.data, block, tk)\n}\n\nexport function load2tk(datalst, block, tk) {\n\tif (tk.dsuninitiated) {\n\t\t// pull from tklst\n\t\tfor (let i = 0; i < block.tklst.length; i++) {\n\t\t\tif (block.tklst[i].tkid == tk.tkid) {\n\t\t\t\tblock.tklst.splice(i, 1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tdelete tk.dsuninitiated\n\t\t// above or below pbar\n\t\tlet gmtkidx = -1\n\t\tfor (let i = 0; i < block.tklst.length; i++) {\n\t\t\tconst t = block.tklst[i]\n\t\t\tif (t.type == client.tkt.usegm && !t.hidden) {\n\t\t\t\tgmtkidx = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tlet aboveprotein = true\n\n\t\tif (gmtkidx == -1) {\n\t\t\t// no gmtk shown, just add\n\t\t\taboveprotein = true\n\t\t\tblock.tklst.push(tk)\n\t\t} else {\n\t\t\t// has gmtk\n\t\t\tlet dsabove = false\n\t\t\tfor (let i = 0; i < gmtkidx; i++) {\n\t\t\t\tconst t = block.tklst[i]\n\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\tdsabove = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dsabove) {\n\t\t\t\t// this dstk to below gmtk\n\t\t\t\taboveprotein = false\n\t\t\t\tblock.tklst.splice(gmtkidx + 1, 0, tk)\n\t\t\t} else {\n\t\t\t\t// to above\n\t\t\t\taboveprotein = true\n\t\t\t\tif (gmtkidx == 0) {\n\t\t\t\t\tblock.tklst.unshift(tk)\n\t\t\t\t} else {\n\t\t\t\t\tblock.tklst.splice(gmtkidx - 1, 0, tk)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tk.aboveprotein == undefined) {\n\t\t\t// do not override pointdown\n\t\t\ttk.aboveprotein = aboveprotein\n\t\t}\n\n\t\ttk.eplst = [] // only do it here!!!\n\t} else {\n\t\t// already in block.tklst, don't insert\n\t}\n\t// parse data\n\ttk.mlst = []\n\n\t/*\n\tpediatric has 2 ep\n\twill need to shift 2nd panel position\n\t*/\n\tconst eploaders = []\n\n\tfor (const dat of datalst) {\n\t\t// individual queries in this dataset\n\t\tif (dat.isgeneexpression) {\n\t\t\teploaders.push(dsqueryresult_geneexpression(dat, tk, block))\n\t\t\tcontinue\n\t\t}\n\t\tif (dat.vcfid) {\n\t\t\t// single vcf\n\t\t\tvcftk.data2tk(dat, tk, block)\n\t\t\tcontinue\n\t\t}\n\t\tif (dat.lst) {\n\t\t\t// variant dataset\n\t\t\tdsqueryresult_snvindelfusionitd(dat.lst, tk, block)\n\t\t\tmay_print_stratifycountfromserver(dat, tk)\n\t\t\tcontinue\n\t\t}\n\t\tblock.error('unknown data/query type from ' + tk.ds.label)\n\t\treturn\n\t}\n\n\tPromise.all(eploaders).then(() => {\n\t\tif (tk.eplst.length > 1) {\n\t\t\tfor (let i = 1; i < tk.eplst.length; i++) {\n\t\t\t\tconst ep = tk.eplst[i]\n\t\t\t\tep.pane.pane.style('left', Number.parseInt(tk.eplst[0].pane.pane.style('left')) + 50 * i + 'px')\n\t\t\t\tep.pane.pane.style('top', Number.parseInt(tk.eplst[0].pane.pane.style('top')) + 50 * i + 'px')\n\t\t\t}\n\t\t}\n\t})\n\n\tdstkrender(tk, block)\n}\n\nexport function dstkrender(tk, block) {\n\t/*\ntk.mlst[] is set\n*/\n\n\tblock.tkcloakoff(tk, {})\n\n\tmlst_set_occurrence(tk)\n\n\tif (tk.vcfinfofilter && tk.vcfinfofilter.setidx4numeric != undefined) {\n\t\tif (!tk.numericmode) {\n\t\t\t// entering numeric mode\n\t\t\ttk.numericmode = { axisheight: tk.axisheight }\n\t\t}\n\t} else {\n\t\tdelete tk.numericmode\n\t}\n\n\t/*\n\tjinghui asked to hide all nonpathogenic germline variants by default\n\tset common.morigin.GNP.hidden=true\n\tupon first rendering ds track, block.legend.morigins is not made yet, so no way of knowing who to hide by default\n\t*/\n\tconst originhidden = new Set()\n\tfor (const k in common.morigin) {\n\t\tif (common.morigin[k].hidden) {\n\t\t\toriginhidden.add(k)\n\t\t}\n\t}\n\n\tvcfinfofilter_mayupdateautocategory(tk, block)\n\n\tif (tk.numericmode) {\n\t\trendernumerictk(tk, block, originhidden)\n\t} else {\n\t\trenderskewertk(tk, block, originhidden)\n\t}\n\n\tblock.setllabel(tk)\n\n\tblock.block_setheight()\n\n\tblock.tkchangeaffectlegend(tk)\n\n\t/*\n\tcustom class, vcf info fields, sample annotation\n\tstuff to show on legend\n\t*/\n\tshowlegend_vcfinfofilter(tk, block)\n\tshowlegend_populationfrequencyfilter(tk, block)\n\t{\n\t\tconst err = showlegend_sampleattribute(tk, block)\n\t\tif (err) console.log('showlegend_sampleattribute: ' + err)\n\t}\n}\n\nfunction mlst_set_occurrence(tk) {\n\t/*\nhandle multiple ways of assigning occurrence\n.occurrence now applies to all legacy ds track, applications:\n- skewer graph to decide dot size\n- sunburst\n*/\n\tif (tk.vcfinfofilter && tk.vcfinfofilter.setidx4occurrence != undefined) {\n\t\tconst mcset = tk.vcfinfofilter.lst[tk.vcfinfofilter.setidx4occurrence]\n\t\tif (!mcset) throw 'mcset not found by setidx4occurrence'\n\t\tfor (const m of tk.mlst) {\n\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\t\t\tif (err || vlst == undefined) {\n\t\t\t\tm.occurrence = 1\n\t\t\t} else {\n\t\t\t\tm.occurrence = vlst[0]\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// occurrence may not apply to the data at all, but still assigning it\n\t\tfor (const m of tk.mlst) {\n\t\t\tm.occurrence = 1\n\t\t}\n\t}\n}\n\nfunction renderskewertk(tk, block, originhidden) {\n\t/*\n\tmakes:\n\ttk.data\n\ttk.skewer\n\ttk.maxskewerheight\n\t*/\n\n\ttk.leftaxis.selectAll('*').remove() // in case turned from numericmode\n\n\t// when to skip grouping\n\tif (block.usegm && block.gmmode != client.gmmode.genomic && block.pannedpx != undefined && tk.skewer) {\n\t\t// in gmmode, browser panned, no re-requesting data\n\t\t// no need to re-group\n\t\t// set x\n\n\t\ttkdata_update_x(tk, block)\n\n\t\ttk.skewer.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')')\n\t\tsettle_glyph(tk, block)\n\t} else {\n\t\t// create group and skewer anew\n\t\ttk.glider.selectAll('*').remove()\n\n\t\tconst usemlst = mlst_pretreat(tk, block, originhidden)\n\n\t\tconst x2mlst = new Map()\n\t\tfor (const m of tk.mlst) {\n\t\t\tif (m.__x == undefined) {\n\t\t\t\t// dropped by filter\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!x2mlst.has(m.__x)) {\n\t\t\t\tx2mlst.set(m.__x, [])\n\t\t\t}\n\t\t\tx2mlst.get(m.__x).push(m)\n\t\t}\n\t\tconst datagroup = []\n\t\tconst topxbins = []\n\t\t// by resolution\n\t\tif (block.exonsf >= minbpwidth) {\n\t\t\t// # pixel per nt is big enough\n\t\t\t// group by each nt\n\t\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\t\tdatagroup.push({\n\t\t\t\t\tchr: mlst[0].chr,\n\t\t\t\t\tpos: mlst[0].pos,\n\t\t\t\t\tmlst: mlst,\n\t\t\t\t\tx: x,\n\t\t\t\t\tgroups: mlst2disc(mlst, tk)\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\t// # pixel per nt is too small\n\t\t\tif (block.usegm && block.usegm.coding && block.gmmode != client.gmmode.genomic) {\n\t\t\t\t// by aa\n\t\t\t\t// in gmsum, rglst may include introns, need to distinguish symbolic and rglst introns, use __x difference by a exonsf*3 limit\n\t\t\t\tconst aa2mlst = new Map()\n\t\t\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\t\t\tif (mlst[0].chr != block.usegm.chr) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\t// TODO how to identify if mlst belongs to regulatory region rather than gm\n\t\t\t\t\tlet aapos = undefined\n\t\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\t\tif (Number.isFinite(m.aapos)) aapos = m.aapos\n\t\t\t\t\t}\n\t\t\t\t\tif (aapos == undefined) {\n\t\t\t\t\t\taapos = coord.genomic2gm(mlst[0].pos, block.usegm).aapos\n\t\t\t\t\t}\n\t\t\t\t\tif (aapos == undefined) {\n\t\t\t\t\t\tconsole.error('data item cannot map to aaposition')\n\t\t\t\t\t\tconsole.log(mlst[0])\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tx2mlst.delete(x)\n\t\t\t\t\tif (!aa2mlst.has(aapos)) {\n\t\t\t\t\t\taa2mlst.set(aapos, [])\n\t\t\t\t\t}\n\t\t\t\t\tlet notmet = true\n\t\t\t\t\tfor (const lst of aa2mlst.get(aapos)) {\n\t\t\t\t\t\tif (Math.abs(lst[0].__x - mlst[0].__x) <= block.exonsf * 3) {\n\t\t\t\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\t\t\t\tlst.push(m)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnotmet = 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 (notmet) {\n\t\t\t\t\t\taa2mlst.get(aapos).push(mlst)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst utr5len = block.usegm.utr5 ? block.usegm.utr5.reduce((i, j) => i + j[1] - j[0], 0) : 0\n\t\t\t\tfor (const llst of aa2mlst.values()) {\n\t\t\t\t\tfor (const mlst of llst) {\n\t\t\t\t\t\tlet m = null\n\t\t\t\t\t\tfor (const m2 of mlst) {\n\t\t\t\t\t\t\tif (Number.isFinite(m2.rnapos)) m = m2\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m == null) {\n\t\t\t\t\t\t\tconsole.log('trying to map mlst to codon, but no rnapos found')\n\t\t\t\t\t\t\tfor (const m of mlst) {\n\t\t\t\t\t\t\t\tconsole.log(m)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatagroup.push({\n\t\t\t\t\t\t\tchr: mlst[0].chr,\n\t\t\t\t\t\t\tpos: m.pos,\n\t\t\t\t\t\t\tmlst: mlst,\n\t\t\t\t\t\t\tx: mlst[0].__x,\n\t\t\t\t\t\t\tgroups: mlst2disc(mlst, tk)\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\t// leftover by px bin\n\t\t\tconst pxbin = []\n\t\t\tconst binpx = 2\n\t\t\tfor (const [x, mlst] of x2mlst) {\n\t\t\t\tconst i = Math.floor(x / binpx)\n\t\t\t\tif (!pxbin[i]) {\n\t\t\t\t\tpxbin[i] = []\n\t\t\t\t}\n\t\t\t\tpxbin[i] = [...pxbin[i], ...mlst]\n\t\t\t}\n\t\t\tfor (const mlst of pxbin) {\n\t\t\t\tif (!mlst) continue\n\t\t\t\tconst xsum = mlst.reduce((i, j) => i + j.__x, 0)\n\t\t\t\tdatagroup.push({\n\t\t\t\t\tisbin: true,\n\t\t\t\t\tchr: mlst[0].chr,\n\t\t\t\t\tpos: mlst[0].pos,\n\t\t\t\t\tmlst: mlst,\n\t\t\t\t\tx: xsum / mlst.length,\n\t\t\t\t\tgroups: mlst2disc(mlst, tk)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tdatagroup.sort((a, b) => a.x - b.x)\n\t\tif (tk.data && block.pannedpx != undefined && (!block.usegm || block.gmmode == client.gmmode.genomic)) {\n\t\t\t// inherit genomic mode and panned\n\t\t\tconst pastmode = {}\n\t\t\tfor (const g of tk.data) {\n\t\t\t\tpastmode[g.chr + '.' + g.pos] = {\n\t\t\t\t\tmode: g.showmode,\n\t\t\t\t\txoffset: g.xoffset,\n\t\t\t\t\tslabelrotate: g.slabelrotate // no effect\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const g of datagroup) {\n\t\t\t\tconst k = g.chr + '.' + g.pos\n\t\t\t\tif (pastmode[k]) {\n\t\t\t\t\tg.showmode = pastmode[k].mode\n\t\t\t\t\tg.xoffset = pastmode[k].xoffset\n\t\t\t\t\tg.slabelrotate = pastmode[k].slabelrotate\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttk.data = datagroup\n\t\tfor (const d of tk.data) {\n\t\t\td.occurrence = d.groups.reduce((i, j) => i + j.occurrence, 0)\n\t\t}\n\t\tskewer_make(tk, block)\n\t\ttk.height_main = tk.toppad + tk.maxskewerheight + tk.stem1 + tk.stem2 + tk.stem3 + tk.bottompad\n\t}\n\n\tif (!tk.data || tk.data.length == 0) {\n\t\tdone_tknodata(tk, block)\n\t\treturn\n\t}\n\n\t/*\n\tvariants loaded for this track\n\t*/\n\n\tif (tk.hlaachange || tk.hlvariants) {\n\t\t/*\n\t\tfor any variants to be highlighted, expanded and fold all the others\n\t\t*/\n\t\tconst fold = []\n\t\tconst unfold = []\n\n\t\tif (tk.hlaachange) {\n\t\t\t// is map\n\t\t\tfor (const d of tk.data) {\n\t\t\t\tlet has = false\n\t\t\t\tfor (const g of d.groups) {\n\t\t\t\t\tif (tk.hlaachange.has(g.mlst[0].mname)) {\n\t\t\t\t\t\thas = true\n\t\t\t\t\t\ttk.hlaachange.delete(g.mlst[0].mname)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (has) {\n\t\t\t\t\tunfold.push(d)\n\t\t\t\t} else {\n\t\t\t\t\tfold.push(d)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (tk.hlaachange.size) {\n\t\t\t\tif (!block.usegm) {\n\t\t\t\t\tblock.error('cannot add items from hlaachange: not in gene-mode')\n\t\t\t\t} else {\n\t\t\t\t\thlaachange_addnewtrack(tk, block)\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete tk.hlaachange\n\t\t}\n\n\t\tif (tk.hlvariants) {\n\t\t\t// is array\n\t\t\tconst hlkeys = {}\n\t\t\tfor (const m of tk.hlvariants) {\n\t\t\t\thlkeys[m.chr + '.' + m.pos + '.' + m.ref + '.' + m.alt] = 1\n\t\t\t}\n\n\t\t\tfor (const d of tk.data) {\n\t\t\t\tlet has = false\n\t\t\t\tfor (const g of d.groups) {\n\t\t\t\t\tif (has) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tfor (const m of g.mlst) {\n\t\t\t\t\t\tif (hlkeys[m.chr + '.' + m.pos + '.' + m.ref + '.' + m.alt]) {\n\t\t\t\t\t\t\thas = true\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\tif (has) {\n\t\t\t\t\tunfold.push(d)\n\t\t\t\t} else {\n\t\t\t\t\tfold.push(d)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfold_glyph(fold, tk)\n\t\tunfold_glyph(unfold, tk, block)\n\t} else {\n\t\t// natural expand\n\t\tsettle_glyph(tk, block)\n\t}\n}\n\nfunction group2occurrence(g, tk) {\n\tif (tk.vcfinfofilter && tk.vcfinfofilter.setidx4occurrence != undefined) {\n\t\tconst mcset = tk.vcfinfofilter.lst[tk.vcfinfofilter.setidx4occurrence]\n\t\tconst [err, vlst] = getter_mcset_key(mcset, g.mlst[0])\n\t\tif (err || vlst == undefined) return 1\n\t\treturn vlst[0]\n\t}\n\treturn g.mlst.length\n}\n\nfunction mlst2disc(mlst, tk) {\n\tconst k2g = new Map()\n\tfor (const m of mlst) {\n\t\tswitch (m.dt) {\n\t\t\tcase common.dtsnvindel:\n\t\t\t\tif (!k2g.has(m.dt)) {\n\t\t\t\t\tk2g.set(m.dt, new Map())\n\t\t\t\t}\n\t\t\t\tif (!k2g.get(m.dt).has(m.class)) {\n\t\t\t\t\tk2g.get(m.dt).set(m.class, new Map())\n\t\t\t\t}\n\t\t\t\tconst n = m.mname || ''\n\t\t\t\tif (!k2g.get(m.dt).get(m.class).has(n)) {\n\t\t\t\t\tk2g.get(m.dt).get(m.class).set(n, [])\n\t\t\t\t}\n\t\t\t\tk2g.get(m.dt).get(m.class).get(n).push(m)\n\t\t\t\tbreak\n\t\t\tcase common.dtsv:\n\t\t\tcase common.dtfusionrna:\n\t\t\t\tif (!k2g.has(m.dt)) {\n\t\t\t\t\tk2g.set(m.dt, new Map())\n\t\t\t\t}\n\t\t\t\tif (!k2g.get(m.dt).has(m.class)) {\n\t\t\t\t\tk2g.get(m.dt).set(m.class, {\n\t\t\t\t\t\tuse5: new Map(),\n\t\t\t\t\t\tuse3: new Map()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (m.useNterm) {\n\t\t\t\t\tif (!k2g.get(m.dt).get(m.class).use5.has(m.mname)) {\n\t\t\t\t\t\tk2g.get(m.dt).get(m.class).use5.set(m.mname, [])\n\t\t\t\t\t}\n\t\t\t\t\tk2g.get(m.dt).get(m.class).use5.get(m.mname).push(m)\n\t\t\t\t} else {\n\t\t\t\t\tif (!k2g.get(m.dt).get(m.class).use3.has(m.mname)) {\n\t\t\t\t\t\tk2g.get(m.dt).get(m.class).use3.set(m.mname, [])\n\t\t\t\t\t}\n\t\t\t\t\tk2g.get(m.dt).get(m.class).use3.get(m.mname).push(m)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase common.dtitd:\n\t\t\tcase common.dtdel:\n\t\t\tcase common.dtnloss:\n\t\t\tcase common.dtcloss:\n\t\t\t\tif (!k2g.has(m.dt)) {\n\t\t\t\t\tk2g.set(m.dt, [])\n\t\t\t\t}\n\t\t\t\tk2g.get(m.dt).push(m)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tconsole.log('unknown datatype: ' + m.dt)\n\t\t\t\tconsole.log(m)\n\t\t\t\treturn\n\t\t}\n\t}\n\tconst groups = []\n\tfor (const [dt, tmp] of k2g) {\n\t\tswitch (dt) {\n\t\t\tcase common.dtsnvindel:\n\t\t\t\tfor (const t2 of tmp.values()) {\n\t\t\t\t\tfor (const mlst of t2.values()) {\n\t\t\t\t\t\tgroups.push({\n\t\t\t\t\t\t\tdt: dt,\n\t\t\t\t\t\t\tmlst: mlst\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase common.dtsv:\n\t\t\tcase common.dtfusionrna:\n\t\t\t\tfor (const classset of tmp.values()) {\n\t\t\t\t\tfor (const mlst of classset.use5.values()) {\n\t\t\t\t\t\tgroups.push({\n\t\t\t\t\t\t\tdt: dt,\n\t\t\t\t\t\t\tuseNterm: true,\n\t\t\t\t\t\t\tmlst: mlst\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tfor (const mlst of classset.use3.values()) {\n\t\t\t\t\t\tgroups.push({\n\t\t\t\t\t\t\tdt: dt,\n\t\t\t\t\t\t\tuseNterm: false,\n\t\t\t\t\t\t\tmlst: mlst\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase common.dtitd:\n\t\t\tcase common.dtdel:\n\t\t\tcase common.dtnloss:\n\t\t\tcase common.dtcloss:\n\t\t\t\tgroups.push({\n\t\t\t\t\tdt: dt,\n\t\t\t\t\tmlst: tmp\n\t\t\t\t})\n\t\t}\n\t}\n\tfor (const g of groups) {\n\t\tlet rim1count = 0,\n\t\t\trim2count = 0\n\t\tfor (const m of g.mlst) {\n\t\t\tif (m.isrim1) rim1count++\n\t\t\telse if (m.isrim2) rim2count++\n\t\t}\n\t\tg.rim1count = rim1count\n\t\tg.rim2count = rim2count\n\t\tg.occurrence = g.mlst.reduce((i, j) => i + j.occurrence, 0) //group2occurrence(g, tk)\n\t}\n\tgroups.sort((a, b) => {\n\t\treturn b.occurrence - a.occurrence\n\t})\n\treturn groups\n}\n\nfunction skewer_make(tk, block) {\n\t/*\nnew things:\nitd/del stacked bars\ncustom mclass from vcfinfofilter\n*/\n\n\tdelete tk.skewer2\n\n\tconst color4disc = m => {\n\t\tif (tk.vcfinfofilter && tk.vcfinfofilter.setidx4mclass != undefined) {\n\t\t\tconst mcset = tk.vcfinfofilter.lst[tk.vcfinfofilter.setidx4mclass]\n\n\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\n\t\t\tif (err || vlst == undefined) return 'black'\n\n\t\t\tfor (const v of vlst) {\n\t\t\t\t// no choice but simply use first value to ever have a valid color\n\t\t\t\tif (mcset.categories[v]) {\n\t\t\t\t\treturn mcset.categories[v].color\n\t\t\t\t} else {\n\t\t\t\t\treturn 'black'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// mclass\n\t\tif (common.mclass[m.class]) {\n\t\t\treturn common.mclass[m.class].color\n\t\t}\n\t\treturn 'black'\n\t}\n\n\t// ITD/DEL stacked bars\n\tconst stackbars = []\n\tfor (const d of tk.data) {\n\t\td.x0 = d.x\n\t\tif (d.xoffset != undefined) {\n\t\t\td.x = d.x0 + d.xoffset\n\t\t}\n\t\t// updates x\n\t\t// create stack bars\n\t\tfor (const g of d.groups) {\n\t\t\tg.aa = d // disc reference group\n\t\t\tlet rnaspan = null\n\t\t\tif (g.dt == common.dtitd) {\n\t\t\t\trnaspan = g.mlst[0].rnaduplength\n\t\t\t\tfor (const m of g.mlst) {\n\t\t\t\t\trnaspan = Math.max(rnaspan, m.rnaduplength)\n\t\t\t\t}\n\t\t\t} else if (g.dt == common.dtdel) {\n\t\t\t\trnaspan = g.mlst[0].rnadellength\n\t\t\t\tfor (const m of g.mlst) {\n\t\t\t\t\trnaspan = Math.max(rnaspan, m.rnadellength)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no business\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// no isInteger, rna position can have .5\n\t\t\tif (!Number.isFinite(rnaspan) || rnaspan < 0) {\n\t\t\t\t// support if genomic pos is available\n\t\t\t\tconsole.log('no rnaspan for stack bar from itd/del')\n\t\t\t\tconsole.log(g.mlst)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlet pxspan = null\n\t\t\tif (block.usegm) {\n\t\t\t\tconst rnapos = g.mlst[0].rnapos // rnapos should always be available!\n\t\t\t\tconst genomicpos = coord.rna2gmcoord(rnapos + rnaspan, block.usegm)\n\t\t\t\tconst hits = block.seekcoord(block.usegm.chr, genomicpos)\n\t\t\t\tif (hits.length > 0) {\n\t\t\t\t\tpxspan = hits[0].x - d.x\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(genomicpos + ' no hit on rglst')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!Number.isFinite(pxspan)) {\n\t\t\t\tconsole.log('no pxspan for stack bar from itd/del')\n\t\t\t\tconsole.log(g.mlst)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tg.stackbar = {\n\t\t\t\taa: d.mlst[0].aapos,\n\t\t\t\tpxspan: pxspan,\n\t\t\t\theight: 4, // fixed bar height\n\t\t\t\tgrp: g\n\t\t\t}\n\t\t\td.hasstackbar = true\n\t\t\tstackbars.push(g.stackbar)\n\t\t}\n\t}\n\tlet stackbarmaxheight = 0 // for setting stem3\n\t// TODO stairs may replace stackbars\n\tif (stackbars.length > 0) {\n\t\tlet ypad = 1\n\t\tfor (let i = 0; i < stackbars.length; i++) {\n\t\t\tconst si = stackbars[i]\n\t\t\tconst overlap = []\n\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\tconst sj = stackbars[j]\n\t\t\t\tif (Math.max(si.aa, sj.aa) < Math.min(si.pxspan + si.aa, sj.pxspan + sj.aa)) {\n\t\t\t\t\toverlap.push(sj)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsi.y = 2\n\t\t\tfor (const sj of overlap) {\n\t\t\t\tif (Math.max(si.y, sj.y) < Math.min(si.y + si.height, sj.y + sj.height)) {\n\t\t\t\t\tsi.y = sj.y + sj.height + ypad\n\t\t\t\t}\n\t\t\t}\n\t\t\tstackbarmaxheight = Math.max(stackbarmaxheight, si.y + si.height)\n\t\t}\n\t}\n\n\tconst dotwidth = Math.max(14, block.width / 110)\n\t// create skewers for all data (single or multiple) and compute width\n\n\t// get max m count for discs, for scaling disc radius\n\tlet mdc = 0\n\tfor (const d of tk.data) {\n\t\tfor (const g of d.groups) {\n\t\t\tmdc = Math.max(mdc, g.occurrence)\n\t\t}\n\t}\n\tlet mrd = 0 // max disc radius\n\tconst w = Math.pow(dotwidth / 2, 2) * Math.PI // unit area\n\tif (mdc <= 10) mrd = w * mdc * 0.9\n\telse if (mdc <= 100) mrd = w * 10\n\telse if (mdc <= 1000) mrd = w * 14\n\telse mrd = w * 20\n\t// scale for disc radius\n\tconst sf_discradius = scaleLinear()\n\t\t.domain([1, mdc * 0.5, mdc * 0.6, mdc * 0.7, mdc * 0.8, mdc])\n\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\tlet globalmaxradius = dotwidth / 2\n\ttk.maxskewerheight = 0\n\ttk.skewer = tk.glider\n\t\t.selectAll()\n\t\t.data(tk.data)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr('class', 'sja_skg')\n\t\t.each(function (d) {\n\t\t\t// determine dimension for this skewer, do not position or render yet\n\t\t\t// compute radius for each group\n\t\t\td.skewer = this\n\t\t\tif (d.showmode == undefined) {\n\t\t\t\td.showmode = modefold\n\t\t\t} else {\n\t\t\t\t// has already been set by past data from genomic panning\n\t\t\t}\n\t\t\td.maxradius = 0\n\t\t\td.maxrimwidth = 0\n\t\t\td.width = 0\n\t\t\td.slabelrotate = false\n\t\t\td.slabelwidth = 0\n\t\t\tfor (const r of d.groups) {\n\t\t\t\tif (r.occurrence == 1) {\n\t\t\t\t\tr.radius = dotwidth / 2\n\t\t\t\t} else {\n\t\t\t\t\tconst digc = r.occurrence.toString().length\n\t\t\t\t\tr.radius = Math.max(Math.sqrt(sf_discradius(r.occurrence) / Math.PI), digc * 5)\n\t\t\t\t}\n\t\t\t\td.maxradius = Math.max(d.maxradius, r.radius)\n\t\t\t\tglobalmaxradius = Math.max(globalmaxradius, r.radius)\n\n\t\t\t\tr.rimwidth = r.rim1count + r.rim2count == 0 ? 0 : Math.max(2, r.radius / 6)\n\t\t\t\td.maxrimwidth = Math.max(d.maxrimwidth, r.rimwidth)\n\t\t\t}\n\t\t\tlet totalheight = 0\n\t\t\tfor (const r of d.groups) {\n\t\t\t\tr.yoffset = totalheight + r.radius + r.rimwidth // immutable, y shift at expand mode\n\t\t\t\ttotalheight += (r.radius + r.rimwidth) * 2\n\t\t\t}\n\t\t\ttk.maxskewerheight = Math.max(tk.maxskewerheight, totalheight)\n\t\t})\n\t// disc containers\n\tconst discg = tk.skewer\n\t\t.selectAll()\n\t\t.data(d => d.groups)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr(\n\t\t\t'transform',\n\t\t\td => 'translate(0,' + (d.aa.showmode == modefold ? 0 : d.yoffset * (tk.aboveprotein ? -1 : 1)) + ')'\n\t\t)\n\t\t.attr('class', 'sja_aa_discg')\n\t\t.each(function (d) {\n\t\t\td.g = this\n\t\t})\n\t// actual disc\n\tconst discdot = discg.append('circle')\n\t// hollow disc\n\tdiscdot\n\t\t.filter(d => d.dt == common.dtitd || d.dt == common.dtdel || d.dt == common.dtnloss || d.dt == common.dtcloss)\n\t\t.attr('fill', 'white')\n\t\t.attr('stroke-width', 2)\n\t\t.attr('stroke', d => color4disc(d.mlst[0]))\n\t\t.attr('r', d => d.radius - 2)\n\t// full filled\n\tdiscdot\n\t\t.filter(d => d.dt == common.dtsnvindel || d.dt == common.dtsv || d.dt == common.dtfusionrna)\n\t\t.attr('fill', d => color4disc(d.mlst[0]))\n\t\t.attr('stroke', 'white')\n\t\t.attr('r', d => d.radius - 0.5)\n\t// masking half\n\tdiscg\n\t\t.filter(d => d.dt == common.dtfusionrna || d.dt == common.dtsv)\n\t\t.append('path')\n\t\t.attr('fill', 'white')\n\t\t.attr('stroke', 'none')\n\t\t.attr('d', d =>\n\t\t\td3arc()({\n\t\t\t\tinnerRadius: 0,\n\t\t\t\touterRadius: d.radius - 2,\n\t\t\t\tstartAngle: d.useNterm ? 0 : Math.PI,\n\t\t\t\tendAngle: d.useNterm ? Math.PI : Math.PI * 2\n\t\t\t})\n\t\t)\n\t// number in disc\n\tconst textslc = discg\n\t\t.filter(d => d.occurrence > 1)\n\t\t.append('text')\n\t\t.text(d => d.occurrence)\n\t\t.attr('font-family', client.font)\n\t\t.attr('class', 'sja_aa_discnum')\n\t\t.attr('fill-opacity', d => (d.aa.showmode == modefold ? 0 : 1))\n\t\t.attr('stroke-opacity', d => (d.aa.showmode == modefold ? 0 : 1))\n\t\t.attr('text-anchor', 'middle')\n\t\t.each(d => {\n\t\t\tconst s = d.radius * 1.5\n\t\t\td.discnumfontsize = Math.min(s / (d.occurrence.toString().length * client.textlensf), s)\n\t\t})\n\t\t.attr('font-size', d => d.discnumfontsize)\n\t\t.attr('y', d => d.discnumfontsize * middlealignshift)\n\ttextslc.filter(d => d.dt == common.dtsnvindel).attr('fill', 'white')\n\ttextslc\n\t\t.filter(d => d.dt == common.dtsv || d.dt == common.dtfusionrna)\n\t\t.attr('stroke', d => color4disc(d.mlst[0]))\n\t\t.attr('stroke-width', 0.8)\n\t\t.attr('font-weight', 'bold')\n\t\t.attr('fill', 'white')\n\ttextslc\n\t\t.filter(d => d.dt == common.dtitd || d.dt == common.dtdel || d.dt == common.dtcloss || d.dt == common.dtnloss)\n\t\t.attr('fill', d => color4disc(d.mlst[0]))\n\t// right-side label\n\tconst textlab = discg\n\t\t.append('text')\n\t\t.text(d => d.mlst[0].mname)\n\t\t.attr('font-size', d => {\n\t\t\td._labfontsize = Math.max(12, d.radius * 1.2)\n\t\t\treturn d._labfontsize\n\t\t})\n\t\t.each(function (d) {\n\t\t\t// after setting font size, set skewer width by label width\n\t\t\tconst lw = this.getBBox().width\n\t\t\td._label_width = lw\n\t\t\tif (d.aa.groups.length == 1) {\n\t\t\t\td.aa.slabelrotate = true\n\t\t\t\td.aa.slabelwidth = lw\n\t\t\t\t// skewer has single disc, label may rotate up, thus should be considerred in maxskewerheight\n\t\t\t\ttk.maxskewerheight = Math.max(tk.maxskewerheight, (d.radius + d.rimwidth) * 2 + 2 + lw)\n\t\t\t}\n\t\t})\n\t\t.attr('fill', d => color4disc(d.mlst[0]))\n\t\t.attr('x', d => d.radius + d.rimwidth + 1)\n\t\t.attr('y', d => d._labfontsize * middlealignshift)\n\t\t.attr('font-family', client.font)\n\t\t.classed('sja_aa_disclabel', true)\n\t\t.attr('fill-opacity', d => (d.aa.showmode == modefold ? 0 : 1))\n\t\t.attr('transform', 'scale(1) rotate(0)')\n\t\t.on('mousedown', event => {\n\t\t\tevent.stopPropagation()\n\t\t})\n\t\t.on('click', (event, d) => {\n\t\t\tfold_glyph([d.aa], tk)\n\t\t\tunfold_update(tk, block)\n\t\t\tif (block.debugmode) {\n\t\t\t\tconsole.log(d.aa)\n\t\t\t}\n\t\t})\n\n\tif (tk.hlaachange) {\n\t\t// special effect for highlighted variants\n\t\t//const big=1.3\n\t\ttextlab.filter(d => tk.hlaachange.has(d.mlst[0].mname)).classed('sja_pulse', true)\n\t\t/*\n\t.attr('font-weight',(d)=>{\n\t\treturn tk.hlaachange.has(d.mlst[0].mname) ? 'bold' : 'normal'\n\t})\n\t.attr('font-size',(d)=>{\n\t\treturn d._labfontsize*big\n\t})\n\t.attr('y',d=> d._labfontsize*big*middlealignshift)\n\t*/\n\t}\n\n\t// skewer width\n\tfor (const d of tk.data) {\n\t\tlet leftw = 0,\n\t\t\trightw = 0\n\t\tfor (const g of d.groups) {\n\t\t\tleftw = Math.max(leftw, g.radius + g.rimwidth)\n\t\t\trightw = Math.max(rightw, g.radius + g.rimwidth + disclabelspacing + g._label_width)\n\t\t}\n\t\td.width = leftw + rightw\n\t}\n\n\t// invisible kicking disc cover\n\tdiscg\n\t\t.append('circle')\n\t\t.attr('r', d => d.radius - 0.5)\n\t\t.attr('stroke', d => color4disc(d.mlst[0]))\n\t\t.attr('class', 'sja_aa_disckick')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('stroke-opacity', 0)\n\t\t.on('mousedown', event => {\n\t\t\tevent.stopPropagation()\n\t\t})\n\t\t.on('mouseover', (event, d) => {\n\t\t\tif (tk.disc_mouseover) {\n\t\t\t\ttk.disc_mouseover(d, event.target)\n\t\t\t} else {\n\t\t\t\tepaint_may_hl(tk, d.mlst, true)\n\t\t\t}\n\t\t})\n\t\t.on('mouseout', (event, d) => {\n\t\t\tif (tk.disc_mouseout) {\n\t\t\t\ttk.disc_mouseout(d)\n\t\t\t} else {\n\t\t\t\tepaint_may_hl(tk, d.mlst, false)\n\t\t\t}\n\t\t})\n\t\t.on('click', async (event, d) => {\n\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\tif (d.dt == common.dtfusionrna || d.dt == common.dtsv) {\n\t\t\t\t// svgraph\n\t\t\t\titemtable({\n\t\t\t\t\tmlst: d.mlst,\n\t\t\t\t\tpane: true,\n\t\t\t\t\tx: p.left - 10,\n\t\t\t\t\ty: p.top - 10,\n\t\t\t\t\ttk,\n\t\t\t\t\tblock,\n\t\t\t\t\tsvgraph: true\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (d.occurrence == 1) {\n\t\t\t\t// table for single\n\t\t\t\titemtable({ mlst: d.mlst, pane: true, x: p.left - 10, y: p.top - 10, tk: tk, block: block })\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (\n\t\t\t\tawait may_sunburst(\n\t\t\t\t\td.occurrence,\n\t\t\t\t\td.mlst,\n\t\t\t\t\td.aa.x,\n\t\t\t\t\tskewer_sety(d, tk) + d.yoffset * (tk.aboveprotein ? -1 : 1),\n\t\t\t\t\ttk,\n\t\t\t\t\tblock\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// many items to table\n\t\t\titemtable({\n\t\t\t\tmlst: d.mlst,\n\t\t\t\tpane: true,\n\t\t\t\tx: p.left - 10,\n\t\t\t\ty: p.top - 10,\n\t\t\t\ttk,\n\t\t\t\tblock\n\t\t\t})\n\t\t})\n\n\t// disc rims\n\tconst rimfunc = d3arc()\n\t\t.innerRadius(d => d.radius)\n\t\t.outerRadius(d => d.radius + d.rimwidth)\n\t\t.startAngle(0)\n\t\t.endAngle(d => {\n\t\t\td.rim1_startangle = (Math.PI * 2 * d.rim1count) / d.occurrence\n\t\t\treturn d.rim1_startangle\n\t\t})\n\tdiscg\n\t\t.append('path')\n\t\t.attr('d', rimfunc)\n\t\t.attr('fill', d => color4disc(d.mlst[0]))\n\t\t.attr('class', 'sja_aa_discrim')\n\t\t.attr('fill-opacity', 0)\n\tconst rimfunc2 = d3arc()\n\t\t.innerRadius(d => d.radius + 0.5)\n\t\t.outerRadius(d => d.radius + 0.5 + d.rimwidth)\n\t\t.startAngle(d => d.rim1_startangle)\n\t\t.endAngle(d => d.rim1_startangle + (Math.PI * 2 * d.rim2count) / d.occurrence)\n\tdiscg\n\t\t.filter(d => d.rim2count > 0)\n\t\t.append('path')\n\t\t.attr('d', rimfunc2)\n\t\t.attr('stroke', d => color4disc(d.mlst[0]))\n\t\t.attr('fill', 'none')\n\t\t.attr('class', 'sja_aa_discrim')\n\t\t.attr('stroke-opacity', 0)\n\t// set stem lengths\n\t{\n\t\t// stem 1,2\n\t\tlet lapcount = 0\n\t\tlet lastx = 0\n\t\tfor (const d of tk.data) {\n\t\t\tif (d.x - d.maxradius - d.maxrimwidth < lastx) {\n\t\t\t\tlapcount++\n\t\t\t}\n\t\t\tlastx = Math.max(lastx, d.x + d.width - d.maxradius - d.maxrimwidth)\n\t\t}\n\t\t// stem1\n\t\ttk.stem1 = lapcount == 0 ? 0 : dotwidth\n\t\t// stem2\n\t\ttk.stem2 = scaleLinear()\n\t\t\t.domain([0, 1, tk.data.length])\n\t\t\t.range([0, dotwidth, dotwidth * 3])(lapcount)\n\t}\n\t// stem3\n\tconst hbaseline = dotwidth * 0.7\n\t// to set stem3, get max group size\n\tlet maxm = 0\n\tfor (const d of tk.data) {\n\t\tfor (const g of d.groups) {\n\t\t\tmaxm = Math.max(maxm, g.occurrence)\n\t\t}\n\t}\n\ttk.stem3 = Math.max(stackbarmaxheight + 2, hbaseline + dotwidth * Math.min(5, maxm))\n\t// invisible kicking skewer cover when folded\n\ttk.skewer\n\t\t.append('circle')\n\t\t.attr('class', 'sja_aa_skkick')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('stroke', 'none')\n\t\t.attr('r', d => d.maxradius + 1)\n\t\t.attr('cy', d => (tk.aboveprotein ? -1 : 1) * d.maxradius)\n\t\t.attr('transform', d => 'scale(' + (d.showmode == modefold ? 1 : 0) + ')')\n\t\t.on('mouseover', (event, d) => {\n\t\t\tepaint_may_hl(tk, d.mlst, true)\n\t\t\tconst abp = tk.aboveprotein\n\t\t\tlet cumh = 0\n\t\t\tlet boxw = 0\n\t\t\tconst hpad = 5\n\t\t\tconst tiph = abp ? 7 : 14\n\t\t\tfor (const g of d.groups) {\n\t\t\t\tg.pica_fontsize = Math.max(11, g.radius)\n\t\t\t\tcumh += g.pica_fontsize + 1\n\t\t\t\ttk.pica.g\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(g.mlst[0].mname + (g.occurrence > 1 ? ' x' + g.occurrence : ''))\n\t\t\t\t\t.attr('font-size', g.pica_fontsize)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tboxw = Math.max(boxw, this.getBBox().width)\n\t\t\t\t\t})\n\t\t\t\t\t.remove()\n\t\t\t}\n\t\t\tboxw += hpad * 2\n\t\t\tconst boxh = cumh + 5\n\t\t\ttk.pica.g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('y', abp ? -boxh : 0)\n\t\t\t\t.attr('width', boxw)\n\t\t\t\t.attr('height', boxh)\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.attr('fill-opacity', 0.8)\n\t\t\t\t.attr('stroke', '#ccc')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\tcumh = 0\n\t\t\tconst _g = tk.pica.g\n\t\t\t\t.selectAll()\n\t\t\t\t.data(d.groups)\n\t\t\t\t.enter()\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', (g, i) => {\n\t\t\t\t\tcumh += g.pica_fontsize + 1\n\t\t\t\t\treturn 'translate(' + hpad + ',' + cumh * (abp ? -1 : 1) + ')'\n\t\t\t\t})\n\t\t\t_g.append('text')\n\t\t\t\t.text(g => g.mlst[0].mname)\n\t\t\t\t.attr('font-size', g => g.pica_fontsize)\n\t\t\t\t.each(function (g) {\n\t\t\t\t\tg.pica_mlabelwidth = this.getBBox().width\n\t\t\t\t})\n\t\t\t\t.attr('fill', d => color4disc(d.mlst[0]))\n\t\t\t\t.attr('dominant-baseline', abp ? 'hanging' : 'auto')\n\t\t\tconst firstlabw = d.groups[0].pica_mlabelwidth\n\t\t\ttk.pica.x = d.x - hpad - firstlabw / 2\n\t\t\ttk.pica.y = d.y + (abp ? -1 : 1) * (d.maxradius * 2 + tiph + 2)\n\t\t\ttk.pica.g.attr('transform', 'translate(' + tk.pica.x + ',' + tk.pica.y + ')')\n\t\t\t_g.filter(g => g.occurrence > 1)\n\t\t\t\t.append('text')\n\t\t\t\t.text(g => 'x' + g.occurrence)\n\t\t\t\t.attr('x', g => g.pica_mlabelwidth + 5)\n\t\t\t\t.attr('font-size', g => g.pica_fontsize)\n\t\t\t\t.attr('dominant-baseline', abp ? 'hanging' : 'auto')\n\t\t\t\t.attr('fill', '#9e9e9e')\n\t\t\tconst handle = tk.pica.g\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', 'translate(' + (hpad + firstlabw / 2) + ',' + (abp ? 1 : -1) + ')')\n\t\t\thandle\n\t\t\t\t.append('line')\n\t\t\t\t.attr('y2', (abp ? 1 : -1) * tiph)\n\t\t\t\t.attr('stroke', '#858585')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\thandle\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', -1)\n\t\t\t\t.attr('x2', -1)\n\t\t\t\t.attr('y2', (abp ? 1 : -1) * tiph)\n\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\thandle\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', 1)\n\t\t\t\t.attr('x2', 1)\n\t\t\t\t.attr('y2', (abp ? 1 : -1) * tiph)\n\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t})\n\t\t.on('mouseout', (event, d) => {\n\t\t\ttk.pica.g.selectAll('*').remove()\n\t\t\tepaint_may_hl(tk, d.mlst, false)\n\t\t})\n\t\t.on('click', (event, d) => {\n\t\t\ttk.pica.g.selectAll('*').remove()\n\t\t\tunfold_glyph([d], tk, block)\n\t\t})\n\t// set fold y offset\n\t// get max mcount for skewers\n\tlet mm = 0\n\tfor (const d of tk.data) {\n\t\tmm = Math.max(mm, d.occurrence)\n\t}\n\tconst sf_foldyoff = scaleLinear()\n\t\t.domain([1, mm])\n\t\t.range([hbaseline, tk.stem3 - globalmaxradius])\n\ttk.skewer.attr('transform', d => {\n\t\td.foldyoffset = sf_foldyoff(d.occurrence)\n\t\td.y = skewer_sety(d, tk)\n\t\treturn 'translate(' + d.x + ',' + d.y + ')'\n\t})\n\tif (stackbars.length > 0) {\n\t\t// stack bars, make this before stem\n\t\ttk.skewer\n\t\t\t.filter(d => d.hasstackbar)\n\t\t\t.selectAll()\n\t\t\t.data(d => {\n\t\t\t\tconst bars = []\n\t\t\t\tfor (const g of d.groups) {\n\t\t\t\t\tif (g.stackbar) {\n\t\t\t\t\t\tbars.push(g.stackbar)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn bars\n\t\t\t})\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('class', 'sja_aa_stackbar_g')\n\t\t\t.attr('transform', d => {\n\t\t\t\t// initially all skewers are folded so only use stem1\n\t\t\t\treturn 'translate(0,' + (tk.aboveprotein ? 1 : -1) * (tk.stem1 - d.y) + ')'\n\t\t\t})\n\t\t\t.append('rect')\n\t\t\t.attr('y', d => (tk.aboveprotein ? -d.height : 0))\n\t\t\t.attr('class', 'sja_aa_stackbar_rect')\n\t\t\t.attr('width', 0)\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t.attr('fill-opacity', 0.5)\n\t\t\t.attr('stroke', 'none')\n\t\t\t.attr('stroke-width', 1)\n\t\t\t.attr('height', d => d.height)\n\t\t\t.attr('fill', d => color4disc(d.grp.mlst[0]))\n\t\t\t.on('mouseover', (event, d) => {\n\t\t\t\tconst color = color4disc(d.grp.mlst[0])\n\t\t\t\td3select(event.target).attr('stroke', color)\n\t\t\t\tconst pica = tk.pica\n\t\t\t\tlet label1 = 'wrong label'\n\t\t\t\tlet label2 = 'wrong label, '\n\t\t\t\tswitch (d.grp.mlst[0].dt) {\n\t\t\t\t\tcase common.dtitd:\n\t\t\t\t\t\tlabel1 = common.mclass[d.grp.mlst[0].class].desc\n\t\t\t\t\t\tlabel2 = Math.ceil(d.grp.mlst[0].rnaduplength / 3) + ' aa, '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase common.dtdel:\n\t\t\t\t\t\tlabel1 = common.mclass[d.grp.mlst[0].class].label\n\t\t\t\t\t\tlabel2 = Math.ceil(d.grp.mlst[0].rnadellength / 3) + ' aa, '\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif (d.grp.occurrence == 1) {\n\t\t\t\t\tconst m = d.grp.mlst[0]\n\t\t\t\t\tif (m.sample) {\n\t\t\t\t\t\tlabel2 += m.sample\n\t\t\t\t\t} else if (m.patient) {\n\t\t\t\t\t\tlabel2 += m.patient\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel2 += '1 sample'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlabel2 += d.grp.occurrence + ' samples'\n\t\t\t\t}\n\t\t\t\tconst fontsize1 = 14,\n\t\t\t\t\tfontsize2 = 10,\n\t\t\t\t\tvpad = 2,\n\t\t\t\t\thpad = 4\n\t\t\t\tlet width = 0\n\t\t\t\tpica.g\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(label1)\n\t\t\t\t\t.attr('font-size', fontsize1)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\twidth = this.getBBox().width\n\t\t\t\t\t})\n\t\t\t\t\t.remove()\n\t\t\t\tpica.g\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(label2)\n\t\t\t\t\t.attr('font-size', fontsize2)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\twidth = Math.max(width, this.getBBox().width)\n\t\t\t\t\t})\n\t\t\t\t\t.remove()\n\t\t\t\tconst boxheight = vpad * 3 + fontsize1 + fontsize2\n\t\t\t\tpica.x = d.grp.aa.x0 + 3\n\t\t\t\tpica.y = tk.aboveprotein\n\t\t\t\t\t? tk.height_main - tk.toppad - tk.bottompad - d.y - d.height - 3 - boxheight\n\t\t\t\t\t: d.y + d.height + 3\n\t\t\t\tpica.g.attr('transform', 'translate(' + pica.x + ',' + pica.y + ')')\n\t\t\t\tpica.g\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('width', width + hpad * 2)\n\t\t\t\t\t.attr('height', boxheight)\n\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t.attr('stroke-width', 1)\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t.attr('fill-opacity', 0.8)\n\t\t\t\tpica.g\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(label1)\n\t\t\t\t\t.attr('x', hpad)\n\t\t\t\t\t.attr('y', vpad + fontsize1 / 2)\n\t\t\t\t\t.attr('dominant-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', fontsize1)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('fill', color)\n\t\t\t\tpica.g\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(label2)\n\t\t\t\t\t.attr('x', hpad)\n\t\t\t\t\t.attr('y', vpad * 2 + fontsize1 + fontsize2 / 2)\n\t\t\t\t\t.attr('dominant-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', fontsize2)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t})\n\t\t\t.on('mouseout', (event, d) => {\n\t\t\t\td3select(event.target).attr('stroke', 'none')\n\t\t\t\ttk.pica.g.selectAll('*').remove()\n\t\t\t})\n\t\t\t.on('click', (event, d) => {\n\t\t\t\titemtable({\n\t\t\t\t\tmlst: d.grp.mlst,\n\t\t\t\t\tpane: true,\n\t\t\t\t\tx: event.clientX,\n\t\t\t\t\ty: event.clientY,\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t})\n\t}\n\t// stem\n\ttk.skewer\n\t\t.append('path')\n\t\t.attr('class', 'sja_aa_stem')\n\t\t.attr('d', d => skewer_setstem(d, tk))\n\t\t.attr('stroke', d => color4disc(d.groups[0].mlst[0]))\n\t\t.attr('fill', 'none')\n\t// ssk: only for skewers with >1 groups\n\tconst mgsk = tk.skewer.filter(d => d.groups.length > 1)\n\tmgsk\n\t\t.append('rect')\n\t\t.attr('class', 'sja_aa_ssk_bg')\n\t\t.attr('shape-rendering', 'crispEdges')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('height', tk.stem1)\n\t\t.attr('fill', d => color4disc(d.groups[0].mlst[0]))\n\t\t.attr('width', d => {\n\t\t\td.ssk_width = Math.max(d.occurrence.toString().length * 8 + 6, 2 * (d.maxradius + d.maxrimwidth))\n\t\t\treturn d.ssk_width\n\t\t})\n\t\t.attr('x', d => -d.ssk_width / 2)\n\tmgsk\n\t\t.append('text')\n\t\t.attr('class', 'sja_aa_ssk_text')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('font-weight', 'bold')\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('dominant-baseline', 'central')\n\t\t.text(d => d.occurrence)\n\t\t.each(d => {\n\t\t\td.ssk_fontsize = Math.min(tk.stem1, d.ssk_width / (d.occurrence.toString().length * client.textlensf))\n\t\t})\n\t\t.attr('font-size', d => d.ssk_fontsize)\n\t// ssk - kick\n\tmgsk\n\t\t.append('rect')\n\t\t.attr('class', 'sja_aa_ssk_kick')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('stroke', 'none')\n\t\t.attr('height', tk.stem1)\n\t\t.attr('x', d => -d.ssk_width / 2)\n\t\t.attr('width', d => d.ssk_width)\n\t\t.on('mouseover', (event, d) => {\n\t\t\tconst p = d3select(event.target.parentNode)\n\t\t\tp.selectAll('.sja_aa_disckick').transition().attr('stroke-opacity', 1)\n\t\t\tp.select('.sja_aa_ssk_bg').transition().attr('fill-opacity', 1).attr('stroke-opacity', 1)\n\t\t\tp.select('.sja_aa_ssk_text').transition().attr('fill-opacity', 1)\n\t\t\tepaint_may_hl(tk, d.mlst, true)\n\t\t})\n\t\t.on('mouseout', function (event, d) {\n\t\t\tconst p = d3select(event.target.parentNode)\n\t\t\tp.selectAll('.sja_aa_disckick').transition().attr('stroke-opacity', 0)\n\t\t\tp.select('.sja_aa_ssk_bg').transition().attr('fill-opacity', 0).attr('stroke-opacity', 0)\n\t\t\tp.select('.sja_aa_ssk_text').transition().attr('fill-opacity', 0)\n\t\t\tepaint_may_hl(tk, d.mlst, false)\n\t\t})\n\t\t.on('click', async (event, d) => {\n\t\t\t// must not check event after await as it will be voided\n\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\tif (d.occurrence > 1) {\n\t\t\t\tif (await may_sunburst(d.occurrence, d.mlst, d.x, d.y + ((tk.aboveprotein ? 1 : -1) * tk.stem1) / 2, tk, block))\n\t\t\t\t\treturn\n\t\t\t}\n\t\t\titemtable({\n\t\t\t\tmlst: d.mlst,\n\t\t\t\tpane: true,\n\t\t\t\tx: p.left - 10,\n\t\t\t\ty: p.top - 10,\n\t\t\t\ttk: tk,\n\t\t\t\tblock: block\n\t\t\t})\n\t\t})\n}\n\nexport function skewer_flip(tk) {\n\ttk.aboveprotein = !tk.aboveprotein\n\n\tif (tk.numericmode) {\n\t\t// won't do\n\t\treturn\n\t}\n\n\tconst abp = tk.aboveprotein\n\tconst dur = 1000\n\n\tconst skbars = tk.skewer.filter(d => d.hasstackbar)\n\tskbars\n\t\t.selectAll('.sja_aa_stackbar_g')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => {\n\t\t\tconst k = d.grp.aa\n\t\t\treturn (\n\t\t\t\t'translate(' +\n\t\t\t\t(k.showmode == modefold ? 0 : k.x0 - k.x) +\n\t\t\t\t',' +\n\t\t\t\t(abp ? 1 : -1) * (k.showmode == modefold ? tk.stem1 - d.y : tk.stem1 + tk.stem2 + tk.stem3 - d.y) +\n\t\t\t\t')'\n\t\t\t)\n\t\t})\n\tskbars\n\t\t.filter(d => d.showmode == modeshow)\n\t\t.selectAll('.sja_aa_stackbar_rect')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('y', d => (abp ? -d.height : 0))\n\ttk.skewer\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => {\n\t\t\td.y = skewer_sety(d, tk)\n\t\t\treturn 'translate(' + d.x + ',' + d.y + ')'\n\t\t})\n\ttk.skewer\n\t\t.selectAll('.sja_aa_stem')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('d', d => skewer_setstem(d, tk))\n\ttk.skewer\n\t\t.selectAll('.sja_aa_discg')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => {\n\t\t\td.y = (abp ? -1 : 1) * (d.aa.showmode == modefold ? d.aa.maxradius : d.yoffset)\n\t\t\treturn 'translate(0,' + d.y + ')'\n\t\t})\n\ttk.skewer.selectAll('.sja_aa_ssk_kick').attr('y', abp ? 0 : -tk.stem1)\n\ttk.skewer.selectAll('.sja_aa_ssk_bg').attr('y', abp ? 0 : -tk.stem1)\n\ttk.skewer.selectAll('.sja_aa_ssk_text').attr('y', ((abp ? 1 : -1) * tk.stem1) / 2)\n\ttk.skewer.selectAll('.sja_aa_skkick').attr('cy', d => (abp ? -1 : 1) * d.maxradius)\n\ttk.skewer\n\t\t.filter(d => d.showmode == modeshow && d.groups.length == 1)\n\t\t.selectAll('.sja_aa_disclabel')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => 'scale(1) rotate(' + (d.aa.slabelrotate ? (abp ? '-' : '') + '90' : '0') + ')')\n}\n\nfunction skewer_sety(d, tk) {\n\tif (tk.aboveprotein) {\n\t\tif (d.showmode == modefold) {\n\t\t\treturn tk.maxskewerheight + tk.stem1 + tk.stem2 + tk.stem3 - d.foldyoffset\n\t\t}\n\t\treturn tk.maxskewerheight\n\t}\n\tif (d.showmode == modefold) return d.foldyoffset\n\treturn tk.stem1 + tk.stem2 + tk.stem3\n}\n\nfunction skewer_setstem(d, tk) {\n\tif (tk.aboveprotein) {\n\t\tif (d.showmode == modefold) {\n\t\t\treturn 'M0,0v0l0,0v' + d.foldyoffset\n\t\t}\n\t\treturn 'M0,0v' + tk.stem1 + 'l' + (d.x0 - d.x) + ',' + tk.stem2 + 'v' + tk.stem3\n\t}\n\tif (d.showmode == modefold) {\n\t\treturn 'M0,0v0l0,0v-' + d.foldyoffset\n\t}\n\treturn 'M0,0v-' + tk.stem1 + 'l' + (d.x0 - d.x) + ',-' + tk.stem2 + 'v-' + tk.stem3\n}\n\nexport function settle_glyph(tk, block) {\n\tif (tk.data.length == 0) {\n\t\treturn\n\t}\n\tconst x1 = 0\n\tconst x2 = block.width\n\t// only settle those in view range\n\t// sum of skewer width, determines whether full or pack\n\tlet sumwidth = 0\n\tconst allinview = []\n\tconst beyondviewitems = []\n\tfor (const d of tk.data) {\n\t\tif (d.x0 < x1 || d.x0 > x2) {\n\t\t\tdelete d.xoffset\n\t\t\tbeyondviewitems.push(d)\n\t\t} else {\n\t\t\t// important: singleton label is rotated by default, must not include label width\n\t\t\tsumwidth += d.slabelrotate ? (d.groups[0].radius + d.groups[0].rimwidth) * 2 : d.width\n\t\t\tallinview.push(d)\n\t\t}\n\t}\n\n\t// reset those beyond view range\n\tfold_glyph(beyondviewitems, tk)\n\t// TODO may move d.x to +/-1000 out of sight\n\n\tlet expandlst = []\n\tconst foldlst = []\n\n\tif (sumwidth < x2 - x1) {\n\t\t// skewers can show in full\n\t\texpandlst = allinview\n\t} else {\n\t\t// rank skewers by ...\n\t\tallinview.sort((a, b) => {\n\t\t\tif (b.occurrence == a.occurrence) {\n\t\t\t\tif (b.groups.length == a.groups.length) {\n\t\t\t\t\t//return Math.abs(a.aapos*2-aarangestart-aarangestop)-Math.abs(b.aaposition*2-aarangestart-aarangestop);\n\t\t\t\t\treturn Math.abs(a.x0 * 2 - x1 - x2) - Math.abs(b.x0 * 2 - x1 - x2)\n\t\t\t\t} else {\n\t\t\t\t\treturn b.groups.length - a.groups.length\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b.occurrence - a.occurrence\n\t\t})\n\t\t// collect top items to expand\n\t\tlet width = 0\n\t\tlet allowpx = (x2 - x1) * 0.8\n\t\tlet stop = false\n\t\tfor (const d of allinview) {\n\t\t\tif (stop) {\n\t\t\t\tdelete d.xoffset\n\t\t\t\tfoldlst.push(d)\n\t\t\t\td.showmode = modefold\n\t\t\t} else {\n\t\t\t\tif (width + d.width < allowpx) {\n\t\t\t\t\texpandlst.push(d)\n\t\t\t\t\twidth += d.width\n\t\t\t\t} else {\n\t\t\t\t\tstop = true\n\t\t\t\t\tdelete d.xoffset\n\t\t\t\t\tfoldlst.push(d)\n\t\t\t\t\td.showmode = modefold\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfold_glyph(foldlst, tk)\n\tunfold_glyph(expandlst, tk, block)\n}\n\nfunction unfold_glyph(newlst, tk, block) {\n\tconst dur = 1000\n\tconst abp = tk.aboveprotein\n\t// set up new items\n\tconst expanded = new Set() // d.x as key\n\tconst folded = new Set()\n\tlet hasfolded = false\n\tfor (const d of newlst) {\n\t\tif (d.showmode == modeshow) {\n\t\t\texpanded.add(d.x0)\n\t\t} else {\n\t\t\td.showmode = modeshow\n\t\t\tfolded.add(d.x0)\n\t\t\thasfolded = true\n\t\t\td.y = skewer_sety(d, tk)\n\t\t}\n\t}\n\t/*\n\ttk.skewer\n\t\t.filter(d=>expanded.has(d.x0))\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform',d=> 'translate('+(d.x0+(d.xoffset==undefined ? 0 : d.xoffset))+','+d.y+')')\n\t\t*/\n\tif (hasfolded) {\n\t\t// vertical extending\n\t\tconst set = tk.skewer.filter(d => folded.has(d.x0))\n\t\tset\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')')\n\t\tset\n\t\t\t.selectAll('.sja_aa_discg')\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('transform', d => {\n\t\t\t\td.y = d.yoffset * (abp ? -1 : 1)\n\t\t\t\treturn 'translate(0,' + d.y + ')'\n\t\t\t})\n\t\tsetTimeout(function () {\n\t\t\tset.selectAll('.sja_aa_disckick').attr('transform', 'scale(1)')\n\t\t}, dur)\n\t\t/*\n\t\tset.selectAll('.sja_aa_qmg')\n\t\t\t.transition().duration(dur)\n\t\t\t.attr('transform','translate(0,'+(sk.maxskewerheight*(abp?-1:1))+') scale(1)')\n\t\t\t*/\n\t\tset.selectAll('.sja_aa_discnum').transition().duration(dur).attr('fill-opacity', 1).attr('stroke-opacity', 1)\n\t\tset\n\t\t\t.filter(d => d.groups.length > 1)\n\t\t\t.selectAll('.sja_aa_disclabel')\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('fill-opacity', 1)\n\t\t\t.attr('transform', 'scale(1)')\n\t\tset.selectAll('.sja_aa_discrim').transition().duration(dur).attr('fill-opacity', 1).attr('stroke-opacity', 1)\n\t\tset\n\t\t\t.selectAll('.sja_aa_ssk_kick')\n\t\t\t.attr('transform', 'scale(1)')\n\t\t\t.attr('y', abp ? 0 : -tk.stem1)\n\t\tset\n\t\t\t.selectAll('.sja_aa_ssk_bg')\n\t\t\t.attr('transform', 'scale(1)')\n\t\t\t.attr('y', abp ? 0 : -tk.stem1)\n\t\tset\n\t\t\t.selectAll('.sja_aa_ssk_text')\n\t\t\t.attr('transform', 'scale(1)')\n\t\t\t.attr('y', ((abp ? 1 : -1) * tk.stem1) / 2)\n\t\tset.selectAll('.sja_aa_skkick').attr('transform', 'scale(0)')\n\t\tset\n\t\t\t.filter(d => d.hasstackbar)\n\t\t\t.selectAll('.sja_aa_stackbar_g')\n\t\t\t// no transition, since the bar width is still 0\n\t\t\t.attr('transform', d => 'translate(0,' + (abp ? 1 : -1) * (tk.stem1 + tk.stem2 + tk.stem3 - d.y) + ')')\n\t\tlet counter = 0\n\t\tset\n\t\t\t.selectAll('.sja_aa_stem')\n\t\t\t.transition()\n\t\t\t.duration(dur)\n\t\t\t.attr('d', d => skewer_setstem(d, tk))\n\t\t\t.each(() => ++counter)\n\t\t\t.on('end', () => {\n\t\t\t\tif (!--counter) {\n\t\t\t\t\tunfold_update(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t} else {\n\t\tunfold_update(tk, block)\n\t}\n}\n\nfunction unfold_update(tk, block) {\n\tconst dur = 1000\n\tconst abp = tk.aboveprotein\n\tconst alllst = [] // already expanded\n\tconst hash = new Set() // d.x0 as key\n\tconst x1 = 0\n\tconst x2 = block.width\n\tfor (const d of tk.data) {\n\t\tif (d.x0 < x1 || d.x0 > x2) continue\n\t\tif (d.showmode == modeshow) {\n\t\t\td.x = d.x0\n\t\t\talllst.push(d)\n\t\t\thash.add(d.x0)\n\t\t}\n\t}\n\tif (alllst.length == 0) {\n\t\treturn\n\t}\n\thoriplace(alllst, tk, block)\n\tfor (const d of alllst) {\n\t\td.xoffset = d.x - d.x0\n\t}\n\tfor (let i = 0; i < alllst.length; i++) {\n\t\tconst d = alllst[i]\n\t\tif (d.groups.length > 1) continue\n\t\t// single\n\t\tconst disc = d.groups[0]\n\t\tif (tk.slabel_forcerotate) {\n\t\t\td.slabelrotate = true\n\t\t} else {\n\t\t\tconst next = alllst[i + 1]\n\t\t\tconst rightx = next ? next.x - next.maxradius - next.maxrimwidth : x2\n\t\t\td.slabelrotate = rightx - d.x - disc.radius - disc.rimwidth - 1 < d.slabelwidth\n\t\t}\n\t\td.width = (disc.radius + disc.rimwidth) * 2 + (d.slabelrotate ? 0 : 2 + d.slabelwidth)\n\t}\n\t// horizontal shifting\n\tconst set = tk.skewer.filter(d => hash.has(d.x0))\n\tset\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')')\n\tset\n\t\t.selectAll('.sja_aa_stem')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('d', d => skewer_setstem(d, tk))\n\tset\n\t\t.filter(d => d.groups.length == 1)\n\t\t.selectAll('.sja_aa_disclabel')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('fill-opacity', 1)\n\t\t.attr('transform', d => 'scale(1) rotate(' + (d.aa.slabelrotate ? (abp ? '-' : '') + '90' : '0') + ')')\n\ttk.slabel_forcerotate = false\n\tconst skbars = set.filter(d => d.hasstackbar)\n\tskbars\n\t\t.selectAll('.sja_aa_stackbar_g')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr(\n\t\t\t'transform',\n\t\t\td =>\n\t\t\t\t'translate(' + (d.grp.aa.x0 - d.grp.aa.x) + ',' + (abp ? 1 : -1) * (tk.stem1 + tk.stem2 + tk.stem3 - d.y) + ')'\n\t\t)\n\tskbars\n\t\t.selectAll('.sja_aa_stackbar_rect')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('width', d => {\n\t\t\treturn d.pxspan\n\t\t})\n\t\t.attr('y', d => {\n\t\t\treturn abp ? -d.height : 0\n\t\t})\n}\n\nfunction horiplace(items, tk, block) {\n\t// only arrange those in aa view range\n\tconst xoffset0 = 0\n\tconst x2 = block.width\n\tlet xoffset = xoffset0\n\t// those out of range are not touched\n\t// detect if any overlap\n\tlet overlap = false\n\tfor (const i of items) {\n\t\tif (i.x0 < xoffset0 || i.x0 > x2) continue\n\t\tif (i.groups.length == 1) {\n\t\t\ti.slabelrotate = true\n\t\t\tconst disc = i.groups[0]\n\t\t\ti.width = (disc.radius + disc.rimwidth) * 2\n\t\t}\n\t\tconst x = i.x - i.maxradius - i.maxrimwidth\n\t\tif (x < xoffset) {\n\t\t\toverlap = true\n\t\t}\n\t\tif (x + i.width > x2) {\n\t\t\toverlap = true\n\t\t}\n\t\txoffset = Math.max(xoffset, x + i.width)\n\t}\n\tif (!overlap) {\n\t\t// nothing to do\n\t\treturn false\n\t}\n\t// push and pack all to the left\n\txoffset = xoffset0\n\tfor (const i of items) {\n\t\tif (i.x0 < xoffset0 || i.x0 > x2) continue\n\t\ti.x = xoffset + i.maxradius + i.maxrimwidth\n\t\txoffset += i.width\n\t}\n\n\thoriplace0(items, block.width)\n}\n\nfunction horiplace0(items, allwidth) {\n\t/*\n\titems[]\n\t.width\n\t.x0\n\t.x\n\t\talready set by pushing to left\n\t*/\n\tfor (let i = 0; i < items.length; i++) {\n\t\tif (items[i].x0 < 0) continue\n\t\tif (items[i].x0 > allwidth) break\n\n\t\twhile (1) {\n\t\t\tlet currsum = 0,\n\t\t\t\tnewsum = 0\n\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\tconst t = items[j]\n\t\t\t\tif (t.x0 > allwidth) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcurrsum += Math.abs(t.x - t.x0)\n\t\t\t\tt.x++\n\t\t\t\tnewsum += Math.abs(t.x - t.x0)\n\t\t\t}\n\t\t\tif (items[i].x >= items[i].x0) {\n\t\t\t\t// wind back to make sure stem [i] stem is straight\n\t\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\t\titems[j].x--\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tconst z = items[items.length - 1]\n\t\t\tif (z.x + z.width / 2 >= allwidth) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (newsum <= currsum) {\n\t\t\t\t// accept move\n\t\t\t} else {\n\t\t\t\t// reject move, procceed to next item\n\t\t\t\tfor (let j = i; j < items.length; j++) {\n\t\t\t\t\tif (items[j].x0 > allwidth) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// wind back\n\t\t\t\t\titems[j].x--\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function fold_glyph(lst, tk) {\n\tif (lst.length == 0) return\n\tconst dur = 1000\n\tconst abp = tk.aboveprotein\n\t// total number of discs, determines if disc details are visible prior to folding\n\tconst hash = new Set()\n\tfor (const d of lst) {\n\t\td.x = d.x0\n\t\thash.add(d.x0)\n\t\td.showmode = modefold\n\t\td.y = skewer_sety(d, tk)\n\t}\n\tconst set = tk.skewer.filter(d => hash.has(d.x0))\n\tset\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')')\n\tset\n\t\t.selectAll('.sja_aa_stem')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('d', d => skewer_setstem(d, tk))\n\tset\n\t\t.selectAll('.sja_aa_discg')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => 'translate(0,' + (abp ? '-' : '') + d.aa.maxradius + ')')\n\tset.selectAll('.sja_aa_disckick').attr('transform', 'scale(0)')\n\t/*\n\tset.selectAll('.sja_aa_qmg')\n\t\t.transition().duration(dur)\n\t\t.attr('transform','translate(0,0) scale(0)')\n\t\t*/\n\tset.selectAll('.sja_aa_discnum').transition().duration(dur).attr('fill-opacity', 0).attr('stroke-opacity', 0)\n\tset.selectAll('.sja_aa_disclabel').transition().duration(dur).attr('fill-opacity', 0).attr('transform', 'scale(0)') // hide this label so it won't be tred\n\tset.selectAll('.sja_aa_discrim').transition().duration(dur).attr('fill-opacity', 0).attr('stroke-opacity', 0)\n\tset.selectAll('.sja_aa_ssk_kick').attr('transform', 'scale(0)')\n\tset.selectAll('.sja_aa_ssk_bg').attr('transform', 'scale(0)')\n\tset.selectAll('.sja_aa_ssk_text').attr('transform', 'scale(0)')\n\tset\n\t\t.selectAll('.sja_aa_skkick')\n\t\t.transition()\n\t\t.duration(dur) // to prevent showing pica over busy skewer\n\t\t.attr('transform', 'scale(1)')\n\tconst skbars = set.filter(d => d.hasstackbar)\n\tskbars\n\t\t.selectAll('.sja_aa_stackbar_g')\n\t\t.transition()\n\t\t.duration(dur)\n\t\t.attr('transform', d => 'translate(0,' + (abp ? 1 : -1) * (tk.stem1 - d.y) + ')')\n\tskbars.selectAll('.sja_aa_stackbar_rect').transition().duration(dur).attr('width', 0)\n}\n\nexport function epaint_may_hl(tk, mlst, hl) {\n\tif (!tk.eplst) return\n\tfor (const ep of tk.eplst) {\n\t\tep.may_hl(mlst, hl)\n\t}\n}\n\nfunction dsqueryresult_geneexpression(data, tk, block) {\n\tif (!data.config) {\n\t\tblock.error('config missing for expression data in ' + tk.ds.label)\n\t\treturn\n\t}\n\tif (data.config.maf) {\n\t\ttry {\n\t\t\tdata.config.maf.get = new Function(...data.config.maf.get)\n\t\t} catch (e) {\n\t\t\tblock.error('invalid javascript for config.maf.get of ' + tk.ds.label)\n\t\t\treturn\n\t\t}\n\t}\n\tconst config = data.config\n\tif (config.usecohort) {\n\t\tconfig.cohort = tk.ds.cohort\n\t}\n\tconst eparg = {\n\t\tdata: data.lst,\n\t\texpp: config,\n\t\tblock: block,\n\t\tgenome: block.genome,\n\t\tgenename: block.usegm.name,\n\t\tdsname: tk.ds.label\n\t}\n\tif (block.samplecart) {\n\t\t/* this api has been enabled in block\n\t\tsee if to pass it to ep\n\t\tonly if the ds also has matching attribute\n\t\tthis is to only activate sample selection in pediatric, but not in cosmic!\n\t\t*/\n\t\tif (tk.ds.sampleselectable) {\n\t\t\t// this ds has been configured to use it\n\t\t\teparg.samplecart = block.samplecart\n\t\t}\n\t}\n\treturn import('./ep').then(p => {\n\t\ttk.eplst.push(new p.default(eparg))\n\t})\n}\n\nfunction dsqueryresult_snvindelfusionitd(lst, tk, block) {\n\tfor (const m of lst) {\n\t\tswitch (m.dt) {\n\t\t\tcase common.dtsnvindel:\n\t\t\t\tif (block.usegm) {\n\t\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\t\tm.aapos = t.aapos\n\t\t\t\t}\n\t\t\t\ttk.mlst.push(m)\n\t\t\t\tbreak\n\t\t\tcase common.dtsv:\n\t\t\tcase common.dtfusionrna:\n\t\t\t\tif (!m.pairlst) {\n\t\t\t\t\tconsole.error('pairlst missing from sv/fusion')\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif (block.usegm && m.dt == common.dtsv) {\n\t\t\t\t\t/*\n\t\t\t\tSV data correction to suit gene strand\n\t\t\t\tdo not look at strands\n\t\t\t\t*/\n\t\t\t\t\tif (m.pairlst.length == 1) {\n\t\t\t\t\t\t// only works for single pair\n\t\t\t\t\t\tconst a = m.pairlst[0].a\n\t\t\t\t\t\tconst b = m.pairlst[0].b\n\t\t\t\t\t\tif (a.chr != null && b.chr != null && a.chr == b.chr && a.position != null && b.position != null) {\n\t\t\t\t\t\t\t// good to check\n\t\t\t\t\t\t\tif (a.position < b.position) {\n\t\t\t\t\t\t\t\tif (block.usegm.strand == '+') {\n\t\t\t\t\t\t\t\t\t// no change\n\t\t\t\t\t\t\t\t\ta.strand = '+'\n\t\t\t\t\t\t\t\t\tb.strand = '+'\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ta.strand = '-'\n\t\t\t\t\t\t\t\t\tb.strand = '-'\n\t\t\t\t\t\t\t\t\tm.pairlst[0].a = b\n\t\t\t\t\t\t\t\t\tm.pairlst[0].b = a\n\t\t\t\t\t\t\t\t}\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\t// XXX current data format doesnt work for genomic range query!!!\n\t\t\t\tif (block.usegm && block.gmmode != client.gmmode.genomic) {\n\t\t\t\t\tm.isoform = block.usegm.isoform\n\t\t\t\t\t// gmmode, single datum over current gene\n\t\t\t\t\tlet nohit = true\n\t\t\t\t\tfor (let i = 0; i < m.pairlst.length; i++) {\n\t\t\t\t\t\tconst pair = m.pairlst[i]\n\t\t\t\t\t\t// try to match with both isoform and name, for IGH, without isoform, but the querying \"gene\" can be IGH\n\t\t\t\t\t\tif (block.usegm.isoform == (pair.a.isoform || pair.a.name)) {\n\t\t\t\t\t\t\tm.useNterm = i == 0\n\t\t\t\t\t\t\tm.chr = block.usegm.chr\n\t\t\t\t\t\t\tm.strand = pair.a.strand\n\t\t\t\t\t\t\tif (pair.a.position == undefined) {\n\t\t\t\t\t\t\t\tif (pair.a.rnaposition == undefined) {\n\t\t\t\t\t\t\t\t\tif (pair.a.codon == undefined) {\n\t\t\t\t\t\t\t\t\t\tconsole.error('no position/rnaposition/codon available for ' + block.usegm.isoform)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tm.pos = coord.aa2gmcoord(pair.a.codon, block.usegm)\n\t\t\t\t\t\t\t\t\t\tpair.a.position = m.pos\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tm.pos = coord.rna2gmcoord(pair.a.rnaposition - 1, block.usegm)\n\t\t\t\t\t\t\t\t\tif (m.pos == null) {\n\t\t\t\t\t\t\t\t\t\tconsole.error('failed to convert rnaposition to genomic position: ' + pair.a.rnaposition)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpair.a.position = m.pos\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tm.pos = pair.a.position\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\t\t\t\tm.aapos = t.aapos\n\t\t\t\t\t\t\tif (pair.a.codon) {\n\t\t\t\t\t\t\t\tm.aapos = pair.a.codon\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm.mname = pair.b.name\n\t\t\t\t\t\t\tnohit = false\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (block.usegm.isoform == (pair.b.isoform || pair.b.name)) {\n\t\t\t\t\t\t\tm.useNterm = false // always\n\t\t\t\t\t\t\tm.chr = block.usegm.chr\n\t\t\t\t\t\t\tm.strand = pair.b.strand\n\t\t\t\t\t\t\tif (pair.b.position == undefined) {\n\t\t\t\t\t\t\t\tif (pair.b.rnaposition == undefined) {\n\t\t\t\t\t\t\t\t\tif (pair.b.codon == undefined) {\n\t\t\t\t\t\t\t\t\t\tconsole.error('no position/rnaposition/codon available for ' + block.usegm.isoform)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tm.pos = coord.aa2gmcoord(pair.b.codon, block.usegm)\n\t\t\t\t\t\t\t\t\t\tpair.b.position = m.pos\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tm.pos = coord.rna2gmcoord(pair.b.rnaposition - 1, block.usegm)\n\t\t\t\t\t\t\t\t\tif (m.pos == null) {\n\t\t\t\t\t\t\t\t\t\tconsole.error('failed to convert rnaposition to genomic')\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpair.b.position = m.pos\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tm.pos = pair.b.position\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\t\t\t\tm.aapos = t.aapos\n\t\t\t\t\t\t\tif (pair.b.codon) {\n\t\t\t\t\t\t\t\tm.aapos = pair.b.codon\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm.mname = pair.a.name\n\t\t\t\t\t\t\tnohit = 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 (nohit) {\n\t\t\t\t\t\tconsole.error('sv/fusion isoform no match to gm isoform: ' + block.usegm.isoform)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttk.mlst.push(m)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// genomic mode, one m for each breakend\n\t\t\t\t\tfor (const pair of m.pairlst) {\n\t\t\t\t\t\tlet ain = false,\n\t\t\t\t\t\t\tbin = false\n\t\t\t\t\t\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\t\t\t\t\t\tconst r = block.rglst[i]\n\t\t\t\t\t\t\tif (pair.a.chr == r.chr && pair.a.position >= r.start && pair.a.position <= r.stop) {\n\t\t\t\t\t\t\t\tain = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pair.b.chr == r.chr && pair.b.position >= r.start && pair.b.position <= r.stop) {\n\t\t\t\t\t\t\t\tbin = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (ain) {\n\t\t\t\t\t\t\tconst m2 = svduplicate(m)\n\t\t\t\t\t\t\tconst ma = pair.a\n\t\t\t\t\t\t\tm2.chr = ma.chr\n\t\t\t\t\t\t\tm2.strand = ma.strand\n\t\t\t\t\t\t\tm2.useNterm = ma.strand == '+'\n\t\t\t\t\t\t\tm2.pos = ma.pos || ma.position\n\t\t\t\t\t\t\tm2.mname = pair.b.name || pair.b.chr\n\t\t\t\t\t\t\tif (!Number.isFinite(m2.pos)) {\n\t\t\t\t\t\t\t\tconsole.error('no genomic pos for breakend a')\n\t\t\t\t\t\t\t} else if (!m2.chr) {\n\t\t\t\t\t\t\t\tconsole.error('no chromosome for breakend a')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttk.mlst.push(m2)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (bin) {\n\t\t\t\t\t\t\tconst m2 = svduplicate(m)\n\t\t\t\t\t\t\tconst mb = pair.b\n\t\t\t\t\t\t\tm2.chr = mb.chr\n\t\t\t\t\t\t\tm2.strand = mb.strand\n\t\t\t\t\t\t\tm2.useNterm = mb.strand == '+'\n\t\t\t\t\t\t\tm2.pos = mb.pos || mb.position\n\t\t\t\t\t\t\tm2.mname = pair.a.name || pair.a.chr\n\t\t\t\t\t\t\tif (!Number.isFinite(m2.pos)) {\n\t\t\t\t\t\t\t\tconsole.error('no genomic pos for breakend b')\n\t\t\t\t\t\t\t} else if (!m2.chr) {\n\t\t\t\t\t\t\t\tconsole.error('no chromosome for breakend b')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttk.mlst.push(m2)\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\tbreak\n\t\t\tcase common.dtitd:\n\t\t\tcase common.dtdel:\n\t\t\t\tif (m.chrpos1 && m.chrpos2) {\n\t\t\t\t\t// translate genomic pos1/pos2 to rna span\n\t\t\t\t\tlet t = coord.genomic2gm(m.chrpos1, block.usegm)\n\t\t\t\t\tconst rnapos1 = t.rnapos\n\t\t\t\t\tt = coord.genomic2gm(m.chrpos2, block.usegm)\n\t\t\t\t\tconst rnapos2 = t.rnapos\n\t\t\t\t\tif (rnapos1 < rnapos2) {\n\t\t\t\t\t\tm.pos = m.chrpos1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm.pos = m.chrpos2\n\t\t\t\t\t}\n\t\t\t\t\tdelete m.chrpos1\n\t\t\t\t\tdelete m.chrpos2\n\t\t\t\t\tconst rnaspan = Math.abs(rnapos1 - rnapos2)\n\t\t\t\t\tif (m.dt == common.dtitd) {\n\t\t\t\t\t\tm.rnaduplength = rnaspan\n\t\t\t\t\t} else if (m.dt == common.dtdel) {\n\t\t\t\t\t\tm.rnadellength = rnaspan\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (m.position) {\n\t\t\t\t\tm.pos = m.position\n\t\t\t\t\tdelete m.position\n\t\t\t\t}\n\t\t\t\tif (!m.pos) {\n\t\t\t\t\tif (m.dt == common.dtitd) {\n\t\t\t\t\t\t// itd exported from cicero will have a{} b{}, where b is upstream of a\n\t\t\t\t\t\tif (m.b) {\n\t\t\t\t\t\t\tif (m.b.position) {\n\t\t\t\t\t\t\t\tm.pos = m.b.position\n\t\t\t\t\t\t\t\tm.chr = m.b.chr\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\tif (!m.pos) {\n\t\t\t\t\tif (m.rnaposition) {\n\t\t\t\t\t\tif (block.usegm) {\n\t\t\t\t\t\t\tm.pos = coord.rna2gmcoord(m.rnaposition - 1, block.usegm)\n\t\t\t\t\t\t\tm.chr = block.usegm.chr\n\t\t\t\t\t\t\tif (m.pos == null) {\n\t\t\t\t\t\t\t\tconsole.error('failed to convert rnaposition to genomic position: ' + m.rnaposition)\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} else if (m.aapos) {\n\t\t\t\t\t\t// TODO\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!m.pos) {\n\t\t\t\t\tconsole.error('no genomic pos for itd')\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif (block.usegm) {\n\t\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\t\tif (m.rnaposition) {\n\t\t\t\t\t\tm.rnapos = m.rnaposition\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\t\t}\n\t\t\t\t\tm.aapos = t.aapos\n\t\t\t\t}\n\t\t\t\tif (m.dt == common.dtitd) {\n\t\t\t\t\tif (!m.rnaduplength) {\n\t\t\t\t\t\tconsole.error('itd has no rnaduplength')\n\t\t\t\t\t\tm.rnaduplength = 1\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!m.rnadellength) {\n\t\t\t\t\t\tconsole.error('deletion has no rnadellength')\n\t\t\t\t\t\tm.rnadellength = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttk.mlst.push(m)\n\t\t\t\tbreak\n\t\t\tcase common.dtnloss:\n\t\t\tcase common.dtcloss:\n\t\t\t\tif (m.position) {\n\t\t\t\t\tm.pos = m.position\n\t\t\t\t\tdelete m.position\n\t\t\t\t}\n\t\t\t\tif (!m.pos) {\n\t\t\t\t\tif (m.rnaposition) {\n\t\t\t\t\t\tif (block.usegm) {\n\t\t\t\t\t\t\tm.pos = coord.rna2gmcoord(m.rnaposition - 1, block.usegm)\n\t\t\t\t\t\t\tm.chr = block.usegm.chr\n\t\t\t\t\t\t\tif (m.pos == null) {\n\t\t\t\t\t\t\t\tconsole.error('failed to convert rnaposition to genomic position: ' + m.rnaposition)\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} else if (m.aapos) {\n\t\t\t\t\t\t// TODO\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!m.pos) {\n\t\t\t\t\tconsole.error('no genomic pos for truncation')\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif (block.usegm) {\n\t\t\t\t\tconst t = coord.genomic2gm(m.pos, block.usegm)\n\t\t\t\t\tif (m.rnaposition) {\n\t\t\t\t\t\tm.rnapos = m.rnaposition\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm.rnapos = t.rnapos\n\t\t\t\t\t}\n\t\t\t\t\tm.aapos = t.aapos\n\t\t\t\t}\n\t\t\t\ttk.mlst.push(m)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tconsole.error('unknown dt: ' + m.dt)\n\t\t}\n\t}\n}\n\nfunction hlaachange_addnewtrack(tk, block) {\n\t/*\n\tvariants to be highlighted were not found in track\n\tadd a new ds track and show them\n\t*/\n\tconst l2c = new Map()\n\tfor (const c in common.mclass) {\n\t\tl2c.set(common.mclass[c].label.toUpperCase(), c)\n\t}\n\tconst toadd = []\n\tfor (const [n, m] of tk.hlaachange) {\n\t\tif (m == false) {\n\t\t\t// came from urlparam, cannot add\n\t\t\tcontinue\n\t\t}\n\t\tif (!m.name) {\n\t\t\tblock.error('hlaachange item .name missing')\n\t\t\tcontinue\n\t\t}\n\t\tif (m.codon == undefined || !Number.isFinite(m.codon)) {\n\t\t\tblock.error('hlaachange invalid codon for ' + m.name)\n\t\t\tcontinue\n\t\t}\n\t\tif (!m.class) {\n\t\t\tblock.error('hlaachange .class missing')\n\t\t\tcontinue\n\t\t}\n\t\tconst c = common.mclass[m.class] ? m.class : l2c.get(m.class.toUpperCase())\n\t\tif (!c) {\n\t\t\tblock.error('hlaachange invalid class: ' + m.class)\n\t\t\tcontinue\n\t\t}\n\t\tm.class = c\n\t\tm.mname = m.name\n\t\tdelete m.name\n\t\tm.chr = block.usegm.chr\n\t\tm.pos = coord.aa2gmcoord(m.codon, block.usegm)\n\t\tdelete m.codon\n\t\tm.dt = common.dtsnvindel\n\t\tm.isoform = block.usegm.isoform\n\t\ttoadd.push(m)\n\t}\n\tif (toadd.length) {\n\t\tconst ds = {\n\t\t\tlabel: 'Highlight',\n\t\t\ttype: client.tkt.ds,\n\t\t\tiscustom: true,\n\t\t\tbulkdata: {}\n\t\t}\n\t\tds.bulkdata[block.usegm.name.toUpperCase()] = toadd\n\t\tblock.ownds[ds.label] = ds\n\t\tconst tk2 = block.block_addtk_template({ type: client.tkt.ds, ds: ds })\n\t\tdstkload(tk2, block)\n\t}\n}\n\nfunction showlegend_vcfinfofilter(tk, block) {\n\t/*\n\tcustom mclass from vcf info\n\tupdate legend for all sets\n\t*/\n\tif (!tk.vcfinfofilter) return\n\n\tfor (const mcset of tk.vcfinfofilter.lst) {\n\t\tmcset.holder.selectAll('*').remove()\n\n\t\tif (mcset.numericfilter) {\n\t\t\t// numeric\n\t\t\t// duplicative\n\t\t\tfor (const o of mcset.numericfilter) {\n\t\t\t\to.count = 0\n\t\t\t}\n\n\t\t\tfor (const m of tk.mlst) {\n\t\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\t\t\t\tif (err) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (!vlst) continue\n\t\t\t\tconst v = vlst[0]\n\t\t\t\tif (!Number.isFinite(v)) continue\n\n\t\t\t\tfor (const o of mcset.numericfilter) {\n\t\t\t\t\tif (o.side == '<') {\n\t\t\t\t\t\tif (v < o.value) {\n\t\t\t\t\t\t\to.count++\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (v > o.value) {\n\t\t\t\t\t\t\to.count++\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\tfor (const o of mcset.numericfilter) {\n\t\t\t\t// lower-than or greater-than cutoff\n\n\t\t\t\tconst cell = mcset.holder\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('padding', '10px')\n\t\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t// apply or cancel filter\n\t\t\t\t\t\tif (mcset.numericCutoff == o.value && mcset.numericCutoffSide == o.side) {\n\t\t\t\t\t\t\t// has been using this cutoff, to turn off filtering\n\t\t\t\t\t\t\tdelete mcset.numericCutoff\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// was not using this cutoff, apply this\n\t\t\t\t\t\t\tmcset.numericCutoff = o.value\n\t\t\t\t\t\t\tmcset.numericCutoffSide = o.side\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdstkrender(tk, block)\n\t\t\t\t\t})\n\n\t\t\t\tif (mcset.numericCutoff == o.value && mcset.numericCutoffSide == o.side) {\n\t\t\t\t\tcell.style('border-bottom', 'solid 2px #ccc').style('background-color', '#f1f1f1')\n\t\t\t\t}\n\t\t\t\tif (o.count > 0) {\n\t\t\t\t\t// dot\n\t\t\t\t\tcell\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t\t\t.style('background-color', '#ccc')\n\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t.html(o.count > 1 ? o.count : ' ')\n\t\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t}\n\t\t\t\t// label\n\t\t\t\tcell.append('span').text(o.side + o.value)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!mcset.categories) {\n\t\t\t/*\n\t\t\tquick fix, a numeric filter can lack both .numerifilter[] and .categories\n\t\t\t*/\n\t\t\tcontinue\n\t\t}\n\n\t\t// categorical attribute\n\n\t\tconst key2count = new Map()\n\n\t\tlet novaluemcount = 0\n\n\t\tfor (const m of tk.mlst) {\n\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\n\t\t\tif (err) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (vlst == undefined) {\n\t\t\t\tnovaluemcount++\n\t\t\t} else {\n\t\t\t\tfor (const v of vlst) {\n\t\t\t\t\tif (!key2count.has(v)) {\n\t\t\t\t\t\tkey2count.set(v, 0)\n\t\t\t\t\t}\n\t\t\t\t\tkey2count.set(v, key2count.get(v) + 1)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst lst = [...key2count]\n\t\tif (novaluemcount) {\n\t\t\tlst.push([vcfnotannotated_label, novaluemcount])\n\t\t}\n\t\tlst.sort((i, j) => j[1] - i[1])\n\n\t\tfor (const [k, count] of lst) {\n\t\t\tconst v = mcset.categories[k] || { color: 'black', label: k }\n\n\t\t\tconst cell = mcset.holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding', '10px')\n\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttk.vcfinfofilter.tip.showunder(cell.node())\n\t\t\t\t\tlegendmenu_vcfinfo(mcset, k, tk, block)\n\t\t\t\t})\n\t\t\t// dot\n\t\t\tcell\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('background-color', v.color)\n\t\t\t\t.style('color', 'white')\n\t\t\t\t.html(count > 1 ? count : ' ')\n\t\t\t\t.style('margin-right', '5px')\n\t\t\t// label\n\t\t\tconst lab = cell.append('span').text(v.label).style('color', v.color)\n\t\t\tif (mcset.categoryhidden[k]) {\n\t\t\t\tlab.style('text-decoration', 'line-through')\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction vcfinfofilter_mayupdateautocategory(tk, block) {\n\t/*\n\tcategorical info filter may use auto color\n\tcall this after updating mlst[] -- will update the color for all categories\n\t*/\n\tif (!tk.vcfinfofilter) return\n\n\tfor (const mcset of tk.vcfinfofilter.lst) {\n\t\tif (mcset.numericfilter) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!mcset.autocategory) {\n\t\t\tcontinue\n\t\t}\n\n\t\t/* categorical attribute\n\t\tonly need to record categories used in mlst[]\n\t\tthen assign dynamic color\n\t\t*/\n\n\t\tconst key2count = new Map()\n\n\t\tfor (const m of tk.mlst) {\n\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\n\t\t\tif (err) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (vlst != undefined) {\n\t\t\t\tfor (const v of vlst) {\n\t\t\t\t\tif (!key2count.has(v)) {\n\t\t\t\t\t\tkey2count.set(v, 0)\n\t\t\t\t\t}\n\t\t\t\t\tkey2count.set(v, key2count.get(v) + 1)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst lst = [...key2count]\n\t\tlst.sort((i, j) => j[1] - i[1])\n\n\t\tconst colorfunc = scaleOrdinal(schemeCategory20)\n\n\t\tmcset.categories = {}\n\n\t\tfor (const [k, count] of lst) {\n\t\t\tmcset.categories[k] = {\n\t\t\t\tlabel: k,\n\t\t\t\tcolor: colorfunc(k)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function getter_mcset_key(mcset, m) {\n\t/*\n\tget the key from an item (m) given a mcset\n\treturns list!!!\n\t*/\n\tif (mcset.altalleleinfo) {\n\t\tif (!m.altinfo) return ['no .altinfo']\n\n\t\tconst value = m.altinfo[mcset.altalleleinfo.key]\n\t\tif (value == undefined) {\n\t\t\t// no value\n\n\t\t\tif (mcset.numericfilter) {\n\t\t\t\t// for alleles without AF_ExAC e.g. not seem in that population, treat value as 0\n\t\t\t\t// FIXME: only work for population frequency, assumption won't hold for negative values\n\t\t\t\treturn [null, [0]]\n\t\t\t}\n\n\t\t\treturn [null, undefined]\n\t\t}\n\n\t\tlet vlst = Array.isArray(value) ? value : [value]\n\n\t\tif (mcset.altalleleinfo.separator) {\n\t\t\t// hardcoded separator for string\n\t\t\tvlst = vlst[0].split(mcset.altalleleinfo.separator)\n\t\t}\n\t\treturn [null, vlst]\n\t}\n\n\tif (mcset.locusinfo) {\n\t\tif (!m.info) return ['no .info']\n\n\t\tconst value = m.info[mcset.locusinfo.key]\n\t\tif (value == undefined) {\n\t\t\t// no value\n\t\t\tif (mcset.numericfilter) {\n\t\t\t\t// hard fix: for alleles without AF_ExAC e.g. not seem in that population, treat value as 0\n\t\t\t\treturn [null, [0]]\n\t\t\t}\n\t\t\treturn [null, undefined]\n\t\t}\n\n\t\tlet vlst = Array.isArray(value) ? value : [value]\n\n\t\tif (mcset.locusinfo.separator) {\n\t\t\tvlst = vlst[0].split(mcset.locusinfo.separator)\n\t\t}\n\t\treturn [null, vlst]\n\t}\n\n\treturn ['no trigger']\n}\n\nfunction legendmenu_vcfinfo(mcset, key, tk, block) {\n\t/*\n\ttk legend shows the values from certain vcf info fields\n\tvalues are clickable to make filtering on variants of the track\n\tshow tooltip menu for the annotation items\n\tkey is:\n\t- a key of mcset.categories\n\t- vcfnotannotated_label\n\t*/\n\tconst tip = tk.vcfinfofilter.tip\n\ttip.clear()\n\n\tconst thiskeyhidden = mcset.categoryhidden[key]\n\n\ttip.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show alone')\n\t\t.on('click', () => {\n\t\t\ttip.hide()\n\t\t\tmcset.categoryhidden = {}\n\t\t\tfor (const k in mcset.categories) {\n\t\t\t\tif (k != key) {\n\t\t\t\t\tmcset.categoryhidden[k] = 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (key != vcfnotannotated_label) {\n\t\t\t\tmcset.categoryhidden[vcfnotannotated_label] = 1\n\t\t\t}\n\t\t\tdstkrender(tk, block)\n\t\t})\n\tif (thiskeyhidden) {\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tdelete mcset.categoryhidden[key]\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t} else {\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">×</div> hide')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tmcset.categoryhidden[key] = 1\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t}\n\n\tlet hidenum = 0\n\tfor (const k in mcset.categoryhidden) {\n\t\thidenum++\n\t}\n\tif (hidenum > 1) {\n\t\t// more than 1 class is hidden, make \"show all\"\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show all')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tmcset.categoryhidden = {}\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t}\n}\n\nfunction getter_pfrequency(m, tk) {\n\t/*\n\tget population frequency\n\tfor multi-sample vcf\n\tdo not work for variant-only vcf\n\t*/\n\tif (!m.vcfid) return ['.vcfid missing']\n\tif (!m.sampledata) return ['.sampledata missing']\n\tconst v = tk.ds.id2vcf[m.vcfid]\n\tif (!v) return ['no vcf']\n\tif (!v.samples || v.samples.length == 0) return ['vcf no samples']\n\t/*\n\tonly count samples without .gtallref\n\t*/\n\tlet count = 0\n\tfor (const s of m.sampledata) {\n\t\tif (!s.gtallref) count++\n\t}\n\treturn [null, count / v.samples.length]\n}\n\nfunction showlegend_populationfrequencyfilter(tk, block) {\n\t/*\n\thardcoded frequency filter for multi-sample vcf\n\t*/\n\tif (!tk.populationfrequencyfilter) return\n\n\tfor (const o of tk.populationfrequencyfilter.lst) {\n\t\to.count = 0\n\t}\n\n\tfor (const m of tk.mlst) {\n\t\tconst [err, f] = getter_pfrequency(m, tk)\n\t\tif (err) {\n\t\t\tcontinue\n\t\t}\n\t\tfor (const o of tk.populationfrequencyfilter.lst) {\n\t\t\tif (f < o.value) {\n\t\t\t\to.count++\n\t\t\t}\n\t\t}\n\t}\n\n\ttk.populationfrequencyfilter.holder.selectAll('*').remove()\n\n\tfor (const o of tk.populationfrequencyfilter.lst) {\n\t\tconst cell = tk.populationfrequencyfilter.holder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', '10px')\n\t\t\t.attr('class', 'sja_clb')\n\t\t\t.on('click', () => {\n\t\t\t\t// apply or cancel filter\n\t\t\t\tif (tk.populationfrequencyfilter.cutoff == o.value) {\n\t\t\t\t\tdelete tk.populationfrequencyfilter.cutoff\n\t\t\t\t} else {\n\t\t\t\t\ttk.populationfrequencyfilter.cutoff = o.value\n\t\t\t\t}\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\n\t\tif (tk.populationfrequencyfilter.cutoff == o.value) {\n\t\t\tcell.style('border-bottom', 'solid 2px #ccc').style('background-color', '#f1f1f1')\n\t\t}\n\n\t\t// dot\n\t\tcell\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('padding', '1px 5px')\n\t\t\t.style('background-color', '#ccc')\n\t\t\t.style('color', 'white')\n\t\t\t.html(o.count > 1 ? o.count : ' ')\n\t\t\t.style('margin-right', '5px')\n\t\t// label\n\t\tcell.append('span').text('< ' + o.value)\n\t}\n}\n\nfunction showlegend_sampleattribute(tk, block) {\n\t/*\n\t */\n\tif (!tk.ds || !tk.ds.cohort || !tk.ds.cohort.sampleattribute) return\n\tif (!tk.ds.cohort.annotation) return '.ds.cohort.annotation missing'\n\tif (!tk.ds.cohort.key4annotation) return '.ds.cohort.key4annotation missing'\n\n\tconst smat = tk.ds.cohort.sampleattribute\n\n\tif (!smat.lst) return '.lst missing'\n\tif (!smat.holder) return '.holder missing'\n\n\tsmat.holder.selectAll('*').remove()\n\n\tif (tk.mlst.length == 0) {\n\t\treturn\n\t}\n\tfor (const attr of smat.lst) {\n\t\tif (!attr.k) return '.k missing for an attribute'\n\t\tif (!attr.hiddenvalues) attr.hiddenvalues = new Set()\n\t}\n\n\tconst runtimelst = []\n\t// collect keys with any valid samples\n\n\t/*\n\tFIXME \n\tshadow vcf, use slim matrix to map variant to sample list\n\t*/\n\tif (tk.mlst[0].sampledata) {\n\t\t/*\n\t\tmulti-sample vcf\n\t\t*/\n\t\tfor (const attr of smat.lst) {\n\t\t\tlet samplecount = 0\n\t\t\tconst value2count = new Map()\n\t\t\tfor (const m of tk.mlst) {\n\t\t\t\tif (!m.sampledata) continue\n\n\t\t\t\tfor (const s0 of m.sampledata) {\n\t\t\t\t\tconst k4a = s0.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\t\tif (!k4a) continue\n\n\t\t\t\t\tconst o = tk.ds.cohort.annotation[k4a]\n\t\t\t\t\tif (!o) continue\n\n\t\t\t\t\tconst value = o[attr.k]\n\t\t\t\t\tif (value == undefined) continue\n\n\t\t\t\t\tsamplecount++\n\n\t\t\t\t\tif (!value2count.has(value)) {\n\t\t\t\t\t\tvalue2count.set(value, 0)\n\t\t\t\t\t}\n\t\t\t\t\tvalue2count.set(value, value2count.get(value) + 1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (samplecount == 0) {\n\t\t\t\t// skip this key\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\truntimelst.push({\n\t\t\t\tsamplecount: samplecount,\n\t\t\t\tkey: attr,\n\t\t\t\tlst: [...value2count]\n\t\t\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t\t\t.map(i => {\n\t\t\t\t\t\treturn { value: i[0], count: i[1] }\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\t} else {\n\t\t/*\n\t\teach m is one case\n\t\tretrieved from db\n\t\t*/\n\t\tfor (const attr of smat.lst) {\n\t\t\tlet samplecount = 0\n\t\t\tconst value2count = new Map()\n\t\t\tfor (const m of tk.mlst) {\n\t\t\t\tconst k4a = m[tk.ds.cohort.key4annotation]\n\t\t\t\tif (!k4a) continue\n\n\t\t\t\tconst o = tk.ds.cohort.annotation[k4a]\n\t\t\t\tif (!o) continue\n\n\t\t\t\tconst value = o[attr.k]\n\t\t\t\tif (value == undefined) continue\n\n\t\t\t\tsamplecount++\n\n\t\t\t\tif (!value2count.has(value)) {\n\t\t\t\t\tvalue2count.set(value, 0)\n\t\t\t\t}\n\t\t\t\tvalue2count.set(value, value2count.get(value) + 1)\n\t\t\t}\n\t\t\tif (samplecount == 0) {\n\t\t\t\t// skip this key\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\truntimelst.push({\n\t\t\t\tsamplecount: samplecount,\n\t\t\t\tkey: attr,\n\t\t\t\tlst: [...value2count]\n\t\t\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t\t\t.map(i => {\n\t\t\t\t\t\treturn { value: i[0], count: i[1] }\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\t}\n\n\tif (runtimelst.length == 0) {\n\t\t// no keys are used to annotate current samples\n\t\t// disable filtering\n\t\tdelete smat.runtimelst\n\t\treturn\n\t}\n\t// activate filtering\n\tsmat.runtimelst = runtimelst\n\n\tconst table = smat.holder.append('table').style('border-spacing', '5px')\n\n\tfor (const attr of runtimelst) {\n\t\t/*\n\t\t.samplecount\n\t\t.key\n\t\t.lst\n\t\t*/\n\n\t\tconst tr = table.append('tr')\n\n\t\t// label of key\n\t\ttr.append('td')\n\t\t\t.style('color', '#858585')\n\t\t\t.style('text-align', 'right')\n\t\t\t.text(attr.key.label || attr.key.k)\n\n\t\tconst td = tr.append('td')\n\n\t\t// values of this key\n\t\tfor (const value of attr.lst) {\n\t\t\t/*\n\t\t\t.value\n\t\t\t.count\n\t\t\t*/\n\t\t\tconst cell = td\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding', '5px')\n\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tsmat.tip.showunder(cell.node())\n\t\t\t\t\tlegendmenu_sampleattribute(value, attr, smat.tip, tk, block)\n\t\t\t\t})\n\t\t\t// dot\n\t\t\tcell\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t.style('padding', '1px 3px')\n\t\t\t\t.style('background-color', '#858585')\n\t\t\t\t.style('color', 'white')\n\t\t\t\t.html(value.count > 1 ? value.count : ' ')\n\t\t\t\t.style('margin-right', '5px')\n\t\t\t// label\n\t\t\tconst lab = cell.append('span').text(value.value)\n\t\t\tif (attr.key.hiddenvalues.has(value.value)) {\n\t\t\t\tlab.style('text-decoration', 'line-through')\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nfunction legendmenu_sampleattribute(thisvalue, thisattr, tip, tk, block) {\n\t/*\n\tvalue\n\t.hidden\n\t*/\n\ttip.clear()\n\n\ttip.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show alone')\n\t\t.on('click', () => {\n\t\t\ttip.hide()\n\t\t\tfor (const value of thisattr.lst) {\n\t\t\t\tthisattr.key.hiddenvalues.add(value.value)\n\t\t\t}\n\t\t\tthisattr.key.hiddenvalues.delete(thisvalue.value)\n\t\t\tdstkrender(tk, block)\n\t\t})\n\tif (thisattr.key.hiddenvalues.has(thisvalue.value)) {\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tthisattr.key.hiddenvalues.delete(thisvalue.value)\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t} else {\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">×</div> hide')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tthisattr.key.hiddenvalues.add(thisvalue.value)\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t}\n\n\tif (thisattr.key.hiddenvalues.size > 1) {\n\t\t// more than 1 attribute is hidden, make \"show all\"\n\t\ttip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show all')\n\t\t\t.on('click', () => {\n\t\t\t\ttip.hide()\n\t\t\t\tthisattr.key.hiddenvalues.clear()\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\t}\n}\n\nexport function mlst_pretreat(tk, block, originhidden) {\n\t/*\n\tused both in skewer & numeric\n\tno change to tk.mlst, but return a subset where they:\n\t- inside view range\n\t- pass filter\n\t\t- mclass, morigin\n\t\t- vcf info\n\t\t- population freq\n\t\t- sample annotation\n\tthen:\n\t- calculate m.__x by mapping coord to view range\n\t- update tk labels\n\t*/\n\n\tlet nogenomicpos = 0\n\tlet nochr = 0\n\tlet unmapped = []\n\tlet usemlst = [] // usable after filtering, for updating stats\n\n\tfor (const m of tk.mlst) {\n\t\tdelete m.__x\n\n\t\t/******************\n\t\t__filter__\n\t\t- by mclass/morigin\n\t\t\tblock.legend.mclasses(?).hidden\n\t\t- by vcf INFO\n\t\t\ttk.vcfinfofilter.lst[?]\n\t\t\t\tfor categorical, use categoryhidden\n\t\t\t\tfor numerical, use .numericCutoff\n\t\t- by vcf populationfrequencyfilter\n\t\t\tfor multi-sample vcf\n\t\t*******************/\n\n\t\tif (block.legend && block.legend.mclasses.has(m.class) && block.legend.mclasses.get(m.class).hidden) {\n\t\t\tcontinue\n\t\t}\n\t\tif (block.legend && block.legend.morigins.has(m.origin) && block.legend.morigins.get(m.origin).hidden) {\n\t\t\tcontinue\n\t\t}\n\t\tif (m.origin && originhidden.has(m.origin)) {\n\t\t\tcontinue\n\t\t}\n\t\tif (block.gmmode == common.gmmode.protein && block.usegm.codingstart && block.usegm.codingstop) {\n\t\t\t// in protein view, exclude those out of cds, e.g. utr ones\n\t\t\t// this may be risky as those p53 utr SVs are no longer visible\n\t\t\tif (m.pos < block.usegm.codingstart || m.pos > block.usegm.codingstop) continue\n\t\t}\n\t\tif (tk.vcfinfofilter) {\n\t\t\tlet hidden = false\n\t\t\tfor (const mcset of tk.vcfinfofilter.lst) {\n\t\t\t\tconst [err, vlst] = getter_mcset_key(mcset, m)\n\t\t\t\tif (err) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst v2 = vlst == undefined ? [vcfnotannotated_label] : vlst\n\n\t\t\t\tif (mcset.numericCutoff != undefined) {\n\t\t\t\t\t// numerical value, filter\n\t\t\t\t\t// only use the first value from vlst[]\n\t\t\t\t\tconst v3 = Number.parseFloat(v2[0])\n\n\t\t\t\t\tif (Number.isNaN(v3)) {\n\t\t\t\t\t\t// what\n\t\t\t\t\t\thidden = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mcset.numericCutoffSide == '<') {\n\t\t\t\t\t\tif (v3 >= mcset.numericCutoff) {\n\t\t\t\t\t\t\thidden = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (mcset.numericCutoffSide == '>') {\n\t\t\t\t\t\tif (v3 <= mcset.numericCutoff) {\n\t\t\t\t\t\t\thidden = true\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 if (mcset.categoryhidden) {\n\t\t\t\t\t/* categorical\n\t\t\t\t\tsince an INFO field may contain multiple values, if any of the value is not hidden, then the variant should not be hidden\n\t\t\t\t\t*/\n\t\t\t\t\tlet onevaluenothidden = false\n\t\t\t\t\tfor (const v of v2) {\n\t\t\t\t\t\tif (!mcset.categoryhidden[v]) {\n\t\t\t\t\t\t\tonevaluenothidden = true\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 (!onevaluenothidden) {\n\t\t\t\t\t\t// all values are hidden\n\t\t\t\t\t\thidden = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hidden) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif (tk.populationfrequencyfilter && tk.populationfrequencyfilter.cutoff) {\n\t\t\tconst [err, f] = getter_pfrequency(m, tk)\n\t\t\tif (err) {\n\t\t\t\t// still keep??\n\t\t\t} else {\n\t\t\t\tif (f > tk.populationfrequencyfilter.cutoff) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\ttk.ds &&\n\t\t\ttk.ds.cohort &&\n\t\t\ttk.ds.cohort.annotation &&\n\t\t\ttk.ds.cohort.key4annotation &&\n\t\t\ttk.ds.cohort.sampleattribute &&\n\t\t\ttk.ds.cohort.sampleattribute.runtimelst\n\t\t) {\n\t\t\t/*\n\t\t\tsample attribute filtering can be applied\n\t\t\ttwo ways of getting annotation for the current sample\n\t\t\t*/\n\n\t\t\tlet hiddenattrcount = 0\n\t\t\tfor (const i of tk.ds.cohort.sampleattribute.runtimelst) {\n\t\t\t\tif (i.key && i.key.hiddenvalues) {\n\t\t\t\t\thiddenattrcount += i.key.hiddenvalues.size\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hiddenattrcount > 0) {\n\t\t\t\t// there are indeed hidden attributes, so commence filtering\n\t\t\t\tif (tk.ds.vcfcohorttrack) {\n\t\t\t\t\t/*\n\t\t\t\t\tslim matrix\n\t\t\t\t\t*/\n\t\t\t\t} else if (m.sampledata) {\n\t\t\t\t\t/*\n\t\t\t\t\tloaded from multi-sample vcf\n\t\t\t\t\t*/\n\t\t\t\t\tlet usesamples = 0\n\t\t\t\t\tfor (const s0 of m.sampledata) {\n\t\t\t\t\t\t/*\n\t\t\t\t\t\tfor this sample to be considered, it must have the alt allele\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tif (!common.alleleInGenotypeStr(s0.genotype, m.alt)) {\n\t\t\t\t\t\t\t// this sample does not have alt allele\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst k4a = s0.sampleobj[tk.ds.cohort.key4annotation]\n\t\t\t\t\t\tif (k4a) {\n\t\t\t\t\t\t\tconst sanno = tk.ds.cohort.annotation[k4a]\n\t\t\t\t\t\t\tif (sanno) {\n\t\t\t\t\t\t\t\t// this sample has valid annotation\n\t\t\t\t\t\t\t\tlet hidden = false\n\t\t\t\t\t\t\t\tfor (const attr of tk.ds.cohort.sampleattribute.runtimelst) {\n\t\t\t\t\t\t\t\t\tconst thisvalue = sanno[attr.key.k]\n\t\t\t\t\t\t\t\t\tif (thisvalue != undefined) {\n\t\t\t\t\t\t\t\t\t\t// this sample is annotated by this key\n\t\t\t\t\t\t\t\t\t\tif (attr.key.hiddenvalues.has(thisvalue)) {\n\t\t\t\t\t\t\t\t\t\t\t// annotation value of this sample is hidden\n\t\t\t\t\t\t\t\t\t\t\thidden = true\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (hidden) {\n\t\t\t\t\t\t\t\t\t// this is a hidden sample\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tusesamples++\n\t\t\t\t\t}\n\t\t\t\t\tif (usesamples == 0) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\tm loaded from db, per sample case\n\t\t\t\t\t*/\n\t\t\t\t\tconst k4a = m[tk.ds.cohort.key4annotation]\n\t\t\t\t\tif (k4a) {\n\t\t\t\t\t\tconst sanno = tk.ds.cohort.annotation[k4a]\n\t\t\t\t\t\tif (sanno) {\n\t\t\t\t\t\t\t// this sample has valid annotation\n\t\t\t\t\t\t\tlet hidden = false\n\t\t\t\t\t\t\tfor (const attr of tk.ds.cohort.sampleattribute.runtimelst) {\n\t\t\t\t\t\t\t\tconst thisvalue = sanno[attr.key.k]\n\t\t\t\t\t\t\t\tif (thisvalue != undefined) {\n\t\t\t\t\t\t\t\t\t// this sample is annotated by this key\n\t\t\t\t\t\t\t\t\tif (attr.key.hiddenvalues.has(thisvalue)) {\n\t\t\t\t\t\t\t\t\t\t// annotation value of this sample is hidden\n\t\t\t\t\t\t\t\t\t\thidden = true\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (hidden) {\n\t\t\t\t\t\t\t\t// this is a hidden sample\n\t\t\t\t\t\t\t\tcontinue\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\n\t\t//////////// __filter__ ends\n\n\t\tif (!m.chr) {\n\t\t\tnochr++\n\t\t\tcontinue\n\t\t}\n\t\tif (!Number.isInteger(m.pos)) {\n\t\t\tnogenomicpos++\n\t\t\tcontinue\n\t\t}\n\t\tconst hits = block.seekcoord(m.chr, m.pos)\n\t\tif (hits.length == 0) {\n\t\t\tunmapped.push(m)\n\t\t\tcontinue\n\t\t}\n\t\tif (hits.length == 1) {\n\t\t\tm.__x = hits[0].x\n\t\t} else {\n\t\t\t// hit at multiple regions, still use first hit as following code is not finished\n\t\t\tm.__x = hits[0].x\n\n\t\t\t// see if to keep one or all\n\t\t\t/*\n\t\t\tlet usehitidx=-1\n\t\t\tfor(let i=0; i<hits.length; i++) {\n\t\t\t\tif(block.rglst[hits[i].ridx].keepthis) {\n\t\t\t\t\tusehitidx=i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(usehitidx==-1) {\n\t\t\t\t// no preference, duplicate mlst for all positions\n\t\t\t\tconsole.error('use all position: not done yet')\n\t\t\t} else {\n\t\t\t\t// use selected position\n\t\t\t\tm.usehitidx=usehitidx\n\t\t\t\tm.__x=hits[usehitidx].x\n\t\t\t}\n\t\t\t*/\n\t\t}\n\n\t\tif (m.__x < -1 || m.__x > block.width + 1) {\n\t\t\t// out of view range\n\t\t\tcontinue\n\t\t}\n\n\t\tusemlst.push(m)\n\t}\n\n\tconst collectleftlabw = []\n\ttk.tklabel.each(function () {\n\t\tcollectleftlabw.push(this.getBBox().width)\n\t})\n\n\t// ************* update stats label TODO should be a standalone func\n\tif (usemlst.length == 0) {\n\t\t// hide label\n\t\ttk.label_mcount.text('')\n\t} else {\n\t\ttk.label_mcount\n\t\t\t.text(\n\t\t\t\tusemlst.length < tk.mlst.length\n\t\t\t\t\t? usemlst.length + ' of ' + tk.mlst.length + ' ' + tk.itemlabelname + 's'\n\t\t\t\t\t: usemlst.length + ' ' + tk.itemlabelname + (usemlst.length > 1 ? 's' : '')\n\t\t\t)\n\t\t\t.each(function () {\n\t\t\t\tcollectleftlabw.push(this.getBBox().width)\n\t\t\t})\n\t}\n\tif (tk.label_stratify) {\n\t\tfor (const strat of tk.label_stratify) {\n\t\t\t// get number of ?? for each strat method\n\t\t\tlet itemcount\n\t\t\tif (strat.bycohort) {\n\t\t\t\tconst set = new Set()\n\t\t\t\tfor (const m of usemlst) {\n\t\t\t\t\tlet key = ''\n\t\t\t\t\tfor (const level of tk.ds.cohort.levels) {\n\t\t\t\t\t\tconst v = m[level.k]\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tkey += v\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tset.add(key)\n\t\t\t\t}\n\t\t\t\titemcount = set.size\n\t\t\t} else {\n\t\t\t\tconst set = new Set()\n\t\t\t\tfor (const m of usemlst) {\n\t\t\t\t\tlet key = m[strat.attr1.k]\n\t\t\t\t\tif (!key) continue\n\t\t\t\t\tif (strat.attr2) {\n\t\t\t\t\t\tconst v2 = m[strat.attr2.k]\n\t\t\t\t\t\tif (v2) {\n\t\t\t\t\t\t\tkey += v2\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (strat.attr3) {\n\t\t\t\t\t\tconst v3 = m[strat.attr3.k]\n\t\t\t\t\t\tif (v3) {\n\t\t\t\t\t\t\tkey += v3\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tset.add(key)\n\t\t\t\t}\n\t\t\t\titemcount = set.size\n\t\t\t}\n\t\t\tif (itemcount == 0) {\n\t\t\t\tstrat.svglabel.text('')\n\t\t\t} else {\n\t\t\t\tstrat.svglabel.text(itemcount + ' ' + strat.label + (itemcount > 1 ? 's' : '')).each(function () {\n\t\t\t\t\tcollectleftlabw.push(this.getBBox().width)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\ttk.leftLabelMaxwidth = Math.max(...collectleftlabw)\n\t// ************ done labels\n\n\tif (nogenomicpos + nochr > 0) {\n\t\tblock.tkerror(tk, nogenomicpos + nochr + ' items have no chromosome or genomic position')\n\t}\n\tif (unmapped.length) {\n\t\tconsole.error(unmapped.length + ' items not mapped to any region')\n\t\tfor (const m of unmapped) console.log(m)\n\t}\n\n\treturn usemlst\n}\n\nexport function tkdata_update_x(tk, block) {\n\t/*\n\tcall when panned in gmmode,\n\tno re-requesting data\n\tno re-rendering\n\tonly update skewer x position\n\t*/\n\n\tfor (const d of tk.data) {\n\t\tif (d.isbin) {\n\t\t\tlet sumx = 0\n\t\t\tfor (const m of d.mlst) {\n\t\t\t\tconst hits = block.seekcoord(m.chr, m.pos)\n\t\t\t\tif (m.usehitidx != undefined && hits[m.usehitidx]) {\n\t\t\t\t\tsumx += hits[m.usehitidx].x\n\t\t\t\t} else if (hits.length == 1) {\n\t\t\t\t\tsumx += hits[0].x\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('cannot map item')\n\t\t\t\t\tconsole.log(m)\n\t\t\t\t}\n\t\t\t}\n\t\t\td.x0 = sumx / d.mlst.length\n\t\t\td.x = d.x0 + (d.xoffset != undefined ? d.xoffset : 0)\n\t\t} else {\n\t\t\tconst hits = block.seekcoord(d.chr, d.pos)\n\t\t\tif (hits.length > 0) {\n\t\t\t\td.x0 = hits[0].x\n\t\t\t\td.x = d.x0 + (d.xoffset != undefined ? d.xoffset : 0)\n\t\t\t} else {\n\t\t\t\tconsole.log('cannot map group of item')\n\t\t\t\tconsole.log(d)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function done_tknodata(tk, block) {\n\t/*\n\tno data loaded for track\n\tset track height by # of controllers\n\tin case of hlaachange, create new track and show\n\t*/\n\ttk.height_main = tk.toppad + block.labelfontsize + tk.bottompad\n\tif (tk.label_mcount && tk.label_mcount.text().length > 0) {\n\t\ttk.height_main += tk.labyspace + block.labelfontsize\n\t}\n\tif (tk.label_stratify) {\n\t\tfor (const strat of tk.label_stratify) {\n\t\t\tif (strat.svglabel.text().length > 0) {\n\t\t\t\ttk.height_main += tk.labyspace + block.labelfontsize\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\tremove previous message in case of panning in gmmode\n\t*/\n\ttk.glider.selectAll('*').remove()\n\ttk.leftaxis.selectAll('*').remove()\n\n\tif (tk.viewrangeupperlimit_above) {\n\t\t// went beyond range\n\t\tblock.tkerror(tk, tk.name + ': zoom in under ' + common.bplen(tk.viewrangeupperlimit) + ' to view data')\n\t} else {\n\t\tlet context\n\t\tif (!tk.skewer.data || tk.skewer.data.length == 0) {\n\t\t\tif (block.pannedpx != undefined || block.zoomedin == true) {\n\t\t\t\tcontext = 'view range'\n\t\t\t} else if (block.usegm && block.gmmode != 'genomic') {\n\t\t\t\tcontext = block.usegm.name || block.usegm.isoform\n\t\t\t}\n\t\t}\n\t\tblock.tkerror(tk, tk.name + ': no mutation in ' + context)\n\t}\n\n\tif (tk.hlaachange) {\n\t\thlaachange_addnewtrack(tk, block)\n\t\tdelete tk.hlaachange\n\t}\n}\n\nfunction may_print_stratifycountfromserver(dat, tk) {\n\t/*\n\tdataset may be equipped to compute stratify category item count at server\n\t*/\n\tif (!dat.stratifycount) return\n\tfor (const [label, count] of dat.stratifycount) {\n\t\tconst strat = tk.label_stratify.find(i => i.label == label)\n\t\tif (!strat) {\n\t\t\tconsole.error('unknown strat label: ' + label)\n\t\t\tcontinue\n\t\t}\n\t\tstrat.servercount = count\n\t}\n}\n", "import * as common from '#shared/common.js'\nimport * as client from './client'\nimport { dstkrender } from './block.ds'\nimport * as coord from './coord'\n\n/*\n\nhardcoded legend for common.mclass, common.morigin\ndo not belong to specific tk but for all tk of ds type\n\nfunctions:\n\n\tlegend_newrow( holder, label )\n\tlegend_mclass()\n\tlegend_morigin()\n\n*/\n\nconst tip = new client.Menu({ padding: '0px' })\n\nexport function legend_newrow(block, label) {\n\tconst tr = block.legend.holder.append('tr')\n\tconst td0 = tr\n\t\t.append('td')\n\t\t.text(label)\n\t\t.style('padding-right', '10px')\n\t\t.style('text-align', 'right')\n\t\t//.style('vertical-align','top')\n\t\t//.style('color',block.legend.legendcolor)\n\t\t//.style('font-weight','bold')\n\t\t.style('color', '#555')\n\t\t.style('border-right', 'solid 1px ' + block.legend.legendcolor)\n\tconst td = tr.append('td')\n\treturn [tr, td, td0]\n}\n\nexport function legend_mclass(block) {\n\tif (!block.legend) {\n\t\treturn\n\t}\n\tconst hidden = new Set()\n\tfor (const [c, obj] of block.legend.mclasses) {\n\t\tif (obj.hidden) {\n\t\t\thidden.add(c)\n\t\t}\n\t}\n\tconst map = new Map()\n\tfor (const t of block.tklst) {\n\t\tif (t.hidden || t.type != client.tkt.ds) continue\n\t\tif (!t.mlst) {\n\t\t\t// maybe mlst not loaded yet\n\t\t\tcontinue\n\t\t}\n\t\tfor (const m of t.mlst) {\n\t\t\tif (m.class) {\n\t\t\t\tif (!map.has(m.class)) {\n\t\t\t\t\tmap.set(m.class, { count: 0 })\n\t\t\t\t}\n\t\t\t\tmap.get(m.class).count++\n\t\t\t}\n\t\t}\n\t}\n\tconst slst = []\n\tfor (const [c, obj] of map) {\n\t\tif (hidden.has(c)) {\n\t\t\tmap.get(c).hidden = true\n\t\t}\n\t\tslst.push({ key: c, count: obj.count })\n\t}\n\tblock.legend.mclasses = map\n\tif (map.size == 0) {\n\t\tblock.legend.tr_mclass.style('display', 'none')\n\t\treturn\n\t}\n\tblock.legend.tr_mclass.style('display', 'table-row')\n\tslst.sort((a, b) => b.count - a.count)\n\tblock.legend.td_mclass.selectAll('*').remove()\n\tfor (const e of slst) {\n\t\tconst butt = block.legend.td_mclass\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style('padding', block.legend.vpad + ' 20px ' + block.legend.vpad + ' 0px')\n\t\t\t.classed('sja_clb', true)\n\t\t\t.on('click', () => {\n\t\t\t\ttip.clear()\n\t\t\t\ttip.showunder(butt.node())\n\t\t\t\ttip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show alone')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\tfor (const obj of block.legend.mclasses.values()) {\n\t\t\t\t\t\t\tobj.hidden = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.legend.mclasses.get(e.key).hidden = false\n\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\tdstkrender(t, block)\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\tif (block.legend.mclasses.get(e.key).hidden) {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tblock.legend.mclasses.get(e.key).hidden = false\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">×</div> hide')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tblock.legend.mclasses.get(e.key).hidden = true\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (hidden.size > 1) {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tfor (const obj of block.legend.mclasses.values()) {\n\t\t\t\t\t\t\t\tobj.hidden = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst div2 = tip.d.append('div').style('margin', '20px')\n\t\t\t\tdiv2\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text(common.mclass[e.key].label.toUpperCase())\n\t\t\t\t\t.style('color', common.mclass[e.key].color)\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\tdiv2\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.html(common.mclass[e.key].desc)\n\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('width', '210px')\n\t\t\t\t// end of click\n\t\t\t})\n\t\tbutt\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('background-color', common.mclass[e.key].color)\n\t\t\t.style('margin-right', '5px')\n\t\t\t.style('border-radius', '15px')\n\t\t\t.style('padding', '4px 8px')\n\t\t\t.style('color', 'white')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.text(e.count)\n\t\tconst lab = butt\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('color', common.mclass[e.key].color)\n\t\t\t.text(common.mclass[e.key].label)\n\t\tif (hidden.has(e.key)) {\n\t\t\tlab.style('text-decoration', 'line-through')\n\t\t}\n\t}\n}\n\nexport function legend_morigin(block) {\n\tif (!block.legend) {\n\t\treturn\n\t}\n\tconst hidden = new Set()\n\tfor (const [c, obj] of block.legend.morigins) {\n\t\tif (obj.hidden) {\n\t\t\thidden.add(c)\n\t\t}\n\t}\n\tconst map = new Map()\n\tfor (const t of block.tklst) {\n\t\tif (t.hidden || t.type != client.tkt.ds) continue\n\t\tif (!t.mlst) {\n\t\t\tcontinue\n\t\t}\n\t\tfor (const m of t.mlst) {\n\t\t\tif (!m.origin) continue\n\t\t\tif (!map.has(m.origin)) {\n\t\t\t\t// adding new entry to the origin legend\n\t\t\t\t/*\n\t\t\t\ttricky alert\n\t\t\t\tby default, common.morigin has some item hidden\n\t\t\t\tso whatever is set hidden there, effect will be applicable here\n\t\t\t\tand when user clicks \"Show only\" or \"Show\" option in the morigin menu\n\t\t\t\tit will forever abolish the .hidden of that item in common.morigin\n\t\t\t\t*/\n\t\t\t\tlet hidebydefault = false\n\t\t\t\tif (common.morigin[m.origin] && common.morigin[m.origin].hidden) {\n\t\t\t\t\t// this type is hidden by default\n\t\t\t\t\thidebydefault = true\n\t\t\t\t\thidden.add(m.origin)\n\t\t\t\t}\n\t\t\t\tmap.set(m.origin, { count: 0, hidden: hidebydefault })\n\t\t\t}\n\t\t\tmap.get(m.origin).count++\n\t\t}\n\t}\n\tconst slst = []\n\tfor (const [c, obj] of map) {\n\t\tif (hidden.has(c)) {\n\t\t\tmap.get(c).hidden = true\n\t\t}\n\t\tslst.push({ key: c, count: obj.count })\n\t}\n\tblock.legend.morigins = map\n\tif (map.size == 0) {\n\t\tblock.legend.tr_morigin.style('display', 'none')\n\t\treturn\n\t}\n\tblock.legend.tr_morigin.style('display', 'table-row')\n\tslst.sort((a, b) => b.count - a.count)\n\tblock.legend.td_morigin.selectAll('*').remove()\n\tfor (const e of slst) {\n\t\tconst butt = block.legend.td_morigin\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style('padding', block.legend.vpad + ' 20px ' + block.legend.vpad + ' 0px')\n\t\t\t.classed('sja_clb', true)\n\t\t\t.on('click', () => {\n\t\t\t\ttip.clear()\n\t\t\t\ttip.showunder(butt.node())\n\t\t\t\ttip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show alone')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\tfor (const obj of block.legend.morigins.values()) {\n\t\t\t\t\t\t\tobj.hidden = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.legend.morigins.get(e.key).hidden = false\n\t\t\t\t\t\t/*\n\t\t\t\t\t\ttricky alert\n\t\t\t\t\t\tabolish .hidden from common.morigin\n\t\t\t\t\t\tin case when .hidden is set by default, the variants of this origin can show\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tcommon.morigin[e.key].hidden = false\n\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\tdstkrender(t, block)\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\tif (block.legend.morigins.get(e.key).hidden) {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tblock.legend.morigins.get(e.key).hidden = false\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\ttricky alert\n\t\t\t\t\t\t\tsee above\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\tcommon.morigin[e.key].hidden = false\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">×</div> hide')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tblock.legend.morigins.get(e.key).hidden = true\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (hidden.size > 1) {\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.html('<div style=\"display:inline-block;width:25px\">✓</div> show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\tblock.pannedpx = undefined // make sure\n\t\t\t\t\t\t\tfor (const obj of block.legend.morigins.values()) {\n\t\t\t\t\t\t\t\tobj.hidden = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (const t of block.tklst) {\n\t\t\t\t\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\t\t\t\t\tdstkrender(t, block)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst div2 = tip.d.append('div').style('margin', '20px')\n\t\t\t\tdiv2\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text(common.morigin[e.key].label.toUpperCase())\n\t\t\t\t\t.style('color', common.morigin[e.key].color)\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\tdiv2\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.html(common.morigin[e.key].desc)\n\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('width', '210px')\n\t\t\t\t// end of click\n\t\t\t})\n\t\tbutt\n\t\t\t.append('svg')\n\t\t\t.style('margin-right', '5px')\n\t\t\t.attr('width', 19) // hardcoded legend w/h\n\t\t\t.attr('height', 19)\n\t\t\t.html(common.morigin[e.key].legend)\n\t\tconst lab = butt\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('color', '#858585')\n\t\t\t.text(common.morigin[e.key].label + ', ' + e.count)\n\t\tif (hidden.has(e.key)) {\n\t\t\tlab.style('text-decoration', 'line-through')\n\t\t}\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["table", "tr", "m", "row", "format", "k", "div", "format", "event", "gmmode", "m", "v", "gmmode", "m", "mlst", "color4disc", "d", "gmmode", "tip"]
|
|
7
|
-
}
|