@sjcrh/proteinpaint-client 2.220.0 → 2.221.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-7YU3SNKL.js +1362 -0
- package/dist/AggMatrixInput-73CDR5FS.js +402 -0
- package/dist/AggregateMatrix-NNULVFBM.js +37 -0
- package/dist/AppHeader-EZDDLLXU.js +826 -0
- package/dist/BoxPlot-463E7CRY.js +1229 -0
- package/dist/CorrelationVolcano-LHIIMBPP.js +613 -0
- package/dist/Cuminc-UL2TCIKV.js +1217 -0
- package/dist/DE-VRFSKFDW.js +85 -0
- package/dist/DEinput-FZTQRWVC.js +479 -0
- package/dist/DM-PO7CQZNT.js +86 -0
- package/dist/DifferentialAnalysis-WK6HE3YH.js +236 -0
- package/dist/Disco-YBNQJQFG.js +3384 -0
- package/dist/Disco.UI-HC5XYBFV.js +239 -0
- package/dist/DmrPlot-7VJ5C66D.js +361 -0
- package/dist/GB-VPFQRDRO.js +1388 -0
- package/dist/GSEA-ZEJB3QZQ.js +870 -0
- package/dist/GeneExpInput-SBDDIY6G.js +38 -0
- package/dist/Geomap-23AHGP2V.js +80 -0
- package/dist/HicApp-7AQQE4CM.js +2240 -0
- package/dist/IDCViewer-NO5Q6VOB.js +10808 -0
- package/dist/NumBinaryEditor-DSRP4OOU.js +274 -0
- package/dist/NumBinaryEditor.unit.spec-TT666YL4.js +308 -0
- package/dist/NumContEditor-6CURFOCH.js +100 -0
- package/dist/NumContEditor.unit.spec-MNVCFCMP.js +160 -0
- package/dist/NumCustomBinEditor-SQRR5EFL.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-F7BZWGGT.js +393 -0
- package/dist/NumDiscreteEditor-U7Z2QNYP.js +165 -0
- package/dist/NumDiscreteEditor.unit.spec-EIEBUZCX.js +229 -0
- package/dist/NumRegularBinEditor-CVZSWN6Y.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-ZMAJOIHL.js +274 -0
- package/dist/NumSplineEditor-U43D5NBJ.js +205 -0
- package/dist/NumSplineEditor.unit.spec-C52AADTS.js +220 -0
- package/dist/NumericDensity-PUKDZOVI.js +29 -0
- package/dist/NumericDensity.unit.spec-2347S76D.js +414 -0
- package/dist/NumericHandler-3RT32PTR.js +30 -0
- package/dist/NumericHandler.unit.spec-4PADL4KZ.js +225 -0
- package/dist/ProteomeInput-NFV4FW4U.js +610 -0
- package/dist/Regression-N7M7N6G4.js +1412 -0
- package/dist/RunChart2-UPQ7C6QE.js +744 -0
- package/dist/SC-KBW2NHUV.js +1290 -0
- package/dist/Violin-GWCOP3ZF.js +1092 -0
- package/dist/Volcano-X3HT32GQ.js +2661 -0
- package/dist/Wsi-NXAEOYIS.js +636 -0
- package/dist/aboutSunburst-5EKXZV2A.js +86 -0
- package/dist/adSandbox-RPEWEEW7.js +29 -0
- package/dist/animatedBubbleChart-ILDMZRBX.js +542 -0
- package/dist/app-LOUC4J47.js +28 -0
- package/dist/app-MRKXZ6AZ.js +38 -0
- package/dist/app.js +9 -9
- package/dist/bam-SQWPHCZZ.js +872 -0
- package/dist/bam-SQWPHCZZ.js.map +7 -0
- package/dist/barchart-CJR37234.js +38 -0
- package/dist/barchart2-QQYLTHWR.js +305 -0
- package/dist/block-GLF6QNKY.js +6203 -0
- package/dist/block.init-YJQTJIDO.js +29 -0
- package/dist/block.mds.expressionrank-GBMEI5KQ.js +350 -0
- package/dist/block.mds.geneboxplot-XWE3E5IW.js +819 -0
- package/dist/block.mds.junction-QLEHFVPE.js +1534 -0
- package/dist/block.mds.svcnv-53DTOPBC.js +6413 -0
- package/dist/block.svg-57T37ABS.js +155 -0
- package/dist/block.tk.aicheck-6DXJTS3H.js +274 -0
- package/dist/block.tk.bam-CJFFQDNX.js +1906 -0
- package/dist/block.tk.bam-CJFFQDNX.js.map +7 -0
- package/dist/block.tk.bigwig.ui-OYIVXE2L.js +202 -0
- package/dist/block.tk.hicstraw-UKTGEBWT.js +814 -0
- package/dist/block.tk.junction-ZU5KPFQ3.js +2353 -0
- package/dist/block.tk.junction.textmatrixui-P4WXTAZR.js +190 -0
- package/dist/block.tk.ld-3PQ4O2AE.js +90 -0
- package/dist/block.tk.menu-LLITB6UA.js +1050 -0
- package/dist/block.tk.pgv-Y3FBXUO3.js +934 -0
- package/dist/brainImaging-4B3WXLNP.js +550 -0
- package/dist/brainRegions-7VLONUWN.js +213 -0
- package/dist/bubbleHeatmap-DI6GJRR6.js +374 -0
- package/dist/cellTypeBubbleHeatmap-HJY53DB2.js +274 -0
- package/dist/chunk-226MNBZ2.js +240 -0
- package/dist/chunk-2CDFU4MQ.js +536 -0
- package/dist/chunk-2CNFGVHU.js +257 -0
- package/dist/chunk-2MC3RNKA.js +2685 -0
- package/dist/chunk-2SL4QWUS.js +50 -0
- package/dist/chunk-3KGBC5MK.js +692 -0
- package/dist/chunk-3PCRAPUV.js +56 -0
- package/dist/chunk-4DBOMSKP.js +102 -0
- package/dist/chunk-57BS6KNI.js +466 -0
- package/dist/chunk-5AXS5G4A.js +2334 -0
- package/dist/chunk-5HJG6ECV.js +237 -0
- package/dist/chunk-5ZYANHGX.js +550 -0
- package/dist/chunk-75MRUW2K.js +103 -0
- package/dist/chunk-7J3W3KCN.js +255 -0
- package/dist/chunk-AIZYAKIE.js +182 -0
- package/dist/chunk-AJNFI6GA.js +2008 -0
- package/dist/chunk-BJAWDZBL.js +2799 -0
- package/dist/chunk-C6PVZVIH.js +379 -0
- package/dist/chunk-C77X5ZUV.js +176 -0
- package/dist/chunk-CUCP2GMT.js +102 -0
- package/dist/chunk-DTGAMBRJ.js +134 -0
- package/dist/chunk-DXT7GDHY.js +55 -0
- package/dist/chunk-ENPMWVWG.js +5214 -0
- package/dist/chunk-FPMJJBLV.js +4389 -0
- package/dist/chunk-H7F6DMJA.js +70 -0
- package/dist/chunk-HH3NUAR2.js +96 -0
- package/dist/chunk-HRTPGNOG.js +159 -0
- package/dist/chunk-IFPRYTS7.js +848 -0
- package/dist/chunk-IJSFSUI4.js +302 -0
- package/dist/chunk-IRQKX6DL.js +263 -0
- package/dist/chunk-JNZL7HKB.js +1219 -0
- package/dist/chunk-K3G56J5R.js +299 -0
- package/dist/chunk-KKUCG2QE.js +516 -0
- package/dist/chunk-KPXCXBNU.js +626 -0
- package/dist/chunk-LF5WBI27.js +418 -0
- package/dist/chunk-LF5WBI27.js.map +7 -0
- package/dist/chunk-MSTYU3QO.js +14 -0
- package/dist/chunk-MWARRQT4.js +141 -0
- package/dist/chunk-MXKYPTZ7.js +203 -0
- package/dist/chunk-OZUF7O2S.js +133 -0
- package/dist/chunk-PRTLCJYF.js +2941 -0
- package/dist/chunk-PWYMHUXY.js +116 -0
- package/dist/chunk-PWYMHUXY.js.map +7 -0
- package/dist/chunk-QNCE6EOK.js +82 -0
- package/dist/chunk-RV335DF2.js +266 -0
- package/dist/chunk-SFPZUBPM.js +2102 -0
- package/dist/chunk-SFPZUBPM.js.map +7 -0
- package/dist/chunk-THAUD62Q.js +1253 -0
- package/dist/chunk-VBTBUXXX.js +6375 -0
- package/dist/chunk-VHWJK2MP.js +56 -0
- package/dist/chunk-VMK4RHV5.js +54 -0
- package/dist/chunk-WD7FZ5EE.js +26536 -0
- package/dist/chunk-WD7FZ5EE.js.map +7 -0
- package/dist/chunk-WKT7RF3C.js +468 -0
- package/dist/chunk-WXSMUSU7.js +184 -0
- package/dist/chunk-WXSX5OQJ.js +296 -0
- package/dist/chunk-WY3IORKG.js +194 -0
- package/dist/chunk-WYSOOKFJ.js +480 -0
- package/dist/chunk-XBBFFOLS.js +123 -0
- package/dist/chunk-XSRQGX5H.js +340 -0
- package/dist/chunk-YLL6CTBL.js +54 -0
- package/dist/chunk-YPBY37KD.js +1339 -0
- package/dist/chunk-YUNJBIK4.js +243 -0
- package/dist/chunk-ZAC34BZQ.js +35 -0
- package/dist/chunk-ZAC34BZQ.js.map +7 -0
- package/dist/cohort-5WL6UJOS.js +66 -0
- package/dist/cohortSunburst-R3Z5KJQL.js +402 -0
- package/dist/condition-2IILUMVB.js +323 -0
- package/dist/controls-G3JITZF5.js +30 -0
- package/dist/controls.config-BO7KPPET.js +30 -0
- package/dist/correlation-CZILLVEM.js +91 -0
- package/dist/customdata.inputui-BXFQAMTR.js +280 -0
- package/dist/dataDownload-QTWR4IW7.js +326 -0
- package/dist/databrowser.ui-V2NJQF3U.js +421 -0
- package/dist/dictionary-OVAQX6R3.js +109 -0
- package/dist/dnaMethylation-DHPFRXB2.js +29 -0
- package/dist/dnaMethylation.integration.spec-PJLIRGN5.js +194 -0
- package/dist/e2pca-O7SNMJGB.js +340 -0
- package/dist/ep-NIVLKG4S.js +1247 -0
- package/dist/expclust.gdc.spec-LVCD6C43.js +298 -0
- package/dist/facet-LB4SCXE4.js +556 -0
- package/dist/gb-3IJ4NCPO.js +77 -0
- package/dist/geneExpClustering-SIAC7CMA.js +240 -0
- package/dist/geneExpression-P2TTZXN2.js +29 -0
- package/dist/geneExpression.unit.spec-Q5D6XHUF.js +151 -0
- package/dist/geneORA-PKUIJKTL.js +269 -0
- package/dist/geneRanking-ZGT5MHBV.js +544 -0
- package/dist/geneVariant-24YNANTT.js +289 -0
- package/dist/geneVariant-CDGENHWQ.js +32 -0
- package/dist/geneVariant.integration.spec-7QW4C2WO.js +672 -0
- package/dist/genefusion.ui-NVXGSBXD.js +299 -0
- package/dist/geneset-7STL6UDD.js +199 -0
- package/dist/genomeBrowser.spec-OE2CIP7I.js +272 -0
- package/dist/grin2-2HXUIY5O.js +66 -0
- package/dist/grin2-32IIJR5E.js +945 -0
- package/dist/hierCluster-MDZEI2KB.js +51 -0
- package/dist/hierCluster-T3PZUGBI.js +55 -0
- package/dist/hierCluster.config-7UN6AYGB.js +32 -0
- package/dist/hierCluster.integration.spec-DWOYVK6T.js +479 -0
- package/dist/hierCluster.interactivity-5OM6XNFG.js +45 -0
- package/dist/imagePlot-KBRXDV5G.js +152 -0
- package/dist/importPlot-DJMIC22L.js +8 -0
- package/dist/isoformExpression-SWDWADRC.js +31 -0
- package/dist/isoformExpression.unit.spec-2U5KCYBP.js +233 -0
- package/dist/junction-NMXVVGRG.js +32 -0
- package/dist/junction.unit.spec-JTGBPPN7.js +178 -0
- package/dist/launch.adhoc-YB5SKMNY.js +33 -0
- package/dist/leftlabel.sample-QKXIODCS.js +253 -0
- package/dist/lollipop-TSZ62PBH.js +162 -0
- package/dist/maf-4L5YN4CG.js +451 -0
- package/dist/maftimeline-VOYB3NY3.js +583 -0
- package/dist/matrix-IWJECVTF.js +55 -0
- package/dist/matrix-MMJAJZA7.js +50 -0
- package/dist/matrix.config-DZGOZWJS.js +33 -0
- package/dist/matrix.integration.spec-2N237E7T.js +3156 -0
- package/dist/matrix.interactivity-FL33UUKR.js +33 -0
- package/dist/matrix.layout-7SYHV3KJ.js +35 -0
- package/dist/matrix.renderers-3SIBT2RP.js +30 -0
- package/dist/matrix.sort.unit.spec-L3H44T6I.js +464 -0
- package/dist/matrix.sorterUi.unit.spec-2NRU5UFH.js +334 -0
- package/dist/matrix.unit.spec-HRZIJB6T.js +146 -0
- package/dist/mavb-ZVRQSDPS.js +726 -0
- package/dist/mds.fimo-ZKETTET7.js +509 -0
- package/dist/mds.samplescatterplot-ZV3UNRLP.js +1545 -0
- package/dist/mds.survivalplot-OVXZRTU4.js +472 -0
- package/dist/multivalue-6BE5IA4F.js +79 -0
- package/dist/oncomatrix-XK62NEOO.js +286 -0
- package/dist/oncomatrix.spec-YVTCHOPS.js +439 -0
- package/dist/plot.2dvaf-NUOBWMNX.js +368 -0
- package/dist/plot.app-G6IQWXTV.js +32 -0
- package/dist/plot.barplot-6QJ6HEJR.js +93 -0
- package/dist/plot.boxplot-XKQJSW2O.js +142 -0
- package/dist/plot.brainImaging-UTHFJFXU.js +51 -0
- package/dist/plot.disco-3MSCX7TM.js +98 -0
- package/dist/plot.ssgq-4KBVHF42.js +130 -0
- package/dist/plot.vaf2cov-OGUQSSDS.js +249 -0
- package/dist/polar2-V7M56GTZ.js +228 -0
- package/dist/profileForms-TS3BJLHH.js +937 -0
- package/dist/profilePlot-DP5272HR.js +45 -0
- package/dist/proteinView-K4K4SP3L.js +1346 -0
- package/dist/proteomeCohortCompare-SFWVGLFK.js +866 -0
- package/dist/pseudbulk.unit.spec-NFOA7J2C.js +82 -0
- package/dist/pseudobulk-XKZQEZ4I.js +31 -0
- package/dist/qualitative-7OSFNVI5.js +241 -0
- package/dist/qualitative-OIIN6E4Y.js +34 -0
- package/dist/radar2-AHZJKX7S.js +323 -0
- package/dist/radarFacility2-OUW6D5E7.js +331 -0
- package/dist/render-7UZSGX3Q.js +29 -0
- package/dist/report-J7HKTXZ2.js +213 -0
- package/dist/sampleView-6547OUIM.js +39 -0
- package/dist/samplelst-UHF23UEB.js +114 -0
- package/dist/samplematrix-OOKS3TMR.js +2188 -0
- package/dist/sc-WF2BLGNG.js +77 -0
- package/dist/scatter-ABCVFGRV.js +84 -0
- package/dist/scatter-WF7XM3IA.js +919 -0
- package/dist/selectGenomeWithTklst-67HU5KRB.js +125 -0
- package/dist/singleCellCellType-3FZPJ25V.js +29 -0
- package/dist/singleCellCellType.unit.spec-TOMREHWK.js +150 -0
- package/dist/singleCellGeneExpression-NQTJ5KJQ.js +29 -0
- package/dist/singleCellGeneExpression.unit.spec-ZWUQTU2N.js +144 -0
- package/dist/singleCellNumericValue-VI7H722L.js +29 -0
- package/dist/singleCellNumericValue.unit.spec-QGLHES7H.js +412 -0
- package/dist/singleCellPlot-RU5T6SJK.js +44 -0
- package/dist/singlecell-C3CJVNXP.js +1562 -0
- package/dist/singlecell-NRQZ7KC6.js +77 -0
- package/dist/snp-X6XY65VS.js +29 -0
- package/dist/snp.unit.spec-6EENK7GQ.js +167 -0
- package/dist/snplocus-R4JA6TFT.js +200 -0
- package/dist/snplst-SOWVHSXH.js +36 -0
- package/dist/spliceevent.a53ss.diagram-IRLCCVQZ.js +142 -0
- package/dist/spliceevent.exonskip.diagram-4KG7LE5D.js +274 -0
- package/dist/spliceevent.noeventdiagram-OWXAJJX7.js +451 -0
- package/dist/ssGSEA-EMOKPLMP.js +29 -0
- package/dist/ssGSEA.unit.spec-KXQ7R5WH.js +79 -0
- package/dist/stattable-H2G7MOZG.js +112 -0
- package/dist/studyCatalog-3ITQXWFL.js +457 -0
- package/dist/summarizeCnvGeneexp-ZIPU6YDY.js +154 -0
- package/dist/summarizeGeneexpSurvival-3RYU226R.js +101 -0
- package/dist/summarizeMutationCnv-RGDBUB22.js +155 -0
- package/dist/summarizeMutationDiagnosis-Z4MZE6Y4.js +31 -0
- package/dist/summarizeMutationSurvival-Z5CNRH7E.js +95 -0
- package/dist/summary-6QQCNX3B.js +40 -0
- package/dist/summary.integration.spec-3ULXTZUP.js +405 -0
- package/dist/summaryInput-4QKR34QB.js +238 -0
- package/dist/sunburst-KB3BWC72.js +34 -0
- package/dist/sunburst-XTFBHZNH.js +274 -0
- package/dist/survival-7O6ZK63E.js +49 -0
- package/dist/survival-NNCY4K6C.js +1248 -0
- package/dist/survival.integration.spec-ZYZHZAXA.js +609 -0
- package/dist/svgraph-ZLSFFEAC.js +1377 -0
- package/dist/svmr-REBBDEYM.js +3834 -0
- package/dist/swimmer-NUBRIWLI.js +993 -0
- package/dist/table-CWIQQESJ.js +192 -0
- package/dist/termCollection-7TYJSQ45.js +29 -0
- package/dist/termCollection-7Z55QNL7.js +247 -0
- package/dist/termCollection.unit.spec-LQ5MIBDH.js +295 -0
- package/dist/termCollectionFractionSelection-24DZYVDU.js +38 -0
- package/dist/termCollectionFractionSelection.unit.spec-DCV2CFS5.js +184 -0
- package/dist/tk-2WZFPRCP.js +37 -0
- package/dist/tk-QTLEYIP7.js +1193 -0
- package/dist/tp.ui-HXQX2UH4.js +1453 -0
- package/dist/tvs.categorical-4D3JI2ER.js +28 -0
- package/dist/tvs.condition-62FXFHZ5.js +160 -0
- package/dist/tvs.density-IGO4I4T2.js +19 -0
- package/dist/tvs.dt-FZSVMJOO.js +34 -0
- package/dist/tvs.dtcnv.categorical-PPFQIC42.js +31 -0
- package/dist/tvs.dtcnv.continuous-TV2IGHY4.js +72 -0
- package/dist/tvs.dtfusion-ON4BA4XJ.js +31 -0
- package/dist/tvs.dtitd-VFNROOWQ.js +31 -0
- package/dist/tvs.dtsnvindel-ZXOP37T5.js +31 -0
- package/dist/tvs.dtsv-EUHPTW7J.js +31 -0
- package/dist/tvs.multivalue-NHVXZNDI.js +84 -0
- package/dist/tvs.numeric-FPWDPO3J.js +32 -0
- package/dist/tvs.samplelst-ZZHRNUP4.js +95 -0
- package/dist/tvs.survival-F3KSG3U6.js +110 -0
- package/dist/tvs.termCollection-B37DZLDY.js +118 -0
- package/dist/vocabulary-XNE5FFDK.js +32 -0
- package/dist/wsi.direct-3YH3QGQD.js +11514 -0
- package/package.json +3 -3
- package/dist/2dmaf-KRIX5DBS.js +0 -1362
- package/dist/AggMatrixInput-GBQD74NV.js +0 -402
- package/dist/AggregateMatrix-U2MOQOSZ.js +0 -37
- package/dist/AppHeader-OBZWUCOD.js +0 -826
- package/dist/BoxPlot-ZK6Q5JGE.js +0 -1229
- package/dist/CorrelationVolcano-WGR4JIGK.js +0 -613
- package/dist/Cuminc-I6D6YSIL.js +0 -1217
- package/dist/DE-HO7UBKPC.js +0 -85
- package/dist/DEinput-6LX4I65N.js +0 -479
- package/dist/DM-WYKLX4IC.js +0 -86
- package/dist/DifferentialAnalysis-L5VVBCVZ.js +0 -236
- package/dist/Disco-HLARIYXU.js +0 -3384
- package/dist/Disco.UI-W64WFVC3.js +0 -239
- package/dist/DmrPlot-BKQOT4JM.js +0 -361
- package/dist/GB-WKFGDJYW.js +0 -1388
- package/dist/GSEA-DCCJI5JE.js +0 -870
- package/dist/GeneExpInput-APLFNE6N.js +0 -38
- package/dist/Geomap-FTKWCV4J.js +0 -80
- package/dist/HicApp-ZGZKO4Y4.js +0 -2240
- package/dist/IDCViewer-MXB3OZUZ.js +0 -10808
- package/dist/NumBinaryEditor-S3MHUVZ5.js +0 -274
- package/dist/NumBinaryEditor.unit.spec-264X5ULG.js +0 -308
- package/dist/NumContEditor-MKEZCZMR.js +0 -100
- package/dist/NumContEditor.unit.spec-KBRAIU7M.js +0 -160
- package/dist/NumCustomBinEditor-OSF64BFC.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-T2SRBXTV.js +0 -393
- package/dist/NumDiscreteEditor-PVW5HRRQ.js +0 -165
- package/dist/NumDiscreteEditor.unit.spec-GUK7VWMR.js +0 -229
- package/dist/NumRegularBinEditor-757VRGFQ.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-JUIGEH3Z.js +0 -274
- package/dist/NumSplineEditor-U6MVFSCZ.js +0 -205
- package/dist/NumSplineEditor.unit.spec-PSH6YENX.js +0 -220
- package/dist/NumericDensity-YIP25Z4Y.js +0 -29
- package/dist/NumericDensity.unit.spec-3OSIZJHH.js +0 -414
- package/dist/NumericHandler-D2CO3FTS.js +0 -30
- package/dist/NumericHandler.unit.spec-RNFVGO2I.js +0 -225
- package/dist/ProteomeInput-ZOBJ2VU6.js +0 -610
- package/dist/Regression-ABKJOOMQ.js +0 -1412
- package/dist/RunChart2-D5CEEFEE.js +0 -744
- package/dist/SC-RLVEECU5.js +0 -1290
- package/dist/Violin-PCNX2CWV.js +0 -1092
- package/dist/Volcano-NVFNO7NE.js +0 -2661
- package/dist/Wsi-MAMCK5YZ.js +0 -636
- package/dist/aboutSunburst-VSQADTFD.js +0 -86
- package/dist/adSandbox-5YFAQZO6.js +0 -29
- package/dist/animatedBubbleChart-GM2GXDP3.js +0 -542
- package/dist/app-FNNCH37H.js +0 -28
- package/dist/app-ID5S5FUP.js +0 -38
- package/dist/bam-JZLYXHMF.js +0 -872
- package/dist/bam-JZLYXHMF.js.map +0 -7
- package/dist/barchart-EAXXILCH.js +0 -38
- package/dist/barchart2-E6A4UMUB.js +0 -305
- package/dist/block-VMVJH77F.js +0 -6203
- package/dist/block.init-TUCGKLXG.js +0 -29
- package/dist/block.mds.expressionrank-YVROHZVX.js +0 -350
- package/dist/block.mds.geneboxplot-TQNEWBJY.js +0 -819
- package/dist/block.mds.junction-ZOSTZQF5.js +0 -1534
- package/dist/block.mds.svcnv-XSTSJ4ZD.js +0 -6413
- package/dist/block.svg-D6HXL4SC.js +0 -155
- package/dist/block.tk.aicheck-7RNC4HRR.js +0 -274
- package/dist/block.tk.bam-L3U5YH3F.js +0 -1897
- package/dist/block.tk.bam-L3U5YH3F.js.map +0 -7
- package/dist/block.tk.bigwig.ui-UVSZ7LWQ.js +0 -202
- package/dist/block.tk.hicstraw-YFBJR5LO.js +0 -814
- package/dist/block.tk.junction-DNRK2JNQ.js +0 -2353
- package/dist/block.tk.junction.textmatrixui-EN4ADCAU.js +0 -190
- package/dist/block.tk.ld-I5CTAJ4K.js +0 -90
- package/dist/block.tk.menu-HUZBY7OM.js +0 -1050
- package/dist/block.tk.pgv-KA6BFYPY.js +0 -934
- package/dist/brainImaging-OQB2ZHCU.js +0 -550
- package/dist/brainRegions-2CRVMS24.js +0 -213
- package/dist/bubbleHeatmap-MANNFEG2.js +0 -374
- package/dist/cellTypeBubbleHeatmap-LRK4R4EC.js +0 -274
- package/dist/chunk-2NB5HVXB.js +0 -159
- package/dist/chunk-3E26ITYK.js +0 -55
- package/dist/chunk-3H4FCRAN.js +0 -266
- package/dist/chunk-4ENIOXIT.js +0 -133
- package/dist/chunk-4GKC43U3.js +0 -480
- package/dist/chunk-4NQS45KH.js +0 -302
- package/dist/chunk-4ZV6SE4B.js +0 -240
- package/dist/chunk-5TA5LHPW.js +0 -54
- package/dist/chunk-5YQXNW6Y.js +0 -1339
- package/dist/chunk-67MD4UES.js +0 -848
- package/dist/chunk-6BBUIRHA.js +0 -123
- package/dist/chunk-6DESNDD5.js +0 -468
- package/dist/chunk-6DRRN5XP.js +0 -243
- package/dist/chunk-6XKAOSQE.js +0 -116
- package/dist/chunk-6XKAOSQE.js.map +0 -7
- package/dist/chunk-7TLUQH7J.js +0 -82
- package/dist/chunk-7YMZSVWW.js +0 -1219
- package/dist/chunk-AENUJ7UO.js +0 -299
- package/dist/chunk-AZSWQWKL.js +0 -263
- package/dist/chunk-B5IJAQG4.js +0 -2054
- package/dist/chunk-B5IJAQG4.js.map +0 -7
- package/dist/chunk-BOCU6PXO.js +0 -257
- package/dist/chunk-C7ZPDNOJ.js +0 -70
- package/dist/chunk-DEQREL5P.js +0 -692
- package/dist/chunk-DXKZBSSD.js +0 -2799
- package/dist/chunk-DZBPF5QI.js +0 -550
- package/dist/chunk-DZDK64XY.js +0 -516
- package/dist/chunk-E6C2EWHU.js +0 -176
- package/dist/chunk-GK5QS5BR.js +0 -2685
- package/dist/chunk-GLAR6VNF.js +0 -626
- package/dist/chunk-H6YM4NKS.js +0 -134
- package/dist/chunk-HJKVYTYK.js +0 -379
- package/dist/chunk-HN67TOA7.js +0 -2008
- package/dist/chunk-IXV7FX5B.js +0 -255
- package/dist/chunk-IZ4IPYQY.js +0 -466
- package/dist/chunk-JPPNQVKA.js +0 -56
- package/dist/chunk-KCVBFXGO.js +0 -2941
- package/dist/chunk-LOX5GAVG.js +0 -103
- package/dist/chunk-M6OSJMVD.js +0 -536
- package/dist/chunk-PEKCVKJK.js +0 -26621
- package/dist/chunk-PEKCVKJK.js.map +0 -7
- package/dist/chunk-PIGTIWSK.js +0 -34
- package/dist/chunk-PIGTIWSK.js.map +0 -7
- package/dist/chunk-PIN5YUVJ.js +0 -6375
- package/dist/chunk-PV7AYYRZ.js +0 -50
- package/dist/chunk-QI7OWVFY.js +0 -54
- package/dist/chunk-QWBNQYIF.js +0 -182
- package/dist/chunk-S6WRMFWQ.js +0 -418
- package/dist/chunk-S6WRMFWQ.js.map +0 -7
- package/dist/chunk-SUOEFEJO.js +0 -96
- package/dist/chunk-TVSNHVWX.js +0 -194
- package/dist/chunk-U3CWWOHL.js +0 -340
- package/dist/chunk-VGC4STKW.js +0 -56
- package/dist/chunk-VHC4FDEJ.js +0 -141
- package/dist/chunk-VSDJEPDN.js +0 -5214
- package/dist/chunk-WTWHUZ4O.js +0 -203
- package/dist/chunk-XHZ723K4.js +0 -2334
- package/dist/chunk-XP4P55IC.js +0 -14
- package/dist/chunk-XVPPM25G.js +0 -1253
- package/dist/chunk-XYUERIZ6.js +0 -4389
- package/dist/chunk-YDIIKD7O.js +0 -102
- package/dist/chunk-YLGSRK75.js +0 -102
- package/dist/chunk-YR6EXI2K.js +0 -184
- package/dist/chunk-Z53VY5JV.js +0 -296
- package/dist/chunk-Z7Q2O5Y7.js +0 -237
- package/dist/cohort-ERDL7EJU.js +0 -66
- package/dist/cohortSunburst-KSTVS3OQ.js +0 -402
- package/dist/condition-CTJYHRJG.js +0 -323
- package/dist/controls-MMMRBTZL.js +0 -30
- package/dist/controls.config-ZKMQI27Q.js +0 -30
- package/dist/correlation-NEQNBQTT.js +0 -91
- package/dist/customdata.inputui-THUR7DF5.js +0 -280
- package/dist/dataDownload-ZMAJUKBX.js +0 -326
- package/dist/databrowser.ui-A6ZSIUG4.js +0 -421
- package/dist/dictionary-TQUVCHIN.js +0 -109
- package/dist/dnaMethylation-ZMJYY3ML.js +0 -29
- package/dist/dnaMethylation.integration.spec-5DTBGTYB.js +0 -194
- package/dist/e2pca-DNWBF545.js +0 -340
- package/dist/ep-JNH3HMY4.js +0 -1247
- package/dist/expclust.gdc.spec-2NJ7JVJW.js +0 -298
- package/dist/facet-RWQFAVVU.js +0 -556
- package/dist/gb-OT2Z3Y7J.js +0 -77
- package/dist/geneExpClustering-TPYGSTMO.js +0 -240
- package/dist/geneExpression-4K3OTXBZ.js +0 -29
- package/dist/geneExpression.unit.spec-26MCGRAP.js +0 -151
- package/dist/geneORA-GNXKCN45.js +0 -269
- package/dist/geneRanking-LV6W6TT7.js +0 -544
- package/dist/geneVariant-B2SYTHG6.js +0 -289
- package/dist/geneVariant-O4XG5VEM.js +0 -32
- package/dist/geneVariant.integration.spec-YYVPAFXT.js +0 -672
- package/dist/genefusion.ui-CVGGYVV3.js +0 -299
- package/dist/geneset-MBMCJNXT.js +0 -199
- package/dist/genomeBrowser.spec-OVXFKEIU.js +0 -272
- package/dist/grin2-OXRU465E.js +0 -945
- package/dist/grin2-YCJGBRFG.js +0 -66
- package/dist/hierCluster-KNPWL5KD.js +0 -51
- package/dist/hierCluster-L3LYQZQL.js +0 -55
- package/dist/hierCluster.config-VZBV5QIO.js +0 -32
- package/dist/hierCluster.integration.spec-ZM7K7WI4.js +0 -479
- package/dist/hierCluster.interactivity-EA7WVIQR.js +0 -45
- package/dist/imagePlot-OLVI26S5.js +0 -152
- package/dist/importPlot-3SSCNROC.js +0 -8
- package/dist/isoformExpression-BTMJNAAO.js +0 -31
- package/dist/isoformExpression.unit.spec-S2W5T42Z.js +0 -233
- package/dist/junction-GIS5OCRO.js +0 -32
- package/dist/junction.unit.spec-MSILW6QZ.js +0 -178
- package/dist/launch.adhoc-LLJY4LA5.js +0 -33
- package/dist/leftlabel.sample-P6DDVCOW.js +0 -253
- package/dist/lollipop-J34YCYIP.js +0 -162
- package/dist/maf-MFEEYT5P.js +0 -451
- package/dist/maftimeline-TGJ37QYA.js +0 -583
- package/dist/matrix-A6BNFCIH.js +0 -55
- package/dist/matrix-XTKRVPMQ.js +0 -50
- package/dist/matrix.config-RMDDMOZ5.js +0 -33
- package/dist/matrix.integration.spec-2DVRXVNH.js +0 -3156
- package/dist/matrix.interactivity-MGOYEKDN.js +0 -33
- package/dist/matrix.layout-T7EC5ZC2.js +0 -35
- package/dist/matrix.renderers-GR77V3RL.js +0 -30
- package/dist/matrix.sort.unit.spec-YUCV7G5L.js +0 -464
- package/dist/matrix.sorterUi.unit.spec-FESIQ2RC.js +0 -334
- package/dist/matrix.unit.spec-6QF3WKM7.js +0 -146
- package/dist/mavb-UXJBITZM.js +0 -726
- package/dist/mds.fimo-IPNWVBO4.js +0 -509
- package/dist/mds.samplescatterplot-KEG7RSN3.js +0 -1545
- package/dist/mds.survivalplot-LJF2CD33.js +0 -472
- package/dist/multivalue-YRQZ73DI.js +0 -79
- package/dist/oncomatrix-TIMH5JKS.js +0 -286
- package/dist/oncomatrix.spec-MUOKKCJN.js +0 -439
- package/dist/plot.2dvaf-3OL4S6QG.js +0 -368
- package/dist/plot.app-CMLHZV5F.js +0 -32
- package/dist/plot.barplot-NRYMIPK6.js +0 -93
- package/dist/plot.boxplot-ANGW3WUC.js +0 -142
- package/dist/plot.brainImaging-YUDBYKX5.js +0 -51
- package/dist/plot.disco-LV7RE3YO.js +0 -98
- package/dist/plot.ssgq-F2LOQFYD.js +0 -130
- package/dist/plot.vaf2cov-5OKC7X6D.js +0 -249
- package/dist/polar2-BGJA2GHZ.js +0 -228
- package/dist/profileForms-BKP3OBKV.js +0 -937
- package/dist/profilePlot-5PRRNUKD.js +0 -45
- package/dist/proteinView-VZIWIZZY.js +0 -1346
- package/dist/proteomeCohortCompare-XZI5OI4X.js +0 -866
- package/dist/pseudbulk.unit.spec-DXJQV7JQ.js +0 -82
- package/dist/pseudobulk-FCH3WW6O.js +0 -31
- package/dist/qualitative-ATX53V44.js +0 -34
- package/dist/qualitative-BRKLVRKW.js +0 -241
- package/dist/radar2-6BBT2FBT.js +0 -323
- package/dist/radarFacility2-76Q3IYP2.js +0 -331
- package/dist/render-KUC3QH36.js +0 -29
- package/dist/report-KB4K7ZXC.js +0 -213
- package/dist/sampleView-QD2JLZ4T.js +0 -39
- package/dist/samplelst-6R5RYHNV.js +0 -114
- package/dist/samplematrix-NGORNBTR.js +0 -2188
- package/dist/sc-27AHZZDK.js +0 -77
- package/dist/scatter-FXLZMWD6.js +0 -84
- package/dist/scatter-OWFYLMSJ.js +0 -919
- package/dist/selectGenomeWithTklst-ZTGABCXC.js +0 -125
- package/dist/singleCellCellType-7XXJ5NWC.js +0 -29
- package/dist/singleCellCellType.unit.spec-Y3TEYYCF.js +0 -150
- package/dist/singleCellGeneExpression-EUAIEIYJ.js +0 -29
- package/dist/singleCellGeneExpression.unit.spec-JVHPFLML.js +0 -144
- package/dist/singleCellNumericValue-FHIECJDK.js +0 -29
- package/dist/singleCellNumericValue.unit.spec-ZFG56MIO.js +0 -412
- package/dist/singleCellPlot-NDGIW32L.js +0 -44
- package/dist/singlecell-JPWVPZEF.js +0 -1562
- package/dist/singlecell-N7RJMWZ2.js +0 -77
- package/dist/snp-APUTOL2F.js +0 -29
- package/dist/snp.unit.spec-4AN7AJKO.js +0 -167
- package/dist/snplocus-WIMFAMBE.js +0 -200
- package/dist/snplst-SUJ5AK4E.js +0 -36
- package/dist/spliceevent.a53ss.diagram-4UBI7PFJ.js +0 -142
- package/dist/spliceevent.exonskip.diagram-NVEXVRIC.js +0 -274
- package/dist/spliceevent.noeventdiagram-CKEWNLVF.js +0 -451
- package/dist/ssGSEA-CJOVXTAW.js +0 -29
- package/dist/ssGSEA.unit.spec-A7VRVJSF.js +0 -79
- package/dist/stattable-JBJVVLQE.js +0 -112
- package/dist/studyCatalog-NEL7XSIP.js +0 -457
- package/dist/summarizeCnvGeneexp-BZSCTA5W.js +0 -154
- package/dist/summarizeGeneexpSurvival-743KXNV7.js +0 -101
- package/dist/summarizeMutationCnv-CALMSQGV.js +0 -155
- package/dist/summarizeMutationDiagnosis-OTE7O4AS.js +0 -31
- package/dist/summarizeMutationSurvival-VOZOFTFM.js +0 -95
- package/dist/summary-XJKCD35N.js +0 -40
- package/dist/summary.integration.spec-OOEU6WNB.js +0 -405
- package/dist/summaryInput-JSOXVSMY.js +0 -238
- package/dist/sunburst-J3QHMYKW.js +0 -34
- package/dist/sunburst-LZPP6NPV.js +0 -274
- package/dist/survival-5GWRVTQ6.js +0 -49
- package/dist/survival-FW7N3YXZ.js +0 -1248
- package/dist/survival.integration.spec-WN36VUHL.js +0 -609
- package/dist/svgraph-N35EMK3G.js +0 -1377
- package/dist/svmr-EWL5WDDD.js +0 -3834
- package/dist/swimmer-Z6FUH4CD.js +0 -993
- package/dist/table-EI2OIRGE.js +0 -192
- package/dist/termCollection-K3EX5P3F.js +0 -29
- package/dist/termCollection-TBTAHLVH.js +0 -247
- package/dist/termCollection.unit.spec-ZVNAIPHZ.js +0 -295
- package/dist/termCollectionFractionSelection-ATNIPWVX.js +0 -38
- package/dist/termCollectionFractionSelection.unit.spec-VBRWWBML.js +0 -184
- package/dist/tk-P3RPLUVH.js +0 -1193
- package/dist/tk-U6CYISBH.js +0 -37
- package/dist/tp.ui-KBFYUSWS.js +0 -1453
- package/dist/tvs.categorical-5USP772O.js +0 -28
- package/dist/tvs.condition-652MAA2Z.js +0 -160
- package/dist/tvs.density-CB24PXDE.js +0 -19
- package/dist/tvs.dt-7BTARQUS.js +0 -34
- package/dist/tvs.dtcnv.categorical-GAOO3DGO.js +0 -31
- package/dist/tvs.dtcnv.continuous-P2QRD45O.js +0 -72
- package/dist/tvs.dtfusion-L3I65W7L.js +0 -31
- package/dist/tvs.dtitd-B3JPW6OL.js +0 -31
- package/dist/tvs.dtsnvindel-6Y6CJBZV.js +0 -31
- package/dist/tvs.dtsv-GL7CPATL.js +0 -31
- package/dist/tvs.multivalue-75IM23FZ.js +0 -84
- package/dist/tvs.numeric-XB3GBPHE.js +0 -32
- package/dist/tvs.samplelst-QUA45UE7.js +0 -95
- package/dist/tvs.survival-EKSDZZIO.js +0 -110
- package/dist/tvs.termCollection-5ATMDC7O.js +0 -118
- package/dist/vocabulary-5QBBQAYC.js +0 -32
- package/dist/wsi.direct-BU6BL5UR.js +0 -11514
- /package/dist/{2dmaf-KRIX5DBS.js.map → 2dmaf-7YU3SNKL.js.map} +0 -0
- /package/dist/{AggMatrixInput-GBQD74NV.js.map → AggMatrixInput-73CDR5FS.js.map} +0 -0
- /package/dist/{AggregateMatrix-U2MOQOSZ.js.map → AggregateMatrix-NNULVFBM.js.map} +0 -0
- /package/dist/{AppHeader-OBZWUCOD.js.map → AppHeader-EZDDLLXU.js.map} +0 -0
- /package/dist/{BoxPlot-ZK6Q5JGE.js.map → BoxPlot-463E7CRY.js.map} +0 -0
- /package/dist/{CorrelationVolcano-WGR4JIGK.js.map → CorrelationVolcano-LHIIMBPP.js.map} +0 -0
- /package/dist/{Cuminc-I6D6YSIL.js.map → Cuminc-UL2TCIKV.js.map} +0 -0
- /package/dist/{DE-HO7UBKPC.js.map → DE-VRFSKFDW.js.map} +0 -0
- /package/dist/{DEinput-6LX4I65N.js.map → DEinput-FZTQRWVC.js.map} +0 -0
- /package/dist/{DM-WYKLX4IC.js.map → DM-PO7CQZNT.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-L5VVBCVZ.js.map → DifferentialAnalysis-WK6HE3YH.js.map} +0 -0
- /package/dist/{Disco-HLARIYXU.js.map → Disco-YBNQJQFG.js.map} +0 -0
- /package/dist/{Disco.UI-W64WFVC3.js.map → Disco.UI-HC5XYBFV.js.map} +0 -0
- /package/dist/{DmrPlot-BKQOT4JM.js.map → DmrPlot-7VJ5C66D.js.map} +0 -0
- /package/dist/{GB-WKFGDJYW.js.map → GB-VPFQRDRO.js.map} +0 -0
- /package/dist/{GSEA-DCCJI5JE.js.map → GSEA-ZEJB3QZQ.js.map} +0 -0
- /package/dist/{GeneExpInput-APLFNE6N.js.map → GeneExpInput-SBDDIY6G.js.map} +0 -0
- /package/dist/{Geomap-FTKWCV4J.js.map → Geomap-23AHGP2V.js.map} +0 -0
- /package/dist/{HicApp-ZGZKO4Y4.js.map → HicApp-7AQQE4CM.js.map} +0 -0
- /package/dist/{IDCViewer-MXB3OZUZ.js.map → IDCViewer-NO5Q6VOB.js.map} +0 -0
- /package/dist/{NumBinaryEditor-S3MHUVZ5.js.map → NumBinaryEditor-DSRP4OOU.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-264X5ULG.js.map → NumBinaryEditor.unit.spec-TT666YL4.js.map} +0 -0
- /package/dist/{NumContEditor-MKEZCZMR.js.map → NumContEditor-6CURFOCH.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-KBRAIU7M.js.map → NumContEditor.unit.spec-MNVCFCMP.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-OSF64BFC.js.map → NumCustomBinEditor-SQRR5EFL.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-T2SRBXTV.js.map → NumCustomBinEditor.unit.spec-F7BZWGGT.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-PVW5HRRQ.js.map → NumDiscreteEditor-U7Z2QNYP.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-GUK7VWMR.js.map → NumDiscreteEditor.unit.spec-EIEBUZCX.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-757VRGFQ.js.map → NumRegularBinEditor-CVZSWN6Y.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-JUIGEH3Z.js.map → NumRegularBinEditor.unit.spec-ZMAJOIHL.js.map} +0 -0
- /package/dist/{NumSplineEditor-U6MVFSCZ.js.map → NumSplineEditor-U43D5NBJ.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-PSH6YENX.js.map → NumSplineEditor.unit.spec-C52AADTS.js.map} +0 -0
- /package/dist/{NumericDensity-YIP25Z4Y.js.map → NumericDensity-PUKDZOVI.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-3OSIZJHH.js.map → NumericDensity.unit.spec-2347S76D.js.map} +0 -0
- /package/dist/{NumericHandler-D2CO3FTS.js.map → NumericHandler-3RT32PTR.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-RNFVGO2I.js.map → NumericHandler.unit.spec-4PADL4KZ.js.map} +0 -0
- /package/dist/{ProteomeInput-ZOBJ2VU6.js.map → ProteomeInput-NFV4FW4U.js.map} +0 -0
- /package/dist/{Regression-ABKJOOMQ.js.map → Regression-N7M7N6G4.js.map} +0 -0
- /package/dist/{RunChart2-D5CEEFEE.js.map → RunChart2-UPQ7C6QE.js.map} +0 -0
- /package/dist/{SC-RLVEECU5.js.map → SC-KBW2NHUV.js.map} +0 -0
- /package/dist/{Violin-PCNX2CWV.js.map → Violin-GWCOP3ZF.js.map} +0 -0
- /package/dist/{Volcano-NVFNO7NE.js.map → Volcano-X3HT32GQ.js.map} +0 -0
- /package/dist/{Wsi-MAMCK5YZ.js.map → Wsi-NXAEOYIS.js.map} +0 -0
- /package/dist/{aboutSunburst-VSQADTFD.js.map → aboutSunburst-5EKXZV2A.js.map} +0 -0
- /package/dist/{adSandbox-5YFAQZO6.js.map → adSandbox-RPEWEEW7.js.map} +0 -0
- /package/dist/{animatedBubbleChart-GM2GXDP3.js.map → animatedBubbleChart-ILDMZRBX.js.map} +0 -0
- /package/dist/{app-FNNCH37H.js.map → app-LOUC4J47.js.map} +0 -0
- /package/dist/{app-ID5S5FUP.js.map → app-MRKXZ6AZ.js.map} +0 -0
- /package/dist/{barchart-EAXXILCH.js.map → barchart-CJR37234.js.map} +0 -0
- /package/dist/{barchart2-E6A4UMUB.js.map → barchart2-QQYLTHWR.js.map} +0 -0
- /package/dist/{block-VMVJH77F.js.map → block-GLF6QNKY.js.map} +0 -0
- /package/dist/{block.init-TUCGKLXG.js.map → block.init-YJQTJIDO.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-YVROHZVX.js.map → block.mds.expressionrank-GBMEI5KQ.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-TQNEWBJY.js.map → block.mds.geneboxplot-XWE3E5IW.js.map} +0 -0
- /package/dist/{block.mds.junction-ZOSTZQF5.js.map → block.mds.junction-QLEHFVPE.js.map} +0 -0
- /package/dist/{block.mds.svcnv-XSTSJ4ZD.js.map → block.mds.svcnv-53DTOPBC.js.map} +0 -0
- /package/dist/{block.svg-D6HXL4SC.js.map → block.svg-57T37ABS.js.map} +0 -0
- /package/dist/{block.tk.aicheck-7RNC4HRR.js.map → block.tk.aicheck-6DXJTS3H.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-UVSZ7LWQ.js.map → block.tk.bigwig.ui-OYIVXE2L.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-YFBJR5LO.js.map → block.tk.hicstraw-UKTGEBWT.js.map} +0 -0
- /package/dist/{block.tk.junction-DNRK2JNQ.js.map → block.tk.junction-ZU5KPFQ3.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-EN4ADCAU.js.map → block.tk.junction.textmatrixui-P4WXTAZR.js.map} +0 -0
- /package/dist/{block.tk.ld-I5CTAJ4K.js.map → block.tk.ld-3PQ4O2AE.js.map} +0 -0
- /package/dist/{block.tk.menu-HUZBY7OM.js.map → block.tk.menu-LLITB6UA.js.map} +0 -0
- /package/dist/{block.tk.pgv-KA6BFYPY.js.map → block.tk.pgv-Y3FBXUO3.js.map} +0 -0
- /package/dist/{brainImaging-OQB2ZHCU.js.map → brainImaging-4B3WXLNP.js.map} +0 -0
- /package/dist/{brainRegions-2CRVMS24.js.map → brainRegions-7VLONUWN.js.map} +0 -0
- /package/dist/{bubbleHeatmap-MANNFEG2.js.map → bubbleHeatmap-DI6GJRR6.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-LRK4R4EC.js.map → cellTypeBubbleHeatmap-HJY53DB2.js.map} +0 -0
- /package/dist/{chunk-4ZV6SE4B.js.map → chunk-226MNBZ2.js.map} +0 -0
- /package/dist/{chunk-M6OSJMVD.js.map → chunk-2CDFU4MQ.js.map} +0 -0
- /package/dist/{chunk-BOCU6PXO.js.map → chunk-2CNFGVHU.js.map} +0 -0
- /package/dist/{chunk-GK5QS5BR.js.map → chunk-2MC3RNKA.js.map} +0 -0
- /package/dist/{chunk-PV7AYYRZ.js.map → chunk-2SL4QWUS.js.map} +0 -0
- /package/dist/{chunk-DEQREL5P.js.map → chunk-3KGBC5MK.js.map} +0 -0
- /package/dist/{chunk-VGC4STKW.js.map → chunk-3PCRAPUV.js.map} +0 -0
- /package/dist/{chunk-YLGSRK75.js.map → chunk-4DBOMSKP.js.map} +0 -0
- /package/dist/{chunk-IZ4IPYQY.js.map → chunk-57BS6KNI.js.map} +0 -0
- /package/dist/{chunk-XHZ723K4.js.map → chunk-5AXS5G4A.js.map} +0 -0
- /package/dist/{chunk-Z7Q2O5Y7.js.map → chunk-5HJG6ECV.js.map} +0 -0
- /package/dist/{chunk-DZBPF5QI.js.map → chunk-5ZYANHGX.js.map} +0 -0
- /package/dist/{chunk-LOX5GAVG.js.map → chunk-75MRUW2K.js.map} +0 -0
- /package/dist/{chunk-IXV7FX5B.js.map → chunk-7J3W3KCN.js.map} +0 -0
- /package/dist/{chunk-QWBNQYIF.js.map → chunk-AIZYAKIE.js.map} +0 -0
- /package/dist/{chunk-HN67TOA7.js.map → chunk-AJNFI6GA.js.map} +0 -0
- /package/dist/{chunk-DXKZBSSD.js.map → chunk-BJAWDZBL.js.map} +0 -0
- /package/dist/{chunk-HJKVYTYK.js.map → chunk-C6PVZVIH.js.map} +0 -0
- /package/dist/{chunk-E6C2EWHU.js.map → chunk-C77X5ZUV.js.map} +0 -0
- /package/dist/{chunk-YDIIKD7O.js.map → chunk-CUCP2GMT.js.map} +0 -0
- /package/dist/{chunk-H6YM4NKS.js.map → chunk-DTGAMBRJ.js.map} +0 -0
- /package/dist/{chunk-3E26ITYK.js.map → chunk-DXT7GDHY.js.map} +0 -0
- /package/dist/{chunk-VSDJEPDN.js.map → chunk-ENPMWVWG.js.map} +0 -0
- /package/dist/{chunk-XYUERIZ6.js.map → chunk-FPMJJBLV.js.map} +0 -0
- /package/dist/{chunk-C7ZPDNOJ.js.map → chunk-H7F6DMJA.js.map} +0 -0
- /package/dist/{chunk-SUOEFEJO.js.map → chunk-HH3NUAR2.js.map} +0 -0
- /package/dist/{chunk-2NB5HVXB.js.map → chunk-HRTPGNOG.js.map} +0 -0
- /package/dist/{chunk-67MD4UES.js.map → chunk-IFPRYTS7.js.map} +0 -0
- /package/dist/{chunk-4NQS45KH.js.map → chunk-IJSFSUI4.js.map} +0 -0
- /package/dist/{chunk-AZSWQWKL.js.map → chunk-IRQKX6DL.js.map} +0 -0
- /package/dist/{chunk-7YMZSVWW.js.map → chunk-JNZL7HKB.js.map} +0 -0
- /package/dist/{chunk-AENUJ7UO.js.map → chunk-K3G56J5R.js.map} +0 -0
- /package/dist/{chunk-DZDK64XY.js.map → chunk-KKUCG2QE.js.map} +0 -0
- /package/dist/{chunk-GLAR6VNF.js.map → chunk-KPXCXBNU.js.map} +0 -0
- /package/dist/{chunk-XP4P55IC.js.map → chunk-MSTYU3QO.js.map} +0 -0
- /package/dist/{chunk-VHC4FDEJ.js.map → chunk-MWARRQT4.js.map} +0 -0
- /package/dist/{chunk-WTWHUZ4O.js.map → chunk-MXKYPTZ7.js.map} +0 -0
- /package/dist/{chunk-4ENIOXIT.js.map → chunk-OZUF7O2S.js.map} +0 -0
- /package/dist/{chunk-KCVBFXGO.js.map → chunk-PRTLCJYF.js.map} +0 -0
- /package/dist/{chunk-7TLUQH7J.js.map → chunk-QNCE6EOK.js.map} +0 -0
- /package/dist/{chunk-3H4FCRAN.js.map → chunk-RV335DF2.js.map} +0 -0
- /package/dist/{chunk-XVPPM25G.js.map → chunk-THAUD62Q.js.map} +0 -0
- /package/dist/{chunk-PIN5YUVJ.js.map → chunk-VBTBUXXX.js.map} +0 -0
- /package/dist/{chunk-JPPNQVKA.js.map → chunk-VHWJK2MP.js.map} +0 -0
- /package/dist/{chunk-QI7OWVFY.js.map → chunk-VMK4RHV5.js.map} +0 -0
- /package/dist/{chunk-6DESNDD5.js.map → chunk-WKT7RF3C.js.map} +0 -0
- /package/dist/{chunk-YR6EXI2K.js.map → chunk-WXSMUSU7.js.map} +0 -0
- /package/dist/{chunk-Z53VY5JV.js.map → chunk-WXSX5OQJ.js.map} +0 -0
- /package/dist/{chunk-TVSNHVWX.js.map → chunk-WY3IORKG.js.map} +0 -0
- /package/dist/{chunk-4GKC43U3.js.map → chunk-WYSOOKFJ.js.map} +0 -0
- /package/dist/{chunk-6BBUIRHA.js.map → chunk-XBBFFOLS.js.map} +0 -0
- /package/dist/{chunk-U3CWWOHL.js.map → chunk-XSRQGX5H.js.map} +0 -0
- /package/dist/{chunk-5TA5LHPW.js.map → chunk-YLL6CTBL.js.map} +0 -0
- /package/dist/{chunk-5YQXNW6Y.js.map → chunk-YPBY37KD.js.map} +0 -0
- /package/dist/{chunk-6DRRN5XP.js.map → chunk-YUNJBIK4.js.map} +0 -0
- /package/dist/{cohort-ERDL7EJU.js.map → cohort-5WL6UJOS.js.map} +0 -0
- /package/dist/{cohortSunburst-KSTVS3OQ.js.map → cohortSunburst-R3Z5KJQL.js.map} +0 -0
- /package/dist/{condition-CTJYHRJG.js.map → condition-2IILUMVB.js.map} +0 -0
- /package/dist/{controls-MMMRBTZL.js.map → controls-G3JITZF5.js.map} +0 -0
- /package/dist/{controls.config-ZKMQI27Q.js.map → controls.config-BO7KPPET.js.map} +0 -0
- /package/dist/{correlation-NEQNBQTT.js.map → correlation-CZILLVEM.js.map} +0 -0
- /package/dist/{customdata.inputui-THUR7DF5.js.map → customdata.inputui-BXFQAMTR.js.map} +0 -0
- /package/dist/{dataDownload-ZMAJUKBX.js.map → dataDownload-QTWR4IW7.js.map} +0 -0
- /package/dist/{databrowser.ui-A6ZSIUG4.js.map → databrowser.ui-V2NJQF3U.js.map} +0 -0
- /package/dist/{dictionary-TQUVCHIN.js.map → dictionary-OVAQX6R3.js.map} +0 -0
- /package/dist/{dnaMethylation-ZMJYY3ML.js.map → dnaMethylation-DHPFRXB2.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-5DTBGTYB.js.map → dnaMethylation.integration.spec-PJLIRGN5.js.map} +0 -0
- /package/dist/{e2pca-DNWBF545.js.map → e2pca-O7SNMJGB.js.map} +0 -0
- /package/dist/{ep-JNH3HMY4.js.map → ep-NIVLKG4S.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-2NJ7JVJW.js.map → expclust.gdc.spec-LVCD6C43.js.map} +0 -0
- /package/dist/{facet-RWQFAVVU.js.map → facet-LB4SCXE4.js.map} +0 -0
- /package/dist/{gb-OT2Z3Y7J.js.map → gb-3IJ4NCPO.js.map} +0 -0
- /package/dist/{geneExpClustering-TPYGSTMO.js.map → geneExpClustering-SIAC7CMA.js.map} +0 -0
- /package/dist/{geneExpression-4K3OTXBZ.js.map → geneExpression-P2TTZXN2.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-26MCGRAP.js.map → geneExpression.unit.spec-Q5D6XHUF.js.map} +0 -0
- /package/dist/{geneORA-GNXKCN45.js.map → geneORA-PKUIJKTL.js.map} +0 -0
- /package/dist/{geneRanking-LV6W6TT7.js.map → geneRanking-ZGT5MHBV.js.map} +0 -0
- /package/dist/{geneVariant-B2SYTHG6.js.map → geneVariant-24YNANTT.js.map} +0 -0
- /package/dist/{geneVariant-O4XG5VEM.js.map → geneVariant-CDGENHWQ.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-YYVPAFXT.js.map → geneVariant.integration.spec-7QW4C2WO.js.map} +0 -0
- /package/dist/{genefusion.ui-CVGGYVV3.js.map → genefusion.ui-NVXGSBXD.js.map} +0 -0
- /package/dist/{geneset-MBMCJNXT.js.map → geneset-7STL6UDD.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-OVXFKEIU.js.map → genomeBrowser.spec-OE2CIP7I.js.map} +0 -0
- /package/dist/{grin2-YCJGBRFG.js.map → grin2-2HXUIY5O.js.map} +0 -0
- /package/dist/{grin2-OXRU465E.js.map → grin2-32IIJR5E.js.map} +0 -0
- /package/dist/{hierCluster-KNPWL5KD.js.map → hierCluster-MDZEI2KB.js.map} +0 -0
- /package/dist/{hierCluster-L3LYQZQL.js.map → hierCluster-T3PZUGBI.js.map} +0 -0
- /package/dist/{hierCluster.config-VZBV5QIO.js.map → hierCluster.config-7UN6AYGB.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-ZM7K7WI4.js.map → hierCluster.integration.spec-DWOYVK6T.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-EA7WVIQR.js.map → hierCluster.interactivity-5OM6XNFG.js.map} +0 -0
- /package/dist/{imagePlot-OLVI26S5.js.map → imagePlot-KBRXDV5G.js.map} +0 -0
- /package/dist/{importPlot-3SSCNROC.js.map → importPlot-DJMIC22L.js.map} +0 -0
- /package/dist/{isoformExpression-BTMJNAAO.js.map → isoformExpression-SWDWADRC.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-S2W5T42Z.js.map → isoformExpression.unit.spec-2U5KCYBP.js.map} +0 -0
- /package/dist/{junction-GIS5OCRO.js.map → junction-NMXVVGRG.js.map} +0 -0
- /package/dist/{junction.unit.spec-MSILW6QZ.js.map → junction.unit.spec-JTGBPPN7.js.map} +0 -0
- /package/dist/{launch.adhoc-LLJY4LA5.js.map → launch.adhoc-YB5SKMNY.js.map} +0 -0
- /package/dist/{leftlabel.sample-P6DDVCOW.js.map → leftlabel.sample-QKXIODCS.js.map} +0 -0
- /package/dist/{lollipop-J34YCYIP.js.map → lollipop-TSZ62PBH.js.map} +0 -0
- /package/dist/{maf-MFEEYT5P.js.map → maf-4L5YN4CG.js.map} +0 -0
- /package/dist/{maftimeline-TGJ37QYA.js.map → maftimeline-VOYB3NY3.js.map} +0 -0
- /package/dist/{matrix-A6BNFCIH.js.map → matrix-IWJECVTF.js.map} +0 -0
- /package/dist/{matrix-XTKRVPMQ.js.map → matrix-MMJAJZA7.js.map} +0 -0
- /package/dist/{matrix.config-RMDDMOZ5.js.map → matrix.config-DZGOZWJS.js.map} +0 -0
- /package/dist/{matrix.integration.spec-2DVRXVNH.js.map → matrix.integration.spec-2N237E7T.js.map} +0 -0
- /package/dist/{matrix.interactivity-MGOYEKDN.js.map → matrix.interactivity-FL33UUKR.js.map} +0 -0
- /package/dist/{matrix.layout-T7EC5ZC2.js.map → matrix.layout-7SYHV3KJ.js.map} +0 -0
- /package/dist/{matrix.renderers-GR77V3RL.js.map → matrix.renderers-3SIBT2RP.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-YUCV7G5L.js.map → matrix.sort.unit.spec-L3H44T6I.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-FESIQ2RC.js.map → matrix.sorterUi.unit.spec-2NRU5UFH.js.map} +0 -0
- /package/dist/{matrix.unit.spec-6QF3WKM7.js.map → matrix.unit.spec-HRZIJB6T.js.map} +0 -0
- /package/dist/{mavb-UXJBITZM.js.map → mavb-ZVRQSDPS.js.map} +0 -0
- /package/dist/{mds.fimo-IPNWVBO4.js.map → mds.fimo-ZKETTET7.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-KEG7RSN3.js.map → mds.samplescatterplot-ZV3UNRLP.js.map} +0 -0
- /package/dist/{mds.survivalplot-LJF2CD33.js.map → mds.survivalplot-OVXZRTU4.js.map} +0 -0
- /package/dist/{multivalue-YRQZ73DI.js.map → multivalue-6BE5IA4F.js.map} +0 -0
- /package/dist/{oncomatrix-TIMH5JKS.js.map → oncomatrix-XK62NEOO.js.map} +0 -0
- /package/dist/{oncomatrix.spec-MUOKKCJN.js.map → oncomatrix.spec-YVTCHOPS.js.map} +0 -0
- /package/dist/{plot.2dvaf-3OL4S6QG.js.map → plot.2dvaf-NUOBWMNX.js.map} +0 -0
- /package/dist/{plot.app-CMLHZV5F.js.map → plot.app-G6IQWXTV.js.map} +0 -0
- /package/dist/{plot.barplot-NRYMIPK6.js.map → plot.barplot-6QJ6HEJR.js.map} +0 -0
- /package/dist/{plot.boxplot-ANGW3WUC.js.map → plot.boxplot-XKQJSW2O.js.map} +0 -0
- /package/dist/{plot.brainImaging-YUDBYKX5.js.map → plot.brainImaging-UTHFJFXU.js.map} +0 -0
- /package/dist/{plot.disco-LV7RE3YO.js.map → plot.disco-3MSCX7TM.js.map} +0 -0
- /package/dist/{plot.ssgq-F2LOQFYD.js.map → plot.ssgq-4KBVHF42.js.map} +0 -0
- /package/dist/{plot.vaf2cov-5OKC7X6D.js.map → plot.vaf2cov-OGUQSSDS.js.map} +0 -0
- /package/dist/{polar2-BGJA2GHZ.js.map → polar2-V7M56GTZ.js.map} +0 -0
- /package/dist/{profileForms-BKP3OBKV.js.map → profileForms-TS3BJLHH.js.map} +0 -0
- /package/dist/{profilePlot-5PRRNUKD.js.map → profilePlot-DP5272HR.js.map} +0 -0
- /package/dist/{proteinView-VZIWIZZY.js.map → proteinView-K4K4SP3L.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-XZI5OI4X.js.map → proteomeCohortCompare-SFWVGLFK.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-DXJQV7JQ.js.map → pseudbulk.unit.spec-NFOA7J2C.js.map} +0 -0
- /package/dist/{pseudobulk-FCH3WW6O.js.map → pseudobulk-XKZQEZ4I.js.map} +0 -0
- /package/dist/{qualitative-BRKLVRKW.js.map → qualitative-7OSFNVI5.js.map} +0 -0
- /package/dist/{qualitative-ATX53V44.js.map → qualitative-OIIN6E4Y.js.map} +0 -0
- /package/dist/{radar2-6BBT2FBT.js.map → radar2-AHZJKX7S.js.map} +0 -0
- /package/dist/{radarFacility2-76Q3IYP2.js.map → radarFacility2-OUW6D5E7.js.map} +0 -0
- /package/dist/{render-KUC3QH36.js.map → render-7UZSGX3Q.js.map} +0 -0
- /package/dist/{report-KB4K7ZXC.js.map → report-J7HKTXZ2.js.map} +0 -0
- /package/dist/{sampleView-QD2JLZ4T.js.map → sampleView-6547OUIM.js.map} +0 -0
- /package/dist/{samplelst-6R5RYHNV.js.map → samplelst-UHF23UEB.js.map} +0 -0
- /package/dist/{samplematrix-NGORNBTR.js.map → samplematrix-OOKS3TMR.js.map} +0 -0
- /package/dist/{sc-27AHZZDK.js.map → sc-WF2BLGNG.js.map} +0 -0
- /package/dist/{scatter-FXLZMWD6.js.map → scatter-ABCVFGRV.js.map} +0 -0
- /package/dist/{scatter-OWFYLMSJ.js.map → scatter-WF7XM3IA.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-ZTGABCXC.js.map → selectGenomeWithTklst-67HU5KRB.js.map} +0 -0
- /package/dist/{singleCellCellType-7XXJ5NWC.js.map → singleCellCellType-3FZPJ25V.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-Y3TEYYCF.js.map → singleCellCellType.unit.spec-TOMREHWK.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-EUAIEIYJ.js.map → singleCellGeneExpression-NQTJ5KJQ.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-JVHPFLML.js.map → singleCellGeneExpression.unit.spec-ZWUQTU2N.js.map} +0 -0
- /package/dist/{singleCellNumericValue-FHIECJDK.js.map → singleCellNumericValue-VI7H722L.js.map} +0 -0
- /package/dist/{singleCellNumericValue.unit.spec-ZFG56MIO.js.map → singleCellNumericValue.unit.spec-QGLHES7H.js.map} +0 -0
- /package/dist/{singleCellPlot-NDGIW32L.js.map → singleCellPlot-RU5T6SJK.js.map} +0 -0
- /package/dist/{singlecell-JPWVPZEF.js.map → singlecell-C3CJVNXP.js.map} +0 -0
- /package/dist/{singlecell-N7RJMWZ2.js.map → singlecell-NRQZ7KC6.js.map} +0 -0
- /package/dist/{snp-APUTOL2F.js.map → snp-X6XY65VS.js.map} +0 -0
- /package/dist/{snp.unit.spec-4AN7AJKO.js.map → snp.unit.spec-6EENK7GQ.js.map} +0 -0
- /package/dist/{snplocus-WIMFAMBE.js.map → snplocus-R4JA6TFT.js.map} +0 -0
- /package/dist/{snplst-SUJ5AK4E.js.map → snplst-SOWVHSXH.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-4UBI7PFJ.js.map → spliceevent.a53ss.diagram-IRLCCVQZ.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-NVEXVRIC.js.map → spliceevent.exonskip.diagram-4KG7LE5D.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-CKEWNLVF.js.map → spliceevent.noeventdiagram-OWXAJJX7.js.map} +0 -0
- /package/dist/{ssGSEA-CJOVXTAW.js.map → ssGSEA-EMOKPLMP.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-A7VRVJSF.js.map → ssGSEA.unit.spec-KXQ7R5WH.js.map} +0 -0
- /package/dist/{stattable-JBJVVLQE.js.map → stattable-H2G7MOZG.js.map} +0 -0
- /package/dist/{studyCatalog-NEL7XSIP.js.map → studyCatalog-3ITQXWFL.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-BZSCTA5W.js.map → summarizeCnvGeneexp-ZIPU6YDY.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-743KXNV7.js.map → summarizeGeneexpSurvival-3RYU226R.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-CALMSQGV.js.map → summarizeMutationCnv-RGDBUB22.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-OTE7O4AS.js.map → summarizeMutationDiagnosis-Z4MZE6Y4.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-VOZOFTFM.js.map → summarizeMutationSurvival-Z5CNRH7E.js.map} +0 -0
- /package/dist/{summary-XJKCD35N.js.map → summary-6QQCNX3B.js.map} +0 -0
- /package/dist/{summary.integration.spec-OOEU6WNB.js.map → summary.integration.spec-3ULXTZUP.js.map} +0 -0
- /package/dist/{summaryInput-JSOXVSMY.js.map → summaryInput-4QKR34QB.js.map} +0 -0
- /package/dist/{sunburst-J3QHMYKW.js.map → sunburst-KB3BWC72.js.map} +0 -0
- /package/dist/{sunburst-LZPP6NPV.js.map → sunburst-XTFBHZNH.js.map} +0 -0
- /package/dist/{survival-5GWRVTQ6.js.map → survival-7O6ZK63E.js.map} +0 -0
- /package/dist/{survival-FW7N3YXZ.js.map → survival-NNCY4K6C.js.map} +0 -0
- /package/dist/{survival.integration.spec-WN36VUHL.js.map → survival.integration.spec-ZYZHZAXA.js.map} +0 -0
- /package/dist/{svgraph-N35EMK3G.js.map → svgraph-ZLSFFEAC.js.map} +0 -0
- /package/dist/{svmr-EWL5WDDD.js.map → svmr-REBBDEYM.js.map} +0 -0
- /package/dist/{swimmer-Z6FUH4CD.js.map → swimmer-NUBRIWLI.js.map} +0 -0
- /package/dist/{table-EI2OIRGE.js.map → table-CWIQQESJ.js.map} +0 -0
- /package/dist/{termCollection-K3EX5P3F.js.map → termCollection-7TYJSQ45.js.map} +0 -0
- /package/dist/{termCollection-TBTAHLVH.js.map → termCollection-7Z55QNL7.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-ZVNAIPHZ.js.map → termCollection.unit.spec-LQ5MIBDH.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-ATNIPWVX.js.map → termCollectionFractionSelection-24DZYVDU.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-VBRWWBML.js.map → termCollectionFractionSelection.unit.spec-DCV2CFS5.js.map} +0 -0
- /package/dist/{tk-U6CYISBH.js.map → tk-2WZFPRCP.js.map} +0 -0
- /package/dist/{tk-P3RPLUVH.js.map → tk-QTLEYIP7.js.map} +0 -0
- /package/dist/{tp.ui-KBFYUSWS.js.map → tp.ui-HXQX2UH4.js.map} +0 -0
- /package/dist/{tvs.categorical-5USP772O.js.map → tvs.categorical-4D3JI2ER.js.map} +0 -0
- /package/dist/{tvs.condition-652MAA2Z.js.map → tvs.condition-62FXFHZ5.js.map} +0 -0
- /package/dist/{tvs.density-CB24PXDE.js.map → tvs.density-IGO4I4T2.js.map} +0 -0
- /package/dist/{tvs.dt-7BTARQUS.js.map → tvs.dt-FZSVMJOO.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-GAOO3DGO.js.map → tvs.dtcnv.categorical-PPFQIC42.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-P2QRD45O.js.map → tvs.dtcnv.continuous-TV2IGHY4.js.map} +0 -0
- /package/dist/{tvs.dtfusion-L3I65W7L.js.map → tvs.dtfusion-ON4BA4XJ.js.map} +0 -0
- /package/dist/{tvs.dtitd-B3JPW6OL.js.map → tvs.dtitd-VFNROOWQ.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-6Y6CJBZV.js.map → tvs.dtsnvindel-ZXOP37T5.js.map} +0 -0
- /package/dist/{tvs.dtsv-GL7CPATL.js.map → tvs.dtsv-EUHPTW7J.js.map} +0 -0
- /package/dist/{tvs.multivalue-75IM23FZ.js.map → tvs.multivalue-NHVXZNDI.js.map} +0 -0
- /package/dist/{tvs.numeric-XB3GBPHE.js.map → tvs.numeric-FPWDPO3J.js.map} +0 -0
- /package/dist/{tvs.samplelst-QUA45UE7.js.map → tvs.samplelst-ZZHRNUP4.js.map} +0 -0
- /package/dist/{tvs.survival-EKSDZZIO.js.map → tvs.survival-F3KSG3U6.js.map} +0 -0
- /package/dist/{tvs.termCollection-5ATMDC7O.js.map → tvs.termCollection-B37DZLDY.js.map} +0 -0
- /package/dist/{vocabulary-5QBBQAYC.js.map → vocabulary-XNE5FFDK.js.map} +0 -0
- /package/dist/{wsi.direct-BU6BL5UR.js.map → wsi.direct-3YH3QGQD.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/block.tk.bam.js"],
|
|
4
|
+
"sourcesContent": ["import { select as d3select } from 'd3-selection'\nimport { pointer } from 'd3-selection'\nimport { axisRight, axisTop } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport { dofetch3 } from '#common/dofetch'\nimport { Menu, axisstyle, sayerror, make_radios, table2col, make_one_checkbox } from '#dom'\nimport urlmap from '#common/urlmap'\n\n/*\nimportant: tk.uninitialized will be deleted by getData at the first launch\nto tell backend to provide color scale\n\ntk can predefine if bam file has chr or not\n\n******* rows ********\n\nsee makeTk for order of rows; following boolean flags indicate visibility of rows\ntk.pileup_shown\ntk.toomanyreads\ntk.dom.variantg // if defined.\n\n******* attributes ********\n\ntk.gdcFile={} // the tk runs on a valid gdc bam slice\n\t.uuid=str\n\t.position=str\ntk.gdcToken // gdc token string\ntk.variants[ {} ]\n\t.chr/pos/ref/alt\n .altseq // Contains leftflankseq + alt_allele + rightflankseq\n .refseq // Contains leftflankseq + ref_allele + rightflankseq\n .leftflankseq // Contains sequence on the left hand side of the variant \n .rightflankseq // Contains sequence on the right hand side of the variant\ntk.pileupheight\ntk.pileupbottompad\ntk.alleleAlreadyUpdated // When true (in case of pan/zoom by user) prevents repeated reference genome queries for alt/refallele and left/rightflankseq\ntk.drop_pcrduplicates // By default, hides PCR duplicates. Can be changed to show PCR duplicates from config panel\ntk.drop_supplementary_alignments // By default, hides supplementary alignments. Can be changed to show supplementary alignments from config panel\ntk.show_readnames // Shows read names when this flag is true. By default, read names are hidden\n\ntk.dom{}\n.pileup_axis // left side\n.pileup_g // contains image\n.pileup_img\n.vsliderg\n.read_limit_g\n.read_limit_text\n\ntk.groups[]\n.data{}\n\t.type\n\t.messages[ {t} ] \n\t.templatebox[{}] // optional, about the templates in view range\n\t // server decides if to return template boxes (at poststack_adjustq)\n\t.count {r,t} // r for reads, t for templates\n.data_fullstack{}\n\t.stackcount\n\t.stackheight\n\t.allowpartstack\n.dom{}\n\t.groupg\n\t.message_rowg\n\t.imgg\n\t.img_fullstack\n\t.img_partstack\n\t.box_move\n\t.box_stay\n\t.vslider{}\n\t\t.g\n\t\t.bar <rect> // gray rail\n\t\t.boxg <g> // green slider\n\t\t.box <rect>\n\t\t.boxbotline\n\t\t.boxtopline\n\t\t.boxh\n\t\t.boxy\n\t.variantg <g>\n\t.variantrowheight\n\t.variantrowbottompad\n .gdc\n .gdcrowheight\n .gdcrowbottompad\n .fs_string // For displaying fisher strand score\n.clickedtemplate // set when a template is clicked\n\t.qname\n\t.isfirst\n\t.islast\n.partstack{}\n\t.start\n\t.stop\n.height\n.file\n.url\n.gdc // one string with token and case id joined by comma\n\nenter_partstack()\ngetReadInfo\n alignment_button // For displaying read alignment between read vs ref/alt allele when q.variant is true\n*/\n\nconst labyspace = 5\nconst stackpagesize = 60\nconst slider_rail_color = '#eee'\nconst slider_color = '#c7edc5'\nconst slider_color_dark = '#9ed19b'\nconst slider_color_dark_line = '#36a32f'\nconst messagerowheight = 15 // message row height\nconst stackheight_min = 7 // Minimum stack height for displaying read names\n\nexport async function loadTk(tk, block) {\n\tblock.tkcloakon(tk)\n\tblock.block_setheight()\n\n\tif (tk.uninitialized) {\n\t\tmakeTk(tk, block)\n\t}\n\n\t// list of regions to load data from, including bb.rglst[], and bb.subpanels[]\n\tconst regions = []\n\n\tlet xoff = 0\n\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\tconst r = block.rglst[i]\n\t\tregions.push({\n\t\t\tchr: r.chr,\n\t\t\tstart: r.start,\n\t\t\tstop: r.stop,\n\t\t\twidth: r.width,\n\t\t\tx: xoff\n\t\t})\n\t\txoff += r.width + block.regionspace\n\t}\n\n\tfor (const [idx, r] of block.subpanels.entries()) {\n\t\txoff += r.leftpad\n\t\tregions.push({\n\t\t\tchr: r.chr,\n\t\t\tstart: r.start,\n\t\t\tstop: r.stop,\n\t\t\twidth: r.width,\n\t\t\texonsf: r.exonsf,\n\t\t\tsubpanelidx: idx,\n\t\t\tx: xoff\n\t\t})\n\t\txoff += r.width\n\t}\n\t// Check if there ia any common region between the two regions (assuming there are only two regions), if yes then show only one region\n\t// This does not fully work on testing. When pan/zoomed into common region but only one region shows reads, the other is empty\n\t//if (regions.length == 2) {\n\t//\tif (\n\t//\t\tregions[0].chr == regions[1].chr &&\n\t//\t\tregions[0].start <= regions[1].start &&\n\t//\t\tregions[1].start <= regions[0].stop\n\t//\t) {\n\t//\t\tregions[0].stop = regions[1].stop\n\t//\t\ttk.regions = [regions[0]]\n\t//\t} else if (\n\t//\t\tregions[0].chr == regions[1].chr &&\n\t//\t\tregions[1].start <= regions[0].start &&\n\t//\t\tregions[0].start <= regions[1].stop\n\t//\t) {\n\t//\t\tregions[0].start = regions[1].start\n\t//\t\ttk.regions = [regions[0]]\n\t//\t} else {\n\t//\t\ttk.regions = regions\n\t//\t}\n\t//} else {\n\t//\ttk.regions = regions\n\t//}\n\ttk.regions = regions\n\n\ttry {\n\t\t// loadTk is called by pan/zoom, and will always cancel partstack\n\t\tif (tk.groups) {\n\t\t\tfor (const g of tk.groups) {\n\t\t\t\tdelete g.partstack\n\t\t\t\tdelete g.dom.rightg.vslider.boxy\n\t\t\t}\n\t\t}\n\n\t\tconst data = await getData(tk, block)\n\t\tif (data.error) throw data.error // including \"no reads\" message\n\t\tif (data.colorscale) {\n\t\t\t// available from 1st query, cache\n\t\t\ttk.colorscale = data.colorscale\n\t\t}\n\n\t\t// When original ref or alt allele given by user is missing or \"-\"\n\t\tif (tk.variants) {\n\t\t\tfor (let var_idx = 0; var_idx < tk.variants.length; var_idx++) {\n\t\t\t\tif (tk.variants[var_idx].pos != data.allele_positions[var_idx]) {\n\t\t\t\t\ttk.variants[var_idx].pos = data.allele_positions[var_idx]\n\t\t\t\t\ttk.variants[var_idx].ref = data.ref_alleles[var_idx]\n\t\t\t\t\ttk.variants[var_idx].alt = data.alt_alleles[var_idx]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trenderTk(data, tk, block)\n\n\t\tblock.tkcloakoff(tk, {})\n\t} catch (e) {\n\t\tif (e.stack) console.log(e.stack)\n\t\tif (tk.pileup_shown) {\n\t\t\ttk.dom.pileup_axis.selectAll('*').remove()\n\t\t\ttk.dom.pileup_img.attr('width', 0)\n\t\t}\n\t\tif (tk.groups) {\n\t\t\tfor (const g of tk.groups) {\n\t\t\t\tg.dom.img_fullstack.attr('width', 0).attr('height', 0)\n\t\t\t\tg.dom.img_partstack.attr('width', 0).attr('height', 0)\n\t\t\t\tg.dom.img_cover.attr('width', 0).attr('height', 0)\n\t\t\t}\n\t\t}\n\t\ttk.height_main = tk.height = 100\n\n\t\tif (typeof e == 'string' && e.startsWith('No reads in view range')) {\n\t\t\t// makeshift method for server to signal \"no read\" to client and wipe these labels\n\t\t\ttk.leftlabel_count.text('')\n\t\t\ttk.leftlabel_skip.text('')\n\t\t}\n\n\t\tblock.tkcloakoff(tk, { error: e.message || e })\n\t}\n\tsetLeftlabelWidth(tk, block)\n\n\tblock.block_setheight()\n}\n\nasync function getData(tk, block, additional = {}) {\n\tconst body = {\n\t\tgenome: block.genome.name,\n\t\trglst: tk.regions,\n\t\tnucleotide_length: block.exonsf,\n\t\tpileupheight: tk.pileupheight,\n\t\t...additional\n\t}\n\n\tif (tk.gdcFile) {\n\t\tbody.gdcFileUUID = tk.gdcFile.uuid\n\t\tbody.gdcFilePosition = tk.gdcFile.position\n\t}\n\n\tif (tk.variants) {\n\t\tbody.variant = tk.variants.map(m => m.chr + '.' + m.pos + '.' + m.ref + '.' + m.alt).join('.')\n\t\tbody.strictness = tk.strictness\n\t\tbody.diff_score_plotwidth = tk.dom.diff_score_plotwidth\n\t\tif (Number.isFinite(tk.max_diff_score)) {\n\t\t\tbody.max_diff_score = tk.max_diff_score\n\t\t\tbody.min_diff_score = tk.min_diff_score\n\t\t}\n\t} else if (tk.sv) {\n\t\tif (tk.sv[0].strandA == '+') {\n\t\t\ttk.sv[0].strandA = 'positive'\n\t\t} else if (tk.sv[0].strandA == '-') {\n\t\t\ttk.sv[0].strandA = 'negative'\n\t\t}\n\t\tif (tk.sv[0].strandB == '+') {\n\t\t\ttk.sv[0].strandB = 'positive'\n\t\t} else if (tk.sv[0].strandB == '-') {\n\t\t\ttk.sv[0].strandB = 'negative'\n\t\t}\n\n\t\tbody.sv = tk.sv\n\t\t\t.map(m => m.chrA + '.' + m.startA + '.' + m.strandA + '.' + m.chrB + '.' + m.startB + '.' + m.strandB)\n\t\t\t.join('.')\n\t}\n\n\tif (tk.variants && tk.alleleAlreadyUpdated) {\n\t\t// Prevent passing of refseq and altseq from server to client side in subsequent request\n\t\tbody.alleleAlreadyUpdated = 1\n\t\tbody.refseqs = tk.variants.refseqs\n\t\tbody.altseqs = tk.variants.altseqs\n\t\tbody.leftflankseqs = tk.variants.leftflankseqs\n\t\tbody.rightflankseqs = tk.variants.rightflankseqs\n\t\tbody.ref_positions = tk.variants.ref_positions\n\t\tbody.refalleles = tk.variants.refalleles\n\t\tbody.altalleles = tk.variants.altalleles\n\t}\n\tif (tk.uninitialized) {\n\t\tbody.getcolorscale = 1\n\t\tdelete tk.uninitialized\n\t}\n\tif (tk.asPaired) body.asPaired = 1\n\tif ('nochr' in tk) body.nochr = tk.nochr\n\n\tif (tk.file) body.file = tk.file\n\tif (tk.url) body.url = tk.url\n\tif (tk.indexURL) body.indexURL = tk.indexURL\n\n\tif (tk.drop_pcrduplicates) body.drop_pcrduplicates = 1\n\tif (tk.drop_supplementary_alignments) body.drop_supplementary_alignments = 1\n\tif (window.devicePixelRatio > 1) body.devicePixelRatio = window.devicePixelRatio\n\n\tconst data = await dofetch3('tkbam', { headers: getHeaders(tk), body })\n\n\tif (tk.variants && !tk.alleleAlreadyUpdated) {\n\t\ttk.variants.refseqs = data.refseqs\n\t\ttk.variants.altseqs = data.altseqs\n\t\ttk.variants.refalleles = data.refalleles\n\t\ttk.variants.altalleles = data.altalleles\n\t\ttk.variants.leftflankseqs = data.leftflankseqs\n\t\ttk.variants.rightflankseqs = data.rightflankseqs\n\t\ttk.variants.ref_positions = data.ref_positions\n\t\ttk.alleleAlreadyUpdated = true\n\t}\n\tif (data.error) throw data.error\n\treturn data\n}\n\nfunction renderTk(data, tk, block) {\n\t/*\nserver can either generate groups anew (1. upon init 2. change blast parameter),\nor update existing groups, in which groupidx will be provided\n1. pan or zoom\n2. update indel match parameter\n3. change/cancel variant\n*/\n\n\tif ('nochr' in data) tk.nochr = data.nochr // only set to tk when nochr is returned from server\n\n\tif (data.pileup_data) {\n\t\t// update the pileup image\n\t\ttk.pileup_shown = true\n\t\ttk.dom.pileup_img\n\t\t\t.attr('xlink:href', data.pileup_data.src)\n\t\t\t.attr('width', data.pileup_data.width)\n\t\t\t.attr('height', tk.pileupheight)\n\t\t// update axis\n\t\ttk.dom.pileup_axis.selectAll('*').remove()\n\t\tconst scale = scaleLinear().domain([0, data.pileup_data.maxValue]).range([tk.pileupheight, 0])\n\t\taxisstyle({\n\t\t\taxis: tk.dom.pileup_axis.call(axisRight().scale(scale).ticks(5)), // at most 5 ticks\n\t\t\tcolor: 'black',\n\t\t\tshowline: true\n\t\t})\n\t} else {\n\t\t// pileup not returned when there's no visible reads (other cases?)\n\t\ttk.pileup_shown = false\n\t\ttk.dom.pileup_axis.selectAll('*').remove()\n\t\ttk.dom.pileup_img.attr('width', 0)\n\t}\n\n\tif (data.count.read_limit_reached || data.count.read_stops) {\n\t\t// too many reads\n\t\ttk.toomanyreads = true\n\t\tconst lst = []\n\t\tif (data.count.read_stops) {\n\t\t\t// the server stopped reading the reads of a region at the position, the reads after it are not shown\n\t\t\tconst stops = data.count.read_stops.map(s => `${s.chr}:${s.position.toLocaleString()}`).join(', ')\n\t\t\tlst.push(`Too many reads, loaded up to ${stops}.`)\n\t\t}\n\t\tif (data.count.read_limit_reached) {\n\t\t\tlst.push(\n\t\t\t\t`Downsampled to ${data.groups.reduce((i, j) => i + j.count.r, 0)} from ${data.count.read_limit_reached} reads.`\n\t\t\t)\n\t\t}\n\t\tlst.push('Try zooming into a smaller region.')\n\t\ttk.dom.read_limit_text\n\t\t\t.text(lst.join(' '))\n\t\t\t.attr('x', data.pileup_data.width / 2)\n\t\t\t.attr('transform', 'scale(1)')\n\t} else {\n\t\ttk.toomanyreads = false\n\t\ttk.dom.read_limit_text.attr('transform', 'scale(0)')\n\t}\n\n\tif (!tk.groups) {\n\t\ttk.groups = []\n\t\tfor (const g of data.groups) {\n\t\t\tconst gd = makeGroup(g, tk, block, data)\n\t\t\ttk.groups.push(gd)\n\t\t\t/*\n\t\t\tif (tk.variants && (gd.data.type == 'support_alt' || gd.data.type == 'support_ref')) {\n\t\t\t\tgd.dom.message_row\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\tgd.dom.message_row.style('text-decoration', 'underline')\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseleave', () => {\n\t\t\t\t\t\tgd.dom.message_row.style('text-decoration', 'none')\n\t\t\t\t\t})\n\t\t\t\tgd.dom.message_row.on('click', async () => {\n\t\t\t\t\tclick_groupheader_showMultiReadAlign(tk, gd, block) // Generating multiple sequence alignment against ref/alt allele\n\t\t\t\t})\n\t\t\t}\n\t\t\t*/\n\t\t}\n\t} else {\n\t\tupdateExistingGroups(data, tk, block)\n\t}\n\tmay_render_variant(data, tk, block)\n\n\t// show messages\n\tfor (const g of tk.groups) {\n\t\tg.dom.message_rowg.selectAll('*').remove()\n\t\tlet y = 0\n\t\tfor (const m of g.data.messages) {\n\t\t\tconst msg = g.dom.message_rowg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', block.width / 2)\n\t\t\t\t.attr('y', y + messagerowheight - 1)\n\t\t\t\t.attr('font-size', messagerowheight)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.text(m.t)\n\t\t\t/*\n\t\t\tTODO !tk.gdcFile\n\t\t\t\tclicking header has unresolved issues in GFF, disable it in GDC until after softlaunch\n\t\t\t\t- click on 1st group will show what's from the 4th group\n\t\t\t\t- the realignment panel y position can be too high and got covered up by gdc portal component\n\t\t\t*/\n\t\t\tif (m.isheader && !tk.gdcFile) {\n\t\t\t\t// this message is the header of the group, allow clickable\n\t\t\t\tmsg.attr('class', 'sja_clbtext2').on('click', () => {\n\t\t\t\t\tclick_groupheader(tk, g, block)\n\t\t\t\t})\n\t\t\t}\n\t\t\ty += messagerowheight\n\t\t}\n\t}\n\n\tsetTkHeight(tk)\n\n\tlet countr = 0, // #read\n\t\tcountt = 0 // #templates\n\tfor (const g of tk.groups) {\n\t\tcountr += g.data.count.r\n\t\tif (tk.asPaired) {\n\t\t\tcountt += g.data.count.t\n\t\t}\n\t}\n\n\ttk.leftlabel_count.text(\n\t\t(countr ? countr + ' read' + (countr > 1 ? 's' : '') : '') +\n\t\t\t(countt ? ', ' + countt + ' template' + (countt > 1 ? 's' : '') : '')\n\t)\n\n\tif (data.count.skipped) {\n\t\ttk.leftlabel_skip.text(`${data.count.skipped} read${data.count.skipped > 1 ? 's' : ''} skipped`)\n\t} else {\n\t\ttk.leftlabel_skip.text('')\n\t}\n\ttk.read_alignment_diff_scores_asc = data.read_alignment_diff_scores_asc\n}\n\n// update tk.leftLabelMaxwidth and call block.setllabel() at the end of normal and error rendering\nfunction setLeftlabelWidth(tk, block) {\n\tconst lst = [\n\t\ttk.tklabel.node().getBBox().width,\n\t\ttk.leftlabel_count.node().getBBox().width,\n\t\ttk.leftlabel_skip.node().getBBox().width,\n\t\ttk.leftlabel_about ? tk.leftlabel_about.node().getBBox().width : 0\n\t]\n\tif (tk.show_readnames) {\n\t\tfor (const g of tk.groups) lst.push(g.ReadNameMaxwidth)\n\t}\n\ttk.leftLabelMaxwidth = Math.max(...lst)\n\tblock.setllabel() // calculate left margin based on max left width\n}\n\nfunction may_render_variant(data, tk, block) {\n\t// call everytime track is updated, so that variant box can be positioned based on view range; even when there's no variant\n\t// in tk.dom.variantg, indicate location and status of the variant\n\t// TODO show variant info alongside box, when box is wide enough, show\n\n\tif (!tk.dom.variantg || tk.sv) return\n\tlet var_idx = 0\n\tfor (const g of tk.groups) {\n\t\tif (g.data.type.includes('support_alt')) {\n\t\t\tif (g.variantg) {\n\t\t\t\tg.variantg.selectAll('*').remove()\n\t\t\t} else {\n\t\t\t\tg.variantg = tk.glider.append('g')\n\t\t\t}\n\t\t\tlet x1, x2 // on screen pixel start/stop of the variant box\n\t\t\t{\n\t\t\t\tconst hits = block.seekcoord(tk.variants[0].chr, tk.variants[var_idx].pos)\n\t\t\t\tif (hits[0]) {\n\t\t\t\t\tx1 = hits[0].x - block.exonsf / 2\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst hits = block.seekcoord(tk.variants[0].chr, tk.variants[var_idx].pos + tk.variants[var_idx].ref.length)\n\t\t\t\tif (hits[0]) {\n\t\t\t\t\tx2 = hits[0].x - block.exonsf / 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (x1 === undefined || x2 === undefined || x1 >= block.width || x2 <= 0) return // variant is out of range, do not show\n\n\t\t\t// will render variant in a row\n\t\t\tlet variant_box_width = x2 - x1\n\t\t\tif (x2 > data.pileup_data.width) {\n\t\t\t\tvariant_box_width = data.pileup_data.width - x1\n\t\t\t} else if (x1 < 0) {\n\t\t\t\tvariant_box_width = x2\n\t\t\t}\n\n\t\t\tif (tk.variants.length == 1) {\n\t\t\t\tg.variantg\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', Math.max(0, x1))\n\t\t\t\t\t.attr('width', variant_box_width)\n\t\t\t\t\t.attr('height', tk.dom.variantrowheight)\n\t\t\t\t\t.attr('fill', 'grey')\n\t\t\t} else {\n\t\t\t\tg.variantg\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', Math.max(0, x1))\n\t\t\t\t\t.attr('width', variant_box_width)\n\t\t\t\t\t.attr('height', tk.dom.variantrowheight)\n\t\t\t\t\t.attr('fill', g.data.group_color)\n\t\t\t}\n\n\t\t\tconst variant_string =\n\t\t\t\ttk.variants[0].chr +\n\t\t\t\t'.' +\n\t\t\t\t(data.allele_positions[var_idx] + 1).toString() +\n\t\t\t\t'.' +\n\t\t\t\tdata.ref_alleles[var_idx] +\n\t\t\t\t'.' +\n\t\t\t\tdata.alt_alleles[var_idx] // This is only showing the first allele, need to think of a way to show the other alleles (if present). Maybe show for each alternate allele?\n\t\t\t// Determining where to place the text. Before, inside or after the box\n\t\t\tlet variant_start_text_pos = 0\n\t\t\tconst space_param = 10\n\t\t\tconst pad_param = 15\n\n\t\t\tconst var_str = g.variantg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('y', tk.dom.variantrowheight - 2) // -2 is a quick fix to put text at vertical center (need better method)\n\t\t\t\t.attr('font-size', tk.dom.variantrowheight)\n\t\t\t\t.text(variant_string)\n\n\t\t\tconst var_str_bbox = var_str.node().getBBox() // .node() will get the DOM/SVG\n\n\t\t\tif (var_str_bbox.width + space_param < x1) {\n\t\t\t\t// Before variant box\n\t\t\t\tvariant_start_text_pos = x1 - var_str_bbox.width - space_param\n\t\t\t} else if (var_str_bbox.width < variant_box_width) {\n\t\t\t\t// Inside variant box, center align\n\t\t\t\tvariant_start_text_pos = Math.max(0, x1) + (variant_box_width - var_str_bbox.width) / 2\n\t\t\t} else if (x2 + var_str_bbox.width < data.pileup_data.width) {\n\t\t\t\t// After variant box but when variant_string length is lower than pileup plot width\n\t\t\t\tvariant_start_text_pos = x2 + space_param\n\t\t\t}\n\t\t\tvar_str.attr('x', variant_start_text_pos)\n\n\t\t\tif (data.refalleleerror == true) {\n\t\t\t\t// When ref allele is not correct\n\t\t\t\tlet text_start_pos = 0\n\t\t\t\tconst incorrect_string = g.variantg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('x', text_start_pos)\n\t\t\t\t\t.attr('y', tk.dom.variantrowheight)\n\t\t\t\t\t.style('fill', 'red')\n\t\t\t\t\t.attr('font-size', tk.dom.variantrowheight)\n\t\t\t\t\t.text('Incorrect reference allele')\n\n\t\t\t\tconst incorrect_ref_bbox = incorrect_string.node().getBBox() // .node() will get the DOM/SVG\n\n\t\t\t\t// Determining position to place the string and avoid overwriting variant string\n\t\t\t\tif (\n\t\t\t\t\tvariant_start_text_pos == 0 &&\n\t\t\t\t\tincorrect_ref_bbox.width + space_param < x1 - var_str_bbox.width - space_param\n\t\t\t\t) {\n\t\t\t\t\t// When variant string starts from zero (when string is too big)\n\t\t\t\t\ttext_start_pos = var_str_bbox.width + space_param\n\t\t\t\t} else if (\n\t\t\t\t\tvariant_start_text_pos == 0 &&\n\t\t\t\t\tincorrect_ref_bbox.width + space_param > x1 - var_str_bbox.width - space_param // When variant string starts from zero (when string is too big)\n\t\t\t\t) {\n\t\t\t\t\ttext_start_pos = x2 + space_param\n\t\t\t\t} else if (\n\t\t\t\t\tvar_str_bbox.width + space_param < x1 &&\n\t\t\t\t\tx2 + incorrect_ref_bbox.width + space_param < data.pileup_data.width\n\t\t\t\t) {\n\t\t\t\t\t// When variant string is rendered before variant box and incorrect string can fit after variant box\n\t\t\t\t\ttext_start_pos = x2 + space_param\n\t\t\t\t} else if (\n\t\t\t\t\tvar_str_bbox.width + space_param < x1 &&\n\t\t\t\t\tx2 + incorrect_ref_bbox.width + space_param >= data.pileup_data.width &&\n\t\t\t\t\tincorrect_ref_bbox.width + space_param < variant_box_width\n\t\t\t\t) {\n\t\t\t\t\t// When variant string is rendered before variant box and incorrect string cannot fit after variant box, then rendered within variant box\n\t\t\t\t\ttext_start_pos = Math.max(0, x1)\n\t\t\t\t} else if (\n\t\t\t\t\tvar_str_bbox.width + space_param < x1 &&\n\t\t\t\t\tx2 + incorrect_ref_bbox.width + space_param >= data.pileup_data.width\n\t\t\t\t) {\n\t\t\t\t\ttext_start_pos = x1 - var_str_bbox.width - space_param * 2 - incorrect_ref_bbox.width\n\t\t\t\t} else if (var_str_bbox.width < variant_box_width && incorrect_ref_bbox.width + space_param < x1) {\n\t\t\t\t\t// When variant string inside variant box and incorrect string as sufficient space on left hand side\n\t\t\t\t\ttext_start_pos = x1 - incorrect_ref_bbox.width - space_param\n\t\t\t\t} else if (var_str_bbox.width < variant_box_width && incorrect_ref_bbox.width + space_param >= x1) {\n\t\t\t\t\t// When variant string inside variant box and incorrect string as sufficient space on right hand side\n\t\t\t\t\ttext_start_pos = x2 + space_param\n\t\t\t\t} else if (x2 + var_str_bbox.width < data.pileup_data.width && incorrect_ref_bbox.width + space_param < x1) {\n\t\t\t\t\t// When variant string after variant box and incorrect space has sufficient space on left hand side\n\t\t\t\t\ttext_start_pos = x1 - incorrect_ref_bbox.width - space_param\n\t\t\t\t} else if (x2 + var_str_bbox.width < data.pileup_data.width && incorrect_ref_bbox.width + space_param >= x1) {\n\t\t\t\t\t// When variant string after variant box and incorrect space has sufficient space on right hand side\n\t\t\t\t\ttext_start_pos = x2 + var_str_bbox.width + 2 * space_param\n\t\t\t\t} else if (x2 + var_str_bbox.width < data.pileup_data.width && incorrect_ref_bbox.width < variant_box_width) {\n\t\t\t\t\t// When variant string after variant box and incorrect space has sufficient space inside variant box\n\t\t\t\t\ttext_start_pos = Math.max(0, x1)\n\t\t\t\t}\n\n\t\t\t\tincorrect_string.attr('x', text_start_pos)\n\t\t\t}\n\t\t\tvar_idx += 1\n\t\t}\n\t}\n\n\tif (tk.variants.length == 1) {\n\t\t// Rendering FS score\n\t\ttk.fs_string.text('FS = ' + data.strand_probability)\n\n\t\tif (data.strand_significance) {\n\t\t\t// Change color to red if FS score is significant\n\t\t\ttk.fs_string.style('fill', 'red')\n\t\t} else {\n\t\t\t// Change color back to black when its no longer significant\n\t\t\ttk.fs_string.style('fill', 'black')\n\t\t}\n\n\t\t//Show information about FS in tooltip on click\n\t\ttk.fs_string.on('click', event => {\n\t\t\ttk.tktip.clear().showunder(event.target)\n\t\t\ttk.tktip.d\n\t\t\t\t.append('div')\n\t\t\t\t.style('width', '350px')\n\t\t\t\t.html(\n\t\t\t\t\t`Fisher strand (FS) analysis score containing p-values in phred scale (-10*log(p-value)). If <a href='https://gatk.broadinstitute.org/hc/en-us/articles/360035890471' target='_blank'>FS>60</a>, the variant maybe a sequencing artifact and highlighted in red.\n\t\t\t\t\t</br></br>\n\t\t\t\t\tTo compute the p-value, Fisher's exact test is used for variants with a sequencing depth <= 300. If depth > 300 and each individual category > 150, chi-squared test is used. Following table displays read counts in each category.`\n\t\t\t\t)\n\n\t\t\tconst table = tk.tktip.d.append('table').style('margin-top', '20px').style('border-spacing', '5px')\n\t\t\t{\n\t\t\t\t// row 1\n\t\t\t\tconst tr = table.append('tr').style('font-weight', 'bold')\n\t\t\t\ttr.append('td')\n\t\t\t\ttr.append('td').text('Alternative')\n\t\t\t\ttr.append('td').text('Reference')\n\t\t\t}\n\t\t\t{\n\t\t\t\t// row 2\n\t\t\t\tconst tr = table.append('tr')\n\t\t\t\ttr.append('td').text('Forward').style('font-weight', 'bold')\n\t\t\t\ttr.append('td').text(data.alternate_forward_count)\n\t\t\t\ttr.append('td').text(data.reference_forward_count)\n\t\t\t}\n\t\t\t{\n\t\t\t\t// row 3\n\t\t\t\tconst tr = table.append('tr')\n\t\t\t\ttr.append('td').text('Reverse').style('font-weight', 'bold')\n\t\t\t\ttr.append('td').text(data.alternate_reverse_count)\n\t\t\t\ttr.append('td').text(data.reference_reverse_count)\n\t\t\t}\n\t\t})\n\t}\n\n\tif (Number.isFinite(data.max_diff_score) && !tk.dom.alleleSimilarityHeaderLabel) {\n\t\t/* running in variant mode and need to create the allele similarity column header\n\t\tonly create if missing. do not create multiple ones on every update\n\t\t*/\n\t\ttk.dom.alleleSimilarityHeaderLabel = tk.dom.alleleSimilarityHeaderG\n\t\t\t.append('text')\n\t\t\t.attr('y', 2 * tk.dom.variantrowheight)\n\t\t\t.attr('font-size', tk.dom.variantrowheight)\n\t\t\t.attr('class', 'sja_clbtext2')\n\t\t\t.text('Allele similarity')\n\n\t\t//Show information about diff score in tooltip on click\n\t\tconst html_text = [\n\t\t\t'Allele similarity: This chart shows the allele to which the read has maximum sequence similarity. In case of alternative and reference alleles, all reads in the same group have same color. In case of none category, color representing allele with maximum sequence color is displayed. In case of ambiguous category, for each read colors representing each alleles having equal similarity to each other are displayed.'\n\t\t]\n\n\t\tlet var_idx = 0\n\t\thtml_text.push('<br>Allele color codes:')\n\t\tlet old_pos = tk.variants[0].pos\n\t\tlet old_ref_length = tk.variants[0].ref.length\n\t\ttk.is_same_ref = true // Tests whether the ref allele is common between all the multi-allelic variants\n\t\tlet ref_color\n\t\tfor (const g of tk.groups) {\n\t\t\tif (g.data.type.includes('support_alt')) {\n\t\t\t\tlet test_text =\n\t\t\t\t\t'<svg width=\"10\" height=\"10\" style = \"display:inline-block;\"><rect width=\"10\" height=\"10\" style=\"fill:' +\n\t\t\t\t\tg.data.group_color +\n\t\t\t\t\t';\" /> </svg> ' +\n\t\t\t\t\ttk.variants[var_idx].alt\n\t\t\t\thtml_text.push(test_text)\n\t\t\t\tif (tk.variants[var_idx].pos != old_pos || tk.variants[var_idx].ref.length != old_ref_length) {\n\t\t\t\t\ttk.is_same_ref = false\n\t\t\t\t}\n\t\t\t\tvar_idx += 1\n\t\t\t} else if (g.data.type == 'support_ref') {\n\t\t\t\tref_color = g.data.group_color\n\t\t\t}\n\t\t}\n\n\t\t// Depicting reference allele\n\t\tif (!ref_color) {\n\t\t\t// This can happen when the reference group is not present\n\t\t\tref_color = '#47C8FF'\n\t\t}\n\t\tif (tk.is_same_ref == true) {\n\t\t\thtml_text.push(\n\t\t\t\t'<svg width=\"10\" height=\"10\" style = \"display:inline-block;\"><rect width=\"10\" height=\"10\" style=\"fill:' +\n\t\t\t\t\tref_color +\n\t\t\t\t\t';\" /> </svg> ' +\n\t\t\t\t\ttk.variants[0].ref\n\t\t\t)\n\t\t} else {\n\t\t\thtml_text.push(\n\t\t\t\t'<svg width=\"10\" height=\"10\" style = \"display:inline-block;\"><rect width=\"10\" height=\"10\" style=\"fill:' +\n\t\t\t\t\tref_color +\n\t\t\t\t\t';\" /> </svg> Combined reference allele'\n\t\t\t)\n\t\t}\n\n\t\tif (!tk.gdcFile) {\n\t\t\t// do not add this since gdc doesn't allow linking out\n\t\t\thtml_text.push(\n\t\t\t\t\"<br><a href='https://proteinpaint.stjude.org/bam' target='_blank'>Click here to view details of this method</a>.\"\n\t\t\t)\n\t\t}\n\t\ttk.dom.alleleSimilarityHeaderLabel.on('click', event => {\n\t\t\tconst b = event.target.getBoundingClientRect()\n\t\t\ttk.tktip.clear().show(b.x - 250, b.y)\n\t\t\ttk.tktip.d.append('div').style('width', '300px').html(html_text.join('<br>'))\n\t\t})\n\t}\n}\n\nfunction setTkHeight(tk) {\n\t// FIXME TODO should set yoffset of all subtracks here (pileup, read_limit, variant, gdc, groups)\n\t// call after any group is updated\n\tlet h = 0\n\tif (tk.pileup_shown) h += tk.pileupheight + tk.pileupbottompad\n\tif (tk.toomanyreads) {\n\t\th += tk.dom.read_limit_height\n\t\ttk.dom.read_limit_text.attr('y', h)\n\t\th += tk.dom.read_limit_bottompad\n\t}\n\t//if (tk.gdc) {\n\t//\ttk.dom.gdc_g.attr('transform', 'translate(0,' + h + ')')\n\t//\th += tk.dom.gdcrowheight + tk.dom.gdcrowbottompad\n\t//}\n\n\tif (tk.dom.variantg) {\n\t\ttk.dom.variantg.attr('transform', 'translate(0,' + h + ')')\n\t}\n\tif (tk.dom.alleleSimilarityHeaderG) {\n\t\ttk.dom.alleleSimilarityHeaderG.attr('transform', 'translate(0,' + (tk.pileupheight - tk.pileupbottompad * 2) + ')')\n\t}\n\n\tlet var_idx = 0\n\tfor (const g of tk.groups) {\n\t\tif (g.data.type.includes('support_alt')) {\n\t\t\tg.variantg.attr('transform', 'translate(0,' + h + ')')\n\t\t\th += tk.dom.variantrowheight + tk.dom.variantrowbottompad\n\t\t\tvar_idx += 1\n\t\t}\n\t\tg.dom.groupg.transition().attr('transform', 'translate(0,' + h + ')')\n\t\tg.dom.rightg.transition().attr('transform', 'translate(0,' + h + ')') // Both diff_score plot and vslider are inside this\n\n\t\tg.msgheight = messagerowheight * g.data.messages.length // sum of height from all messages\n\t\tg.dom.leftg.transition().attr('transform', 'translate(0,' + (h + g.msgheight) + ')') // read_names_g are inside this\n\t\t//g.dom.message_rowg.transition().attr('transform', 'translate(0,0)') //not needed\n\t\tg.dom.imgg.transition().attr('transform', 'translate(0,' + g.msgheight + ')')\n\n\t\tif (tk.variants) {\n\t\t\tg.dom.diff_score_barplot_fullstack.transition().attr('transform', 'translate(0,' + g.msgheight + ')')\n\t\t}\n\t\tif (g.partstack) {\n\t\t\t// slider visible\n\t\t\tif (tk.variants) {\n\t\t\t\tg.dom.diff_score_barplot_partstack.transition().attr('transform', 'translate(0,' + g.msgheight + ')')\n\t\t\t\tg.dom.rightg.vslider.g\n\t\t\t\t\t.transition()\n\t\t\t\t\t.attr('transform', 'translate(' + tk.dom.diff_score_plotwidth * 1.1 + ',' + g.msgheight + ') scale(1)')\n\t\t\t} else {\n\t\t\t\tg.dom.rightg.vslider.g.transition().attr('transform', 'translate(0,0) scale(1)')\n\t\t\t}\n\t\t}\n\t\th += g.data.height + g.msgheight\n\t\tif (g.data.type.includes('support_alt') && var_idx < tk.variants.length) {\n\t\t\t// Add space between adjacent alt allele groups, but no need to add space after the last alt allele group\n\t\t\th += tk.dom.variantrowheight\n\t\t}\n\t}\n\ttk.height_main = tk.height = h\n\ttk.height_main += tk.toppad + tk.bottompad\n}\n\nfunction updateExistingGroups(data, tk, block) {\n\t// to update all existing groups and reset each group to fullstack\n\t// Check if data.groups and tk.groups have the same length. Lengths can differ when toggled between different strictness values.\n\n\t// Check which group is missing in data.groups and deleting it\n\tfor (let i = 0; i < tk.groups.length; i++) {\n\t\tconst group = data.groups.find(g => g.type == tk.groups[i].data.type)\n\t\tif (!group) {\n\t\t\tdeleteGroupDom(tk.groups[i])\n\t\t\ttk.groups.splice(i, 1) // Deleting the group\n\t\t}\n\t}\n\n\tfor (const gd of data.groups) {\n\t\tconst group = tk.groups.find(g => g.data.type == gd.type)\n\t\tif (!group) {\n\t\t\t// Addition of extra group often take place when toggled to higher strictness. For e.g going from strictness 0 to 1 where the none category gets created\n\t\t\tconst g = makeGroup(gd, tk, block, data)\n\t\t\ttk.groups.push(g)\n\t\t} else {\n\t\t\tgroup.data = gd\n\t\t\tupdate_boxes(group, tk, block)\n\n\t\t\t// in full stack\n\t\t\tgroup.dom.img_fullstack\n\t\t\t\t.attr('xlink:href', group.data.src)\n\t\t\t\t.attr('width', group.data.width)\n\t\t\t\t.attr('height', group.data.height)\n\t\t\tif (tk.variants) {\n\t\t\t\tgroup.ReadNameMaxwidth = 0\n\t\t\t\tif (tk.show_readnames) {\n\t\t\t\t\tif (group.data.templatebox) {\n\t\t\t\t\t\tgroup.dom.read_names_g.selectAll('*').remove()\n\t\t\t\t\t\tlet read_count = 1\n\t\t\t\t\t\tfor (const read of group.data.templatebox) {\n\t\t\t\t\t\t\tconst read_name_bbox = group.dom.read_names_g\n\t\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t\t.attr('x', 0)\n\t\t\t\t\t\t\t\t.attr('y', (group.data.height * read_count) / group.data.templatebox.length)\n\t\t\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t\t\t.style('fill', 'black')\n\t\t\t\t\t\t\t\t.attr('font-size', group.data.height / group.data.templatebox.length)\n\t\t\t\t\t\t\t\t.text(read.qname)\n\t\t\t\t\t\t\tgroup.ReadNameMaxwidth = Math.max(group.ReadNameMaxwidth, read_name_bbox.node().getBBox().width)\n\t\t\t\t\t\t\tread_count += 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgroup.dom.read_names_g.selectAll('*').remove()\n\t\t\t\t\tgroup.ReadNameMaxwidth = 0\n\t\t\t\t}\n\t\t\t\tif (group.my_partstack) {\n\t\t\t\t\t// Checks if the y-position of click is defined or not. Helpful when show_readnames button is clicked without having to click again to invoke partstack\n\t\t\t\t\tif (group.data.allowpartstack) {\n\t\t\t\t\t\tenter_partstack(group, tk, block, group.my_partstack, data)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgroup.dom.diff_score_barplot_fullstack\n\t\t\t\t\t\t.attr('xlink:href', gd.diff_scores_img.src)\n\t\t\t\t\t\t.attr('width', gd.diff_scores_img.width)\n\t\t\t\t\t\t.attr('height', gd.diff_scores_img.height)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroup.dom.img_partstack.attr('width', 0).attr('height', 0)\n\t\t\tif (tk.variants) {\n\t\t\t\tgroup.dom.diff_score_barplot_partstack.attr('width', 0).attr('height', 0)\n\t\t\t}\n\n\t\t\t//tk.config_handle.transition().attr('x', 0)\n\t\t\tgroup.dom.rightg.vslider.g.transition().attr('transform', 'scale(0)')\n\t\t\tgroup.dom.img_cover.attr('width', group.data.width).attr('height', group.data.height)\n\t\t}\n\t}\n}\n\nfunction update_boxes(group, tk, block) {\n\t// update move/stay boxes after getting new data\n\tgroup.dom.box_move.attr('width', 0)\n\tupdate_box_stay(group, tk, block)\n}\n\nfunction update_box_stay(group, tk, block) {\n\t// just the stay box\n\tif (!group.data.templatebox) {\n\t\tgroup.dom.box_stay.attr('width', 0)\n\t\treturn\n\t}\n\tif (!group.clickedtemplate) {\n\t\tgroup.dom.box_stay.attr('width', 0)\n\t\treturn\n\t}\n\tfor (const t of group.data.templatebox) {\n\t\tif (t.qname == group.clickedtemplate.qname) {\n\t\t\tif (tk.asPaired || (t.isfirst && group.clickedtemplate.isfirst) || (t.islast && group.clickedtemplate.islast)) {\n\t\t\t\tconst bx1 = Math.max(0, t.x1)\n\t\t\t\tconst bx2 = Math.min(block.width, t.x2)\n\t\t\t\tgroup.dom.box_stay\n\t\t\t\t\t.attr('width', bx2 - bx1)\n\t\t\t\t\t.attr('height', t.y2 - t.y1)\n\t\t\t\t\t.attr('transform', 'translate(' + bx1 + ',' + t.y1 + ')')\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\t// clicked template not found\n\tgroup.dom.box_stay.attr('width', 0)\n}\n\nfunction deleteGroupDom(g) {\n\tg.dom.message_rowg.remove()\n\tg.dom.img_fullstack.remove()\n\tg.dom.img_partstack.remove()\n\tg.dom.diff_score_barplot_fullstack?.remove()\n\tg.dom.diff_score_barplot_partstack?.remove()\n\tg.dom.read_names_g?.remove()\n\tg.dom.leftg.remove()\n\tg.dom.box_stay?.remove()\n\tg.dom.box_move?.remove()\n\tg.dom.rightg.remove()\n}\n\nfunction makeTk(tk, block) {\n\tif (tk.gdcFile) {\n\t\tblock.showGdcBamSliceDownloadBtn(true)\n\t}\n\n\tmay_add_urlparameter(tk, block)\n\n\t// if to hide PCR or optical duplicates\n\tif (tk.drop_pcrduplicates == undefined) {\n\t\t// attribute is not set, set to true by default\n\t\ttk.drop_pcrduplicates = true\n\t}\n\ttk.drop_supplementary_alignments = false // Commenting out this functionality for now. Will later test it with a suitable example\n\t//if (tk.drop_supplementary_alignments == undefined) {\n\t//\t// attribute is not set, set to true by default\n\t//\ttk.drop_supplementary_alignments = true\n\t//}\n\n\tif (tk.show_readnames == undefined) {\n\t\ttk.show_readnames = false\n\t}\n\n\ttk.config_handle = block\n\t\t.maketkconfighandle(tk)\n\t\t.attr('y', 10 + block.labelfontsize)\n\t\t.on('click', () => {\n\t\t\tconfigPanel(tk, block)\n\t\t})\n\n\ttk.readMenu = new Menu() // show read details here upon clicking a read\n\t// css class will force scrollbar to always show when content is too wide. if narrow scrollbar won't show\n\ttk.readMenu.d.style('max-width', '90vw').style('max-height', '65vh').attr('class', 'sjpp_show_scrollbar')\n\n\ttk.multiAlignMenu = new Menu() // show multi-read alignment\n\ttk.multiAlignMenu.d.style('max-width', '90vw').style('max-height', '65vh').attr('class', 'sjpp_show_scrollbar')\n\n\ttk.pileupheight = 100\n\ttk.pileupbottompad = 6\n\n\t///////////// row #1: pileup\n\ttk.dom = {\n\t\tpileup_g: tk.glider.append('g'),\n\t\tpileup_axis: tk.glider.append('g'),\n\t\tread_limit_height: 15,\n\t\tread_limit_bottompad: 6,\n\t\tread_limit_g: tk.glider.append('g')\n\t}\n\ttk.dom.pileup_img = tk.dom.pileup_g.append('image') // pileup track height is defined\n\n\t///////////// row #2: too many reads\n\ttk.dom.read_limit_text = tk.dom.read_limit_g\n\t\t.append('text')\n\t\t.style('fill', 'red')\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('font-size', tk.dom.read_limit_height)\n\t\t.attr('transform', 'scale(0)')\n\n\t///////////// row #3: variant\n\tif (tk.variants) {\n\t\t// assuming that variant will only be added upon track initiation\n\t\ttk.dom.variantg = tk.glider.append('g') // create variant mark box aligned with coord ruler\n\t\ttk.dom.alleleSimilarityHeaderG = tk.gright.append('g')\n\t\ttk.dom.variantrowheight = 15\n\t\ttk.dom.variantrowbottompad = 5\n\t\t//tk.dom.diff_score_axis = tk.gright.append('g') // For storing axis of bar plot of diff_score\n\t\ttk.dom.diff_score_plotwidth = 20\n\t\ttk.fs_string = block.maketklefthandle(tk, tk.pileupheight + tk.dom.variantrowheight / 2) // Will contain Fisher strand value which will be added in may_render_variant function\n\t} else if (tk.sv) {\n\t\t// assuming that variant will only be added upon track initiation\n\t\ttk.dom.variantg = tk.glider.append('g')\n\t\ttk.dom.variantrowheight = 15\n\t\ttk.dom.variantrowbottompad = 5\n\t}\n\n\t///////////// row #4: gdc region XXX delete and replace with bedj indicator track\n\t//if (tk.gdc) {\n\t//\ttk.dom.gdc_g = tk.glider.append('g')\n\t//\ttk.dom.gdcrowheight = 15\n\t//\ttk.dom.gdcrowbottompad = 5\n\t//}\n\n\t///////////// row #5+: one for each group; <g> of a group is added dynamically to glider\n\n\ttk.asPaired = false\n\n\tlet laby = block.labelfontsize + 5\n\ttk.leftlabel_count = block.maketklefthandle(tk, laby)\n\tlaby += block.labelfontsize\n\ttk.leftlabel_skip = block.maketklefthandle(tk, laby).text('')\n\tif (tk.aboutThisFile) {\n\t\tlaby += block.labelfontsize\n\t\ttk.leftlabel_about = block\n\t\t\t.maketklefthandle(tk, laby)\n\t\t\t.text('About the BAM file')\n\t\t\t.on('mouseover', event => {\n\t\t\t\ttk.tktip.showunder(event.target).clear()\n\t\t\t\tconst t = table2col({ holder: tk.tktip.d })\n\t\t\t\tfor (const r of tk.aboutThisFile) t.addRow(r.k, r.v)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\ttk.tktip.hide()\n\t\t\t})\n\t}\n\n\t/* \n\ton makeTk(), existing settings and doms must be cleared\n\tat block tk menu, hide and reshow this tk will trigger makeTk() on this tk a second time\n\tif following things are not cleared, somehow some group img will become homeless\n\t*/\n\tdelete tk.alleleAlreadyUpdated\n\tif (tk.groups) {\n\t\tfor (const g of tk.groups) deleteGroupDom(g)\n\t\tdelete tk.groups\n\t}\n}\n\n// may add additional parameters from url that specifically apply to the bam track\nfunction may_add_urlparameter(tk, block) {\n\tconst u2p = urlmap()\n\tif (u2p.has('variant')) {\n\t\t// Check if the variant is simple string \"chr.pos.ref.alt\" or a complex json object\n\n\t\ttk.variants = []\n\t\tif (typeof u2p.get('variant') == 'string') {\n\t\t\tconst tmp = u2p.get('variant').split('.')\n\t\t\tif (tmp.length == 4) {\n\t\t\t\t// Simple variant i.e chr.pos.ref.alt\n\t\t\t\tconst pos = Number(tmp[1])\n\t\t\t\tif (!Number.isInteger(pos)) throw 'urlparam variant pos is not integer'\n\t\t\t\tif (!tmp[2]) throw 'ref allele missing'\n\t\t\t\tif (!tmp[3]) throw 'alt allele missing'\n\t\t\t\ttk.variants.push({ chr: tmp[0], pos: pos - 1, ref: tmp[2], alt: tmp[3], strictness: 1 })\n\t\t\t}\n\t\t} else {\n\t\t\t// json object like variant={chr:\"chr1\", variants:[ { pos:123, ref:A, alt:T }, {pos, ref, alt} ... ] }\n\t\t\tconst variant_json = u2p.get('variant')\n\t\t\tfor (const item of variant_json.variants) {\n\t\t\t\tif (!Number.isInteger(item.pos)) throw 'urlparam variant pos is not integer'\n\t\t\t\tif (!item.ref) throw 'ref allele missing'\n\t\t\t\tif (!item.alt) throw 'alt allele missing'\n\t\t\t\ttk.variants.push({ chr: variant_json.chr, pos: Number(item.pos) - 1, ref: item.ref, alt: item.alt })\n\t\t\t}\n\t\t}\n\t\tif (u2p.has('strictness')) {\n\t\t\tconst tmp = u2p.get('strictness')\n\t\t\tif (!Number.isInteger(Number(tmp))) throw 'strictness must be an integer'\n\t\t\ttk.strictness = Number(tmp)\n\t\t\tif (tk.strictness != 1 && tk.strictness != 0) {\n\t\t\t\tthrow 'strictness must be 0 or 1'\n\t\t\t}\n\t\t} else {\n\t\t\ttk.strictness = 1\n\t\t}\n\n\t\t// SNVs and indels\n\t\t//for (let i = 0; i < tmp.length; i += 4) {\n\t\t//\tconst pos = Number(tmp[i + 1])\n\t\t//\tif (!Number.isInteger(pos)) return console.log('urlparam variant pos is not integer')\n\t\t//\tif (!tmp[i + 2]) return console.log('ref allele missing')\n\t\t//\tif (!tmp[i + 3]) return console.log('alt allele missing')\n\t\t//\ttk.variants.push({ chr: tmp[i], pos: pos - 1, ref: tmp[i + 2], alt: tmp[i + 3] })\n\t\t//}\n\n\t\t// The 5th value is the strictness. If multiple variants are given, strictness may have to be compulsory to avoid confusion\n\t\t//for (let i = 0; i < tmp.length; i += 5) {\n\t\t//\tconst pos = Number(tmp[i + 1])\n\t\t//\tlet strictness\n\t\t//\tif (!Number.isInteger(pos)) return console.log('urlparam variant pos is not integer')\n\t\t//\t//if (!tmp[i + 2]) return console.log('ref allele missing')\n\t\t//\t//if (!tmp[i + 3]) return console.log('alt allele missing')\n\t\t//\tif (!tmp[i + 4]) {\n\t\t//\t\tstrictness = 1 // Default strictness\n\t\t//\t} else if (!Number.isFinite(Number(tmp[i + 4]))) { //\n\t\t//\t\treturn 'Strictness must be a positive number'\n\t\t//\t} else if (Number(tmp[i + 4]) > 2) return 'Invalid strictness'\n\t\t//\t// For now, there are only three levels of strictness. More will be added in the future\n\t\t//\telse {\n\t\t//\t\tstrictness = Number(tmp[i + 4])\n\t\t//\t}\n\t\t//\ttk.variants.push({ chr: tmp[i], pos: pos - 1, ref: tmp[i + 2], alt: tmp[i + 3], strictness: strictness })\n\t\t//}\n\n\t\t//const pos = Number(tmp[1])\n\t\t//if (!Number.isInteger(pos)) return console.log('urlparam variant pos is not integer')\n\t\t//if (!tmp[2]) return console.log('ref allele missing')\n\t\t//if (!tmp[3]) return console.log('alt allele missing')\n\t\t//let strictness = 1\n\t\t////if (tmp.length > 4) {\n\t\t//// Multiple alternate alleles\n\t\t//const alt = []\n\t\t//for (let i = 3; i < tmp.length; i++) {\n\t\t//\tif (i == tmp.length - 1) {\n\t\t//\t\t// Parsing out strictness\n\t\t//\t\tif (!Number.isInteger(pos)) return console.log('urlparam variant pos is not integer')\n\t\t//\t\t//if (!tmp[i + 2]) return console.log('ref allele missing')\n\t\t//\t\t//if (!tmp[i + 3]) return console.log('alt allele missing')\n\t\t//\t\t//if (!tmp[tmp.length - 1]) {\n\t\t//\t\t//\tstrictness = 1 // Default strictness\n\t\t//\t\t//} else\n\t\t//\t\tif (!Number.isFinite(Number(tmp[tmp.length - 1]))) {\n\t\t//\t\t\t// Multiple alternate allele\n\t\t//\t\t\t//return 'Strictness must be a positive number'\n\t\t//\t\t\talt.push(tmp[i])\n\t\t//\t\t} else if (Number(tmp[tmp.length - 1]) > 2) return 'Invalid strictness'\n\t\t//\t\t// For now, there are only three levels of strictness. More may be added in the future\n\t\t//\t\telse {\n\t\t//\t\t\tstrictness = Number(tmp[tmp.length - 1])\n\t\t//\t\t}\n\t\t//\t} else {\n\t\t//\t\t// Multiple alternate alleles\n\t\t//\t\talt.push(tmp[i])\n\t\t//\t}\n\t\t//}\n\t\t////console.log('alt:', alt)\n\t\t//tk.variants.push({ chr: tmp[0], pos: pos - 1, ref: tmp[2], alt: alt, strictness: strictness })\n\n\t\t//}\n\t\t//else {\n\t\t//\tlet strictness\n\t\t//\tif (!Number.isInteger(pos)) return console.log('urlparam variant pos is not integer')\n\t\t//\t//if (!tmp[i + 2]) return console.log('ref allele missing')\n\t\t//\t//if (!tmp[i + 3]) return console.log('alt allele missing')\n\t\t//\tif (!tmp[4]) {\n\t\t//\t\tstrictness = 1 // Default strictness\n\t\t//\t} else if (!Number.isFinite(Number(tmp[4]))) {\n\t\t//\t\treturn 'Strictness must be a positive number'\n\t\t//\t} else if (Number(tmp[4]) > 2) return 'Invalid strictness'\n\t\t//\t// For now, there are only three levels of strictness. More may be added in the future\n\t\t//\telse {\n\t\t//\t\tstrictness = Number(tmp[i + 4])\n\t\t//\t}\n\t\t//\n\t\t//}\n\t} else if (u2p.has('sv')) {\n\t\t// tmp.length >= 6\n\t\t// SVs\n\t\tconst tmp = u2p.get('sv').split('.')\n\t\ttk.sv = []\n\t\tif (tmp.length == 7) {\n\t\t\ttk.sv.push({\n\t\t\t\tchrA: tmp[0],\n\t\t\t\tstartA: tmp[1],\n\t\t\t\tstrandA: tmp[2],\n\t\t\t\tchrB: tmp[3],\n\t\t\t\tstartB: tmp[4],\n\t\t\t\tstrandB: tmp[5],\n\t\t\t\tcontig: tmp[6]\n\t\t\t})\n\t\t} else if (tmp.length == 6) {\n\t\t\ttk.sv.push({\n\t\t\t\tchrA: tmp[0],\n\t\t\t\tstartA: tmp[1],\n\t\t\t\tstrandA: tmp[2],\n\t\t\t\tchrB: tmp[3],\n\t\t\t\tstartB: tmp[4],\n\t\t\t\tstrandB: tmp[5]\n\t\t\t})\n\t\t}\n\t}\n}\n\nfunction makeGroup(gd, tk, block, data) {\n\t// make a group object using returned data for this group, and show tk image\n\tconst group = {\n\t\tdata: gd,\n\t\tdom: {\n\t\t\tgroupg: tk.glider.append('g'),\n\t\t\trightg: tk.gright.append('g'),\n\t\t\tleftg: tk.gleft.append('g')\n\t\t}\n\t}\n\t/*\n\tgroupg contains two <g>: message_rowg and imgg\n\tmessage_rowg:\n\t render message from each group. This is later made clickable to display multi-read alignment\n\t is always on the top, position does not change\n\t if not empty, message_rowg will push down imgg\n\t*/\n\tgroup.dom.message_rowg = group.dom.groupg.append('g')\n\tgroup.dom.imgg = group.dom.groupg.append('g')\n\tgroup.dom.rightg.vslider = group.dom.rightg.append('g')\n\tgroup.dom.rightg.vslider.g = group.dom.rightg.vslider.append('g').attr('transform', 'scale(0)')\n\n\tif (tk.variants) {\n\t\tgroup.dom.diff_score_g = group.dom.rightg.append('g') // For storing bar plot of diff_score\n\t\tgroup.dom.read_names_g = group.dom.leftg.append('g') // For storing read names\n\t\tgroup.dom.diff_score_barplot_fullstack = group.dom.diff_score_g\n\t\t\t.append('image')\n\t\t\t.attr('xlink:href', gd.diff_scores_img.src)\n\t\t\t.attr('width', gd.diff_scores_img.width)\n\t\t\t.attr('height', gd.diff_scores_img.height)\n\t\tgroup.dom.diff_score_barplot_partstack = group.dom.diff_score_g\n\t\t\t.append('image')\n\t\t\t.attr('xlink:href', gd.diff_scores_img.src)\n\t\t\t.attr('width', 0)\n\t\t\t.attr('height', 0)\n\n\t\tif (!group.allowpartstack && !Number.isFinite(tk.max_diff_score) && tk.variants) {\n\t\t\t// Set max and min diff_score in full stack mode\n\t\t\ttk.max_diff_score = data.max_diff_score\n\t\t\ttk.min_diff_score = data.min_diff_score\n\t\t}\n\n\t\tlet diff_score_height = tk.pileupheight + tk.dom.variantrowheight * 2\n\n\t\tif (tk.toomanyreads) {\n\t\t\t// When reads are downsampled a new row is created, therefore an additional row is needed, so the diff_score_axis needs to be pushed one row down so that it does not overlap with \"Diff Score\" text\n\t\t\tdiff_score_height = tk.pileupheight + tk.dom.variantrowheight * 3\n\t\t}\n\n\t\t//const axis = axisTop()\n\t\t//\t.tickValues([tk.min_diff_score, tk.max_diff_score])\n\t\t//\t.scale(scaleLinear().domain([tk.min_diff_score, tk.max_diff_score]).range([0, gd.diff_scores_img.width]))\n\t\t//axisstyle({\n\t\t//\taxis: tk.dom.diff_score_axis\n\t\t//\t\t.transition()\n\t\t//\t\t.attr('transform', 'translate(' + 0 + ',' + diff_score_height + ')')\n\t\t//\t\t.call(axis),\n\t\t//\tcolor: 'black',\n\t\t//\tshowline: true,\n\t\t//})\n\t}\n\n\tgroup.dom.img_fullstack = group.dom.imgg\n\t\t.append('image')\n\t\t.attr('xlink:href', group.data.src)\n\t\t.attr('width', group.data.width)\n\t\t.attr('height', group.data.height)\n\tgroup.dom.img_partstack = group.dom.imgg.append('image').attr('width', 0).attr('height', 0)\n\n\t// put flyers behind cover\n\tgroup.dom.box_move = group.dom.imgg.append('rect').attr('stroke', 'black').attr('fill', 'none')\n\tgroup.dom.box_stay = group.dom.imgg.append('rect').attr('stroke', 'magenta').attr('fill', 'none')\n\n\tlet mousedownx // not to trigger clicking after press and drag on a read\n\tconst left_margin = tk.regions[0].x\n\tconst right_margin = tk.regions[tk.regions.length - 1].x + tk.regions[tk.regions.length - 1].width\n\tgroup.dom.img_cover = group.dom.imgg\n\t\t.append('rect')\n\t\t.attr('fill', 'white')\n\t\t.attr('fill-opacity', 0)\n\t\t.attr('width', group.data.width)\n\t\t.attr('height', group.data.height)\n\t\t.on('mousedown', event => {\n\t\t\tmousedownx = event.clientX\n\t\t})\n\t\t.on('mousemove', event => {\n\t\t\tif (group.data.allowpartstack) {\n\t\t\t\t// TODO expand dom.box_move with full width and height to cover minimum expandable reads\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!group.data.templatebox) return\n\t\t\tconst [mx, my] = pointer(event, group.dom.img_cover.node())\n\t\t\tlet read_number = 0\n\t\t\tfor (const t of group.data.templatebox) {\n\t\t\t\tread_number += 1\n\t\t\t\tconst bx1 = Math.max(t.x1, left_margin)\n\t\t\t\tconst bx2 = Math.min(t.x2, right_margin)\n\t\t\t\t//const bx1 = Math.max(tk.regions[region_idx].x, t.x1)\n\t\t\t\t//const bx2 = Math.min(tk.regions[region_idx].x + tk.regions[region_idx].width, t.x2)\n\t\t\t\tif (mx > bx1 && mx < bx2 && my > t.y1 && my < t.y2) {\n\t\t\t\t\tgroup.dom.box_move\n\t\t\t\t\t\t.attr('width', bx2 - bx1)\n\t\t\t\t\t\t.attr('height', t.y2 - t.y1)\n\t\t\t\t\t\t.attr('transform', 'translate(' + bx1 + ',' + t.y1 + ')')\n\t\t\t\t\tif (tk.readAlignmentTable && tk.readAlignmentTableGroup == group.data.type) {\n\t\t\t\t\t\t// Checking to see if the group being hovered over is the same as that whose reads have been realigned\n\t\t\t\t\t\tupdateExistingMultiReadAligInfo(tk, read_number)\n\t\t\t\t\t} else if (tk.readAlignmentTable && tk.readAlignmentTableGroup != group.data.type) {\n\t\t\t\t\t\t// Checking to see if the group being hovered over is the same as that whose reads have been realigned. In this case it is not, so removing the yellow highlighting and bolding of text from the read that was previously being highlighted.\n\t\t\t\t\t\t// NOTE: This logic does not work if adjoining group has lot of reads and requires partstack mode to view it. In that case the hover function does not work.\n\t\t\t\t\t\tupdateExistingMultiReadAligInfo(tk, group.data.templatebox.length + 10) // Adding an arbitary number so that read_number never matches and all reads turn white\n\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\t.on('click', event => {\n\t\t\tif (mousedownx != event.clientX) return\n\t\t\tconst [mx, my] = pointer(event, group.dom.img_cover.node())\n\t\t\tgroup.my_partstack = my // Stores y-position of the mouse click in group\n\t\t\tif (group.data.allowpartstack) {\n\t\t\t\tenter_partstack(group, tk, block, my, data)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!group.data.templatebox) return\n\n\t\t\t// prepare to show read detail. find the read at click position\n\t\t\t// read panel is always wide (reads are long). show at a fix pos on left\n\t\t\ttk.readMenu.clear().show(50, event.clientY)\n\t\t\tlet readNotShown = true\n\n\t\t\tfor (let region_idx = 0; region_idx < tk.regions.length; region_idx += 1) {\n\t\t\t\tfor (const t of group.data.templatebox) {\n\t\t\t\t\tconst cx1 = Math.max(t.x1, left_margin)\n\t\t\t\t\tconst cx2 = Math.min(t.x2, right_margin)\n\t\t\t\t\tconst bx1 = Math.max(tk.regions[region_idx].x, t.x1)\n\t\t\t\t\tconst bx2 = Math.min(tk.regions[region_idx].x + tk.regions[region_idx].width, t.x2)\n\t\t\t\t\tif (mx > bx1 && mx < bx2 && my > t.y1 && my < t.y2) {\n\t\t\t\t\t\tif (group.clickedtemplate && group.clickedtemplate.qname == t.qname) {\n\t\t\t\t\t\t\t// same template\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttk.asPaired ||\n\t\t\t\t\t\t\t\t(t.isfirst && group.clickedtemplate.isfirst) ||\n\t\t\t\t\t\t\t\t(t.islast && group.clickedtemplate.islast)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// paired mode\n\t\t\t\t\t\t\t\t// or single mode and correct read\n\t\t\t\t\t\t\t\t// box under cursor is highlighted, cancel\n\t\t\t\t\t\t\t\tdelete group.clickedtemplate\n\t\t\t\t\t\t\t\tgroup.dom.box_stay.attr('width', 0)\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\n\t\t\t\t\t\t// a different template or different read from the same template\n\t\t\t\t\t\t// overwrite\n\t\t\t\t\t\tgroup.clickedtemplate = {\n\t\t\t\t\t\t\tqname: t.qname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tk.asPaired) {\n\t\t\t\t\t\t\tgroup.clickedtemplate.isfirst = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (t.isfirst) group.clickedtemplate.isfirst = true\n\t\t\t\t\t\t\tif (t.islast) group.clickedtemplate.islast = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgroup.dom.box_stay\n\t\t\t\t\t\t\t.attr('width', cx2 - cx1)\n\t\t\t\t\t\t\t.attr('height', t.y2 - t.y1)\n\t\t\t\t\t\t\t.attr('transform', 'translate(' + cx1 + ',' + t.y1 + ')')\n\t\t\t\t\t\tgetReadInfo(tk, block, t, region_idx)\n\t\t\t\t\t\treadNotShown = false\n\t\t\t\t\t}\n\t\t\t\t\t// must not return here because ...\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (readNotShown) tk.readMenu.hide() // possible if clicked on white space of img where there's no read\n\t\t})\n\n\tgroup.dom.rightg.vslider.bar = group.dom.rightg.vslider.g\n\t\t.append('rect')\n\t\t.attr('fill', slider_rail_color)\n\t\t.attr('x', 10)\n\t\t.attr('width', 20)\n\t\t.on('mouseover', () => group.dom.rightg.vslider.bar.attr('fill', '#fae8e8'))\n\t\t.on('mouseout', () => group.dom.rightg.vslider.bar.attr('fill', slider_rail_color))\n\t\t.on('click', () => {\n\t\t\tdelete group.dom.rightg.vslider.boxy\n\t\t\tdelete group.partstack\n\t\t\tif (group.my_partstack) {\n\t\t\t\tdelete group.my_partstack // y-position of click that invoked partstack originally\n\t\t\t}\n\t\t\tgroup.ReadNameMaxwidth = 0\n\t\t\tgroup.data = group.data_fullstack\n\t\t\trenderGroup(group, tk, block)\n\t\t\tsetTkHeight(tk)\n\t\t\tblock.block_setheight()\n\t\t})\n\tgroup.dom.rightg.vslider.boxg = group.dom.rightg.vslider.g.append('g')\n\tgroup.dom.rightg.vslider.box = group.dom.rightg.vslider.boxg\n\t\t.append('rect')\n\t\t.attr('fill', slider_color)\n\t\t.attr('width', 40)\n\t\t.on('mousedown', event => {\n\t\t\tevent.preventDefault()\n\t\t\tgroup.dom.rightg.vslider.box.attr('fill', slider_color_dark)\n\t\t\tconst scrollableheight = group.data.height\n\t\t\tconst y0 = event.clientY\n\t\t\tlet deltay = 0\n\t\t\tconst b = d3select(document.body)\n\t\t\tb.on('mousemove', event => {\n\t\t\t\tconst y1 = event.clientY\n\t\t\t\tconst d = y1 - y0\n\t\t\t\tif (d < 0) {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxy + d <= 0) return\n\t\t\t\t} else {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxy + d >= scrollableheight - group.dom.rightg.vslider.boxh) return\n\t\t\t\t}\n\t\t\t\tdeltay = d\n\t\t\t\tif (tk.variants) {\n\t\t\t\t\tgroup.dom.diff_score_barplot_partstack.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t'translate(0,' +\n\t\t\t\t\t\t\t((-1 * deltay * group.data_fullstack.stackcount * group.data.stackheight) / scrollableheight +\n\t\t\t\t\t\t\t\tgroup.msgheight) +\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t)\n\n\t\t\t\t\tgroup.dom.read_names_g.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t'translate(0,' +\n\t\t\t\t\t\t\t(-1 * deltay * group.data_fullstack.stackcount * group.data.stackheight) / scrollableheight +\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tgroup.dom.rightg.vslider.boxg.attr('transform', 'translate(0,' + (group.dom.rightg.vslider.boxy + deltay) + ')')\n\t\t\t\tgroup.dom.img_partstack.attr(\n\t\t\t\t\t'y',\n\t\t\t\t\t-((deltay * group.data_fullstack.stackcount * group.data.stackheight) / scrollableheight)\n\t\t\t\t)\n\t\t\t\tgroup.dom.box_move.attr('width', 0)\n\t\t\t\tgroup.dom.box_stay.attr('width', 0)\n\t\t\t})\n\t\t\tb.on('mouseup', async () => {\n\t\t\t\tgroup.dom.rightg.vslider.box.attr('fill', slider_color)\n\t\t\t\tb.on('mousemove', null).on('mouseup', null)\n\t\t\t\tif (deltay == 0) return\n\t\t\t\tgroup.dom.rightg.vslider.boxy += deltay\n\t\t\t\tconst delta = Math.ceil((group.data_fullstack.stackcount * deltay) / scrollableheight)\n\t\t\t\tgroup.partstack.start += delta\n\t\t\t\tgroup.partstack.stop += delta\n\t\t\t\tblock.tkcloakon(tk)\n\t\t\t\tconst _d = await getData(tk, block, {\n\t\t\t\t\tstackstart: group.partstack.start,\n\t\t\t\t\tstackstop: group.partstack.stop,\n\t\t\t\t\tgrouptype: group.data.type\n\t\t\t\t})\n\t\t\t\tgroup.data = _d.groups[0]\n\t\t\t\trenderGroup(group, tk, block)\n\t\t\t\tsetTkHeight(tk)\n\t\t\t\tblock.tkcloakoff(tk, {})\n\t\t\t\tblock.block_setheight()\n\t\t\t})\n\t\t})\n\n\tgroup.dom.rightg.vslider.boxtopline = group.dom.rightg.vslider.boxg\n\t\t.append('line')\n\t\t.attr('stroke', slider_color_dark)\n\t\t.attr('stroke-width', 3)\n\t\t.attr('x2', 40)\n\t\t.on('mouseover', () => group.dom.rightg.vslider.boxtopline.attr('stroke', slider_color_dark_line))\n\t\t.on('mouseout', () => group.dom.rightg.vslider.boxtopline.attr('stroke', slider_color_dark))\n\t\t.on('mousedown', event => {\n\t\t\tevent.preventDefault()\n\t\t\tconst scrollableheight = group.data.height\n\t\t\tconst y0 = event.clientY\n\t\t\tlet deltay = 0\n\t\t\tconst b = d3select(document.body)\n\t\t\tb.on('mousemove', event => {\n\t\t\t\tconst y1 = event.clientY\n\t\t\t\tconst d = y1 - y0\n\t\t\t\tif (d < 0) {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxy + d <= 0) return\n\t\t\t\t} else {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxh - d <= (stackpagesize * scrollableheight) / group.data_fullstack.stackcount)\n\t\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdeltay = d\n\t\t\t\tgroup.dom.rightg.vslider.boxg.attr('transform', 'translate(0,' + (group.dom.rightg.vslider.boxy + deltay) + ')')\n\t\t\t\tgroup.dom.rightg.vslider.box.attr('height', group.dom.rightg.vslider.boxh - deltay)\n\t\t\t\tgroup.dom.rightg.vslider.boxbotline\n\t\t\t\t\t.attr('y1', group.dom.rightg.vslider.boxh - deltay)\n\t\t\t\t\t.attr('y2', group.dom.rightg.vslider.boxh - deltay)\n\t\t\t})\n\t\t\tb.on('mouseup', async () => {\n\t\t\t\tb.on('mousemove', null).on('mouseup', null)\n\t\t\t\tif (deltay == 0) return\n\t\t\t\tgroup.dom.rightg.vslider.boxy += deltay\n\t\t\t\tgroup.partstack.start += Math.ceil((group.data_fullstack.stackcount * deltay) / scrollableheight)\n\t\t\t\tblock.tkcloakon(tk)\n\t\t\t\tconst _d = await getData(tk, block, {\n\t\t\t\t\tstackstart: group.partstack.start,\n\t\t\t\t\tstackstop: group.partstack.stop,\n\t\t\t\t\tgrouptype: group.data.type\n\t\t\t\t})\n\t\t\t\tgroup.data = _d.groups[0]\n\t\t\t\trenderGroup(group, tk, block)\n\t\t\t\tblock.tkcloakoff(tk, {})\n\t\t\t\tsetTkHeight(tk)\n\t\t\t\tblock.block_setheight()\n\t\t\t})\n\t\t})\n\tgroup.dom.rightg.vslider.boxbotline = group.dom.rightg.vslider.boxg\n\t\t.append('line')\n\t\t.attr('stroke', slider_color_dark)\n\t\t.attr('stroke-width', 3)\n\t\t.attr('x2', 40)\n\t\t.on('mouseover', () => group.dom.rightg.vslider.boxbotline.attr('stroke', slider_color_dark_line))\n\t\t.on('mouseout', () => group.dom.rightg.vslider.boxbotline.attr('stroke', slider_color_dark))\n\t\t.on('mousedown', event => {\n\t\t\tevent.preventDefault()\n\t\t\tconst scrollableheight = group.data.height\n\t\t\tconst y0 = event.clientY\n\t\t\tlet deltay = 0\n\t\t\tconst b = d3select(document.body)\n\t\t\tb.on('mousemove', event => {\n\t\t\t\tconst y1 = event.clientY\n\t\t\t\tconst d = y1 - y0\n\t\t\t\tif (d < 0) {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxh + d <= (stackpagesize * scrollableheight) / group.data_fullstack.stackcount)\n\t\t\t\t\t\treturn\n\t\t\t\t} else {\n\t\t\t\t\tif (group.dom.rightg.vslider.boxy + d >= scrollableheight - group.dom.rightg.vslider.boxh) return\n\t\t\t\t}\n\t\t\t\tdeltay = d\n\t\t\t\tgroup.dom.rightg.vslider.box.attr('height', group.dom.rightg.vslider.boxh + deltay)\n\t\t\t\tgroup.dom.rightg.vslider.boxbotline\n\t\t\t\t\t.attr('y1', group.dom.rightg.vslider.boxh + deltay)\n\t\t\t\t\t.attr('y2', group.dom.rightg.vslider.boxh + deltay)\n\t\t\t})\n\t\t\tb.on('mouseup', async () => {\n\t\t\t\tb.on('mousemove', null).on('mouseup', null)\n\t\t\t\tif (deltay == 0) return\n\t\t\t\tgroup.dom.rightg.vslider.boxh += deltay\n\t\t\t\tgroup.partstack.stop += Math.ceil((group.data_fullstack.stackcount * deltay) / scrollableheight)\n\t\t\t\tblock.tkcloakon(tk)\n\t\t\t\tconst _d = await getData(tk, block, {\n\t\t\t\t\tstackstart: group.partstack.start,\n\t\t\t\t\tstackstop: group.partstack.stop,\n\t\t\t\t\tgrouptype: group.data.type\n\t\t\t\t})\n\t\t\t\tgroup.data = _d.groups[0]\n\t\t\t\trenderGroup(group, tk, block)\n\t\t\t\tsetTkHeight(tk)\n\t\t\t\tblock.tkcloakoff(tk, {})\n\t\t\t\tblock.block_setheight()\n\t\t\t})\n\t\t})\n\n\treturn group\n}\n\nasync function align_reads_to_allele(tk, group, block) {\n\t// Read alignment against allele is only done when tk.variants is defined\n\tconst body = {\n\t\talignOneGroup: group.data.type,\n\t\tgenome: block.genome.name,\n\t\trglst: tk.regions,\n\t\tvariant: tk.variants.map(m => m.chr + '.' + m.pos + '.' + m.ref + '.' + m.alt).join('.')\n\t}\n\tif (tk.file) body.file = tk.file\n\tif (tk.url) body.url = tk.url\n\tif (tk.indexURL) body.indexURL = tk.indexURL\n\tif (tk.gdcFile) {\n\t\tbody.gdcFileUUID = tk.gdcFile.uuid\n\t\tbody.gdcFilePosition = tk.gdcFile.position\n\t}\n\tif (tk.alleleAlreadyUpdated) {\n\t\t// This should always be true when this function is invoked, but adding this if condition for safety sake\n\t\tbody.alleleAlreadyUpdated = 1\n\t\tbody.refseqs = tk.variants.refseqs\n\t\tbody.altseqs = tk.variants.altseqs\n\t\tbody.refalleles = tk.variants.refalleles\n\t\tbody.altalleles = tk.variants.altalleles\n\t\tbody.leftflankseqs = tk.variants.leftflankseqs\n\t\tbody.rightflankseqs = tk.variants.rightflankseqs\n\t\tbody.ref_positions = tk.variants.ref_positions\n\t\tbody.strictness = tk.strictness\n\t}\n\tif (tk.asPaired) body.asPaired = 1\n\tif ('nochr' in tk) body.nochr = tk.nochr\n\tif (tk.drop_pcrduplicates) body.drop_pcrduplicates = 1\n\tif (tk.drop_supplementary_alignments) body.drop_supplementary_alignments = 1\n\tif (group.partstack) {\n\t\tbody.stackstart = group.partstack.start\n\t\tbody.stackstop = group.partstack.stop\n\t\tbody.grouptype = group.data.type\n\t}\n\treturn await dofetch3('tkbam', { headers: getHeaders(tk), body })\n}\n\nfunction getHeaders(tk) {\n\tconst headers = { 'Content-Type': 'application/json', Accept: 'application/json' }\n\tif (tk.gdcToken) headers['X-Auth-Token'] = tk.gdcToken\n\treturn headers\n}\n\nfunction configPanel(tk, block) {\n\t{\n\t\t// panel is very wide so shift it to left\n\t\tconst b = tk.config_handle.node().getBoundingClientRect()\n\t\ttk.tkconfigtip.clear().show(b.x - 300, b.y)\n\t}\n\tconst d = tk.tkconfigtip.d.append('div').style('max-width', '50vw')\n\n\t{\n\t\tconst row = d.append('div')\n\t\trow.append('span').html('Show reads as: ').style('opacity', 0.5).style('margin', '10px 5px')\n\t\tmake_radios({\n\t\t\tholder: row,\n\t\t\toptions: [\n\t\t\t\t{ label: 'Single', value: false, checked: !tk.asPaired },\n\t\t\t\t{ label: 'Paired', value: true, checked: tk.asPaired }\n\t\t\t],\n\t\t\tstyles: { margin: '10px 5px' },\n\t\t\tcallback: v => {\n\t\t\t\ttk.asPaired = v\n\t\t\t\tloadTk(tk, block)\n\t\t\t}\n\t\t})\n\t}\n\t{\n\t\tmake_one_checkbox({\n\t\t\tholder: d.append('div'),\n\t\t\tlabeltext: 'Drop PCR or optical duplicates',\n\t\t\tchecked: tk.drop_pcrduplicates,\n\t\t\tdivstyle: { display: 'block', margin: '10px 5px', height: '10px', 'margin-left': '6.5px' },\n\t\t\tcallback: () => {\n\t\t\t\ttk.drop_pcrduplicates = !tk.drop_pcrduplicates\n\t\t\t\tloadTk(tk, block)\n\t\t\t}\n\t\t})\n\t}\n\t// Can uncomment this later after testing with a suitable example\n\n\t//{\n\t//\tmake_one_checkbox({\n\t//\t\tholder: d.append('div'),\n\t//\t\tlabeltext: 'Drop supplementary alignments',\n\t//\t\tchecked: tk.drop_supplementary_alignments,\n\t//\t\tdivstyle: { display: 'block', margin: '10px 5px', height: '10px', 'margin-left': '6.5px' },\n\t//\t\tcallback: () => {\n\t//\t\t\ttk.drop_supplementary_alignments = !tk.drop_supplementary_alignments\n\t//\t\t\tloadTk(tk, block)\n\t//\t\t}\n\t//\t})\n\t//}\n\tif (tk.variants) {\n\t\tmake_one_checkbox({\n\t\t\tholder: d.append('div'),\n\t\t\tlabeltext: 'Show read names',\n\t\t\tchecked: tk.show_readnames,\n\t\t\tdivstyle: { display: 'block', margin: '10px 5px', height: '10px', 'margin-left': '6.5px' },\n\t\t\tcallback: () => {\n\t\t\t\ttk.show_readnames = !tk.show_readnames\n\t\t\t\tloadTk(tk, block)\n\t\t\t}\n\t\t})\n\n\t\tif (tk.variants[0].strictness == 0) {\n\t\t\t// When stricness = 0, tk.variants[0].strictness is false. So need to handle this case separately\n\t\t} else if (!tk.variants[0].strictness) {\n\t\t\t// When using example.bam.indel.html the strictness value is not defined. In such cases using a default value of strictness = 1.\n\t\t\ttk.variants[0].strictness = 1\n\t\t}\n\t\tconst row = d.append('div')\n\t\trow\n\t\t\t.append('span')\n\t\t\t.html('Strictness: ')\n\t\t\t.style('display', 'block')\n\t\t\t.style('height', '10px')\n\t\t\t.style('opacity', 0.5)\n\t\t\t.style('margin', '10px 5px')\n\t\t\t.style('margin-top', '20px')\n\t\tmake_radios({\n\t\t\tholder: row,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lenient: \"None group\" is not generated.',\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tchecked: tk.strictness == 0\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel:\n\t\t\t\t\t\t'Strict: \"None group\" is generated for reads with imperfect match to both reference and alternative alleles.',\n\t\t\t\t\tvalue: 1,\n\t\t\t\t\tchecked: tk.strictness == 1\n\t\t\t\t}\n\t\t\t],\n\t\t\tstyles: { display: 'block', margin: '10px 5px', height: '10px', 'margin-left': '30px' },\n\t\t\tcallback: v => {\n\t\t\t\ttk.strictness = v\n\t\t\t\tloadTk(tk, block)\n\t\t\t}\n\t\t})\n\t}\n\n\td\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.style('height', '10px')\n\t\t.style('margin-top', '20px')\n\t\t.style('font-size', '.8em').html(`\n\t<ul style=\"padding-left:15px\">\n\t <li><b>Matches</b> are rendered as gray boxes aligned to the reference.</li>\n\t <li><b>Mismatches</b> will be checked when 1 bp is wider than 1 pixel, and are rendered as red boxes aligned to the reference.</li>\n\t <li><b>Softclips</b> are rendered as blue boxes not aligned to the reference.</li>\n\t <li><b>Base qualities</b> are rendered when 1 bp is wider than 2 pixels. See color scale below. When base quality is not used or is unavailable, full colors are used.</li>\n\t <li><b>Sequences</b> from mismatch and softclip will be printed when 1 bp is wider than 7 pixels.</li>\n\t <li>An <b>insertion</b> with on-screen size wider than 1 pixel will be rendered as cyan text between aligned bases, in either a letter or the number of inserted bp. Text color scales by average base quality when that is in use.</li>\n\t <li><b>Deletions</b> are gaps joined by black horizontal lines.</li>\n\t <li><b>Split reads</b> and splice junctions are indicated by solid gray lines.</li>\n\t <li><b>Read pairs</b> are joined by dashed gray lines.</li>\n <li><b>Discordant reads</b> Discordant reads are colored based on their respective features as described below:<ul style=\"list-style-type:none;\"> <li> <svg width=\"10\" height=\"10\" style = \"display:inline-block;\"> <rect width=\"10\" height=\"10\" style=\"fill:#3B7A57;\" /> </svg> Read pair has wrong insert size </li> <li> <svg width=\"10\" height=\"10\" style = \"display:inline-block;\"> <rect width=\"10\" height=\"10\" style=\"fill:#6B4423;\" /> </svg> Mate is unmapped </li> <li> <svg width=\"10\" height=\"10\" style = \"display:inline-block;\"> <rect width=\"10\" height=\"10\" style=\"fill:#fc6df3;\" /> </svg> Wrong orientation </li> <li> <svg width=\"10\" height=\"10\" style = \"display:inline-block;\"> <rect width=\"10\" height=\"10\" style=\"fill:#d48b37;\" /> </svg> Mate mapped to different chromosome </li> </ul>\n </li> \n\t</ul>`)\n\td.append('div')\n\t\t.style('margin-top', '10px')\n\t\t.append('img')\n\t\t.attr('width', tk.colorscale.width)\n\t\t.attr('height', tk.colorscale.height)\n\t\t.attr('src', tk.colorscale.src)\n\td.append('div').style('font-size', '.8em').html(`\n`)\n}\n\n/*\nget info for a read/template\nif is single mode, will be single read and with first/last info\nif is pair mode, is the template\nbox{}\n qname, start, stop\n*/\n\nfunction click_groupheader(tk, group, block) {\n\tif (tk.variants) {\n\t\tclick_groupheader_showMultiReadAlign(tk, group, block)\n\t}\n}\n\nfunction updateExistingMultiReadAligInfo(tk, read_number) {\n\tconst rows = tk.readAlignmentTable._groups[0][0].querySelectorAll('tr')\n\trows.forEach(row => {\n\t\tif (row.rowIndex == read_number + 1 && !tk.is_align_gene) {\n\t\t\t// 1 is added because the top in the HTML table consists of the variant box. So read index in the actual bam track is equal to read_number + 1 in the realignment panel\n\t\t\trow.style.setProperty('font-weight', 'bold')\n\t\t\tconst cols = row.querySelectorAll('td')\n\t\t\tcols.forEach(col => {\n\t\t\t\tif (col.style.backgroundColor.toString() == 'rgb(255, 255, 255)') {\n\t\t\t\t\tcol.style.setProperty('background-color', 'yellow')\n\t\t\t\t}\n\t\t\t})\n\t\t} else if (row.rowIndex == read_number + 2 && tk.is_align_gene) {\n\t\t\t// 2 is added because the top in the HTML table consists of the variant box. In addition, when gene models are displayed after the reference/alternate sequence, the read index in the actual bam track is equal to read_number + 2 in the realignment panel\n\t\t\trow.style.setProperty('font-weight', 'bold')\n\t\t\tconst cols = row.querySelectorAll('td')\n\t\t\tcols.forEach(col => {\n\t\t\t\tif (col.style.backgroundColor.toString() == 'rgb(255, 255, 255)') {\n\t\t\t\t\tcol.style.setProperty('background-color', 'yellow')\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\t// When read_number does not match rowIndex then the background color for each cells in the row is turned to white\n\t\t\trow.style.setProperty('font-weight', 'normal')\n\t\t\tconst cols = row.querySelectorAll('td')\n\t\t\tcols.forEach(col => {\n\t\t\t\tif (col.style.backgroundColor.toString() == 'yellow') {\n\t\t\t\t\tcol.style.setProperty('background-color', 'rgb(255, 255, 255)')\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nasync function create_gene_models_refalt(tk, block, multi_read_alig_data, group, alt_var_idx) {\n\t// Function to display gene models in the multi read alignment info panel\n\t// This function parses through the alternate/reference sequence and looks for gaps. At each of these gaps it ends existing gene model, renders it puts a gap and then starts the next gene model. At the end of the sequence, it finishes current model and renders it\n\n\tconst gene_model_images = [] // This array stores the gene model images, width and height of the gene model\n\tconst break_points = [] // This array stores the length of break points in case of breaks outside variant region (\"-\") or the variant (if its an insertion)\n\tconst gene_model_order = [] // This array stores the order of gene models and breaks as needed from the left\n\t// Determine breaks in reference/alternate sequence (if gene model button is clicked)\n\tlet refalt_seq = multi_read_alig_data.alignmentData.final_read_align[0]\n\tlet left_most_pos = tk.variants[0].pos - tk.variants.leftflankseqs[0].length\n\tlet right_most_pos = tk.variants[0].pos + tk.variants.rightflankseqs[0].length\n\n\tif (group.data.type == 'support_alt' + alt_var_idx.toString()) {\n\t\tleft_most_pos = tk.variants[alt_var_idx].pos - tk.variants.leftflankseqs[alt_var_idx].length\n\t\tright_most_pos = tk.variants[alt_var_idx].pos + tk.variants.rightflankseqs[alt_var_idx].length\n\t}\n\n\tlet segstart = left_most_pos // This variable stores the left most position of a segment (spliced unit) of reference/alternate sequence, the first segment is initialized to the left most position of the reference/alternate sequence\n\tlet segstop = left_most_pos // This variable stores the right most position of a segment (spliced unit) of reference/alternate sequence\n\tlet local_alignment_width = 0 // This variable stores the width of each gene model that needs to be rendered using bedj track\n\tlet first_row = tk.readAlignmentTable.node().children[0]\n\tlet gm_nuc_count = 0\n\tlet prev_nclt_not_blank = false // Flag to store if previous nucleotide is \"-\"\n\tlet nclt_count = 0\n\tfor (const nclt of refalt_seq) {\n\t\tif (nclt == '-') {\n\t\t\t// Checks for breaks in ref/alt sequence other than variant of interest\n\t\t\tif (prev_nclt_not_blank == true) {\n\t\t\t\t// Flag to check if previous nucleotide is \"-\", if yes no gene model is rendered\n\t\t\t\tbreak_points.push(1)\n\t\t\t\tgene_model_order.push('break')\n\t\t\t\tsegstart += 1\n\t\t\t\tsegstop += 1\n\t\t\t} else {\n\t\t\t\t// Break in reference/alternate sequence caused by a read(s), will invoke a bedj request here\n\n\t\t\t\tconst gene_model_image = await get_gene_models_refalt(block, tk, segstart, segstop - 1, local_alignment_width) // Send bedj server side request to render gene model for this segment\n\t\t\t\tconst gm = {\n\t\t\t\t\tsrc: gene_model_image.src,\n\t\t\t\t\twidth: local_alignment_width,\n\t\t\t\t\theight: gene_model_image.height,\n\t\t\t\t\tcolspan: gm_nuc_count\n\t\t\t\t}\n\t\t\t\tgene_model_images.push(gm)\n\t\t\t\tgene_model_order.push('gene_model')\n\t\t\t\tgm_nuc_count = 0\n\t\t\t\tsegstart = left_most_pos + nclt_count + 1\n\t\t\t\tsegstop = left_most_pos + nclt_count + 1\n\t\t\t\tlocal_alignment_width = 0\n\t\t\t\tprev_nclt_not_blank = true\n\t\t\t\tbreak_points.push(1)\n\t\t\t\tgene_model_order.push('break')\n\t\t\t}\n\t\t\tgm_nuc_count += 1\n\t\t\tlocal_alignment_width += first_row.children[nclt_count].getBoundingClientRect().width\n\t\t} else if (\n\t\t\tgroup.data.type == 'support_alt' + alt_var_idx.toString() &&\n\t\t\ttk.variants[alt_var_idx].alt.length > tk.variants[alt_var_idx].ref.length && // Insertion case\n\t\t\ttk.variants[alt_var_idx].pos < left_most_pos + nclt_count &&\n\t\t\ttk.variants[alt_var_idx].pos + tk.variants[alt_var_idx].alt.length - 1 >= left_most_pos + nclt_count // Subtracting 1 here because by convention the first nucleotide in alternate allele is the last nucleotide in reference sequence after which the indel starts\n\t\t) {\n\t\t\t// Ignores inserted nucleotides (if an insertion) as no gene model can be rendered for it\n\t\t} else if (\n\t\t\ttk.variants[0].pos == left_most_pos + nclt_count &&\n\t\t\tgroup.data.type == 'support_alt' + alt_var_idx.toString()\n\t\t) {\n\t\t\t// Variant causes break in gene model but only if the alternate allele is being displayed\n\t\t\tif (tk.variants[alt_var_idx].ref.length == 1 && tk.variants[alt_var_idx].alt.length == 1) {\n\t\t\t\t// In case of SNP no break in gene model is necessary\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (tk.variants[alt_var_idx].ref.length >= tk.variants[alt_var_idx].alt.length) {\n\t\t\t\tsegstop += 1\n\t\t\t\tgm_nuc_count += 1\n\t\t\t\tlocal_alignment_width += first_row.children[nclt_count + 1].getBoundingClientRect().width\n\t\t\t}\n\t\t\tconst gene_model_image = await get_gene_models_refalt(block, tk, segstart, segstop, local_alignment_width) // Send bedj client request to render gene model for this segment\n\t\t\tconst gm = {\n\t\t\t\tsrc: gene_model_image.src,\n\t\t\t\twidth: local_alignment_width,\n\t\t\t\theight: gene_model_image.height,\n\t\t\t\tcolspan: gm_nuc_count\n\t\t\t}\n\t\t\tgene_model_images.push(gm)\n\t\t\tgene_model_order.push('gene_model')\n\t\t\tgm_nuc_count = 0\n\t\t\tsegstart = left_most_pos + nclt_count + tk.variants[alt_var_idx].ref.length\n\t\t\tsegstop = left_most_pos + nclt_count + tk.variants[alt_var_idx].ref.length\n\t\t\tif (tk.variants[alt_var_idx].ref.length < tk.variants[alt_var_idx].alt.length) {\n\t\t\t\t// Break point in variant region only in case of an insertion\n\t\t\t\tbreak_points.push(tk.variants[0].alt.length)\n\t\t\t\tgene_model_order.push('break')\n\t\t\t}\n\t\t\tlocal_alignment_width = 0\n\t\t\tprev_nclt_not_blank = false\n\t\t} else if (nclt_count == refalt_seq.length - 1) {\n\t\t\t// When last nucleotide of reference/alternate sequence is parsed, rendering of gene model is invoked\n\t\t\tsegstop += 1\n\t\t\tgm_nuc_count += 1\n\t\t\tlocal_alignment_width += first_row.children[nclt_count].getBoundingClientRect().width\n\t\t\t//console.log('nclt_count3:', nclt_count)\n\t\t\t//console.log('segstart3:', segstart)\n\t\t\t//console.log('segstop3:', segstop)\n\t\t\t//console.log('gm_nuc_count3:', gm_nuc_count)\n\t\t\t//console.log('local_alignment_width3:', local_alignment_width)\n\t\t\tconst gene_model_image = await get_gene_models_refalt(block, tk, segstart, segstop, local_alignment_width) // Send bedj client request to render gene model for this segment\n\t\t\tconst gm = {\n\t\t\t\tsrc: gene_model_image.src,\n\t\t\t\twidth: local_alignment_width,\n\t\t\t\theight: gene_model_image.height,\n\t\t\t\tcolspan: gm_nuc_count\n\t\t\t}\n\t\t\tgene_model_images.push(gm)\n\t\t\tgene_model_order.push('gene_model')\n\t\t} else {\n\t\t\t// For all other positions the stop position, number of nucleotides and width of gene model will be incremented\n\t\t\tsegstop += 1\n\t\t\tgm_nuc_count += 1\n\t\t\tlocal_alignment_width += first_row.children[nclt_count].getBoundingClientRect().width\n\t\t\t//console.log('nclt:', nclt)\n\t\t\t//console.log('segstop:', segstop)\n\t\t\t//console.log('gm_nuc_count:', gm_nuc_count)\n\t\t\t//console.log('local_alignment_width:', local_alignment_width)\n\t\t\t//console.log('nclt_count:', nclt_count)\n\t\t\tprev_nclt_not_blank = false\n\t\t}\n\t\tnclt_count += 1\n\t}\n\n\t// Drawing gene models after ref/alt sequence when gene_models button is clicked\n\tlet j = 0\n\tlet k = 0\n\tconst gene_model_tr = tk.readAlignmentTable.node().insertRow()\n\t// Check if there are reads aligned to reference/alternate sequence\n\tif (tk.readAlignmentTable.node().children.length >= 3) {\n\t\t// Ensure that there is atleast one read in the alignment before trying to place the gene model before it (not tested, maybe should not happen at all)\n\t\tconst first_read = tk.readAlignmentTable.node().children[2]\n\t\ttk.readAlignmentTable.node().insertBefore(gene_model_tr, first_read)\n\t} else {\n\t\tconsole.log('Possible problem in placing gene model in table. Please check')\n\t}\n\tfor (let i = 0; i < gene_model_order.length; i++) {\n\t\tconst gene_models_cell = gene_model_tr.insertCell()\n\t\tif (gene_model_order[i] == 'gene_model') {\n\t\t\t// If a gene model, display gene model\n\t\t\t// Render gene model\n\t\t\tconst img = document.createElement('img')\n\t\t\timg.src = gene_model_images[k].src\n\t\t\timg.width = gene_model_images[k].width\n\t\t\timg.height = gene_model_images[k].height\n\t\t\tgene_models_cell.appendChild(img)\n\t\t\tgene_models_cell.colSpan = gene_model_images[k].colspan\n\t\t\tk += 1\n\t\t} else if (gene_model_order[i] == 'break') {\n\t\t\t// Keep it blank, if a break needs to be shown\n\t\t\t// Gap representing '-' or variant (insertion)\n\t\t\tgene_models_cell.colSpan = break_points[j]\n\t\t\tj += 1\n\t\t}\n\t}\n}\n\n// show multi-read alignment panel\nasync function click_groupheader_showMultiReadAlign(tk, group, block) {\n\ttk.multiAlignMenu.clear().show(50, 100) // assuming the panel size will be big, show at fixed location on viewport top\n\tconst wait = tk.multiAlignMenu.d.append('div').text('Loading...')\n\n\ttry {\n\t\tconst data = await align_reads_to_allele(tk, group, block) // Sending server side bam request for aligning reads to ref/alt\n\t\tif (data.error) {\n\t\t\twait.remove()\n\t\t\tsayerror(tk.multiAlignMenu.d, 'Realignment of reads in ambiguous group is not currently implemented.')\n\t\t\tsetTimeout(() => tk.multiAlignMenu.d.remove(), 3000)\n\t\t\treturn\n\t\t}\n\n\t\twait.remove()\n\t\tlet alt_var_idx = 0 // Contains the index of the alternate allele (if queried) of the selected alternate allele\n\t\t// If one of the alternate alles are clicked, determine which alternate allele\n\t\tlet ref_start_stops = []\n\t\tlet highlight_regions_in_refallele = [] // There should always be even number of items in this list as it contains start & stop positions for various regions that need to be highlighted in the reference sequence\n\t\tif (group.data.type.includes('support_alt')) {\n\t\t\tfor (let var_idx = 0; var_idx < tk.variants.length; var_idx++) {\n\t\t\t\tif (group.data.type == 'support_alt' + var_idx.toString()) {\n\t\t\t\t\talt_var_idx = var_idx\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (group.data.type == 'support_ref') {\n\t\t\tfor (let var_idx = 0; var_idx < tk.variants.length; var_idx++) {\n\t\t\t\tref_start_stops.push({\n\t\t\t\t\tstart: tk.variants[var_idx].pos,\n\t\t\t\t\tstop: tk.variants[var_idx].pos + tk.variants[var_idx].ref.length\n\t\t\t\t})\n\t\t\t}\n\t\t\tref_start_stops.sort((i, j) => i.start - j.start)\n\t\t\t// See if any of the ref alleles overlap\n\n\t\t\tlet old_variant = { start: ref_start_stops[0].start, stop: ref_start_stops[0].stop }\n\t\t\thighlight_regions_in_refallele.push(ref_start_stops[0].start)\n\t\t\tlet break_point = false\n\t\t\tfor (let var_idx = 1; var_idx < ref_start_stops.length; var_idx++) {\n\t\t\t\tif (ref_start_stops[var_idx].start <= old_variant.stop && old_variant.stop <= ref_start_stops[var_idx].stop) {\n\t\t\t\t\told_variant = ref_start_stops[var_idx]\n\t\t\t\t} else if (old_variant.stop > ref_start_stops[var_idx].stop) {\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\thighlight_regions_in_refallele.push(old_variant.stop)\n\t\t\t\t\thighlight_regions_in_refallele.push(ref_start_stops[var_idx].start)\n\t\t\t\t}\n\t\t\t}\n\t\t\thighlight_regions_in_refallele.push(Math.max(old_variant.stop, ref_start_stops[ref_start_stops.length - 1].stop))\n\t\t}\n\n\t\tif (\n\t\t\tdata.alignmentData.final_read_align.length > 0 &&\n\t\t\t(group.data.type.includes('support_alt') || group.data.type == 'support_ref')\n\t\t) {\n\t\t\t// Gene models are displayed only if there is a reference/alternate sequence being displayed\n\t\t\tconst gene_button = tk.multiAlignMenu.d\n\t\t\t\t.append('button')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.text('Show gene model')\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\ttk.is_align_gene = true // This flag is set to true so that when the read is hovered, the same read is highlighted in the realignment panel\n\t\t\t\t\tgene_button.property('disabled', true) // disable this button\n\t\t\t\t\tawait create_gene_models_refalt(tk, block, data, group, alt_var_idx)\n\t\t\t\t})\n\t\t}\n\t\tcreate_multi_alignment_table(tk, data, group, alt_var_idx, highlight_regions_in_refallele)\n\t} catch (e) {\n\t\twait.remove()\n\t\tsayerror(tk.multiAlignMenu.d, e)\n\t}\n}\n\nfunction create_multi_alignment_table(tk, multi_read_alig_data, group, alt_var_idx, highlight_regions_in_refallele) {\n\tlet num_read_div\n\tif (!multi_read_alig_data.alignmentData.read_count) {\n\t\t// This condition is true when there are no reads mapped against reference/alternate sequence. This happens when user pans too far away from the variant region\n\t\tmulti_read_alig_data.alignmentData.read_count = 0\n\t}\n\n\tif (group.data.type == 'support_ref') {\n\t\tnum_read_div = tk.multiAlignMenu.d // Printing number of reads aligned in alignment panel\n\t\t\t.append('div')\n\t\t\t.text('Number of reads aligned to reference allele = ' + multi_read_alig_data.alignmentData.read_count)\n\t\t\t.style('text-align', 'center')\n\t} else if (group.data.type == 'support_no' || group.data.type == 'support_amb') {\n\t\tnum_read_div = tk.multiAlignMenu.d // Printing number of reads aligned in alignment panel\n\t\t\t.append('div')\n\t\t\t.text('Number of reads aligned = ' + multi_read_alig_data.alignmentData.read_count)\n\t\t\t.style('text-align', 'center')\n\t} else if (group.data.type.includes('support_alt')) {\n\t\t// Some alternate allele\n\t\tlet hit = 0\n\t\tfor (let var_idx = 0; var_idx < tk.variants.length; var_idx++) {\n\t\t\tif (group.data.type == 'support_alt' + var_idx.toString()) {\n\t\t\t\thit = 1\n\t\t\t\talt_var_idx = var_idx\n\t\t\t\tnum_read_div = tk.multiAlignMenu.d // Printing number of reads aligned in alignment panel\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text(\n\t\t\t\t\t\t'Number of reads aligned to alternative allele ' +\n\t\t\t\t\t\t\ttk.variants[var_idx].alt +\n\t\t\t\t\t\t\t' = ' +\n\t\t\t\t\t\t\tmulti_read_alig_data.alignmentData.read_count\n\t\t\t\t\t)\n\t\t\t\t\t.style('text-align', 'center')\n\t\t\t}\n\t\t}\n\t\tif (hit == 0) {\n\t\t\t// Should not happen\n\t\t\tconsole.log('group.data.type:', group.data.type)\n\t\t\tconsole.log('Alternate allele not found')\n\t\t}\n\t}\n\tif (multi_read_alig_data.alignmentData.partstack_start) {\n\t\t// In partstack mode\n\t\tconst partstack_div = tk.multiAlignMenu.d\n\t\t\t.append('div')\n\t\t\t.text(\n\t\t\t\t'Reads aligned from ' +\n\t\t\t\t\tmulti_read_alig_data.alignmentData.partstack_start +\n\t\t\t\t\t' to ' +\n\t\t\t\t\tmulti_read_alig_data.alignmentData.partstack_stop\n\t\t\t)\n\t\t\t.style('text-align', 'center')\n\t}\n\n\tconst div = tk.multiAlignMenu.d.append('div').style('margin', '20px')\n\ttk.readAlignmentTable = div\n\t\t.append('table')\n\t\t.style('font-family', 'Courier')\n\t\t.style('font-size', '0.8em')\n\t\t.style('color', '#303030')\n\t\t.style('margin', '5px 5px 20px 5px')\n\t\t.style('border-spacing', 0)\n\t\t.style('border-collapse', 'separate')\n\t\t.style('text-align', 'center')\n\t\t.style('empty-cells', 'show')\n\n\t// Drawing ref/alt allele bar\n\tlet refallele_tr = tk.readAlignmentTable.append('tr').style('color', 'white').style('background-color', 'white')\n\trefallele_tr.attr('id', 'RefAltBar')\n\tlet variant_string // This will contain the variant bar along with Refeerence/ Alternate allele label\n\tlet nclt_count = 0\n\tlet allele_start = 0 // Flag to tell if the variant region has been reached or not. After that position alternate/reference allele will be rendered\n\tlet variant_string_count = 0 // Iterator for variant string letters\n\n\t// Determine if alt/ref allele string needs to be placed inside variant box\n\tlet inside_variant_box = 1 // Flag for determining if variant string needs to be placed inside variant box or to the right of it. 0 for inside and 1 for being placed on the right\n\tif (group.data.type == 'support_alt' + alt_var_idx.toString()) {\n\t\tif (tk.variants.length == 1) {\n\t\t\t// If only a single allele is specified then which alternate allele being referred is obvious\n\t\t\tvariant_string = 'Alternative allele'\n\t\t\tif (variant_string.length < tk.variants[alt_var_idx].alt.length) {\n\t\t\t\tinside_variant_box = 0\n\t\t\t} else {\n\t\t\t\tvariant_string = ' Alternative allele'\n\t\t\t}\n\t\t} else {\n\t\t\tif (group.data.type == 'support_alt' + alt_var_idx.toString()) {\n\t\t\t\tvariant_string = 'Alternative allele = ' + tk.variants[alt_var_idx].alt\n\t\t\t\tif (variant_string.length < tk.variants[alt_var_idx].alt.length) {\n\t\t\t\t\tinside_variant_box = 0\n\t\t\t\t} else {\n\t\t\t\t\tvariant_string = ' Alternative allele = ' + tk.variants[alt_var_idx].alt\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (group.data.type == 'support_ref') {\n\t\t// For reference allele the reference allele from first allele will be shown (May need to work later on this based on input from user)\n\t\tif (tk.is_same_ref == false) {\n\t\t\tvariant_string = 'Combined reference allele'\n\t\t} else {\n\t\t\tvariant_string = 'Reference allele'\n\t\t}\n\t\tif (variant_string.length < highlight_regions_in_refallele[1] - highlight_regions_in_refallele[0]) {\n\t\t\t// For now checking if string fits within the first box (in case of a multi-allele variant)\n\t\t\tinside_variant_box = 0\n\t\t} else {\n\t\t\tif (tk.is_same_ref == false) {\n\t\t\t\tvariant_string = ' Combined reference allele'\n\t\t\t} else {\n\t\t\t\tvariant_string = ' Reference allele'\n\t\t\t}\n\t\t}\n\t}\n\n\ttk.readAlignmentTableGroup = group.data.type\n\tif (multi_read_alig_data.alignmentData.final_read_align.length > 0) {\n\t\tfor (const nclt of multi_read_alig_data.alignmentData.final_read_align[0]) {\n\t\t\tnclt_count += 1\n\t\t\tconst refallele_td = refallele_tr.append('td')\n\n\t\t\t// Drawing ref/alt allele bar\n\t\t\tif (\n\t\t\t\tgroup.data.type == 'support_alt' + alt_var_idx.toString() &&\n\t\t\t\tnclt_count >\n\t\t\t\t\ttk.variants.leftflankseqs[alt_var_idx].length + multi_read_alig_data.alignmentData.gaps_before_variant &&\n\t\t\t\tnclt_count <=\n\t\t\t\t\ttk.variants.leftflankseqs[alt_var_idx].length +\n\t\t\t\t\t\ttk.variants[alt_var_idx].alt.length +\n\t\t\t\t\t\tmulti_read_alig_data.alignmentData.gaps_before_variant\n\t\t\t) {\n\t\t\t\tif (inside_variant_box == 1) {\n\t\t\t\t\tallele_start = 1\n\t\t\t\t\trefallele_td\n\t\t\t\t\t\t.text(' ')\n\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t} else {\n\t\t\t\t\tif (variant_string_count < variant_string.length) {\n\t\t\t\t\t\trefallele_td\n\t\t\t\t\t\t\t.text(variant_string[variant_string_count])\n\t\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t\t\tvariant_string_count += 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\trefallele_td\n\t\t\t\t\t\t\t.text(' ')\n\t\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tgroup.data.type == 'support_ref' &&\n\t\t\t\tnclt_count > tk.variants.leftflankseqs[0].length + multi_read_alig_data.alignmentData.gaps_before_variant &&\n\t\t\t\tnclt_count <=\n\t\t\t\t\ttk.variants.leftflankseqs[0].length +\n\t\t\t\t\t\thighlight_regions_in_refallele[1] - // For now assuming there are no breaks within ref alleles on the reference sequence.\n\t\t\t\t\t\thighlight_regions_in_refallele[0] +\n\t\t\t\t\t\tmulti_read_alig_data.alignmentData.gaps_before_variant\n\t\t\t) {\n\t\t\t\tif (inside_variant_box == 1) {\n\t\t\t\t\tallele_start = 1\n\t\t\t\t\trefallele_td\n\t\t\t\t\t\t.text('')\n\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t} else {\n\t\t\t\t\tif (variant_string_count < variant_string.length) {\n\t\t\t\t\t\trefallele_td\n\t\t\t\t\t\t\t.text(variant_string[variant_string_count])\n\t\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t\t\tvariant_string_count += 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\trefallele_td\n\t\t\t\t\t\t\t.text('')\n\t\t\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t.style('background-color', 'black')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (allele_start == 1 && inside_variant_box == 1) {\n\t\t\t\trefallele_td\n\t\t\t\t\t.text(variant_string[variant_string_count])\n\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t.style('background-color', 'white')\n\t\t\t\tvariant_string_count += 1\n\t\t\t\tif (variant_string_count == variant_string.length) {\n\t\t\t\t\tallele_start = 0\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trefallele_td\n\t\t\t\t\t.text('')\n\t\t\t\t\t.style('text-align', 'right')\n\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t.style('background-color', 'white')\n\t\t\t}\n\t\t}\n\n\t\t// Drawing alignments for ref/alt allele and each of the reads\n\t\tlet read_count = 0\n\t\tfor (const read of multi_read_alig_data.alignmentData.final_read_align) {\n\t\t\tlet nclt_count = 0\n\t\t\tconst read_tr = tk.readAlignmentTable.append('tr').style('color', 'white').style('background-color', 'white')\n\t\t\t// Setting attribute of row\n\t\t\tif (read_count == 0 && (group.data.type == 'support_ref' || group.data.type == 'support_alt')) {\n\t\t\t\tread_tr.attr('id', 'RefAltSeq')\n\t\t\t} else {\n\t\t\t\tread_tr.attr('id', read_count.toString())\n\t\t\t}\n\t\t\tconst r_colors = multi_read_alig_data.alignmentData.qual_r[read_count].split(',')\n\t\t\tconst g_colors = multi_read_alig_data.alignmentData.qual_g[read_count].split(',')\n\t\t\tconst b_colors = multi_read_alig_data.alignmentData.qual_b[read_count].split(',')\n\t\t\tfor (const nclt of read) {\n\t\t\t\tnclt_count += 1\n\t\t\t\tlet nclt_td\n\t\t\t\tif (read_count == 0 && (group.data.type == 'support_ref' || group.data.type.includes('support_alt'))) {\n\t\t\t\t\tnclt_td = read_tr\n\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t.text(nclt)\n\t\t\t\t\t\t.style('background-color', 'white')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t.style('font-weight', '550')\n\t\t\t\t} else {\n\t\t\t\t\tnclt_td = read_tr\n\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t.text(nclt)\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'background-color',\n\t\t\t\t\t\t\t'rgb(' + r_colors[nclt_count - 1] + ',' + g_colors[nclt_count - 1] + ',' + b_colors[nclt_count - 1] + ')'\n\t\t\t\t\t\t)\n\t\t\t\t\tif (nclt != '-') {\n\t\t\t\t\t\tnclt_td.style('color', 'white')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnclt_td.style('color', 'black')\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Highlighting nucleotides that are within the ref/alt allele\n\t\t\t\tif (\n\t\t\t\t\tgroup.data.type == 'support_alt' + alt_var_idx.toString() &&\n\t\t\t\t\tnclt_count >\n\t\t\t\t\t\ttk.variants.leftflankseqs[alt_var_idx].length + multi_read_alig_data.alignmentData.gaps_before_variant &&\n\t\t\t\t\tnclt_count <=\n\t\t\t\t\t\ttk.variants.leftflankseqs[alt_var_idx].length +\n\t\t\t\t\t\t\ttk.variants[alt_var_idx].alt.length +\n\t\t\t\t\t\t\tmulti_read_alig_data.alignmentData.gaps_before_variant\n\t\t\t\t) {\n\t\t\t\t\tnclt_td.style('color', 'black')\n\t\t\t\t} else if (\n\t\t\t\t\tgroup.data.type == 'support_ref' &&\n\t\t\t\t\tnclt_count > tk.variants.leftflankseqs[0].length + multi_read_alig_data.alignmentData.gaps_before_variant &&\n\t\t\t\t\tnclt_count <=\n\t\t\t\t\t\ttk.variants.leftflankseqs[0].length +\n\t\t\t\t\t\t\thighlight_regions_in_refallele[1] - // For now assuming there are no breaks within ref alleles on the reference sequence.\n\t\t\t\t\t\t\thighlight_regions_in_refallele[0] +\n\t\t\t\t\t\t\tmulti_read_alig_data.alignmentData.gaps_before_variant\n\t\t\t\t) {\n\t\t\t\t\tnclt_td.style('color', 'black')\n\t\t\t\t}\n\t\t\t}\n\t\t\tread_count += 1\n\t\t}\n\t}\n}\n\nasync function getReadInfo(tk, block, box, ridx) {\n\tconst wait = tk.readMenu.d.append('div').text('Loading...')\n\tconst param = getparam(\n\t\ttk.variants\n\t\t\t? {\n\t\t\t\t\trefseqs: tk.variants.refseqs,\n\t\t\t\t\taltseqs: tk.variants.altseqs,\n\t\t\t\t\tchrom: tk.variants[0].chr,\n\t\t\t\t\tref_positions: tk.variants.ref_positions,\n\t\t\t\t\trefalleles: tk.variants.refalleles,\n\t\t\t\t\taltalleles: tk.variants.altalleles,\n\t\t\t\t\tstart: box.start,\n\t\t\t\t\tstop: box.stop,\n\t\t\t\t\tpaired: tk.asPaired\n\t\t\t }\n\t\t\t: { start: box.start, stop: box.stop, paired: tk.asPaired }\n\t)\n\tconst data = await dofetch3('tkbam', param)\n\tif (data.error) {\n\t\tsayerror(wait, data.error)\n\t\treturn\n\t}\n\twait.remove()\n\n\tfor (const r of data.lst) {\n\t\t// {seq, alignment (html), info (html) }\n\t\tconst div = tk.readMenu.d.append('div').style('margin', '10px')\n\t\tconst read_reference_div = div.append('div').html(r.alignment) // This stores the HTML table displaying the read against the reference\n\n\t\t/*** \n\t\t\tFirefox does not seem to support the permision query name == 'clipboard-write'. \n\t\t\tTested that removing this permission check works in Chrome, Safari, FF.\n\t\t\tMay need to reactivate the permission check if users report issues. \n\t\t***/\n\t\t/*const result = await navigator.permissions.query({ name: 'clipboard-write' })\n\t\tif (result.state != 'granted' && result.state != 'prompt') {\n\t\t\tconsole.log(681, result)\n\t\t\t// no copy button\n\t\t} else {\n\t\t}*/\n\n\t\tconst row = div.append('div').style('margin-top', '10px')\n\t\trow\n\t\t\t.append('button')\n\t\t\t.text('Copy read sequence')\n\t\t\t.on('click', function () {\n\t\t\t\tnavigator.clipboard.writeText(r.seq).then(() => {}, console.warn)\n\t\t\t\td3select(this).html('Copy read sequence ✓')\n\t\t\t})\n\n\t\tif (data.lst[0].alignments) {\n\t\t\t// Invoked only if variant is specified\n\t\t\td3select(this).append('span').html(' ')\n\t\t\tconst alignment_button = row.append('button').style('margin-left', '10px').text('Align read to variant alleles')\n\n\t\t\tlet first = true // use this flag to only make the table once when clicking the button for the first time\n\t\t\talignment_button.on('click', () => {\n\t\t\t\tif (first) {\n\t\t\t\t\tfirst = false\n\t\t\t\t\tfor (let var_idx = 0; var_idx < tk.variants.length; var_idx++) {\n\t\t\t\t\t\tmakeReadAlignmentTable(variantAlignmentTable, 'Ref', tk, data.lst[0].start_readpos - 1, var_idx)\n\t\t\t\t\t\tmakeReadAlignmentTable(variantAlignmentTable, 'Alt', tk, data.lst[0].start_readpos - 1, var_idx)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (variantAlignmentTable.style('display') == 'none') {\n\t\t\t\t\tvariantAlignmentTable.style('display', 'block')\n\t\t\t\t} else {\n\t\t\t\t\tvariantAlignmentTable.style('display', 'none')\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (r.unmapped_mate && !tk.asPaired) {\n\t\t\t// this read has unmapped mate\n\t\t\t// only show button to request unmapped mate when tk is in single-read mode\n\t\t\t// if tk is in paired mode, then the unmapped read is already displayed\n\t\t\tconst mate_button = row\n\t\t\t\t.append('button')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.text('Show unmapped mate')\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tmate_button.property('disabled', true) // disable this button\n\t\t\t\t\tconst wait = tk.readMenu.d.append('div').text('Loading...')\n\t\t\t\t\tconst data2 = await dofetch3('tkbam', getparam({ show_unmapped: 1 }))\n\t\t\t\t\tif (data2.error) {\n\t\t\t\t\t\twait.text('')\n\t\t\t\t\t\tsayerror(wait, data2.error)\n\t\t\t\t\t\tmate_button.property('disabled', false) // reenable this button\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\twait.remove()\n\t\t\t\t\tmate_button.remove()\n\n\t\t\t\t\tconst r2 = data2.lst[0]\n\t\t\t\t\tdiv.append('div').html(r2.alignment)\n\n\t\t\t\t\tconst row = div.append('div').style('margin-top', '10px')\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.text('Copy read sequence')\n\t\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\t\tnavigator.clipboard.writeText(r2.seq).then(() => {}, console.warn)\n\t\t\t\t\t\t\td3select(this).html('Copy read sequence ✓')\n\t\t\t\t\t\t})\n\t\t\t\t\tmayshow_blatbutton(r2, row, tk, block)\n\t\t\t\t\tdiv.append('div').html(r2.info)\n\t\t\t\t})\n\t\t}\n\n\t\tconst gene_button = row\n\t\t\t.append('button')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.text('Show gene model')\n\t\t\t.property('disabled', !r.seq || r.seq == '*')\n\t\t\t.on('click', async () => {\n\t\t\t\tgene_button.property('disabled', true) // disable this button\n\t\t\t\t// Determine how many calls to bedj track need to be made. This depends on whether the read has insertions/deletions or spliced. In these cases, each part of the read will need a separate bedj track\n\t\t\t\t// Parsing cigar sequence\n\t\t\t\tlet i = 0\n\t\t\t\tlet nuc_count = 0 // Nucleotide iterator\n\t\t\t\tlet gm_nuc_count = 0 // Nucleotide iterator containing the number of nucleotides spanned by the gene model\n\t\t\t\tlet segstart = data.lst[0].boxes[0].start\n\t\t\t\tlet segstop\n\t\t\t\tlet local_alignment_width = 0 // This variable stores the width of each gene model that needs to be rendered using bedj track\n\t\t\t\tconst tbodyRef = read_reference_div.node().children[0].getElementsByTagName('tbody')[0]\n\t\t\t\tconst gene_model_tr = tbodyRef.insertRow()\n\t\t\t\tconst heading_gene_cell = gene_model_tr.insertCell()\n\t\t\t\tconst heading_gene_text = document.createTextNode('')\n\t\t\t\theading_gene_cell.appendChild(heading_gene_text)\n\n\t\t\t\tconst gene_models = []\n\t\t\t\tconst break_points = []\n\t\t\t\tlet num_break_points = 0 // Number of break points in reference sequence w.r.t read\n\t\t\t\tlet gene_model_td\n\t\t\t\tconst refseq_row = read_reference_div.node().children[0].children[0].children[0]\n\t\t\t\tfor (const item of data.lst[0].boxes) {\n\t\t\t\t\tif (item.opr == 'H') {\n\t\t\t\t\t\t// Hard clip should be towards an end of a segment and there should be no corresponding sequence, so no gene models need to be shown (Needs to be tested with an example)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else if (\n\t\t\t\t\t\titem.opr == 'M' ||\n\t\t\t\t\t\titem.opr == 'S' ||\n\t\t\t\t\t\t(item.opr == 'N' && item.len < data.lst[0].readpanel_DN_maxlength) ||\n\t\t\t\t\t\t(item.opr == 'D' && item.len < data.lst[0].readpanel_DN_maxlength) // if length of deletion is less than readpanel_DN_maxlength the reference sequence is retained and no break is observed, so this part will be covered by the gene model\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (let j = 0; j < item.len; j++) {\n\t\t\t\t\t\t\tlocal_alignment_width += refseq_row.children[nuc_count + 1].getBoundingClientRect().width // Adding the number of pixels from this column to local_alignment_width\n\t\t\t\t\t\t\tnuc_count += 1\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgm_nuc_count += item.len\n\t\t\t\t\t} else if (\n\t\t\t\t\t\titem.opr == 'I' ||\n\t\t\t\t\t\t(item.opr == 'N' && item.len >= data.lst[0].readpanel_DN_maxlength) ||\n\t\t\t\t\t\t(item.opr == 'D' && item.len >= data.lst[0].readpanel_DN_maxlength) // if length of deletion is greater or equal to readpanel_DN_maxlength the reference sequence is not retained and break is observed, therefore current gene model will end here and a new gene model will start at the end of the deletion\n\t\t\t\t\t) {\n\t\t\t\t\t\tsegstop = item.start\n\t\t\t\t\t\tconst gene_model = await get_gene_models_reads(block, ridx, segstart, segstop, local_alignment_width) // Send bedj client request to render gene model for this segment\n\t\t\t\t\t\tconst gm = {\n\t\t\t\t\t\t\tsrc: gene_model.src,\n\t\t\t\t\t\t\twidth: local_alignment_width,\n\t\t\t\t\t\t\theight: gene_model.height,\n\t\t\t\t\t\t\tcolspan: gm_nuc_count\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgene_models.push(gm)\n\n\t\t\t\t\t\tif (item.opr == 'I') {\n\t\t\t\t\t\t\tbreak_points.push(item.len) // Passing the length of insertion\n\t\t\t\t\t\t} else if (item.opr == 'N' || item.opr == 'D') {\n\t\t\t\t\t\t\tbreak_points.push(1) // In case of big deletions and splicing it only occupies a single cell\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.opr == 'D' || item.opr == 'N') {\n\t\t\t\t\t\t\tsegstart = item.start + item.len\n\t\t\t\t\t\t} else if (item.opr == 'I') {\n\t\t\t\t\t\t\tsegstart = item.start\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlocal_alignment_width = 0\n\t\t\t\t\t\tgm_nuc_count = 0\n\t\t\t\t\t\tnum_break_points += 1\n\t\t\t\t\t}\n\n\t\t\t\t\tif (i == data.lst[0].boxes.length - 1) {\n\t\t\t\t\t\t// Render bedj gene model if it has reached the last entry in CIGAR sequence\n\t\t\t\t\t\tsegstop = item.start + item.len\n\t\t\t\t\t\tconst gene_model = await get_gene_models_reads(block, ridx, segstart, segstop, local_alignment_width) // Send bedj client request to render gene model for this segment\n\t\t\t\t\t\tconst gm = {\n\t\t\t\t\t\t\tsrc: gene_model.src,\n\t\t\t\t\t\t\twidth: local_alignment_width,\n\t\t\t\t\t\t\theight: gene_model.height,\n\t\t\t\t\t\t\tcolspan: gm_nuc_count\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgene_models.push(gm)\n\t\t\t\t\t}\n\t\t\t\t\ti += 1\n\t\t\t\t}\n\n\t\t\t\t// Filling gene model row\n\t\t\t\tconst num_gene_cells = num_break_points + gene_models.length // Number of gene cells required in gene row\n\t\t\t\tlet j = 0\n\t\t\t\tlet k = 0\n\t\t\t\tfor (let i = 0; i < num_gene_cells; i++) {\n\t\t\t\t\tconst gene_model_cell = gene_model_tr.insertCell()\n\t\t\t\t\tif (i % 2 == 0) {\n\t\t\t\t\t\t// Render gene model\n\t\t\t\t\t\tconst img = document.createElement('img')\n\t\t\t\t\t\timg.src = gene_models[k].src\n\t\t\t\t\t\timg.width = gene_models[k].width\n\t\t\t\t\t\timg.height = gene_models[k].height\n\t\t\t\t\t\tgene_model_cell.appendChild(img)\n\t\t\t\t\t\tgene_model_cell.colSpan = gene_models[k].colspan\n\t\t\t\t\t\tk += 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Gap representing insertion / (big) deletion / (big) splicing showing break in reference sequence\n\t\t\t\t\t\tgene_model_cell.colSpan = break_points[j]\n\t\t\t\t\t\tj += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//console.log('gene_model_tr:', gene_model_tr)\n\t\t\t})\n\n\t\tmayshow_blatbutton(r, row, tk, block)\n\t\tdiv.append('div').html(r.info)\n\t\t//empty div for read alignment tables\n\t\tconst variantAlignmentTable = div.append('div').style('display', 'none')\n\t}\n\n\tfunction getparam(extra = {}) {\n\t\t// reusable helper\n\t\tconst r = tk.regions[ridx]\n\t\tconst body = {\n\t\t\tgetread: 1,\n\t\t\tqname: encodeURIComponent(box.qname), // convert + to %2B, so it can be kept the same but not a space instead\n\t\t\tgenome: block.genome.name,\n\t\t\tchr: r.chr,\n\t\t\tstart: r.start,\n\t\t\tstop: r.stop,\n\t\t\t...extra\n\t\t}\n\t\tif (tk.gdcFile) {\n\t\t\tbody.gdcFileUUID = tk.gdcFile.uuid\n\t\t\tbody.gdcFilePosition = tk.gdcFile.position\n\t\t}\n\t\tif (tk.nochr) body.nochr = 1\n\t\tif (tk.file) body.file = tk.file\n\t\tif (tk.url) body.url = tk.url\n\t\tif (tk.indexURL) body.indexURL = tk.indexURL\n\t\tif (tk.asPaired) {\n\t\t\tbody.getpair = 1\n\t\t} else {\n\t\t\tif (box.isfirst) {\n\t\t\t\tbody.getfirst = 1\n\t\t\t} else if (box.islast) {\n\t\t\t\tbody.getlast = 1\n\t\t\t} else {\n\t\t\t\t// unknown order for this read\n\t\t\t\t// supply read position to identify it on server\n\t\t\t\tbody.unknownorder = 1\n\t\t\t\tbody.readstart = box.start\n\t\t\t\tbody.readstop = box.stop\n\t\t\t}\n\t\t}\n\t\treturn { headers: getHeaders(tk), body }\n\t}\n\n\t/*\n\tCreates read alignment table when 'Read alignment' button is clicked. \n\ttype\n\t\t'Ref' - reference\n\t\t'Alt' - alternate\n\t*/\n\tfunction makeReadAlignmentTable(div, type, tk, read_start_pos, var_idx) {\n\t\tlet q_align, align_wrt, r_align\n\t\tif (type == 'Ref') {\n\t\t\tq_align = data.lst[0].alignments[var_idx].q_seq_ref\n\t\t\talign_wrt = data.lst[0].alignments[var_idx].align_ref\n\t\t\tr_align = data.lst[0].alignments[var_idx].r_seq_ref\n\t\t}\n\t\tif (type == 'Alt') {\n\t\t\tq_align = data.lst[0].alignments[var_idx].q_seq_alt\n\t\t\talign_wrt = data.lst[0].alignments[var_idx].align_alt\n\t\t\tr_align = data.lst[0].alignments[var_idx].r_seq_alt\n\t\t}\n\t\tif (data.lst[0].alignments.length == 1) {\n\t\t\tdiv\n\t\t\t\t.append('span')\n\t\t\t\t.text(type + ' alignment')\n\t\t\t\t.style('font-family', 'Courier')\n\t\t\t\t.style('font-size', '15px')\n\t\t\t\t.style('color', '#303030')\n\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t} else {\n\t\t\tif (type == 'Alt') {\n\t\t\t\tdiv\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text('Alignment with Alt allele: ' + tk.variants[var_idx].alt)\n\t\t\t\t\t.style('font-family', 'Courier')\n\t\t\t\t\t.style('font-size', '15px')\n\t\t\t\t\t.style('color', '#303030')\n\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t} else if (type == 'Ref') {\n\t\t\t\tdiv\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text('Alignment with Ref allele: ' + tk.variants[var_idx].ref)\n\t\t\t\t\t.style('font-family', 'Courier')\n\t\t\t\t\t.style('font-size', '15px')\n\t\t\t\t\t.style('color', '#303030')\n\t\t\t\t\t.style('margin', '5px 5px 10px 5px')\n\t\t\t} else {\n\t\t\t\t// Should not happen\n\t\t\t\tconsole.log('Unknown allele, please check')\n\t\t\t}\n\t\t}\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('font-family', 'Courier')\n\t\t\t.style('font-size', '0.8em')\n\t\t\t.style('color', '#303030')\n\t\t\t.style('margin', '5px 5px 20px 5px')\n\t\tlet nclt_count = 0\n\t\tconst refAlt_tr = table.append('tr')\n\t\trefAlt_tr\n\t\t\t.append('td')\n\t\t\t.text(type + ' allele')\n\t\t\t.style('text-align', 'right')\n\t\t\t.style('font-weight', '550')\n\t\t\t.style('white-space', 'nowrap')\n\t\tfor (const nclt of r_align) {\n\t\t\tnclt_count += 1\n\t\t\tif (\n\t\t\t\ttype == 'Ref' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_ref &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_ref\n\t\t\t) {\n\t\t\t\trefAlt_tr.append('td').text(nclt).style('color', 'red')\n\t\t\t} else if (\n\t\t\t\ttype == 'Alt' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_alt &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_alt\n\t\t\t) {\n\t\t\t\trefAlt_tr.append('td').text(nclt).style('color', 'red')\n\t\t\t} else {\n\t\t\t\trefAlt_tr.append('td').text(nclt)\n\t\t\t}\n\t\t}\n\t\tconst alignment_tr = table.append('tr')\n\t\talignment_tr.append('td')\n\t\tnclt_count = 0\n\t\tfor (const align_str of align_wrt) {\n\t\t\tnclt_count += 1\n\t\t\tif (\n\t\t\t\ttype == 'Ref' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_ref &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_ref\n\t\t\t) {\n\t\t\t\talignment_tr.append('td').text(align_str).style('color', 'red')\n\t\t\t} else if (\n\t\t\t\ttype == 'Alt' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_alt &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_alt\n\t\t\t) {\n\t\t\t\talignment_tr.append('td').text(align_str).style('color', 'red')\n\t\t\t} else {\n\t\t\t\talignment_tr.append('td').text(align_str)\n\t\t\t}\n\t\t}\n\n\t\tconst query_tr = table.append('tr')\n\t\tquery_tr.append('td').text('Read').style('text-align', 'right').style('font-weight', '550')\n\t\tnclt_count = 0\n\t\tfor (const nclt of q_align) {\n\t\t\tnclt_count += 1\n\t\t\tif (\n\t\t\t\ttype == 'Ref' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_ref &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_ref\n\t\t\t) {\n\t\t\t\tquery_tr.append('td').text(nclt).style('color', 'red')\n\t\t\t} else if (\n\t\t\t\ttype == 'Alt' &&\n\t\t\t\tnclt_count > data.lst[0].alignments[var_idx].red_region_start_alt &&\n\t\t\t\tnclt_count <= data.lst[0].alignments[var_idx].red_region_stop_alt\n\t\t\t) {\n\t\t\t\tquery_tr.append('td').text(nclt).style('color', 'red')\n\t\t\t} else {\n\t\t\t\tquery_tr.append('td').text(nclt)\n\t\t\t}\n\t\t}\n\t}\n}\n\nasync function get_gene_models_refalt(block, tk, segstart, segstop, local_alignment_width) {\n\tconst genetk = block.genome.tracks.find(i => i.__isgene)\n\tconst args = {\n\t\tname: genetk.name,\n\t\tgenome: block.genome.name,\n\t\trglst: [\n\t\t\t{\n\t\t\t\tchr: tk.variants[0].chr,\n\t\t\t\tstart: segstart,\n\t\t\t\tstop: segstop,\n\t\t\t\twidth: local_alignment_width\n\t\t\t}\n\t\t],\n\t\twidth: local_alignment_width,\n\t\tstackheight: 16,\n\t\tstackspace: 1,\n\t\tregionspace: 0,\n\t\tfile: genetk.file,\n\t\tdevicePixelRatio: window.devicePixelRatio > 1 ? window.devicePixelRatio : 1,\n\t\tcolor: genetk.color,\n\t\ttranslatecoding: 1,\n\t\t__isgene: true,\n\t\tnoNameHover: true\n\t}\n\n\t{\n\t\t// if the same gene tk is currently showing, apply its gene model filtering\n\t\tconst tk = block.tklst.find(i => i.name == args.name && i.type == 'bedj')\n\t\tif (tk && tk.filterByName) {\n\t\t\targs.filterByName = tk.filterByName\n\t\t}\n\t}\n\n\treturn await dofetch3('tkbedj', { method: 'POST', body: JSON.stringify(args) })\n}\n\n// FIXME may combine with get_gene_models_refalt?\nasync function get_gene_models_reads(block, ridx, segstart, segstop, local_alignment_width) {\n\tconst genetk = block.genome.tracks.find(i => i.__isgene)\n\tconst args = {\n\t\tname: genetk.name,\n\t\tgenome: block.genome.name,\n\t\trglst: [\n\t\t\t{\n\t\t\t\tchr: block.rglst[ridx].chr,\n\t\t\t\tstart: segstart,\n\t\t\t\tstop: segstop,\n\t\t\t\twidth: local_alignment_width\n\t\t\t}\n\t\t],\n\t\twidth: local_alignment_width,\n\t\tstackheight: 16,\n\t\tstackspace: 1,\n\t\tregionspace: 0,\n\t\tfile: genetk.file,\n\t\tdevicePixelRatio: window.devicePixelRatio > 1 ? window.devicePixelRatio : 1,\n\t\tcolor: genetk.color,\n\t\ttranslatecoding: 1,\n\t\t__isgene: true,\n\t\tnoNameHover: true\n\t}\n\t{\n\t\t// if the same gene tk is currently showing, apply its gene model filtering\n\t\tconst tk = block.tklst.find(i => i.name == args.name && i.type == 'bedj')\n\t\tif (tk && tk.filterByName) {\n\t\t\targs.filterByName = tk.filterByName\n\t\t}\n\t}\n\treturn await dofetch3('tkbedj', { method: 'POST', body: JSON.stringify(args) })\n}\n\nfunction mayshow_blatbutton(read, div, tk, block) {\n\tif (!block.genome.blat) {\n\t\t// blat not enabled\n\t\treturn\n\t}\n\tconst button = div\n\t\t.append('button')\n\t\t.style('margin-left', '10px')\n\t\t.text('BLAT')\n\t\t.on('click', async () => {\n\t\t\tbutton.property('disabled', true)\n\t\t\tblatdiv.selectAll('*').remove()\n\t\t\tconst wait = blatdiv.append('div').text('Loading...')\n\t\t\ttry {\n\t\t\t\tconst data = await dofetch3('blat', {\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tgenome: block.genome.name,\n\t\t\t\t\t\tseq: read.seq,\n\t\t\t\t\t\tsoft_starts: read.soft_starts,\n\t\t\t\t\t\tsoft_stops: read.soft_stops\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tif (data.nohit) throw 'No hit'\n\t\t\t\tif (!data.hits) throw '.hits[] missing'\n\t\t\t\twait.remove()\n\t\t\t\tshow_blatresult(data.hits, blatdiv, tk, block)\n\t\t\t} catch (e) {\n\t\t\t\twait.text(e.message || e)\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t\tbutton.property('disabled', false)\n\t\t})\n\n\tconst blatdiv = div.append('div')\n}\n\nfunction show_blatresult2(hits, div, tk, block) {\n\tconst table = div.append('table')\n\tconst tr = table.append('tr').style('opacity', 0.5).style('font-size', '.8em')\n\ttr.append('td').text('Score')\n\ttr.append('td').text('QStart')\n\ttr.append('td').text('QStrand')\n\ttr.append('td').text('QAlignLen')\n\ttr.append('td').text('RChr')\n\ttr.append('td').text('RStrand')\n\ttr.append('td').text('RStart')\n\ttr.append('td').text('RAlignLen')\n\tlet repeat_file_present = 0\n\tfor (const track of block.genome.tracks) {\n\t\tif (track['name'] == 'RepeatMasker') {\n\t\t\ttr.append('td').text('InRepeatRegion')\n\t\t\trepeat_file_present = 1\n\t\t\tbreak\n\t\t}\n\t}\n\ttr.append('td').text('SeqAlign')\n\n\tlet soft_clipped_region = ''\n\tlet non_soft_clipped_region = ''\n\tfor (const h of hits) {\n\t\tlet tr = table.append('tr')\n\t\ttr.append('td').text(h.score)\n\t\ttr.append('td').text(h.query_startpos)\n\t\ttr.append('td').text(h.query_strand)\n\t\ttr.append('td').text(h.query_alignlen)\n\t\ttr.append('td').text(h.ref_chr)\n\t\ttr.append('td').text(h.ref_strand)\n\t\ttr.append('td').text(h.ref_startpos)\n\t\ttr.append('td').text(h.ref_alignlen)\n\t\tif (repeat_file_present == 1) {\n\t\t\t//console.log('h.ref_in_repeat:', h.ref_in_repeat)\n\t\t\ttr.append('td').text(h.ref_in_repeat)\n\t\t}\n\n\t\tif (h.query_insoftclip == true) {\n\t\t\tif (h.query_soft_boundaries == '-1') {\n\t\t\t\t// Alignment completely inside softclip\n\t\t\t\ttr.append('td')\n\t\t\t\t\t.text(h.query_alignment.toUpperCase() + ' Query')\n\t\t\t\t\t.style('font-family', 'courier')\n\t\t\t\t\t.style('color', 'blue')\n\t\t\t} else {\n\t\t\t\tconst boundaries = h.query_soft_boundaries.split(':')\n\t\t\t\tconst direction = boundaries[0]\n\t\t\t\tconst boundary = parseInt(boundaries[1])\n\t\t\t\tif (direction == 'right') {\n\t\t\t\t\t// Softclip is on left side and alignment extends onto the right\n\t\t\t\t\tsoft_clipped_region = h.query_alignment.substr(0, boundary - parseInt(h.query_startpos))\n\t\t\t\t\tnon_soft_clipped_region = h.query_alignment.substr(boundary - parseInt(h.query_startpos), h.query_stoppos)\n\t\t\t\t\tconst td = tr.append('td')\n\t\t\t\t\ttd.append('span')\n\t\t\t\t\t\t.text(soft_clipped_region.toUpperCase())\n\t\t\t\t\t\t.style('font-family', 'courier')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\ttd.append('span')\n\t\t\t\t\t\t.text(non_soft_clipped_region.toUpperCase())\n\t\t\t\t\t\t.style('font-family', 'courier')\n\t\t\t\t\t\t.style('color', 'blue')\n\t\t\t\t\ttd.append('span').text(' Query').style('font-family', 'courier').style('color', 'black')\n\t\t\t\t} else if (direction == 'left') {\n\t\t\t\t\t// Softclip is on right side and alignment extends onto the left\n\t\t\t\t\tnon_soft_clipped_region = h.query_alignment.substr(0, boundary - parseInt(h.query_startpos))\n\t\t\t\t\tsoft_clipped_region = h.query_alignment.substr(boundary - parseInt(h.query_startpos), h.query_stoppos)\n\t\t\t\t\tconst td = tr.append('td')\n\t\t\t\t\ttd.append('span')\n\t\t\t\t\t\t.text(non_soft_clipped_region.toUpperCase())\n\t\t\t\t\t\t.style('font-family', 'courier')\n\t\t\t\t\t\t.style('color', 'blue')\n\t\t\t\t\ttd.append('span')\n\t\t\t\t\t\t.text(soft_clipped_region.toUpperCase())\n\t\t\t\t\t\t.style('font-family', 'courier')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\ttd.append('span').text(' Query').style('font-family', 'courier').style('color', 'black')\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Something is not right, please check!!')\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\ttr.append('td')\n\t\t\t\t.text(h.query_alignment.toUpperCase() + ' Query')\n\t\t\t\t.style('font-family', 'courier')\n\t\t}\n\n\t\ttr = table.append('tr')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td').text('')\n\t\ttr.append('td')\n\t\t\t.text(h.ref_alignment.toUpperCase() + ' Ref')\n\t\t\t.style('font-family', 'courier')\n\t\t// if (h.query_insoftclip==true) {\n\t\t//\t\t tr.append('td')\n\t\t//\t\t\t.text(h.ref_alignment.toUpperCase() + ' Ref')\n\t\t//\t\t\t.style('font-family', 'courier').style('color', 'blue')\n\t\t// }\n\t\t// else {\n\t\t//\t\t tr.append('td')\n\t\t//\t\t\t.text(h.ref_alignment.toUpperCase() + ' Ref')\n\t\t//\t\t\t.style('font-family', 'courier')\n\t\t// }\n\t}\n}\n\nasync function enter_partstack(group, tk, block, y, data) {\n\t/* for a group, enter part stack mode rom full stack mode\n\twill only update data and rendering of this group, but not other groups\n\t*/\n\tgroup.data_fullstack = group.data\n\tconst clickstackidx = (group.partstack ? group.partstack.start : 0) + Math.floor(y / group.data.stackheight)\n\t// set start/stop of tk.partstack, ensure stop-start=stackpagesize\n\tif (clickstackidx < stackpagesize / 2) {\n\t\t// clicked too close to top\n\t\tgroup.partstack = {\n\t\t\tstart: 0,\n\t\t\tstop: stackpagesize\n\t\t}\n\t} else if (clickstackidx > group.data_fullstack.stackcount - stackpagesize / 2) {\n\t\t// clicked too close to bottom\n\t\tgroup.partstack = {\n\t\t\tstart: group.data_fullstack.stackcount - stackpagesize,\n\t\t\tstop: group.data_fullstack.stackcount\n\t\t}\n\t} else {\n\t\tgroup.partstack = {\n\t\t\tstart: clickstackidx - stackpagesize / 2,\n\t\t\tstop: clickstackidx + stackpagesize / 2\n\t\t}\n\t}\n\tblock.tkcloakon(tk)\n\tconst _d = await getData(tk, block, {\n\t\tstackstart: group.partstack.start,\n\t\tstackstop: group.partstack.stop,\n\t\tgrouptype: group.data.type\n\t})\n\tgroup.data = _d.groups[0]\n\trenderGroup(group, tk, block)\n\tsetTkHeight(tk)\n\tblock.tkcloakoff(tk, {})\n\tblock.block_setheight()\n}\n\nfunction show_blatresult(hits, div, tk, block) {\n\tconst table = div.append('table')\n\tconst tr = table.append('tr').style('opacity', 0.5).style('font-size', '.8em')\n\ttr.append('td').text('QScore')\n\ttr.append('td').text('QStart')\n\ttr.append('td').text('QStop')\n\ttr.append('td').text('QStrand')\n\ttr.append('td').text('QAlignLen')\n\ttr.append('td').text('RChr')\n\ttr.append('td').text('RStart')\n\ttr.append('td').text('RStop')\n\ttr.append('td').text('RAlignLen')\n\n\tfor (const h of hits) {\n\t\tlet tr = table.append('tr').style('font-size', '.8em')\n\t\ttr.append('td').text(h.query_match)\n\t\ttr.append('td').text(h.query_startpos)\n\t\ttr.append('td').text(h.query_stoppos)\n\t\ttr.append('td').text(h.query_strand)\n\t\ttr.append('td').text(h.query_alignlen)\n\t\ttr.append('td').text(h.ref_chr)\n\t\ttr.append('td').text(h.ref_startpos)\n\t\ttr.append('td').text(h.ref_stoppos)\n\t\ttr.append('td').text(h.ref_alignlen)\n\t}\n}\n\nfunction renderGroup(group, tk, block) {\n\tupdate_boxes(group, tk, block)\n\tif (group.partstack) {\n\t\tif (tk.variants) {\n\t\t\tgroup.dom.diff_score_barplot_partstack\n\t\t\t\t.attr('xlink:href', group.data.diff_scores_img.src)\n\t\t\t\t.attr('width', group.data.diff_scores_img.width)\n\t\t\t\t.attr('height', group.data.diff_scores_img.height)\n\t\t\tgroup.ReadNameMaxwidth = 0\n\t\t\tif (tk.show_readnames) {\n\t\t\t\tgroup.dom.read_names_g.attr('transform', 'translate(0,0)')\n\t\t\t\tgroup.dom.read_names_g.selectAll('*').remove()\n\t\t\t\tif (group.data.templatebox && group.data.stackheight >= stackheight_min) {\n\t\t\t\t\tlet read_count = 1\n\t\t\t\t\tfor (const read of group.data.templatebox) {\n\t\t\t\t\t\tconst read_name_bbox = group.dom.read_names_g\n\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t.attr('x', 0)\n\t\t\t\t\t\t\t.attr('y', (group.data.height * read_count) / group.data.templatebox.length)\n\t\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t\t.style('fill', 'black')\n\t\t\t\t\t\t\t.attr('font-size', group.data.height / group.data.templatebox.length)\n\t\t\t\t\t\t\t.text(read.qname)\n\t\t\t\t\t\tgroup.ReadNameMaxwidth = Math.max(group.ReadNameMaxwidth, read_name_bbox.node().getBBox().width)\n\t\t\t\t\t\tread_count += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tgroup.dom.read_names_g.selectAll('*').remove()\n\t\t\t\tgroup.ReadNameMaxwidth = 0\n\t\t\t}\n\t\t}\n\t\tgroup.dom.img_partstack\n\t\t\t.attr('xlink:href', group.data.src)\n\t\t\t.attr('width', group.data.width)\n\t\t\t.attr('height', group.data.height)\n\t\t\t.attr('y', 0)\n\t\tgroup.dom.img_fullstack.attr('width', 0).attr('height', 0)\n\t\tif (tk.variants) {\n\t\t\tgroup.dom.diff_score_barplot_fullstack.attr('width', 0).attr('height', 0)\n\t\t}\n\t\t// group vslider.g y position is set and turned visible in setTkHeight(), but not here\n\t\tconst scrollableheight = group.data.height\n\t\tgroup.dom.rightg.vslider.bar.transition().attr('height', scrollableheight)\n\t\tgroup.dom.rightg.vslider.boxy = (scrollableheight * group.partstack.start) / group.data_fullstack.stackcount\n\t\tgroup.dom.rightg.vslider.boxh =\n\t\t\t(scrollableheight * (group.partstack.stop - group.partstack.start)) / group.data_fullstack.stackcount\n\t\tgroup.dom.rightg.vslider.box.transition().attr('height', group.dom.rightg.vslider.boxh)\n\t\tgroup.dom.rightg.vslider.boxbotline\n\t\t\t.transition()\n\t\t\t.attr('y1', group.dom.rightg.vslider.boxh)\n\t\t\t.attr('y2', group.dom.rightg.vslider.boxh)\n\t\tgroup.dom.rightg.vslider.boxg.transition().attr('transform', 'translate(0,' + group.dom.rightg.vslider.boxy + ')')\n\t} else {\n\t\tgroup.dom.img_fullstack\n\t\t\t.attr('xlink:href', group.data.src)\n\t\t\t.attr('width', group.data.width)\n\t\t\t.attr('height', group.data.height)\n\t\tgroup.dom.img_partstack.attr('width', 0).attr('height', 0)\n\t\tif (tk.variants) {\n\t\t\tif (group.dom.diff_score_barplot_partstack) {\n\t\t\t\tgroup.dom.diff_score_barplot_partstack.attr('width', 0).attr('height', 0)\n\t\t\t}\n\t\t\tgroup.dom.diff_score_barplot_fullstack\n\t\t\t\t.attr('width', group.data.diff_scores_img.width)\n\t\t\t\t.attr('height', group.data.diff_scores_img.height)\n\t\t\tif (tk.show_readnames) {\n\t\t\t\tgroup.dom.read_names_g.selectAll('*').remove()\n\t\t\t}\n\t\t}\n\t\tgroup.dom.rightg.vslider.g.transition().attr('transform', 'scale(0)')\n\t}\n\tgroup.dom.img_cover.attr('width', group.data.width).attr('height', group.data.height)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["var_idx", "event", "nclt_count", "wait", "row", "j", "i", "tk", "tr"]
|
|
7
|
+
}
|