@sjcrh/proteinpaint-client 2.201.0 → 2.202.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-Y2MBOXHL.js +1373 -0
- package/dist/AIProjectAdmin-2W4WNV65.js +958 -0
- package/dist/AggregateMatrix-7L7OKUXI.js +671 -0
- package/dist/AppHeader-6WM66GKP.js +835 -0
- package/dist/BoxPlot-AF72DMSS.js +1218 -0
- package/dist/CorrelationVolcano-H6DHMTYZ.js +620 -0
- package/dist/CorrelationVolcano-H6DHMTYZ.js.map +7 -0
- package/dist/DE-AABMOSEE.js +95 -0
- package/dist/DEinput-3HVHJE2I.js +409 -0
- package/dist/DEinput-3HVHJE2I.js.map +7 -0
- package/dist/DifferentialAnalysis-NBC222Q6.js +243 -0
- package/dist/Disco-B6E3ALAV.js +3392 -0
- package/dist/Disco.UI-KGFIQHXC.js +248 -0
- package/dist/DmrPlot-R3S4PCAE.js +642 -0
- package/dist/DziViewer-QYLZ4EMQ.js +16332 -0
- package/dist/GB-PV4RI5DG.js +1396 -0
- package/dist/GSEA-DHUOROST.js +846 -0
- package/dist/GeneExpInput-RESMBEM3.js +367 -0
- package/dist/Geomap-2WACSP77.js +89 -0
- package/dist/HicApp-3FJEZXAI.js +2250 -0
- package/dist/IDCViewer-MIRQEK4N.js +10817 -0
- package/dist/NumBinaryEditor-EP277U4I.js +284 -0
- package/dist/NumBinaryEditor.unit.spec-ZB627VLG.js +317 -0
- package/dist/NumContEditor-F7DOQSIW.js +110 -0
- package/dist/NumContEditor.unit.spec-PROGQHTU.js +169 -0
- package/dist/NumCustomBinEditor-QS3IPKIQ.js +38 -0
- package/dist/NumCustomBinEditor.unit.spec-BRDEFIX6.js +402 -0
- package/dist/NumDiscreteEditor-SE4I3BDA.js +175 -0
- package/dist/NumDiscreteEditor.unit.spec-6GBWQ3NQ.js +238 -0
- package/dist/NumRegularBinEditor-RJKB3G3V.js +38 -0
- package/dist/NumRegularBinEditor.unit.spec-HRU2Y76X.js +283 -0
- package/dist/NumSplineEditor-2DCORF5E.js +215 -0
- package/dist/NumSplineEditor.unit.spec-TTNB5IXX.js +229 -0
- package/dist/NumericDensity-3A7KTA7Y.js +38 -0
- package/dist/NumericDensity.unit.spec-ISPDAUVX.js +423 -0
- package/dist/NumericHandler-RG5XZMBU.js +39 -0
- package/dist/NumericHandler.unit.spec-RTD7AZNE.js +219 -0
- package/dist/ProteomeInput-6A7UB4CI.js +394 -0
- package/dist/RunChart2-YEAOBR2L.js +758 -0
- package/dist/SC-C3MJQBI5.js +1112 -0
- package/dist/Volcano-N6MXAQDZ.js +1417 -0
- package/dist/Volcano-N6MXAQDZ.js.map +7 -0
- package/dist/WSIViewer-OVJ2QS7P.js +26200 -0
- package/dist/WSIViewer-OVJ2QS7P.js.map +7 -0
- package/dist/Wsi-CMLKCEG3.js +239 -0
- package/dist/Wsi-CMLKCEG3.js.map +7 -0
- package/dist/WsiSamplesPlot-ET7LGNJW.js +165 -0
- package/dist/adSandbox-6LGHUXPX.js +38 -0
- package/dist/animatedBubbleChart-VJ6EQDQP.js +553 -0
- package/dist/app-PRLLUIAA.js +49 -0
- package/dist/app-WR6PQ2YK.js +37 -0
- package/dist/app.js +13 -13
- package/dist/bam-EXBXKUSE.js +859 -0
- package/dist/barchart-FSIB3IZZ.js +47 -0
- package/dist/barchart.events-F4HSVH6M.js +47 -0
- package/dist/barchart.integration.spec-AXE7BRKX.js +2243 -0
- package/dist/barchart2-DRNQQJE2.js +314 -0
- package/dist/block-J3A3RIGS.js +6255 -0
- package/dist/block.init-MQKMDKKW.js +38 -0
- package/dist/block.mds.expressionrank-ZQEPPDEL.js +359 -0
- package/dist/block.mds.geneboxplot-VJTIMZ6H.js +828 -0
- package/dist/block.mds.junction-VTAMQ2CW.js +1545 -0
- package/dist/block.mds.svcnv-WG7WY3CS.js +6801 -0
- package/dist/block.svg-YTWYGSGO.js +164 -0
- package/dist/block.tk.aicheck-L4M55U63.js +283 -0
- package/dist/block.tk.ase-3OBVSGWM.js +365 -0
- package/dist/block.tk.bam-QUCP3HST.js +1906 -0
- package/dist/block.tk.bedgraphdot-BGAH5YPF.js +384 -0
- package/dist/block.tk.bigwig.ui-2MG6VMOE.js +211 -0
- package/dist/block.tk.hicstraw-MDQHFWBB.js +823 -0
- package/dist/block.tk.junction-PBCJTAFX.js +2364 -0
- package/dist/block.tk.junction.textmatrixui-FJR76QBO.js +199 -0
- package/dist/block.tk.ld-ISL7K3DH.js +99 -0
- package/dist/block.tk.menu-VQW3FUAF.js +1029 -0
- package/dist/block.tk.pgv-RMXDF3XD.js +944 -0
- package/dist/brainImaging-F4GZRF53.js +423 -0
- package/dist/brainRegions-ONUXPD7P.js +221 -0
- package/dist/bubbleHeatmap-ZOS2ME3T.js +383 -0
- package/dist/cellTypeBubbleHeatmap-BEVDWLHJ.js +283 -0
- package/dist/chunk-2JQWA4EO.js +6364 -0
- package/dist/chunk-2TWVFQD2.js +494 -0
- package/dist/chunk-2TWVFQD2.js.map +7 -0
- package/dist/chunk-2TZITKMT.js +498 -0
- package/dist/chunk-4BDOPNYW.js +129 -0
- package/dist/chunk-4G6ZGXZF.js +1338 -0
- package/dist/chunk-4G6ZGXZF.js.map +7 -0
- package/dist/chunk-4QW2O66J.js +22695 -0
- package/dist/chunk-4QW2O66J.js.map +7 -0
- package/dist/chunk-4RWLKZMS.js +480 -0
- package/dist/chunk-57GCW5SF.js +2899 -0
- package/dist/chunk-5RUVBYLK.js +117 -0
- package/dist/chunk-5YOZ4E5H.js +55 -0
- package/dist/chunk-6N5DNN7P.js +302 -0
- package/dist/chunk-73PFJ2VF.js +21517 -0
- package/dist/chunk-73PFJ2VF.js.map +7 -0
- package/dist/chunk-AOVDTRFY.js +272 -0
- package/dist/chunk-BIDQ4OZH.js +465 -0
- package/dist/chunk-C34UTN5M.js +292 -0
- package/dist/chunk-DFHSLHXZ.js +134 -0
- package/dist/chunk-DMOTISFN.js +835 -0
- package/dist/chunk-DMOTISFN.js.map +7 -0
- package/dist/chunk-E2JRANYL.js +299 -0
- package/dist/chunk-E6EA7IU7.js +1172 -0
- package/dist/chunk-E6EA7IU7.js.map +7 -0
- package/dist/chunk-E732F6XI.js +141 -0
- package/dist/chunk-E732F6XI.js.map +7 -0
- package/dist/chunk-FESRWKYY.js +203 -0
- package/dist/chunk-GMJSMF7P.js +5070 -0
- package/dist/chunk-H6INPPUC.js +784 -0
- package/dist/chunk-H6INPPUC.js.map +7 -0
- package/dist/chunk-HDPL53U4.js +14 -0
- package/dist/chunk-HOCICSX4.js +276 -0
- package/dist/chunk-HR7XPTAV.js +340 -0
- package/dist/chunk-HR7XPTAV.js.map +7 -0
- package/dist/chunk-HV3GD2F3.js +54 -0
- package/dist/chunk-IGVKT4CE.js +56 -0
- package/dist/chunk-IMKIDF2H.js +123 -0
- package/dist/chunk-ITKMNOLR.js +37 -0
- package/dist/chunk-JABW3SRG.js +217 -0
- package/dist/chunk-JTYQX3EE.js +4306 -0
- package/dist/chunk-JTYQX3EE.js.map +7 -0
- package/dist/chunk-KDNYUHAH.js +70 -0
- package/dist/chunk-KSA3ND7Z.js +2327 -0
- package/dist/chunk-LCRPBPKX.js +34 -0
- package/dist/chunk-NIZTWHGT.js +514 -0
- package/dist/chunk-OBRVYT5O.js +187 -0
- package/dist/chunk-OBRVYT5O.js.map +7 -0
- package/dist/chunk-OCC5HEPR.js +411 -0
- package/dist/chunk-OMIUJ7JT.js +448 -0
- package/dist/chunk-ONCG5AKF.js +160 -0
- package/dist/chunk-OW5LD7S2.js +102 -0
- package/dist/chunk-PY4QOYPK.js +102 -0
- package/dist/chunk-Q3QY7QGU.js +50 -0
- package/dist/chunk-RL3IRMOA.js +236 -0
- package/dist/chunk-SCOFWMSE.js +240 -0
- package/dist/chunk-SMOHPEMJ.js +2681 -0
- package/dist/chunk-SNL7MSZD.js +243 -0
- package/dist/chunk-SP7HDNXC.js +368 -0
- package/dist/chunk-UILBQKQ6.js +143 -0
- package/dist/chunk-USH6NWXA.js +1943 -0
- package/dist/chunk-USH6NWXA.js.map +7 -0
- package/dist/chunk-UTNJA7JC.js +381 -0
- package/dist/chunk-VJCJCDFI.js +142 -0
- package/dist/chunk-VSSZJHOR.js +473 -0
- package/dist/chunk-W2WOZNEN.js +158 -0
- package/dist/chunk-WGRJEQT7.js +1250 -0
- package/dist/chunk-WGRJEQT7.js.map +7 -0
- package/dist/chunk-WJTRQ3ZC.js +1710 -0
- package/dist/chunk-X4QQRHFB.js +1812 -0
- package/dist/chunk-Y2UCJ33M.js +263 -0
- package/dist/chunk-Y45RZL4F.js +98 -0
- package/dist/chunk-YAISXQJ5.js +626 -0
- package/dist/chunk-YAISXQJ5.js.map +7 -0
- package/dist/chunk-Z2TA7NML.js +352 -0
- package/dist/chunk-Z7U74YGW.js +222 -0
- package/dist/chunk-ZKMBNB5E.js +176 -0
- package/dist/chunk-ZPBG6CT3.js +100 -0
- package/dist/chunk-ZUDSOVYT.js +2784 -0
- package/dist/chunk-ZZMIDYRE.js +197 -0
- package/dist/chunk-ZZMIDYRE.js.map +7 -0
- package/dist/cohort-R743ZSCR.js +75 -0
- package/dist/condition-MPZIRRGP.js +332 -0
- package/dist/controls-WD5TZITZ.js +39 -0
- package/dist/controls.btns-KCLXBXSL.js +9 -0
- package/dist/controls.config-577UCREO.js +39 -0
- package/dist/correlation-OCFBDDOX.js +102 -0
- package/dist/cuminc-YJGCKHFM.js +1153 -0
- package/dist/cuminc-YJGCKHFM.js.map +7 -0
- package/dist/cuminc.integration.spec-V46K57GV.js +678 -0
- package/dist/customdata.inputui-2MS5ZRKC.js +289 -0
- package/dist/dataDownload-HBFKARTR.js +332 -0
- package/dist/dataDownload-HBFKARTR.js.map +7 -0
- package/dist/dataDownload.integration.spec-TEOJOMYK.js +193 -0
- package/dist/databrowser.ui-PDPFHOH7.js +432 -0
- package/dist/dictionary-MWUQYW6W.js +118 -0
- package/dist/dnaMethylation-SNVVE2MD.js +38 -0
- package/dist/dnaMethylation.integration.spec-OSYZ3YDP.js +203 -0
- package/dist/dofetch-7R7PL4BX.js +51 -0
- package/dist/e2pca-7FYIWR5O.js +350 -0
- package/dist/ep-PTAJZLKI.js +1256 -0
- package/dist/expclust.gdc.spec-2R7T7JPY.js +307 -0
- package/dist/facet-BY6DQRCA.js +521 -0
- package/dist/facet-BY6DQRCA.js.map +7 -0
- package/dist/gb-5UFIDQWY.js +88 -0
- package/dist/geneExpClustering-QLBETGVB.js +249 -0
- package/dist/geneExpression-SAMLSOHQ.js +38 -0
- package/dist/geneExpression-SECTPIDT.js +313 -0
- package/dist/geneExpression.unit.spec-UNRGPJIG.js +102 -0
- package/dist/geneORA-CCQGE7QL.js +278 -0
- package/dist/geneRanking-NVR7ZZIP.js +553 -0
- package/dist/geneVariant-5KL2J3NA.js +39 -0
- package/dist/geneVariant-72E5YEPJ.js +41 -0
- package/dist/geneVariant.integration.spec-7JLVYF7Q.js +198 -0
- package/dist/genefusion.ui-M3IG6NUU.js +308 -0
- package/dist/geneset-V2535XGY.js +208 -0
- package/dist/genomeBrowser.spec-TRREAQCH.js +281 -0
- package/dist/grin2-6X5GCPBQ.js +75 -0
- package/dist/grin2-GOO7H3RC.js +1143 -0
- package/dist/hierCluster-5YZOCCTV.js +63 -0
- package/dist/hierCluster-ZPQCUSVO.js +59 -0
- package/dist/hierCluster.config-T3Y2LS6V.js +40 -0
- package/dist/hierCluster.integration.spec-PTXVQH77.js +488 -0
- package/dist/hierCluster.interactivity-JNBO3MJB.js +54 -0
- package/dist/imagePlot-AH2JIGVN.js +163 -0
- package/dist/imagePlot-AH2JIGVN.js.map +7 -0
- package/dist/importPlot-CWMBFQDD.js +8 -0
- package/dist/isoformExpression-ABPY2N3A.js +40 -0
- package/dist/isoformExpression.unit.spec-KRAZBQVF.js +242 -0
- package/dist/junction-XGCBNVHV.js +41 -0
- package/dist/junction.unit.spec-XZFUJRI3.js +187 -0
- package/dist/launch.adhoc-7FJD3XSI.js +42 -0
- package/dist/leftlabel.sample-VPOZWRVY.js +263 -0
- package/dist/lollipop-WBOAFWWO.js +171 -0
- package/dist/maf-MMN6WYHA.js +460 -0
- package/dist/maf-MMN6WYHA.js.map +7 -0
- package/dist/maftimeline-UK4MQP2D.js +593 -0
- package/dist/matrix-AT2FFTWO.js +58 -0
- package/dist/matrix-AU6NPNID.js +63 -0
- package/dist/matrix.config-VTQ6HL5L.js +41 -0
- package/dist/matrix.data-DBYXSWIN.js +25 -0
- package/dist/matrix.dom-DDPSUNY2.js +11 -0
- package/dist/matrix.integration.spec-NJ2AXQAS.js +3072 -0
- package/dist/matrix.interactivity-HE2Q6SAO.js +42 -0
- package/dist/matrix.layout-FD5BPRCX.js +44 -0
- package/dist/matrix.renderers-DVM4NB2R.js +38 -0
- package/dist/matrix.sort.unit.spec-VQ3TR4S2.js +472 -0
- package/dist/matrix.sorterUi-4KYRGJT5.js +18 -0
- package/dist/matrix.sorterUi.unit.spec-IEHG3OKN.js +342 -0
- package/dist/mavb-RPRKXPTZ.js +732 -0
- package/dist/mds.fimo-PZCVBD44.js +518 -0
- package/dist/mds.samplescatterplot-236GTHM4.js +1550 -0
- package/dist/mds.survivalplot-IJHOWSZL.js +483 -0
- package/dist/oncomatrix-R4OKDXSV.js +295 -0
- package/dist/oncomatrix.spec-4Z4HKS44.js +448 -0
- package/dist/plot.2dvaf-ZK7DAKRQ.js +377 -0
- package/dist/plot.app-J66BA2LD.js +41 -0
- package/dist/plot.barplot-UVRVPOKA.js +102 -0
- package/dist/plot.boxplot-DQGBDNLU.js +152 -0
- package/dist/plot.brainImaging-WRMDYYHC.js +51 -0
- package/dist/plot.disco-SSGPSM7W.js +102 -0
- package/dist/plot.dzi-F77KKPIJ.js +33 -0
- package/dist/plot.ssgq-FVFJOYVO.js +139 -0
- package/dist/plot.vaf2cov-CJSYBSPQ.js +259 -0
- package/dist/plot.wsi-OSZU2PQ5.js +36 -0
- package/dist/polar2-R4ZKXKEV.js +237 -0
- package/dist/profileForms-F7LXHITE.js +940 -0
- package/dist/profileForms-F7LXHITE.js.map +7 -0
- package/dist/profilePlot-JU7SFYYY.js +54 -0
- package/dist/proteinView-VU4SVO5I.js +1568 -0
- package/dist/proteomeCohortCompare-2U537GOK.js +799 -0
- package/dist/pseudbulk.unit.spec-2FDKAEVI.js +91 -0
- package/dist/pseudobulk-5GBUBBOY.js +40 -0
- package/dist/qualitative-3FTEQ7JW.js +43 -0
- package/dist/radar2-EBOTTAMC.js +332 -0
- package/dist/radarFacility2-PAGNJR6D.js +340 -0
- package/dist/regression-XOVSVC7S.js +58 -0
- package/dist/regression.inputs-LGA67ESO.js +48 -0
- package/dist/regression.inputs.term-UCQKXC5D.js +50 -0
- package/dist/regression.inputs.values.table-2RRE7SMS.js +45 -0
- package/dist/regression.integration.spec-BKM5UI7H.js +838 -0
- package/dist/regression.results-T3HB6CBH.js +40 -0
- package/dist/regression.spec-W7IVCYVZ.js +708 -0
- package/dist/render-2C6LWNG2.js +38 -0
- package/dist/report-HRGU3XKL.js +222 -0
- package/dist/sampleView-P5JZHEKY.js +48 -0
- package/dist/samplelst-OYQ6BASU.js +111 -0
- package/dist/samplematrix-JC3SGO5V.js +2198 -0
- package/dist/sc-FTHUNDGY.js +86 -0
- package/dist/scatter-WYP2NPNB.js +890 -0
- package/dist/selectGenomeWithTklst-CIETKILP.js +134 -0
- package/dist/singleCellCellType-3O3TTLM6.js +38 -0
- package/dist/singleCellCellType.unit.spec-GHBS36DB.js +159 -0
- package/dist/singleCellGeneExpression-2F7F4EKK.js +38 -0
- package/dist/singleCellGeneExpression.unit.spec-2VGIH2NZ.js +153 -0
- package/dist/singleCellPlot-MGSS4O3L.js +54 -0
- package/dist/singlecell-CKC2VVJ3.js +86 -0
- package/dist/singlecell-QOXATRF4.js +1572 -0
- package/dist/snp-OSYJO2R7.js +38 -0
- package/dist/snp.unit.spec-L5ANPFO2.js +176 -0
- package/dist/snplocus-64MJJID2.js +208 -0
- package/dist/spliceevent.a53ss.diagram-LHRT5UPB.js +151 -0
- package/dist/spliceevent.exonskip.diagram-BGSEPGR5.js +283 -0
- package/dist/spliceevent.noeventdiagram-QGZZSKW7.js +460 -0
- package/dist/ssGSEA-VVAZDFDT.js +38 -0
- package/dist/ssGSEA.unit.spec-LP76RHTV.js +88 -0
- package/dist/stattable-55YGV5B4.js +122 -0
- package/dist/stattable-55YGV5B4.js.map +7 -0
- package/dist/studyCatalog-AXWH7IOH.js +358 -0
- package/dist/summarizeCnvGeneexp-DRBIXOAP.js +163 -0
- package/dist/summarizeGeneexpSurvival-4PATAUSN.js +110 -0
- package/dist/summarizeMutationCnv-UGSIGZDJ.js +164 -0
- package/dist/summarizeMutationDiagnosis-UATVI5BK.js +40 -0
- package/dist/summarizeMutationSurvival-CZXGM3AA.js +99 -0
- package/dist/summary-IGTXNQ5I.js +49 -0
- package/dist/summary.integration.spec-VFCYU2V6.js +414 -0
- package/dist/summaryInput-AFZSASTM.js +231 -0
- package/dist/sunburst-G7DBI637.js +284 -0
- package/dist/survival-GIRR5ML4.js +1247 -0
- package/dist/survival-GIRR5ML4.js.map +7 -0
- package/dist/survival-YOJBLMR2.js +58 -0
- package/dist/survival.integration.spec-FXPCZJSS.js +958 -0
- package/dist/svgraph-ZSSOWI7R.js +1387 -0
- package/dist/svmr-FPYSMXSC.js +3842 -0
- package/dist/table-NHS2WLWT.js +202 -0
- package/dist/table-NHS2WLWT.js.map +7 -0
- package/dist/termCollection-IY5V64IY.js +38 -0
- package/dist/termCollection-SR4SP6RZ.js +257 -0
- package/dist/termCollection.unit.spec-NL72AQ2P.js +304 -0
- package/dist/termCollectionFractionSelection-2LPBE224.js +47 -0
- package/dist/termCollectionFractionSelection.unit.spec-PUMGBUDN.js +193 -0
- package/dist/termInfo-2DR7DHXM.js +9 -0
- package/dist/tk-COBDWIZJ.js +1127 -0
- package/dist/tk-N2YBXDQK.js +46 -0
- package/dist/tp.ui-BMK2MMIJ.js +1459 -0
- package/dist/tvs.dt-KL4VCW5Y.js +39 -0
- package/dist/tvs.dtcnv.categorical-VGXOASJE.js +40 -0
- package/dist/tvs.dtcnv.continuous-IANT7BPS.js +72 -0
- package/dist/tvs.dtfusion-M5HJWCJI.js +40 -0
- package/dist/tvs.dtitd-KB72EDPN.js +40 -0
- package/dist/tvs.dtsnvindel-VGYTLO6E.js +40 -0
- package/dist/tvs.dtsv-KWUXW2F5.js +40 -0
- package/dist/tvs.samplelst-3UA7XMHJ.js +104 -0
- package/dist/tvs.termCollection-LK6CVGYZ.js +129 -0
- package/dist/violin-D4EX3ZFV.js +46 -0
- package/dist/violin.integration.spec-GBW3VBHW.js +1425 -0
- package/dist/violin.interactivity-N3JVI2AQ.js +38 -0
- package/dist/violin.renderer-2NYRUXUY.js +40 -0
- package/dist/vocabulary-277KD4RO.js +41 -0
- package/dist/wsi.direct-RI3XGLUC.js +81 -0
- package/dist/wsi.direct-RI3XGLUC.js.map +7 -0
- package/package.json +2 -2
- package/dist/2dmaf-6MNHNHWX.js +0 -1373
- package/dist/AIProjectAdmin-W36NGUX2.js +0 -958
- package/dist/AggregateMatrix-YH2SN6VN.js +0 -671
- package/dist/AppHeader-I5CFECIL.js +0 -835
- package/dist/BoxPlot-4SXDAOBP.js +0 -1218
- package/dist/CorrelationVolcano-NAWMGG4Q.js +0 -619
- package/dist/CorrelationVolcano-NAWMGG4Q.js.map +0 -7
- package/dist/DE-VZMT7KEM.js +0 -95
- package/dist/DEinput-TKERM2YD.js +0 -409
- package/dist/DEinput-TKERM2YD.js.map +0 -7
- package/dist/DifferentialAnalysis-Y4SU4BVP.js +0 -243
- package/dist/Disco-DLK3BYPV.js +0 -3392
- package/dist/Disco.UI-IKGMFG36.js +0 -248
- package/dist/DmrPlot-JWBZJFS6.js +0 -642
- package/dist/DziViewer-6737GC22.js +0 -16332
- package/dist/GB-3UZSSIBW.js +0 -1396
- package/dist/GSEA-YLHBZY55.js +0 -846
- package/dist/GeneExpInput-KX5I63YV.js +0 -367
- package/dist/Geomap-QTUHM4VH.js +0 -89
- package/dist/HicApp-M2OCHGRT.js +0 -2250
- package/dist/IDCViewer-SWFBLBZH.js +0 -10817
- package/dist/NumBinaryEditor-ILFP6DR7.js +0 -284
- package/dist/NumBinaryEditor.unit.spec-TNIH7GQB.js +0 -317
- package/dist/NumContEditor-7UR3QMO6.js +0 -110
- package/dist/NumContEditor.unit.spec-P67AFEHM.js +0 -169
- package/dist/NumCustomBinEditor-H22J4K47.js +0 -38
- package/dist/NumCustomBinEditor.unit.spec-CO76BQPZ.js +0 -402
- package/dist/NumDiscreteEditor-TSUHVX77.js +0 -175
- package/dist/NumDiscreteEditor.unit.spec-RGC3GT22.js +0 -238
- package/dist/NumRegularBinEditor-IRD27CE2.js +0 -38
- package/dist/NumRegularBinEditor.unit.spec-MUHVOK5P.js +0 -283
- package/dist/NumSplineEditor-3V7RWHE2.js +0 -215
- package/dist/NumSplineEditor.unit.spec-BUI7NPN4.js +0 -229
- package/dist/NumericDensity-53KMCTDL.js +0 -38
- package/dist/NumericDensity.unit.spec-OKAQPQHR.js +0 -423
- package/dist/NumericHandler-5QFNXVBA.js +0 -39
- package/dist/NumericHandler.unit.spec-OBITSUU3.js +0 -219
- package/dist/ProteomeInput-MM373EL3.js +0 -394
- package/dist/RunChart2-2L6T3ITZ.js +0 -758
- package/dist/SC-JKD3Z2X5.js +0 -1112
- package/dist/Volcano-STGBS7IJ.js +0 -1404
- package/dist/Volcano-STGBS7IJ.js.map +0 -7
- package/dist/WSIViewer-LOBVUTOD.js +0 -48562
- package/dist/WSIViewer-LOBVUTOD.js.map +0 -7
- package/dist/WsiSamplesPlot-D3L3AILR.js +0 -165
- package/dist/adSandbox-XO5HDSFW.js +0 -38
- package/dist/animatedBubbleChart-XKW6TCZP.js +0 -553
- package/dist/app-H7ABTG6X.js +0 -49
- package/dist/app-HJSPIKRQ.js +0 -37
- package/dist/bam-R5QVHWGY.js +0 -859
- package/dist/barchart-OGCLBPQ2.js +0 -47
- package/dist/barchart.events-GZTY4IC3.js +0 -47
- package/dist/barchart.integration.spec-Z6ECNFSM.js +0 -2243
- package/dist/barchart2-DT42I747.js +0 -314
- package/dist/block-UYYJXSCM.js +0 -6255
- package/dist/block.init-43M53IMA.js +0 -38
- package/dist/block.mds.expressionrank-YH3IWMKM.js +0 -359
- package/dist/block.mds.geneboxplot-QS2IK37X.js +0 -828
- package/dist/block.mds.junction-7FF5BFEX.js +0 -1545
- package/dist/block.mds.svcnv-MMJYLL2W.js +0 -6801
- package/dist/block.svg-SA6DSUM2.js +0 -164
- package/dist/block.tk.aicheck-ZX5LZ2QO.js +0 -283
- package/dist/block.tk.ase-YXT4BOXK.js +0 -365
- package/dist/block.tk.bam-IMLRIOOV.js +0 -1906
- package/dist/block.tk.bedgraphdot-UYQLL7HM.js +0 -384
- package/dist/block.tk.bigwig.ui-WUVLVRSM.js +0 -211
- package/dist/block.tk.hicstraw-N4SJGF7H.js +0 -823
- package/dist/block.tk.junction-LZWHFKWJ.js +0 -2364
- package/dist/block.tk.junction.textmatrixui-B626NYPA.js +0 -199
- package/dist/block.tk.ld-6VWUMAP6.js +0 -99
- package/dist/block.tk.menu-RRN2UPQX.js +0 -1029
- package/dist/block.tk.pgv-GYG3EI6P.js +0 -944
- package/dist/brainImaging-VIMLETC5.js +0 -423
- package/dist/brainRegions-DRYZT5K5.js +0 -221
- package/dist/bubbleHeatmap-Y4SGMVJY.js +0 -383
- package/dist/cellTypeBubbleHeatmap-QW37ZT5W.js +0 -283
- package/dist/chunk-2Y5C7GJS.js +0 -299
- package/dist/chunk-2ZTCRUOL.js +0 -2899
- package/dist/chunk-3O6XFPUB.js +0 -243
- package/dist/chunk-3P74DH6P.js +0 -236
- package/dist/chunk-3PPCZPLN.js +0 -98
- package/dist/chunk-4H4WJJ2G.js +0 -54
- package/dist/chunk-4KY4XKJV.js +0 -143
- package/dist/chunk-4L2OSDQ6.js +0 -626
- package/dist/chunk-4L2OSDQ6.js.map +0 -7
- package/dist/chunk-4USLEUNR.js +0 -1812
- package/dist/chunk-5ITKSTJX.js +0 -34
- package/dist/chunk-5VMYXVZG.js +0 -272
- package/dist/chunk-7ZVFLC2V.js +0 -134
- package/dist/chunk-C2JHLAKV.js +0 -222
- package/dist/chunk-C5IAIOCA.js +0 -102
- package/dist/chunk-CIRCVMWE.js +0 -102
- package/dist/chunk-CRH37PEV.js +0 -203
- package/dist/chunk-DCNDZOI3.js +0 -6364
- package/dist/chunk-DHPLHIVP.js +0 -498
- package/dist/chunk-DKAHHMKN.js +0 -5070
- package/dist/chunk-ECIBJXFT.js +0 -352
- package/dist/chunk-EQCVSUAF.js +0 -37
- package/dist/chunk-FVL37XFU.js +0 -834
- package/dist/chunk-FVL37XFU.js.map +0 -7
- package/dist/chunk-FXS4I3Z3.js +0 -176
- package/dist/chunk-FYAY6D3O.js +0 -123
- package/dist/chunk-GL44X7JY.js +0 -302
- package/dist/chunk-HQAJVJCQ.js +0 -195
- package/dist/chunk-HQAJVJCQ.js.map +0 -7
- package/dist/chunk-IIT367QZ.js +0 -473
- package/dist/chunk-IYT5PNYJ.js +0 -148
- package/dist/chunk-IYT5PNYJ.js.map +0 -7
- package/dist/chunk-J6EP7JPJ.js +0 -1245
- package/dist/chunk-J6EP7JPJ.js.map +0 -7
- package/dist/chunk-JKMN7XOP.js +0 -1114
- package/dist/chunk-JKMN7XOP.js.map +0 -7
- package/dist/chunk-JLGCQ2F4.js +0 -480
- package/dist/chunk-JQT67SWE.js +0 -263
- package/dist/chunk-JQYPRW42.js +0 -217
- package/dist/chunk-K4IGOJPT.js +0 -160
- package/dist/chunk-K6OVOHIZ.js +0 -21483
- package/dist/chunk-K6OVOHIZ.js.map +0 -7
- package/dist/chunk-KPTPDZX2.js +0 -56
- package/dist/chunk-KTB7KXC2.js +0 -187
- package/dist/chunk-KTB7KXC2.js.map +0 -7
- package/dist/chunk-KW7MKBGF.js +0 -2681
- package/dist/chunk-KZFVYDVK.js +0 -448
- package/dist/chunk-M3J4MINX.js +0 -783
- package/dist/chunk-M3J4MINX.js.map +0 -7
- package/dist/chunk-M77DCLJX.js +0 -100
- package/dist/chunk-MFEYO6FB.js +0 -4306
- package/dist/chunk-MFEYO6FB.js.map +0 -7
- package/dist/chunk-MUJMZ6W6.js +0 -129
- package/dist/chunk-NRP55BOF.js +0 -50
- package/dist/chunk-O5KFJBU3.js +0 -1942
- package/dist/chunk-O5KFJBU3.js.map +0 -7
- package/dist/chunk-Q4AP5L7R.js +0 -1311
- package/dist/chunk-Q4AP5L7R.js.map +0 -7
- package/dist/chunk-QHPN3JJZ.js +0 -55
- package/dist/chunk-QSGXZEUU.js +0 -465
- package/dist/chunk-RIQT2LSR.js +0 -479
- package/dist/chunk-RIQT2LSR.js.map +0 -7
- package/dist/chunk-RZGEKL77.js +0 -117
- package/dist/chunk-SOCGXVIL.js +0 -2327
- package/dist/chunk-SZHFBRRT.js +0 -514
- package/dist/chunk-TOYMIFHN.js +0 -381
- package/dist/chunk-TPVHGI7Q.js +0 -368
- package/dist/chunk-UJN2RH5R.js +0 -411
- package/dist/chunk-V2DU2OXH.js +0 -1710
- package/dist/chunk-X7KRSZQT.js +0 -2784
- package/dist/chunk-XIBY5I6F.js +0 -240
- package/dist/chunk-XJBSBIZ4.js +0 -70
- package/dist/chunk-XRQWZJJ3.js +0 -347
- package/dist/chunk-XRQWZJJ3.js.map +0 -7
- package/dist/chunk-XZ4M3QAV.js +0 -158
- package/dist/chunk-YMP4YKBN.js +0 -142
- package/dist/chunk-Z7VK2AMA.js +0 -292
- package/dist/chunk-ZH7JPYQE.js +0 -14
- package/dist/chunk-ZVDOSFWU.js +0 -276
- package/dist/cohort-CEYVJJ7E.js +0 -75
- package/dist/condition-QSOFP4MY.js +0 -332
- package/dist/controls-QYHARIEY.js +0 -39
- package/dist/controls.btns-AP67YWKW.js +0 -9
- package/dist/controls.config-3OO3JK6E.js +0 -39
- package/dist/correlation-TOI3TMYL.js +0 -102
- package/dist/cuminc-L7OJTYXC.js +0 -1148
- package/dist/cuminc-L7OJTYXC.js.map +0 -7
- package/dist/cuminc.integration.spec-LSWV3KOF.js +0 -678
- package/dist/customdata.inputui-VMB3HSSC.js +0 -289
- package/dist/dataDownload-NPSWNOAG.js +0 -330
- package/dist/dataDownload-NPSWNOAG.js.map +0 -7
- package/dist/dataDownload.integration.spec-J6FRFLBK.js +0 -193
- package/dist/databrowser.ui-GVYWG6YI.js +0 -432
- package/dist/dictionary-GD67R72W.js +0 -118
- package/dist/dnaMethylation-S7OSGLAF.js +0 -38
- package/dist/dnaMethylation.integration.spec-ETMMJNDE.js +0 -203
- package/dist/dofetch-7GURQS65.js +0 -51
- package/dist/e2pca-ZIIPBJFN.js +0 -350
- package/dist/ep-A2HAL5WA.js +0 -1256
- package/dist/expclust.gdc.spec-ZSILLYNI.js +0 -307
- package/dist/facet-74LKIPTA.js +0 -521
- package/dist/facet-74LKIPTA.js.map +0 -7
- package/dist/gb-C3MPQXKN.js +0 -88
- package/dist/geneExpClustering-HYCFUUTU.js +0 -249
- package/dist/geneExpression-GATKMJJ5.js +0 -313
- package/dist/geneExpression-JXSAP2H7.js +0 -38
- package/dist/geneExpression.unit.spec-CODZYFHZ.js +0 -102
- package/dist/geneORA-LJRIR4VV.js +0 -278
- package/dist/geneRanking-TWLBKQZG.js +0 -553
- package/dist/geneVariant-35RQHTCK.js +0 -41
- package/dist/geneVariant-TMJJIMUF.js +0 -39
- package/dist/geneVariant.integration.spec-FIQ7IBSD.js +0 -198
- package/dist/genefusion.ui-SOBESSNO.js +0 -308
- package/dist/geneset-JXEJFEK2.js +0 -208
- package/dist/genomeBrowser.spec-25ZO5S2X.js +0 -281
- package/dist/grin2-CW4RPVPI.js +0 -75
- package/dist/grin2-EI5BVP4E.js +0 -1143
- package/dist/hierCluster-OBBPQH24.js +0 -59
- package/dist/hierCluster-SDH3TJQY.js +0 -63
- package/dist/hierCluster.config-DO67TCXI.js +0 -40
- package/dist/hierCluster.integration.spec-EB24C4VZ.js +0 -488
- package/dist/hierCluster.interactivity-LGEAFT5T.js +0 -54
- package/dist/imagePlot-LGLFG2QZ.js +0 -163
- package/dist/imagePlot-LGLFG2QZ.js.map +0 -7
- package/dist/importPlot-R2WRZGZU.js +0 -8
- package/dist/isoformExpression-KI3WY5M3.js +0 -40
- package/dist/isoformExpression.unit.spec-OQRG2DDU.js +0 -242
- package/dist/junction-6SWFPNM5.js +0 -41
- package/dist/junction.unit.spec-5TZFITSU.js +0 -187
- package/dist/launch.adhoc-HCX2RQLB.js +0 -42
- package/dist/leftlabel.sample-OI6XCXTQ.js +0 -263
- package/dist/lollipop-SOSOYHYL.js +0 -171
- package/dist/maf-73RLOEVN.js +0 -459
- package/dist/maf-73RLOEVN.js.map +0 -7
- package/dist/maftimeline-UOMLYUNI.js +0 -593
- package/dist/matrix-5QWDN6SI.js +0 -63
- package/dist/matrix-SKPVVDVR.js +0 -58
- package/dist/matrix.config-HE64MAL4.js +0 -41
- package/dist/matrix.data-HTUZXQAM.js +0 -25
- package/dist/matrix.dom-F7AN3QGE.js +0 -11
- package/dist/matrix.integration.spec-YKJ4LZFY.js +0 -3072
- package/dist/matrix.interactivity-YB5G5W5T.js +0 -42
- package/dist/matrix.layout-MFG65V7K.js +0 -44
- package/dist/matrix.renderers-PCZFHDDZ.js +0 -38
- package/dist/matrix.sort.unit.spec-GEAM5DSU.js +0 -472
- package/dist/matrix.sorterUi-YSKIX6B6.js +0 -18
- package/dist/matrix.sorterUi.unit.spec-2MW64QS5.js +0 -342
- package/dist/mavb-YMHJXCGA.js +0 -732
- package/dist/mds.fimo-PTEDRMLQ.js +0 -518
- package/dist/mds.samplescatterplot-7R7PLVQJ.js +0 -1550
- package/dist/mds.survivalplot-F3EENMFQ.js +0 -483
- package/dist/oncomatrix-27VVSMZB.js +0 -295
- package/dist/oncomatrix.spec-F43Y7CWN.js +0 -448
- package/dist/plot.2dvaf-MYFQSWIA.js +0 -377
- package/dist/plot.app-36QWCKXR.js +0 -41
- package/dist/plot.barplot-535EP7XT.js +0 -102
- package/dist/plot.boxplot-6IBP7VEB.js +0 -152
- package/dist/plot.brainImaging-M4HPNXZH.js +0 -51
- package/dist/plot.disco-HIT6GR44.js +0 -102
- package/dist/plot.dzi-W66SBKTH.js +0 -33
- package/dist/plot.ssgq-MI2OMCUY.js +0 -139
- package/dist/plot.vaf2cov-F4CBMLRA.js +0 -259
- package/dist/plot.wsi-7M5KTNFC.js +0 -36
- package/dist/polar2-7VSWGT4U.js +0 -237
- package/dist/profileForms-DFPCNJW2.js +0 -940
- package/dist/profileForms-DFPCNJW2.js.map +0 -7
- package/dist/profilePlot-ECTPPVB2.js +0 -54
- package/dist/proteinView-6ELOLOIU.js +0 -1568
- package/dist/proteomeCohortCompare-V2FMWI62.js +0 -799
- package/dist/pseudbulk.unit.spec-KV6URTXC.js +0 -91
- package/dist/pseudobulk-6ZRFCE65.js +0 -40
- package/dist/qualitative-3B62RUOB.js +0 -43
- package/dist/radar2-4QQER64E.js +0 -332
- package/dist/radarFacility2-MZKORRDY.js +0 -340
- package/dist/regression-GZ2YNX6Y.js +0 -56
- package/dist/regression.inputs-ZEFDNSVT.js +0 -48
- package/dist/regression.inputs.term-O2FQBX7L.js +0 -48
- package/dist/regression.inputs.values.table-63BQKSZP.js +0 -45
- package/dist/regression.integration.spec-KDHC3KDU.js +0 -838
- package/dist/regression.results-5J3QM4RX.js +0 -40
- package/dist/regression.spec-WZAZTDDA.js +0 -708
- package/dist/render-MZTEXVU5.js +0 -38
- package/dist/report-M5TYHH2W.js +0 -222
- package/dist/sampleView-QYTLYJEW.js +0 -48
- package/dist/samplelst-FN3Q7M7A.js +0 -111
- package/dist/samplematrix-Z5FVODO7.js +0 -2198
- package/dist/sc-4CHP5SYP.js +0 -86
- package/dist/scatter-UOPJYXL3.js +0 -890
- package/dist/selectGenomeWithTklst-WMAHGT4F.js +0 -134
- package/dist/singleCellCellType-XPWENB6V.js +0 -38
- package/dist/singleCellCellType.unit.spec-QK56PHKW.js +0 -159
- package/dist/singleCellGeneExpression-4CEVDVYF.js +0 -38
- package/dist/singleCellGeneExpression.unit.spec-ZYRLBVF5.js +0 -153
- package/dist/singleCellPlot-JS74VUGC.js +0 -54
- package/dist/singlecell-5XYOHMWJ.js +0 -1572
- package/dist/singlecell-OO77XBDD.js +0 -86
- package/dist/snp-X5ZILM5J.js +0 -38
- package/dist/snp.unit.spec-V23G3JLJ.js +0 -176
- package/dist/snplocus-U5UIIUWR.js +0 -208
- package/dist/spliceevent.a53ss.diagram-YDFVSDMT.js +0 -151
- package/dist/spliceevent.exonskip.diagram-VDKN5JBE.js +0 -283
- package/dist/spliceevent.noeventdiagram-EFPFRUFI.js +0 -460
- package/dist/ssGSEA-LKJW5OQK.js +0 -38
- package/dist/ssGSEA.unit.spec-7WCZVEP2.js +0 -88
- package/dist/stattable-MDABSW3F.js +0 -90
- package/dist/stattable-MDABSW3F.js.map +0 -7
- package/dist/studyCatalog-EU33KE5H.js +0 -358
- package/dist/summarizeCnvGeneexp-QL25OQNB.js +0 -163
- package/dist/summarizeGeneexpSurvival-B7HTCH7L.js +0 -110
- package/dist/summarizeMutationCnv-DFAPX2JE.js +0 -164
- package/dist/summarizeMutationDiagnosis-HCSDSVII.js +0 -40
- package/dist/summarizeMutationSurvival-6WEASSA2.js +0 -99
- package/dist/summary-BWYXE77G.js +0 -49
- package/dist/summary.integration.spec-AVGSW5MF.js +0 -414
- package/dist/summaryInput-MOQ6HUCX.js +0 -231
- package/dist/sunburst-EZDHVJCL.js +0 -284
- package/dist/survival-5TFMM7NP.js +0 -1239
- package/dist/survival-5TFMM7NP.js.map +0 -7
- package/dist/survival-IEVELTC4.js +0 -58
- package/dist/survival.integration.spec-HHWP3R4H.js +0 -958
- package/dist/svgraph-55XRIYJW.js +0 -1387
- package/dist/svmr-CMEBFSRO.js +0 -3842
- package/dist/table-LTWQ3TLQ.js +0 -200
- package/dist/table-LTWQ3TLQ.js.map +0 -7
- package/dist/termCollection-CPQXYBFA.js +0 -38
- package/dist/termCollection-ZWOH273K.js +0 -257
- package/dist/termCollection.unit.spec-RK7VATLU.js +0 -304
- package/dist/termCollectionFractionSelection-Z4ZRW63R.js +0 -47
- package/dist/termCollectionFractionSelection.unit.spec-3CS7DPNU.js +0 -193
- package/dist/termInfo-6MJDJSDW.js +0 -9
- package/dist/tk-4NNTWWLK.js +0 -46
- package/dist/tk-RHWJJXH2.js +0 -1127
- package/dist/tp.ui-DPN5UN6U.js +0 -1459
- package/dist/tvs.dt-ARPDFRVM.js +0 -39
- package/dist/tvs.dtcnv.categorical-POS6WQK6.js +0 -40
- package/dist/tvs.dtcnv.continuous-5OETJ7JU.js +0 -72
- package/dist/tvs.dtfusion-ERYVI3DW.js +0 -40
- package/dist/tvs.dtitd-KTZZYEWU.js +0 -40
- package/dist/tvs.dtsnvindel-TGUAX3RN.js +0 -40
- package/dist/tvs.dtsv-AM63OIL6.js +0 -40
- package/dist/tvs.samplelst-VW2NOQ2C.js +0 -104
- package/dist/tvs.termCollection-O4ZSWJFA.js +0 -129
- package/dist/violin-ZQ3DEYGR.js +0 -46
- package/dist/violin.integration.spec-PVEF77HB.js +0 -1425
- package/dist/violin.interactivity-FYU4TCFO.js +0 -38
- package/dist/violin.renderer-XAERGBMV.js +0 -40
- package/dist/vocabulary-ECJX27W2.js +0 -41
- /package/dist/{2dmaf-6MNHNHWX.js.map → 2dmaf-Y2MBOXHL.js.map} +0 -0
- /package/dist/{AIProjectAdmin-W36NGUX2.js.map → AIProjectAdmin-2W4WNV65.js.map} +0 -0
- /package/dist/{AggregateMatrix-YH2SN6VN.js.map → AggregateMatrix-7L7OKUXI.js.map} +0 -0
- /package/dist/{AppHeader-I5CFECIL.js.map → AppHeader-6WM66GKP.js.map} +0 -0
- /package/dist/{BoxPlot-4SXDAOBP.js.map → BoxPlot-AF72DMSS.js.map} +0 -0
- /package/dist/{DE-VZMT7KEM.js.map → DE-AABMOSEE.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-Y4SU4BVP.js.map → DifferentialAnalysis-NBC222Q6.js.map} +0 -0
- /package/dist/{Disco-DLK3BYPV.js.map → Disco-B6E3ALAV.js.map} +0 -0
- /package/dist/{Disco.UI-IKGMFG36.js.map → Disco.UI-KGFIQHXC.js.map} +0 -0
- /package/dist/{DmrPlot-JWBZJFS6.js.map → DmrPlot-R3S4PCAE.js.map} +0 -0
- /package/dist/{DziViewer-6737GC22.js.map → DziViewer-QYLZ4EMQ.js.map} +0 -0
- /package/dist/{GB-3UZSSIBW.js.map → GB-PV4RI5DG.js.map} +0 -0
- /package/dist/{GSEA-YLHBZY55.js.map → GSEA-DHUOROST.js.map} +0 -0
- /package/dist/{GeneExpInput-KX5I63YV.js.map → GeneExpInput-RESMBEM3.js.map} +0 -0
- /package/dist/{Geomap-QTUHM4VH.js.map → Geomap-2WACSP77.js.map} +0 -0
- /package/dist/{HicApp-M2OCHGRT.js.map → HicApp-3FJEZXAI.js.map} +0 -0
- /package/dist/{IDCViewer-SWFBLBZH.js.map → IDCViewer-MIRQEK4N.js.map} +0 -0
- /package/dist/{NumBinaryEditor-ILFP6DR7.js.map → NumBinaryEditor-EP277U4I.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-TNIH7GQB.js.map → NumBinaryEditor.unit.spec-ZB627VLG.js.map} +0 -0
- /package/dist/{NumContEditor-7UR3QMO6.js.map → NumContEditor-F7DOQSIW.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-P67AFEHM.js.map → NumContEditor.unit.spec-PROGQHTU.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-H22J4K47.js.map → NumCustomBinEditor-QS3IPKIQ.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-CO76BQPZ.js.map → NumCustomBinEditor.unit.spec-BRDEFIX6.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-TSUHVX77.js.map → NumDiscreteEditor-SE4I3BDA.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-RGC3GT22.js.map → NumDiscreteEditor.unit.spec-6GBWQ3NQ.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-IRD27CE2.js.map → NumRegularBinEditor-RJKB3G3V.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-MUHVOK5P.js.map → NumRegularBinEditor.unit.spec-HRU2Y76X.js.map} +0 -0
- /package/dist/{NumSplineEditor-3V7RWHE2.js.map → NumSplineEditor-2DCORF5E.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-BUI7NPN4.js.map → NumSplineEditor.unit.spec-TTNB5IXX.js.map} +0 -0
- /package/dist/{NumericDensity-53KMCTDL.js.map → NumericDensity-3A7KTA7Y.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-OKAQPQHR.js.map → NumericDensity.unit.spec-ISPDAUVX.js.map} +0 -0
- /package/dist/{NumericHandler-5QFNXVBA.js.map → NumericHandler-RG5XZMBU.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-OBITSUU3.js.map → NumericHandler.unit.spec-RTD7AZNE.js.map} +0 -0
- /package/dist/{ProteomeInput-MM373EL3.js.map → ProteomeInput-6A7UB4CI.js.map} +0 -0
- /package/dist/{RunChart2-2L6T3ITZ.js.map → RunChart2-YEAOBR2L.js.map} +0 -0
- /package/dist/{SC-JKD3Z2X5.js.map → SC-C3MJQBI5.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-D3L3AILR.js.map → WsiSamplesPlot-ET7LGNJW.js.map} +0 -0
- /package/dist/{adSandbox-XO5HDSFW.js.map → adSandbox-6LGHUXPX.js.map} +0 -0
- /package/dist/{animatedBubbleChart-XKW6TCZP.js.map → animatedBubbleChart-VJ6EQDQP.js.map} +0 -0
- /package/dist/{app-H7ABTG6X.js.map → app-PRLLUIAA.js.map} +0 -0
- /package/dist/{app-HJSPIKRQ.js.map → app-WR6PQ2YK.js.map} +0 -0
- /package/dist/{bam-R5QVHWGY.js.map → bam-EXBXKUSE.js.map} +0 -0
- /package/dist/{barchart-OGCLBPQ2.js.map → barchart-FSIB3IZZ.js.map} +0 -0
- /package/dist/{barchart.events-GZTY4IC3.js.map → barchart.events-F4HSVH6M.js.map} +0 -0
- /package/dist/{barchart.integration.spec-Z6ECNFSM.js.map → barchart.integration.spec-AXE7BRKX.js.map} +0 -0
- /package/dist/{barchart2-DT42I747.js.map → barchart2-DRNQQJE2.js.map} +0 -0
- /package/dist/{block-UYYJXSCM.js.map → block-J3A3RIGS.js.map} +0 -0
- /package/dist/{block.init-43M53IMA.js.map → block.init-MQKMDKKW.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-YH3IWMKM.js.map → block.mds.expressionrank-ZQEPPDEL.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-QS2IK37X.js.map → block.mds.geneboxplot-VJTIMZ6H.js.map} +0 -0
- /package/dist/{block.mds.junction-7FF5BFEX.js.map → block.mds.junction-VTAMQ2CW.js.map} +0 -0
- /package/dist/{block.mds.svcnv-MMJYLL2W.js.map → block.mds.svcnv-WG7WY3CS.js.map} +0 -0
- /package/dist/{block.svg-SA6DSUM2.js.map → block.svg-YTWYGSGO.js.map} +0 -0
- /package/dist/{block.tk.aicheck-ZX5LZ2QO.js.map → block.tk.aicheck-L4M55U63.js.map} +0 -0
- /package/dist/{block.tk.ase-YXT4BOXK.js.map → block.tk.ase-3OBVSGWM.js.map} +0 -0
- /package/dist/{block.tk.bam-IMLRIOOV.js.map → block.tk.bam-QUCP3HST.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-UYQLL7HM.js.map → block.tk.bedgraphdot-BGAH5YPF.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-WUVLVRSM.js.map → block.tk.bigwig.ui-2MG6VMOE.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-N4SJGF7H.js.map → block.tk.hicstraw-MDQHFWBB.js.map} +0 -0
- /package/dist/{block.tk.junction-LZWHFKWJ.js.map → block.tk.junction-PBCJTAFX.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-B626NYPA.js.map → block.tk.junction.textmatrixui-FJR76QBO.js.map} +0 -0
- /package/dist/{block.tk.ld-6VWUMAP6.js.map → block.tk.ld-ISL7K3DH.js.map} +0 -0
- /package/dist/{block.tk.menu-RRN2UPQX.js.map → block.tk.menu-VQW3FUAF.js.map} +0 -0
- /package/dist/{block.tk.pgv-GYG3EI6P.js.map → block.tk.pgv-RMXDF3XD.js.map} +0 -0
- /package/dist/{brainImaging-VIMLETC5.js.map → brainImaging-F4GZRF53.js.map} +0 -0
- /package/dist/{brainRegions-DRYZT5K5.js.map → brainRegions-ONUXPD7P.js.map} +0 -0
- /package/dist/{bubbleHeatmap-Y4SGMVJY.js.map → bubbleHeatmap-ZOS2ME3T.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-QW37ZT5W.js.map → cellTypeBubbleHeatmap-BEVDWLHJ.js.map} +0 -0
- /package/dist/{chunk-DCNDZOI3.js.map → chunk-2JQWA4EO.js.map} +0 -0
- /package/dist/{chunk-DHPLHIVP.js.map → chunk-2TZITKMT.js.map} +0 -0
- /package/dist/{chunk-MUJMZ6W6.js.map → chunk-4BDOPNYW.js.map} +0 -0
- /package/dist/{chunk-JLGCQ2F4.js.map → chunk-4RWLKZMS.js.map} +0 -0
- /package/dist/{chunk-2ZTCRUOL.js.map → chunk-57GCW5SF.js.map} +0 -0
- /package/dist/{chunk-RZGEKL77.js.map → chunk-5RUVBYLK.js.map} +0 -0
- /package/dist/{chunk-QHPN3JJZ.js.map → chunk-5YOZ4E5H.js.map} +0 -0
- /package/dist/{chunk-GL44X7JY.js.map → chunk-6N5DNN7P.js.map} +0 -0
- /package/dist/{chunk-5VMYXVZG.js.map → chunk-AOVDTRFY.js.map} +0 -0
- /package/dist/{chunk-QSGXZEUU.js.map → chunk-BIDQ4OZH.js.map} +0 -0
- /package/dist/{chunk-Z7VK2AMA.js.map → chunk-C34UTN5M.js.map} +0 -0
- /package/dist/{chunk-7ZVFLC2V.js.map → chunk-DFHSLHXZ.js.map} +0 -0
- /package/dist/{chunk-2Y5C7GJS.js.map → chunk-E2JRANYL.js.map} +0 -0
- /package/dist/{chunk-CRH37PEV.js.map → chunk-FESRWKYY.js.map} +0 -0
- /package/dist/{chunk-DKAHHMKN.js.map → chunk-GMJSMF7P.js.map} +0 -0
- /package/dist/{chunk-ZH7JPYQE.js.map → chunk-HDPL53U4.js.map} +0 -0
- /package/dist/{chunk-ZVDOSFWU.js.map → chunk-HOCICSX4.js.map} +0 -0
- /package/dist/{chunk-4H4WJJ2G.js.map → chunk-HV3GD2F3.js.map} +0 -0
- /package/dist/{chunk-KPTPDZX2.js.map → chunk-IGVKT4CE.js.map} +0 -0
- /package/dist/{chunk-FYAY6D3O.js.map → chunk-IMKIDF2H.js.map} +0 -0
- /package/dist/{chunk-EQCVSUAF.js.map → chunk-ITKMNOLR.js.map} +0 -0
- /package/dist/{chunk-JQYPRW42.js.map → chunk-JABW3SRG.js.map} +0 -0
- /package/dist/{chunk-XJBSBIZ4.js.map → chunk-KDNYUHAH.js.map} +0 -0
- /package/dist/{chunk-SOCGXVIL.js.map → chunk-KSA3ND7Z.js.map} +0 -0
- /package/dist/{chunk-5ITKSTJX.js.map → chunk-LCRPBPKX.js.map} +0 -0
- /package/dist/{chunk-SZHFBRRT.js.map → chunk-NIZTWHGT.js.map} +0 -0
- /package/dist/{chunk-UJN2RH5R.js.map → chunk-OCC5HEPR.js.map} +0 -0
- /package/dist/{chunk-KZFVYDVK.js.map → chunk-OMIUJ7JT.js.map} +0 -0
- /package/dist/{chunk-K4IGOJPT.js.map → chunk-ONCG5AKF.js.map} +0 -0
- /package/dist/{chunk-C5IAIOCA.js.map → chunk-OW5LD7S2.js.map} +0 -0
- /package/dist/{chunk-CIRCVMWE.js.map → chunk-PY4QOYPK.js.map} +0 -0
- /package/dist/{chunk-NRP55BOF.js.map → chunk-Q3QY7QGU.js.map} +0 -0
- /package/dist/{chunk-3P74DH6P.js.map → chunk-RL3IRMOA.js.map} +0 -0
- /package/dist/{chunk-XIBY5I6F.js.map → chunk-SCOFWMSE.js.map} +0 -0
- /package/dist/{chunk-KW7MKBGF.js.map → chunk-SMOHPEMJ.js.map} +0 -0
- /package/dist/{chunk-3O6XFPUB.js.map → chunk-SNL7MSZD.js.map} +0 -0
- /package/dist/{chunk-TPVHGI7Q.js.map → chunk-SP7HDNXC.js.map} +0 -0
- /package/dist/{chunk-4KY4XKJV.js.map → chunk-UILBQKQ6.js.map} +0 -0
- /package/dist/{chunk-TOYMIFHN.js.map → chunk-UTNJA7JC.js.map} +0 -0
- /package/dist/{chunk-YMP4YKBN.js.map → chunk-VJCJCDFI.js.map} +0 -0
- /package/dist/{chunk-IIT367QZ.js.map → chunk-VSSZJHOR.js.map} +0 -0
- /package/dist/{chunk-XZ4M3QAV.js.map → chunk-W2WOZNEN.js.map} +0 -0
- /package/dist/{chunk-V2DU2OXH.js.map → chunk-WJTRQ3ZC.js.map} +0 -0
- /package/dist/{chunk-4USLEUNR.js.map → chunk-X4QQRHFB.js.map} +0 -0
- /package/dist/{chunk-JQT67SWE.js.map → chunk-Y2UCJ33M.js.map} +0 -0
- /package/dist/{chunk-3PPCZPLN.js.map → chunk-Y45RZL4F.js.map} +0 -0
- /package/dist/{chunk-ECIBJXFT.js.map → chunk-Z2TA7NML.js.map} +0 -0
- /package/dist/{chunk-C2JHLAKV.js.map → chunk-Z7U74YGW.js.map} +0 -0
- /package/dist/{chunk-FXS4I3Z3.js.map → chunk-ZKMBNB5E.js.map} +0 -0
- /package/dist/{chunk-M77DCLJX.js.map → chunk-ZPBG6CT3.js.map} +0 -0
- /package/dist/{chunk-X7KRSZQT.js.map → chunk-ZUDSOVYT.js.map} +0 -0
- /package/dist/{cohort-CEYVJJ7E.js.map → cohort-R743ZSCR.js.map} +0 -0
- /package/dist/{condition-QSOFP4MY.js.map → condition-MPZIRRGP.js.map} +0 -0
- /package/dist/{controls-QYHARIEY.js.map → controls-WD5TZITZ.js.map} +0 -0
- /package/dist/{controls.btns-AP67YWKW.js.map → controls.btns-KCLXBXSL.js.map} +0 -0
- /package/dist/{controls.config-3OO3JK6E.js.map → controls.config-577UCREO.js.map} +0 -0
- /package/dist/{correlation-TOI3TMYL.js.map → correlation-OCFBDDOX.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-LSWV3KOF.js.map → cuminc.integration.spec-V46K57GV.js.map} +0 -0
- /package/dist/{customdata.inputui-VMB3HSSC.js.map → customdata.inputui-2MS5ZRKC.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-J6FRFLBK.js.map → dataDownload.integration.spec-TEOJOMYK.js.map} +0 -0
- /package/dist/{databrowser.ui-GVYWG6YI.js.map → databrowser.ui-PDPFHOH7.js.map} +0 -0
- /package/dist/{dictionary-GD67R72W.js.map → dictionary-MWUQYW6W.js.map} +0 -0
- /package/dist/{dnaMethylation-S7OSGLAF.js.map → dnaMethylation-SNVVE2MD.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-ETMMJNDE.js.map → dnaMethylation.integration.spec-OSYZ3YDP.js.map} +0 -0
- /package/dist/{dofetch-7GURQS65.js.map → dofetch-7R7PL4BX.js.map} +0 -0
- /package/dist/{e2pca-ZIIPBJFN.js.map → e2pca-7FYIWR5O.js.map} +0 -0
- /package/dist/{ep-A2HAL5WA.js.map → ep-PTAJZLKI.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-ZSILLYNI.js.map → expclust.gdc.spec-2R7T7JPY.js.map} +0 -0
- /package/dist/{gb-C3MPQXKN.js.map → gb-5UFIDQWY.js.map} +0 -0
- /package/dist/{geneExpClustering-HYCFUUTU.js.map → geneExpClustering-QLBETGVB.js.map} +0 -0
- /package/dist/{geneExpression-JXSAP2H7.js.map → geneExpression-SAMLSOHQ.js.map} +0 -0
- /package/dist/{geneExpression-GATKMJJ5.js.map → geneExpression-SECTPIDT.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-CODZYFHZ.js.map → geneExpression.unit.spec-UNRGPJIG.js.map} +0 -0
- /package/dist/{geneORA-LJRIR4VV.js.map → geneORA-CCQGE7QL.js.map} +0 -0
- /package/dist/{geneRanking-TWLBKQZG.js.map → geneRanking-NVR7ZZIP.js.map} +0 -0
- /package/dist/{geneVariant-35RQHTCK.js.map → geneVariant-5KL2J3NA.js.map} +0 -0
- /package/dist/{geneVariant-TMJJIMUF.js.map → geneVariant-72E5YEPJ.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-FIQ7IBSD.js.map → geneVariant.integration.spec-7JLVYF7Q.js.map} +0 -0
- /package/dist/{genefusion.ui-SOBESSNO.js.map → genefusion.ui-M3IG6NUU.js.map} +0 -0
- /package/dist/{geneset-JXEJFEK2.js.map → geneset-V2535XGY.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-25ZO5S2X.js.map → genomeBrowser.spec-TRREAQCH.js.map} +0 -0
- /package/dist/{grin2-CW4RPVPI.js.map → grin2-6X5GCPBQ.js.map} +0 -0
- /package/dist/{grin2-EI5BVP4E.js.map → grin2-GOO7H3RC.js.map} +0 -0
- /package/dist/{hierCluster-OBBPQH24.js.map → hierCluster-5YZOCCTV.js.map} +0 -0
- /package/dist/{hierCluster-SDH3TJQY.js.map → hierCluster-ZPQCUSVO.js.map} +0 -0
- /package/dist/{hierCluster.config-DO67TCXI.js.map → hierCluster.config-T3Y2LS6V.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-EB24C4VZ.js.map → hierCluster.integration.spec-PTXVQH77.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-LGEAFT5T.js.map → hierCluster.interactivity-JNBO3MJB.js.map} +0 -0
- /package/dist/{importPlot-R2WRZGZU.js.map → importPlot-CWMBFQDD.js.map} +0 -0
- /package/dist/{isoformExpression-KI3WY5M3.js.map → isoformExpression-ABPY2N3A.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-OQRG2DDU.js.map → isoformExpression.unit.spec-KRAZBQVF.js.map} +0 -0
- /package/dist/{junction-6SWFPNM5.js.map → junction-XGCBNVHV.js.map} +0 -0
- /package/dist/{junction.unit.spec-5TZFITSU.js.map → junction.unit.spec-XZFUJRI3.js.map} +0 -0
- /package/dist/{launch.adhoc-HCX2RQLB.js.map → launch.adhoc-7FJD3XSI.js.map} +0 -0
- /package/dist/{leftlabel.sample-OI6XCXTQ.js.map → leftlabel.sample-VPOZWRVY.js.map} +0 -0
- /package/dist/{lollipop-SOSOYHYL.js.map → lollipop-WBOAFWWO.js.map} +0 -0
- /package/dist/{maftimeline-UOMLYUNI.js.map → maftimeline-UK4MQP2D.js.map} +0 -0
- /package/dist/{matrix-5QWDN6SI.js.map → matrix-AT2FFTWO.js.map} +0 -0
- /package/dist/{matrix-SKPVVDVR.js.map → matrix-AU6NPNID.js.map} +0 -0
- /package/dist/{matrix.config-HE64MAL4.js.map → matrix.config-VTQ6HL5L.js.map} +0 -0
- /package/dist/{matrix.data-HTUZXQAM.js.map → matrix.data-DBYXSWIN.js.map} +0 -0
- /package/dist/{matrix.dom-F7AN3QGE.js.map → matrix.dom-DDPSUNY2.js.map} +0 -0
- /package/dist/{matrix.integration.spec-YKJ4LZFY.js.map → matrix.integration.spec-NJ2AXQAS.js.map} +0 -0
- /package/dist/{matrix.interactivity-YB5G5W5T.js.map → matrix.interactivity-HE2Q6SAO.js.map} +0 -0
- /package/dist/{matrix.layout-MFG65V7K.js.map → matrix.layout-FD5BPRCX.js.map} +0 -0
- /package/dist/{matrix.renderers-PCZFHDDZ.js.map → matrix.renderers-DVM4NB2R.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-GEAM5DSU.js.map → matrix.sort.unit.spec-VQ3TR4S2.js.map} +0 -0
- /package/dist/{matrix.sorterUi-YSKIX6B6.js.map → matrix.sorterUi-4KYRGJT5.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-2MW64QS5.js.map → matrix.sorterUi.unit.spec-IEHG3OKN.js.map} +0 -0
- /package/dist/{mavb-YMHJXCGA.js.map → mavb-RPRKXPTZ.js.map} +0 -0
- /package/dist/{mds.fimo-PTEDRMLQ.js.map → mds.fimo-PZCVBD44.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-7R7PLVQJ.js.map → mds.samplescatterplot-236GTHM4.js.map} +0 -0
- /package/dist/{mds.survivalplot-F3EENMFQ.js.map → mds.survivalplot-IJHOWSZL.js.map} +0 -0
- /package/dist/{oncomatrix-27VVSMZB.js.map → oncomatrix-R4OKDXSV.js.map} +0 -0
- /package/dist/{oncomatrix.spec-F43Y7CWN.js.map → oncomatrix.spec-4Z4HKS44.js.map} +0 -0
- /package/dist/{plot.2dvaf-MYFQSWIA.js.map → plot.2dvaf-ZK7DAKRQ.js.map} +0 -0
- /package/dist/{plot.app-36QWCKXR.js.map → plot.app-J66BA2LD.js.map} +0 -0
- /package/dist/{plot.barplot-535EP7XT.js.map → plot.barplot-UVRVPOKA.js.map} +0 -0
- /package/dist/{plot.boxplot-6IBP7VEB.js.map → plot.boxplot-DQGBDNLU.js.map} +0 -0
- /package/dist/{plot.brainImaging-M4HPNXZH.js.map → plot.brainImaging-WRMDYYHC.js.map} +0 -0
- /package/dist/{plot.disco-HIT6GR44.js.map → plot.disco-SSGPSM7W.js.map} +0 -0
- /package/dist/{plot.dzi-W66SBKTH.js.map → plot.dzi-F77KKPIJ.js.map} +0 -0
- /package/dist/{plot.ssgq-MI2OMCUY.js.map → plot.ssgq-FVFJOYVO.js.map} +0 -0
- /package/dist/{plot.vaf2cov-F4CBMLRA.js.map → plot.vaf2cov-CJSYBSPQ.js.map} +0 -0
- /package/dist/{plot.wsi-7M5KTNFC.js.map → plot.wsi-OSZU2PQ5.js.map} +0 -0
- /package/dist/{polar2-7VSWGT4U.js.map → polar2-R4ZKXKEV.js.map} +0 -0
- /package/dist/{profilePlot-ECTPPVB2.js.map → profilePlot-JU7SFYYY.js.map} +0 -0
- /package/dist/{proteinView-6ELOLOIU.js.map → proteinView-VU4SVO5I.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-V2FMWI62.js.map → proteomeCohortCompare-2U537GOK.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-KV6URTXC.js.map → pseudbulk.unit.spec-2FDKAEVI.js.map} +0 -0
- /package/dist/{pseudobulk-6ZRFCE65.js.map → pseudobulk-5GBUBBOY.js.map} +0 -0
- /package/dist/{qualitative-3B62RUOB.js.map → qualitative-3FTEQ7JW.js.map} +0 -0
- /package/dist/{radar2-4QQER64E.js.map → radar2-EBOTTAMC.js.map} +0 -0
- /package/dist/{radarFacility2-MZKORRDY.js.map → radarFacility2-PAGNJR6D.js.map} +0 -0
- /package/dist/{regression-GZ2YNX6Y.js.map → regression-XOVSVC7S.js.map} +0 -0
- /package/dist/{regression.inputs-ZEFDNSVT.js.map → regression.inputs-LGA67ESO.js.map} +0 -0
- /package/dist/{regression.inputs.term-O2FQBX7L.js.map → regression.inputs.term-UCQKXC5D.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-63BQKSZP.js.map → regression.inputs.values.table-2RRE7SMS.js.map} +0 -0
- /package/dist/{regression.integration.spec-KDHC3KDU.js.map → regression.integration.spec-BKM5UI7H.js.map} +0 -0
- /package/dist/{regression.results-5J3QM4RX.js.map → regression.results-T3HB6CBH.js.map} +0 -0
- /package/dist/{regression.spec-WZAZTDDA.js.map → regression.spec-W7IVCYVZ.js.map} +0 -0
- /package/dist/{render-MZTEXVU5.js.map → render-2C6LWNG2.js.map} +0 -0
- /package/dist/{report-M5TYHH2W.js.map → report-HRGU3XKL.js.map} +0 -0
- /package/dist/{sampleView-QYTLYJEW.js.map → sampleView-P5JZHEKY.js.map} +0 -0
- /package/dist/{samplelst-FN3Q7M7A.js.map → samplelst-OYQ6BASU.js.map} +0 -0
- /package/dist/{samplematrix-Z5FVODO7.js.map → samplematrix-JC3SGO5V.js.map} +0 -0
- /package/dist/{sc-4CHP5SYP.js.map → sc-FTHUNDGY.js.map} +0 -0
- /package/dist/{scatter-UOPJYXL3.js.map → scatter-WYP2NPNB.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-WMAHGT4F.js.map → selectGenomeWithTklst-CIETKILP.js.map} +0 -0
- /package/dist/{singleCellCellType-XPWENB6V.js.map → singleCellCellType-3O3TTLM6.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-QK56PHKW.js.map → singleCellCellType.unit.spec-GHBS36DB.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-4CEVDVYF.js.map → singleCellGeneExpression-2F7F4EKK.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-ZYRLBVF5.js.map → singleCellGeneExpression.unit.spec-2VGIH2NZ.js.map} +0 -0
- /package/dist/{singleCellPlot-JS74VUGC.js.map → singleCellPlot-MGSS4O3L.js.map} +0 -0
- /package/dist/{singlecell-OO77XBDD.js.map → singlecell-CKC2VVJ3.js.map} +0 -0
- /package/dist/{singlecell-5XYOHMWJ.js.map → singlecell-QOXATRF4.js.map} +0 -0
- /package/dist/{snp-X5ZILM5J.js.map → snp-OSYJO2R7.js.map} +0 -0
- /package/dist/{snp.unit.spec-V23G3JLJ.js.map → snp.unit.spec-L5ANPFO2.js.map} +0 -0
- /package/dist/{snplocus-U5UIIUWR.js.map → snplocus-64MJJID2.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-YDFVSDMT.js.map → spliceevent.a53ss.diagram-LHRT5UPB.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-VDKN5JBE.js.map → spliceevent.exonskip.diagram-BGSEPGR5.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-EFPFRUFI.js.map → spliceevent.noeventdiagram-QGZZSKW7.js.map} +0 -0
- /package/dist/{ssGSEA-LKJW5OQK.js.map → ssGSEA-VVAZDFDT.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-7WCZVEP2.js.map → ssGSEA.unit.spec-LP76RHTV.js.map} +0 -0
- /package/dist/{studyCatalog-EU33KE5H.js.map → studyCatalog-AXWH7IOH.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-QL25OQNB.js.map → summarizeCnvGeneexp-DRBIXOAP.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-B7HTCH7L.js.map → summarizeGeneexpSurvival-4PATAUSN.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-DFAPX2JE.js.map → summarizeMutationCnv-UGSIGZDJ.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-HCSDSVII.js.map → summarizeMutationDiagnosis-UATVI5BK.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-6WEASSA2.js.map → summarizeMutationSurvival-CZXGM3AA.js.map} +0 -0
- /package/dist/{summary-BWYXE77G.js.map → summary-IGTXNQ5I.js.map} +0 -0
- /package/dist/{summary.integration.spec-AVGSW5MF.js.map → summary.integration.spec-VFCYU2V6.js.map} +0 -0
- /package/dist/{summaryInput-MOQ6HUCX.js.map → summaryInput-AFZSASTM.js.map} +0 -0
- /package/dist/{sunburst-EZDHVJCL.js.map → sunburst-G7DBI637.js.map} +0 -0
- /package/dist/{survival-IEVELTC4.js.map → survival-YOJBLMR2.js.map} +0 -0
- /package/dist/{survival.integration.spec-HHWP3R4H.js.map → survival.integration.spec-FXPCZJSS.js.map} +0 -0
- /package/dist/{svgraph-55XRIYJW.js.map → svgraph-ZSSOWI7R.js.map} +0 -0
- /package/dist/{svmr-CMEBFSRO.js.map → svmr-FPYSMXSC.js.map} +0 -0
- /package/dist/{termCollection-CPQXYBFA.js.map → termCollection-IY5V64IY.js.map} +0 -0
- /package/dist/{termCollection-ZWOH273K.js.map → termCollection-SR4SP6RZ.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-RK7VATLU.js.map → termCollection.unit.spec-NL72AQ2P.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-Z4ZRW63R.js.map → termCollectionFractionSelection-2LPBE224.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-3CS7DPNU.js.map → termCollectionFractionSelection.unit.spec-PUMGBUDN.js.map} +0 -0
- /package/dist/{termInfo-6MJDJSDW.js.map → termInfo-2DR7DHXM.js.map} +0 -0
- /package/dist/{tk-RHWJJXH2.js.map → tk-COBDWIZJ.js.map} +0 -0
- /package/dist/{tk-4NNTWWLK.js.map → tk-N2YBXDQK.js.map} +0 -0
- /package/dist/{tp.ui-DPN5UN6U.js.map → tp.ui-BMK2MMIJ.js.map} +0 -0
- /package/dist/{tvs.dt-ARPDFRVM.js.map → tvs.dt-KL4VCW5Y.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-POS6WQK6.js.map → tvs.dtcnv.categorical-VGXOASJE.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-5OETJ7JU.js.map → tvs.dtcnv.continuous-IANT7BPS.js.map} +0 -0
- /package/dist/{tvs.dtfusion-ERYVI3DW.js.map → tvs.dtfusion-M5HJWCJI.js.map} +0 -0
- /package/dist/{tvs.dtitd-KTZZYEWU.js.map → tvs.dtitd-KB72EDPN.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-TGUAX3RN.js.map → tvs.dtsnvindel-VGYTLO6E.js.map} +0 -0
- /package/dist/{tvs.dtsv-AM63OIL6.js.map → tvs.dtsv-KWUXW2F5.js.map} +0 -0
- /package/dist/{tvs.samplelst-VW2NOQ2C.js.map → tvs.samplelst-3UA7XMHJ.js.map} +0 -0
- /package/dist/{tvs.termCollection-O4ZSWJFA.js.map → tvs.termCollection-LK6CVGYZ.js.map} +0 -0
- /package/dist/{violin-ZQ3DEYGR.js.map → violin-D4EX3ZFV.js.map} +0 -0
- /package/dist/{violin.integration.spec-PVEF77HB.js.map → violin.integration.spec-GBW3VBHW.js.map} +0 -0
- /package/dist/{violin.interactivity-FYU4TCFO.js.map → violin.interactivity-N3JVI2AQ.js.map} +0 -0
- /package/dist/{violin.renderer-XAERGBMV.js.map → violin.renderer-2NYRUXUY.js.map} +0 -0
- /package/dist/{vocabulary-ECJX27W2.js.map → vocabulary-277KD4RO.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../plots/regression/estimateMsg.ts", "../plots/regression.results.js"],
|
|
4
|
+
"sourcesContent": ["import { roundValue } from '#shared/roundValue.js'\n\n/*\nbuilds the tooltip message that explains the estimate value of a coefficient row,\nof the coefficients table of a regression result\n\nthe message is built in parts:\n\t1. outcome variable, e.g. \"Mean [Height] is 2 units higher\"\n\t2. independent variable of the row, e.g. \"in [Sex][Male] compared to [Sex][Female]\"\n\t3. covariates, i.e. all other independent variables of the model\n\t4. time axis, for cox regression only\n\nthis module is free of the plot instance, so that it can be unit tested;\ncallers supply the model context via EstimateMsgArg\n*/\n\n/** refGrp value that is not applicable, hardcoded for R */\nexport const refGrp_NA = 'NA'\n\nexport type EstimateMsgArg = {\n\t/** estimate value of the row: beta value for linear, odds ratio for logistic,\n\tand hazard ratio for cox. is NaN when R returns \"NA\" */\n\test: number\n\t/** term-wrapper of the variable of this row; is missing on the intercept row */\n\ttw?: any\n\t/** term-wrapper of the 2nd variable, when this row is an interaction */\n\ttw2?: any\n\t/** category key of tw, when tw has categories */\n\tcategoryKey?: string\n\t/** category key of tw2, when tw2 has categories */\n\tcategoryKey2?: string\n\t/** true when this row is the intercept */\n\tisIntercept?: boolean\n\t/** true when this row is from the univariate analysis, which has no covariates */\n\tisUnivariate?: boolean\n\t/** 'linear', 'logistic' or 'cox' */\n\tregressionType: string\n\t/** term-wrapper of the outcome variable */\n\toutcomeTw: any\n\t/** term-wrappers of all independent variables of the model */\n\tindependentTws: any[]\n\t/** for timeUnit and cohortStartTimeMsg of a cox regression */\n\ttermdbConfig: any\n\t/** returns the Input instance of an independent variable, by tw.$id or snpid */\n\tgetIndependentInput: (tid: string) => any\n}\n\nexport function getEstimateMsg(arg: EstimateMsgArg): string {\n\tconst {\n\t\test,\n\t\ttw,\n\t\ttw2,\n\t\tcategoryKey,\n\t\tcategoryKey2,\n\t\tisIntercept,\n\t\tisUnivariate,\n\t\toutcomeTw,\n\t\tindependentTws,\n\t\ttermdbConfig,\n\t\tgetIndependentInput\n\t} = arg\n\tconst regtype = arg.regressionType\n\tconst category = tw?.term?.values && tw.term.values[categoryKey!] ? tw.term.values[categoryKey!].label : categoryKey\n\tconst category2 =\n\t\ttw2?.term?.values && tw2.term.values[categoryKey2!] ? tw2.term.values[categoryKey2!].label : categoryKey2\n\tconst refGrp = tw?.term?.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw?.refGrp\n\tconst refGrp2 = tw2?.term?.values && tw2.term.values[tw2.refGrp] ? tw2.term.values[tw2.refGrp].label : tw2?.refGrp\n\n\t/* the estimate is a difference for linear, and a ratio (odds/hazard) for logistic and cox.\n\ta non-finite estimate (e.g. \"NA\" returned by R for an aliased coefficient) cannot be\n\tdescribed, and neither can a non-positive ratio, which would divide by 0 below */\n\tif (!Number.isFinite(est) || (regtype != 'linear' && est <= 0)) {\n\t\treturn 'The estimate of this variable is not available.'\n\t}\n\n\t/** part 1: outcome variable **/\n\tlet msg\n\tif (regtype == 'linear') {\n\t\tmsg = tw2 ? getInteractionMsg() : `Mean ${styleVariable(outcomeTw)} is`\n\t\tif (isIntercept) {\n\t\t\t// report the signed estimate, as the intercept can be negative\n\t\t\tconst baselines = getBaselines(independentTws)\n\t\t\treturn `${msg} ${est} ${unitsOf(outcomeTw)} when ${joinVariables(baselines)}.`\n\t\t}\n\t\tmsg += est == 0 ? ' no different ' : ` ${Math.abs(est)} ${unitsOf(outcomeTw)} ${est < 0 ? 'lower' : 'higher'} `\n\t} else if (regtype == 'logistic') {\n\t\tmsg = tw2 ? getInteractionMsg() : `Odds of ${styleVariable(outcomeTw, outcomeTw.nonRefGrp)} is`\n\t\tif (isIntercept) {\n\t\t\tconst baselines = getBaselines(independentTws)\n\t\t\treturn `${msg} ${est} when ${joinVariables(baselines)}.`\n\t\t}\n\t\tmsg += getRatioMsg()\n\t} else if (regtype == 'cox') {\n\t\tmsg = tw2\n\t\t\t? getInteractionMsg()\n\t\t\t: `Hazard (instantaneous rate) of ${styleVariable(outcomeTw, outcomeTw.eventLabel)} is`\n\t\tmsg += getRatioMsg()\n\t} else {\n\t\tthrow 'regression type not recognized'\n\t}\n\n\t/** part 2: independent variable **/\n\tconst interactions: string[] = []\n\tconst interactionsBaselines: string[] = []\n\tif (tw.interactions?.length && !tw2) {\n\t\t// variable is part of an interaction, but the current row\n\t\t// is not an interaction row\n\t\tfor (const tid of tw.interactions) {\n\t\t\tconst t = getIndependentInput(tid).term\n\t\t\tif (t.term.snps) {\n\t\t\t\t// snplst or snplocus term\n\t\t\t\t// need to get term ids of individuals snps\n\t\t\t\tfor (const snp of t.term.snps) interactions.push(snp.snpid)\n\t\t\t} else {\n\t\t\t\tinteractions.push(tid)\n\t\t\t}\n\t\t}\n\t\tif (!interactions.length) throw 'interactions[] is empty'\n\t\tconst interactingTws = independentTws.filter(t => interactions.includes(t.$id || t.id))\n\t\tinteractionsBaselines.push(...getBaselines(interactingTws))\n\t}\n\tif (category) {\n\t\t// categorical variable\n\t\tmsg += `in ${joinVariables([styleVariable(tw, category), ...interactionsBaselines])} compared to ${joinVariables([\n\t\t\tstyleVariable(tw, refGrp),\n\t\t\t...interactionsBaselines\n\t\t])}`\n\t} else if (tw.q.mode == 'continuous') {\n\t\t// continuous variable\n\t\tmsg += `for every ${oneUnitOf(tw)} increase of ${styleVariable(tw)}`\n\t\tif (interactionsBaselines.length) msg += ` when ${joinVariables(interactionsBaselines)}`\n\t} else if (tw.q.geneticModel === 0) {\n\t\t// genetic variable, additive model\n\t\tmsg += `for every additional ${tw.effectAllele} allele of ${styleVariable(tw)}`\n\t\tif (interactionsBaselines.length) msg += ` when ${joinVariables(interactionsBaselines)}`\n\t} else if (tw.q.geneticModel == 1 || tw.q.geneticModel == 2) {\n\t\t// genetic variable, dominant or recessive model\n\t\tconst gts = Object.keys(tw.gt2count)\n\t\tconst testGts = gts.filter(gt => {\n\t\t\tif (tw.q.geneticModel == 1) {\n\t\t\t\t// dominant model\n\t\t\t\treturn gt.includes(tw.effectAllele)\n\t\t\t} else {\n\t\t\t\t// recessive model\n\t\t\t\treturn gt\n\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t.split('')\n\t\t\t\t\t.every(c => c == tw.effectAllele)\n\t\t\t}\n\t\t})\n\t\tconst refGts = gts.filter(gt => !testGts.includes(gt))\n\t\tmsg += `in ${joinVariables([\n\t\t\tstyleVariable(tw, testGts.join(', ')),\n\t\t\t...interactionsBaselines\n\t\t])} compared to ${joinVariables([styleVariable(tw, refGts.join(', ')), ...interactionsBaselines])}`\n\t}\n\n\t/** part 3: adjusting for covariates **/\n\t// get term ids of current variable and any interacting variables\n\tconst tids = [tw.$id || tw.id]\n\tif (tw.interactions?.length) {\n\t\tif (tw2) tids.push(tw2.$id || tw2.id)\n\t\telse tids.push(...interactions)\n\t}\n\t// get covariates (i.e., all other variables)\n\tconst covariates = independentTws.filter(t => !tids.includes(t.$id || t.id)).map(t => styleVariable(t))\n\t// build message for covariates\n\tif (covariates.length && !isUnivariate) msg += `, adjusting for ${joinVariables(covariates)}`\n\tmsg += '.'\n\n\t/** part 4: time axis of cox regression **/\n\t/* in cox regression, time is the axis of the baseline hazard and not an adjusted\n\tcovariate, so it is stated in its own sentence. the unit of the time axis and the\n\tstart of follow-up are declared by the dataset (see termdb.timeUnit and\n\ttermdb.cohortStartTimeMsg), as they differ between cohorts */\n\tif (regtype == 'cox') {\n\t\tif (outcomeTw.q.timeScale == 'age') {\n\t\t\tmsg += ' Time is measured as attained age during follow-up.'\n\t\t} else {\n\t\t\tconst unit = termdbConfig?.timeUnit ? ` in ${termdbConfig.timeUnit}` : ''\n\t\t\tconst start = termdbConfig?.cohortStartTimeMsg ? ` from ${termdbConfig.cohortStartTimeMsg}` : ''\n\t\t\t// stay quiet when the dataset declares neither, rather than printing filler\n\t\t\tif (unit || start) msg += ` Time is measured${unit}${start}.`\n\t\t}\n\t}\n\treturn msg\n\n\t/** helper functions **/\n\t/* a numeric term with valueConversion{} is analyzed by its converted unit\n\t(see makeRinput() in server/src/routes/termdb.regression.ts), so the estimate is per that\n\tunit, e.g. per year rather than per day. the two below name the unit of such a variable,\n\tand fall back to the generic \"unit\" wording for terms without a declared unit */\n\tfunction oneUnitOf(tw) {\n\t\tconst u = tw?.term?.valueConversion?.toUnit\n\t\treturn u ? `1 ${u}` : 'one unit'\n\t}\n\tfunction unitsOf(tw) {\n\t\tconst u = tw?.term?.valueConversion?.toUnit\n\t\treturn u ? `${u}s` : 'units'\n\t}\n\n\t// describe an odds/hazard ratio, which is 1 when there is no association\n\tfunction getRatioMsg() {\n\t\tif (est == 1) return ' no different '\n\t\treturn est > 1 ? ` ${est} times higher ` : ` ${roundValue(1 / est, 3)} times lower `\n\t}\n\n\t// function to style a variable (and its category)\n\tfunction styleVariable(tw, category?) {\n\t\tconst spans = [\n\t\t\t`<span class=\"term_name_btn sja_filter_tag_btn\" style=\"padding: 3px 6px; margin: 2.5px 0px; border-radius: ${\n\t\t\t\tcategory ? '6px 0px 0px 6px' : '6px'\n\t\t\t};\">${tw.term.name.length < 40 ? tw.term.name : tw.term.name.substring(0, 35) + ' ...'}</span>`\n\t\t]\n\t\tif (category) {\n\t\t\tspans.push(\n\t\t\t\t`<span class=\"ts_summary_btn sja_filter_tag_btn\" style=\"padding: 3px 6px; margin: 2.5px 0px; border-radius: 0px 6px 6px 0px; font-style: italic;\">${category}</span>`\n\t\t\t)\n\t\t}\n\t\treturn `<div style=\"display: inline; white-space: nowrap; font-size: 0.9em\">${spans.join('')}</div>`\n\t}\n\n\t// function to get message for interaction term\n\tfunction getInteractionMsg() {\n\t\tlet msg =\n\t\t\tregtype == 'linear'\n\t\t\t\t? `The difference in mean ${styleVariable(outcomeTw)}`\n\t\t\t\t: regtype == 'logistic'\n\t\t\t\t? `The difference in odds of ${styleVariable(outcomeTw, outcomeTw.nonRefGrp)}`\n\t\t\t\t: `The difference in hazard (instantaneous rate) of ${styleVariable(outcomeTw, outcomeTw.eventLabel)}`\n\n\t\tif (category2) {\n\t\t\t// categorical variable\n\t\t\tmsg += ` between ${styleVariable(tw2, category2)} and ${styleVariable(tw2, refGrp2)} is`\n\t\t} else if (tw2.q.mode == 'continuous') {\n\t\t\t// continuous variable\n\t\t\tmsg += ` for every ${oneUnitOf(tw2)} increase of ${styleVariable(tw2)} is`\n\t\t} else if (tw2.q.geneticModel === 0) {\n\t\t\t// genetic variable, additive model\n\t\t\tmsg += ` for every additional ${tw2.effectAllele} allele of ${styleVariable(tw2)} is`\n\t\t} else if (tw2.q.geneticModel == 1 || tw2.q.geneticModel == 2) {\n\t\t\t// genetic variable, dominant or recessive model\n\t\t\tconst gts = Object.keys(tw2.gt2count)\n\t\t\tconst testGts = gts.filter(gt => {\n\t\t\t\tif (tw2.q.geneticModel == 1) {\n\t\t\t\t\t// dominant model\n\t\t\t\t\treturn gt.includes(tw2.effectAllele)\n\t\t\t\t} else {\n\t\t\t\t\t// recessive model\n\t\t\t\t\treturn gt\n\t\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t.every(c => c == tw2.effectAllele)\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst refGts = gts.filter(gt => !testGts.includes(gt))\n\t\t\tmsg += ` between ${styleVariable(tw2, testGts.join(', '))} and ${styleVariable(tw2, refGts.join(', '))} is`\n\t\t}\n\n\t\treturn msg\n\t}\n\n\t/* function to get the baseline level of each variable\n\t\t- categorical variable: refGrp\n\t\t- continuous or cubic spline variable: 0\n\t\t- genetic variable:\n\t\t\t- additive model: 0 effect alleles\n\t\t\t- dominant model: homozygous for non-effect allele\n\t\t\t- recessive model: homozygous for non-effect allele or heterozygous\n\t\t\t- by genotype: same as categorical variable\n\t*/\n\tfunction getBaselines(tws) {\n\t\tconst baselines = tws.map(tw => {\n\t\t\tif (tw.q.mode != 'spline' && 'refGrp' in tw && tw.refGrp != refGrp_NA) {\n\t\t\t\t// has refGrp, must be categorical variable\n\t\t\t\t// a spline variable can carry a leftover refGrp, thus is excluded here\n\t\t\t\tconst refGrp = tw?.term?.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw?.refGrp\n\t\t\t\treturn styleVariable(tw, refGrp)\n\t\t\t} else if (tw.q.mode == 'continuous' || tw.q.mode == 'spline') {\n\t\t\t\t/* continuous variable, or cubic spline variable, as every spline\n\t\t\t\tfunction of a variable is 0 when the variable is 0\n\t\t\t\t(see cubic_spline() in R/src/regression.utils.R) */\n\t\t\t\treturn styleVariable(tw, '0')\n\t\t\t} else if (tw.q.geneticModel === 0) {\n\t\t\t\t// genetic variable, additive model\n\t\t\t\treturn styleVariable(tw, `No ${tw.effectAllele} alleles`)\n\t\t\t} else if (tw.q.geneticModel == 1 || tw.q.geneticModel == 2) {\n\t\t\t\t// genetic variable, dominant or recessive model\n\t\t\t\tconst gts = Object.keys(tw.gt2count)\n\t\t\t\tconst refGts = gts.filter(gt => {\n\t\t\t\t\tif (tw.q.geneticModel == 1) {\n\t\t\t\t\t\t// dominant model\n\t\t\t\t\t\treturn !gt.includes(tw.effectAllele)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// recessive model\n\t\t\t\t\t\treturn !gt\n\t\t\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.every(c => c == tw.effectAllele)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn styleVariable(tw, refGts.join(', '))\n\t\t\t}\n\t\t})\n\t\t// drop any variable with an undetermined baseline, rather than printing \"undefined\"\n\t\treturn baselines.filter(Boolean)\n\t}\n\n\tfunction joinVariables(variables) {\n\t\tif (!variables.length) return ''\n\t\telse if (variables.length == 1) return variables[0]\n\t\telse if (variables.length == 2) return variables.join(' and ')\n\t\telse return `${variables.slice(0, -1).join(', ')}, and ${variables.slice(-1)}`\n\t}\n}\n", "import { scaleLinear, scaleLog } from 'd3-scale'\nimport { axisBottom, axisTop } from 'd3-axis'\nimport { first_genetrack_tolist } from '../common/1stGenetk'\nimport { interpolateRgb } from 'd3-interpolate'\nimport { sayerror, axisstyle, drawBoxplot, makeSsmLink, ColorScale, Menu } from '#dom'\nimport { getEstimateMsg, refGrp_NA } from './regression/estimateMsg'\n\n/*************\ncan dynamically add following attributes\n\n- this.snplocusBlock:\n\tfor snplocus term\n\tdisplay in this.dom.snplocusBlockDiv\n- this.hasUnsubmittedEdits_nullify_singleuse:\n\tto negate hasUnsubmittedEdits and keep running analysis\n\n**************** R result object\nresult.data: {}\n\twarnings\n\tsampleSize: int\n\theaderRow: { k:str, v:str }\n\tresiduals: { header[], rows[], label:str }\n\tcoefficients: { header[], intercept[], terms{}, interactions[], label }\n\ttype3: {header[], intercept[], terms{}, interactions[], label }\n\tnonlinearity: {header[], terms{}, label } // only when spline variables are in the model\n\ttotalSnpEffect: {header[], intercept[], snp, interactions[], lst, label }\n\tother: {header[], rows[], label}\n\n\n*************** function cascade\nmain\n\tdisplayResult\n\t\tcreateGenomebrowser\n\t\t\tgetMtooltipValues\n\t\t\tmayCheckLD\n\t\t\t\tshowLDlegend\n\t\tupdateMds3Tk\n\t\t\tmake_mds3_variants\n\t\tshow_genomebrowser_snplocus\n\t\tdisplayResult_oneset\n\t\t\tmayshow_warn\n\t\t\tmayshow_splinePlots\n\t\t\tmayshow_residuals\n\t\t\tmayshow_coefficients\n\t\t\tmayshow_totalSnpEffect\n\t\t\tmayshow_type3\n\t\t\tmayshow_nonlinearity\n\t\t\tmayshow_other\n\t\t\tmayshow_fisher\n\t\t\tmayshow_wilcoxon\n\t\t\tmayshow_cuminc\n*/\n\nconst forestcolor = '#126e08' // forest plot color\nconst boxplotcolor = forestcolor\n\nexport class RegressionResults {\n\tconstructor(opts) {\n\t\tthis.opts = opts\n\t\tthis.app = opts.app\n\t\t// reference to the parent component's mutable instance (not its API)\n\t\tthis.parent = opts.parent\n\t\t// use the parent plot's vocabApi, from PlotBase, so that requests are signaled by the\n\t\t// plot-level abort controller, instead of the app-level one. Otherwise, an unrelated app\n\t\t// dispatch, such as closing another plot's sandbox, would cancel a pending analysis here.\n\t\tthis.vocabApi = this.parent.vocabApi\n\t\tthis.type = 'regression'\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\n\t\tconst holder = this.opts.holder\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('padding-top', '20px')\n\t\t\t.style('font-size', '1.2em')\n\t\t\t.style('opacity', 0.3)\n\t\t\t.html('Results')\n\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\terr_div: holder.append('div'),\n\t\t\tsnplocusBlockDiv: holder.append('div'),\n\t\t\t// is where newDiv() and displayResult_oneset() writes to\n\t\t\toneSetResultDiv: holder.append('div').style('margin', '10px'),\n\t\t\ttip: new Menu({ padding: '9px' })\n\t\t}\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\t// share the writable config copy\n\t\t\tthis.config = this.parent.config\n\t\t\tthis.state = this.parent.state\n\t\t\tif (\n\t\t\t\t!this.state.formIsComplete ||\n\t\t\t\tthis.parent.inputs.hasError ||\n\t\t\t\t(this.config.hasUnsubmittedEdits && !this.hasUnsubmittedEdits_nullify_singleuse)\n\t\t\t) {\n\t\t\t\t// no result to show\n\t\t\t\t// remove block instance when input variables are edited\n\t\t\t\tdelete this.snplocusBlock\n\t\t\t\tthis.dom.snplocusBlockDiv.selectAll('*').remove()\n\t\t\t\tthis.dom.holder.style('display', 'none')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdelete this.hasUnsubmittedEdits_nullify_singleuse // single-use, delete\n\n\t\t\tif (this.snplocusBlock) {\n\t\t\t\t// if a block instance is already made, cloak it\n\t\t\t\tthis.snplocusBlock.cloakOn()\n\t\t\t}\n\n\t\t\tthis.parent.inputs.dom.submitBtn.text('Running...')\n\t\t\tthis.parent.dom.inputs.style('opacity', 0.5).style('pointer-events', 'none') // disables all interactivities on input ui; if ref category is switched while loading, it will abort current request\n\n\t\t\t// submit server request to run analysis\n\t\t\tconst data = await this.vocabApi.getRegressionData(this.getDataRequestOpts())\n\t\t\tif (data.error) throw data.error\n\t\t\tthis.dom.err_div.style('display', 'none')\n\t\t\tthis.dom.oneSetResultDiv.selectAll('*').remove()\n\t\t\tthis.dom.holder.style('display', 'block')\n\t\t\tawait this.displayResult(data)\n\n\t\t\t// scroll to results\n\t\t\tconst results_y = this.dom.holder.node().getBoundingClientRect().top + window.scrollY\n\t\t\tconst nav_height = document.querySelector('.sjpp-nav').getBoundingClientRect().height\n\t\t\twindow.scroll({ behavior: 'smooth', top: results_y - nav_height })\n\t\t} catch (e) {\n\t\t\tthis.hasError = true\n\t\t\tthis.dom.holder.style('display', 'block')\n\t\t\tthis.dom.err_div.style('display', 'block')\n\t\t\tsayerror(this.dom.err_div, 'Error: ' + (e.error || e))\n\t\t\tthis.parent.inputs.dom.submitBtn.property('disabled', true)\n\t\t\tconsole.error(e)\n\t\t} finally {\n\t\t\tthis.parent.dom.inputs.style('opacity', 1).style('pointer-events', 'auto')\n\t\t}\n\t}\n\n\t// creates an opts object for the vocabApi.getRegressionData()\n\tgetDataRequestOpts() {\n\t\tconst c = this.config\n\t\tconst opts = {\n\t\t\tregressionType: c.regressionType,\n\t\t\toutcome: c.outcome,\n\t\t\tindependent: c.independent,\n\t\t\tincludeUnivariate: c.includeUnivariate\n\t\t}\n\t\topts.filter = this.parent.filter\n\t\topts.filter0 = this.state.termfilter.filter0\n\t\treturn opts\n\t}\n\n\tgetIndependentInput(tid) {\n\t\t/* arg is independent tw $id or snpid\n\t\treturn input instance\n\t\tfor accessing input.orderedLabels and input.term{refGrp, term{}, q{}} which is term-wrapper\n\n\t\tin order to reliably access refGrp,\n\t\tmust use termwrapper from Input instance but not this.state.config\n\t\tdue to a specific condition when refGrp is set in self.config, but is missing from state\n\t\tthis happens when launching from a parameterized url that's missing refgrp for the term\n\t\tand the refGrp is dynamically filled by input.updateTerm() but not propagated to state\n\t\t*/\n\t\tfor (const i of this.parent.inputs.independent.inputLst) {\n\t\t\tif (!i.term) continue\n\t\t\tif (i.term.term && i.term.term.snps) {\n\t\t\t\t// is a snplst or snplocus term with .snps[]\n\t\t\t\tfor (const snp of i.term.term.snps) {\n\t\t\t\t\tif (snp.snpid == tid) {\n\t\t\t\t\t\t// tid matches with a snpid\n\t\t\t\t\t\t// make up an object looking like an Input instance for this snp/variant\n\t\t\t\t\t\tconst tw = {\n\t\t\t\t\t\t\tid: tid,\n\t\t\t\t\t\t\tq: {\n\t\t\t\t\t\t\t\tgeneticModel: i.term.q.geneticModel\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tterm: {\n\t\t\t\t\t\t\t\tid: tid,\n\t\t\t\t\t\t\t\tname: tid\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinteractions: i.term.interactions,\n\t\t\t\t\t\t\teffectAllele: i.term.q.snp2effAle[tid],\n\t\t\t\t\t\t\tgt2count: snp.gt2count\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i.term.q.snp2refGrp) {\n\t\t\t\t\t\t\ttw.refGrp = i.term.q.snp2refGrp[tid]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (snp.mlst) {\n\t\t\t\t\t\t\t// try to update tw.term.name\n\t\t\t\t\t\t\tconst m = snp.mlst.find(j => j.alt == i.term.q.snp2effAle[tid])\n\t\t\t\t\t\t\tif (m) {\n\t\t\t\t\t\t\t\ttw.term.name = m.mname\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttw.term.name = snp.mlst[0].mname\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { term: tw }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i.term.$id == tid) return i\n\t\t}\n\t\t// given tid does not match with an Input\n\t\t// can be an ancestry PC which is automatically added by serverside and not recorded on client\n\t\t// quick fix: return dummy tw so it won't break\n\t\treturn {\n\t\t\tterm: {\n\t\t\t\tid: tid,\n\t\t\t\tq: { mode: 'continuous' },\n\t\t\t\tterm: { name: tid }\n\t\t\t}\n\t\t}\n\t\t//throw 'cannot find Input for a tid: ' + tid\n\t}\n}\n\nfunction setInteractivity(self) {}\n\nfunction setRenderers(self) {\n\tself.displayResult = async result => {\n\t\t/*\n\t\tresult {\n\t\t\tresultLst [\n\t\t\t\t{ data: { err, splinePlots, residuals, ... }, id:'snp1' },\n\t\t\t\t{ data: { err, splinePlots, residuals, ... }, id:'snp2' },\n\t\t\t\t...\n\t\t\t]\n\t\t}\n\t\t*/\n\n\t\t// if there is a snplocus Input\n\t\tconst snplocusInput = self.parent.inputs.independent.inputLst.find(i => i.term && i.term.term.type == 'snplocus')\n\t\tif (snplocusInput) {\n\t\t\t/* has a snploucs term\n\t\t\tin result[], there's one set of result for each variant, identified by id\n\t\t\tshow a genome browser and a mds3 tk to show dots for the variants from snplocus term\n\t\t\tclicking on a dot in browser tk will call displayResult_oneset() to display its results\n\t\t\t*/\n\t\t\tif (!self.snplocusBlock) {\n\t\t\t\tself.dom.snplocusBlockDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-top', '30px')\n\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t.text('Click on a variant within the browser to view its regression results')\n\t\t\t\tself.snplocusBlock = await createGenomebrowser(self, snplocusInput, result.resultLst)\n\t\t\t} else {\n\t\t\t\tawait updateMds3Tk(self, snplocusInput, result.resultLst)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// no snplocus, clear things if had it before\n\t\tdelete self.snplocusBlock\n\t\tself.dom.snplocusBlockDiv.selectAll('*').remove()\n\t\t// resultLst[] has only one set of result, from analyzing one model\n\t\tif (!result.resultLst[0] || !result.resultLst[0].data) throw 'result is not [ {data:{}} ]'\n\n\t\tself.displayResult_oneset(result.resultLst[0].data)\n\t}\n\n\tself.displayResult_oneset = result => {\n\t\tself.dom.oneSetResultDiv.selectAll('*').remove()\n\n\t\t// may be used when clicking snplocus dot\n\t\tself.dom.LDresultDiv = self.dom.oneSetResultDiv.append('div')\n\n\t\tself.mayshow_warn(result)\n\t\tif (result.sampleSize) self.newDiv('Sample size:', result.sampleSize)\n\t\tif (result.eventCnt) self.newDiv('Number of events:', result.eventCnt)\n\t\tself.mayshow_headerRow(result)\n\t\tself.mayshow_splinePlots(result)\n\t\tself.mayshow_residuals(result)\n\t\tself.mayshow_coefficients(result)\n\t\tself.mayshow_coxDisclaimer()\n\t\tself.mayshow_totalSnpEffect(result)\n\t\tself.mayshow_type3(result)\n\t\tself.mayshow_nonlinearity(result)\n\t\tself.mayshow_tests(result)\n\t\tself.mayshow_other(result)\n\t\tself.mayshow_fisher(result)\n\t\tself.mayshow_wilcoxon(result)\n\t\tself.mayshow_cuminc(result)\n\t}\n\n\tself.newDiv = (label, label2, getrow) => {\n\t\t// create div to show a section of the result\n\t\t// label is required, label2 is optional\n\t\t// specify getrow=true to return row instead of div\n\t\tconst div = self.dom.oneSetResultDiv.append('div').style('margin', '20px 0px 10px 0px').attr('name', label) //For integration testing\n\t\tconst row = div.append('div')\n\t\trow.append('span').style('text-decoration', 'underline').text(label)\n\t\tif (label2) {\n\t\t\trow.append('span').html(label2).style('margin-left', '5px')\n\t\t}\n\t\treturn getrow ? row : div.append('div').style('margin-left', '20px')\n\t}\n\n\tself.mayshow_warn = result => {\n\t\tif (!result.warnings) return\n\t\tconst div = self.newDiv('Warnings')\n\t\tconst warnings = new Set(result.warnings)\n\t\tfor (const line of warnings) {\n\t\t\tdiv.append('p').style('margin', '5px').text(line)\n\t\t}\n\t}\n\n\tself.mayshow_headerRow = result => {\n\t\tif (!result.headerRow) return\n\t\tconst k = result.headerRow.k\n\t\tconst v = result.headerRow.v\n\t\tconst snplocusInput = self.parent.inputs.independent.inputLst.find(i => i.term && i.term.term.type == 'snplocus')\n\t\tif (snplocusInput) {\n\t\t\t// header row is for snplocus results\n\t\t\t// variant label\n\t\t\tconst snp = snplocusInput.term.term.snps.find(snp => snp.snpid == v.snpid)\n\t\t\tconst m = snp.mlst[0]\n\t\t\tm.chr = snp.chr\n\t\t\tconst row = self.newDiv(k, null, true)\n\t\t\tconst snpLabelDom = row\n\t\t\t\t.append('span')\n\t\t\t\t.text(`${m.chr}:${m.pos + 1} ${m.ref && m.alt ? m.ref + '>' + m.alt : ''}`)\n\t\t\t\t.style('margin-left', '5px')\n\t\t\tconst urlConfig =\n\t\t\t\tself.app.vocabApi.termdbConfig.urlTemplates?.ssm || self.app.vocabApi.termdbConfig.queries?.snvindel?.ssmUrl\n\t\t\tif (urlConfig) {\n\t\t\t\t// add urls to snp label\n\t\t\t\tconst separateUrls = makeSsmLink(urlConfig, m, snpLabelDom, self.parent.genomeObj.name)\n\t\t\t\tif (separateUrls?.length) {\n\t\t\t\t\trow.append('span').style('margin-left', '10px').html(separateUrls.join(' '))\n\t\t\t\t}\n\t\t\t}\n\t\t\t// gt label\n\t\t\tlet labels\n\t\t\tconst gt_label = `Genotypes: ${v.gtcounts.join(', ')}`\n\t\t\tif (v.monomorphic) {\n\t\t\t\tlabels = [gt_label]\n\t\t\t} else {\n\t\t\t\t// effect allele label\n\t\t\t\tconst effale_label = `Effect allele: ${v.effAle}`\n\t\t\t\t// allel frequency label\n\t\t\t\tconst af_label = `Allele frequency: ${v.af}`\n\t\t\t\tlabels = [effale_label, af_label, gt_label]\n\t\t\t}\n\t\t\trow.append('span').html(` | ${labels.join(' | ')}`)\n\t\t} else {\n\t\t\t// header row is not for snplocus results\n\t\t\tself.newDiv(k, v)\n\t\t}\n\t}\n\n\tself.mayshow_splinePlots = result => {\n\t\tif (!result.splinePlots) return\n\t\tconst div = self.newDiv('Cubic spline plots')\n\t\tdiv.style('display', 'flex').style('align-items', 'center')\n\t\tresult.splinePlots.sort((a, b) => {\n\t\t\t// univariate plots should appear before multivariate plots\n\t\t\tif (a.type == 'univariate' && b.type == 'multivariate') return -1\n\t\t\tif (a.type == 'multivariate' && b.type == 'univariate') return 1\n\t\t\treturn 0\n\t\t})\n\t\tfor (const plot of result.splinePlots) {\n\t\t\tconst plotDiv = div.append('div').style('margin', '0px 50px 5px 0px')\n\t\t\tplotDiv.append('img').attr('src', plot.src).attr('width', 670) // quick fix to hardcode width as half of what's used in R/src/regression.utils.R, for crisp img on high-res screen\n\t\t}\n\t}\n\n\tself.mayshow_residuals = result => {\n\t\tif (!result.residuals) return\n\t\tconst div = self.newDiv(result.residuals.label)\n\t\tconst table = div.append('table').style('border-spacing', '8px').attr('name', 'sjpp-residuals-table') //For integration tests\n\t\tconst tr1 = table.append('tr').style('opacity', 0.4)\n\t\tconst tr2 = table.append('tr')\n\t\tfor (let i = 0; i < result.residuals.header.length; i++) {\n\t\t\ttr1.append('td').text(result.residuals.header[i])\n\t\t\ttr2.append('td').text(result.residuals.rows[i])\n\t\t}\n\t}\n\n\tself.mayshow_cuminc = async result => {\n\t\tif (!result.cuminc) return\n\t\tconst holder = self.newDiv('Cumulative incidence test:' /*, 'p-value = ' + result.cuminc.pvalue*/)\n\t\tconst _ = await import('./cuminc')\n\t\tconst plotter = new _.Cuminc({\n\t\t\tholder,\n\t\t\tconfig: {\n\t\t\t\tterm: self.config.outcome,\n\t\t\t\tterm2: {\n\t\t\t\t\tterm: {\n\t\t\t\t\t\tname: 'Variant',\n\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t1: { key: 1, label: 'Has minor allele' },\n\t\t\t\t\t\t\t2: { key: 2, label: 'No minor allele' }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tif (result.cuminc.ci_data) {\n\t\t\tplotter.main(result.cuminc.ci_data)\n\t\t} else {\n\t\t\tholder.append('div').style('margin', '20px').text(result.cuminc.msg)\n\t\t}\n\t}\n\n\tself.mayshow_wilcoxon = result => {\n\t\tif (!result.wilcoxon) return\n\t\tconst div = self.newDiv('Wilcoxon rank sum test:', 'p-value = ' + result.wilcoxon.pvalue)\n\t\tif (result.wilcoxon.boxplots) {\n\t\t\tconst bs = result.wilcoxon.boxplots\n\t\t\t// {hasEff{}, noEff{}, minv, maxv}\n\n\t\t\tconst boxplotHeight = 20,\n\t\t\t\tboxplotWidth = 400,\n\t\t\t\tleftLabelWidth = 160, // hardcoded number, must fit the boxplot labels\n\t\t\t\taxisheight = 40,\n\t\t\t\tlabpad = 20,\n\t\t\t\tvpad = 10\n\n\t\t\tconst scale = scaleLinear().domain([bs.minv, bs.maxv]).range([0, boxplotWidth])\n\n\t\t\tconst svg = div\n\t\t\t\t.append('svg')\n\t\t\t\t.style('margin-top', '10px')\n\t\t\t\t.attr('width', leftLabelWidth + labpad + boxplotWidth + 10)\n\t\t\t\t.attr('height', vpad * 3 + boxplotHeight * 2 + axisheight)\n\t\t\t// anchor\n\t\t\tconst g = svg.append('g').attr('transform', `translate(${leftLabelWidth + labpad},${vpad})`)\n\t\t\tdrawBoxplot({\n\t\t\t\tg: g.append('g'),\n\t\t\t\tbp: bs.hasEff,\n\t\t\t\tscale,\n\t\t\t\trowheight: boxplotHeight,\n\t\t\t\tcolor: boxplotcolor,\n\t\t\t\tlabpad\n\t\t\t})\n\t\t\tdrawBoxplot({\n\t\t\t\tg: g.append('g').attr('transform', `translate(0,${boxplotHeight + vpad})`),\n\t\t\t\tbp: bs.noEff,\n\t\t\t\tscale,\n\t\t\t\trowheight: boxplotHeight,\n\t\t\t\tcolor: boxplotcolor,\n\t\t\t\tlabpad\n\t\t\t})\n\t\t\t// axis\n\t\t\t{\n\t\t\t\tconst axisg = g.append('g').attr('transform', `translate(0,${boxplotHeight * 2 + vpad * 2})`)\n\t\t\t\tconst axis = axisBottom().scale(scale)\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: axisg.call(axis),\n\t\t\t\t\tcolor: boxplotcolor,\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t\taxisg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(self.config.outcome.term.name)\n\t\t\t\t\t.attr('font-size', 15)\n\t\t\t\t\t.attr('x', boxplotWidth / 2)\n\t\t\t\t\t.attr('y', axisheight - 5)\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('fill', boxplotcolor)\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_fisher = result => {\n\t\tif (!result.fisher) return\n\t\tconst div = self.newDiv(\n\t\t\tresult.fisher.isChi ? 'Chi-square test:' : \"Fisher's exact test:\",\n\t\t\t'p-value = ' + result.fisher.pvalue\n\t\t)\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('margin', '20px')\n\t\t\t.style('border-spacing', '5px')\n\t\t\t.style('border-collapse', 'separate')\n\t\tfor (const r of result.fisher.rows) {\n\t\t\tconst tr = table.append('tr')\n\t\t\tfor (const c of r) {\n\t\t\t\ttr.append('td').text(c)\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_coefficients = result => {\n\t\tif (!result.coefficients) {\n\t\t\tif (result.coefficients_uni && result.coefficients_multi) {\n\t\t\t\t// coefficients from univariate and multivariate analyses\n\t\t\t\tself.mayshow_coefficients_uniMulti(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst div = self.newDiv(result.coefficients.label)\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '0px')\n\t\t\t.attr('data-testid', 'sjpp-regression-resultCoefficientTable')\n\n\t\t// padding is set on every <td>. need a better solution\n\n\t\t/* forest plot, shown for both interacting and non-interacting rows\n\t\ta plot is added to 3rd column of each row, and the axis to the header row\n\t\tplotter can be a blank function if there's no valid value for plotting */\n\t\tconst forestPlotter = self.getForestPlotter(result.coefficients.terms, result.coefficients.interactions)\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr')\n\t\t\tconst header = result.coefficients.header\n\t\t\t// header for variable column\n\t\t\ttr.append('td').text(header.shift()).style('padding', '8px')\n\t\t\t// header for category column\n\t\t\ttr.append('td').text(header.shift()).style('padding', '8px')\n\t\t\t// skip headers for sample and event count columns\n\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\theader.shift()\n\t\t\t\theader.shift()\n\t\t\t}\n\t\t\t// combine headers for 95% CI columns\n\t\t\theader.splice(1, 2, '95% CI')\n\t\t\t// display remaining headers, along with the forest plot axis\n\t\t\tself.fillDataHeaders(header, tr, undefined, undefined, forestPlotter)\n\t\t}\n\n\t\t// get tws of all independent variables\n\t\t// will be used for tooltip message of estimate value\n\t\tself.independentTws = Object.keys(result.coefficients.terms).map(tid => self.getIndependentInput(tid).term)\n\n\t\tlet varcount = 0\n\t\t// intercept row\n\t\tconst intercept = result.coefficients.intercept\n\t\tif (intercept) {\n\t\t\tconst tr = table.append('tr').style('background', ++varcount % 2 ? '#eee' : 'none')\n\t\t\t// variable column\n\t\t\ttr.append('td').text(intercept.shift()).style('padding', '8px')\n\t\t\t// category column\n\t\t\ttr.append('td').text(intercept.shift()).style('padding', '8px')\n\t\t\t// forest plot column\n\t\t\ttr.append('td')\n\t\t\t// data columns\n\t\t\tself.fillCoefDataCols({ tr, cols: intercept, isIntercept: true })\n\t\t}\n\n\t\t/* term rows:\n\t\tfor each independent terms, show 1 or multiple rows\n\t\tthese rows do not cover interactions, which are rendered afterwards\n\t\t*/\n\t\tlet rowcolor\n\t\tfor (const tid in result.coefficients.terms) {\n\t\t\tconst termdata = result.coefficients.terms[tid]\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of a variable will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t// col 1: term name\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillCoefficientTermname(tw, termNameTd)\n\n\t\t\tif (termdata.fields) {\n\t\t\t\t// create only 1 row for this term in coefficients table, as it doesn't have categories\n\n\t\t\t\tconst cols = termdata.fields\n\n\t\t\t\t// col 2: category column\n\t\t\t\t{\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw)\n\t\t\t\t}\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// but do not need to report for continuous variable\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t}\n\n\t\t\t\t// display forest plot\n\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t// display data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw })\n\t\t\t} else if (termdata.categories) {\n\t\t\t\t// term has categories, create one sub-row for each category in coefficient tables\n\n\t\t\t\tconst orderedCategories = []\n\t\t\t\tconst input = self.getIndependentInput(tid)\n\t\t\t\tif (input.orderedLabels) {\n\t\t\t\t\t// reorder rows by predefined order\n\t\t\t\t\tfor (const k of input.orderedLabels) {\n\t\t\t\t\t\tif (termdata.categories[k]) orderedCategories.push(k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const k in termdata.categories) {\n\t\t\t\t\tif (!orderedCategories.includes(k)) orderedCategories.push(k)\n\t\t\t\t}\n\n\t\t\t\t// multiple categories\n\t\t\t\t// show first category as full row, with first cell spanning rest of categories\n\t\t\t\ttermNameTd.attr('rowspan', orderedCategories.length).style('vertical-align', 'top')\n\n\t\t\t\tlet isfirst = true\n\t\t\t\tfor (const k of orderedCategories) {\n\t\t\t\t\tif (!isfirst) {\n\t\t\t\t\t\t// create new row starting from 2nd category\n\t\t\t\t\t\ttr = table.append('tr').style('background', rowcolor)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cols = termdata.categories[k]\n\n\t\t\t\t\t// col 2: category column\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw, k)\n\n\t\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t\t// sample size and event count columns present\n\t\t\t\t\t\tif (tw.q.mode == 'spline') {\n\t\t\t\t\t\t\t// skip columns for cubic spline variable\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// report sample sizes and event counts of coefficients\n\t\t\t\t\t\t\t// for both ref and non-ref categories\n\t\t\t\t\t\t\tconst [samplesize_ref, samplesize_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tconst [eventcnt_ref, eventcnt_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tif (isfirst) {\n\t\t\t\t\t\t\t\tconst variableBottomDiv = termNameTd.select('.sjpcb-coef-variable-bottom')\n\t\t\t\t\t\t\t\tvariableBottomDiv.style('align-items', 'baseline')\n\t\t\t\t\t\t\t\tconst refGrpDiv = variableBottomDiv.selectAll('div').filter((d, i) => i === 1)\n\t\t\t\t\t\t\t\trefGrpDiv.append('div').html(`n=${samplesize_ref}<br>events=${eventcnt_ref}`)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttd.append('div').style('font-size', '.8em').html(`n=${samplesize_c}<br>events=${eventcnt_c}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// display forest plot\n\t\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t\t// display data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, categoryKey: k })\n\n\t\t\t\t\tisfirst = false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttr.append('td').text('ERROR: no .fields[] or .categories{}')\n\t\t\t}\n\t\t}\n\n\t\t// interactions\n\t\tfor (const i of result.coefficients.interactions) {\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of an interaction will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\tconst term1 = self.getIndependentInput(i.term1).term\n\t\t\tconst term2 = self.getIndependentInput(i.term2).term\n\n\t\t\t// col 1: variable\n\t\t\t{\n\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\tfillTdName(td.append('div'), term1 ? term1.term.name + ' : ' : row.term1 + ' : ')\n\t\t\t\tfillTdName(td.append('div'), term2 ? term2.term.name : row.term2)\n\t\t\t\ttd.attr('rowspan', i.categories.length).style('vertical-align', 'top')\n\t\t\t}\n\n\t\t\tlet isfirst = true\n\t\t\tfor (const c of i.categories) {\n\t\t\t\t// new subrow for every category\n\t\t\t\tif (!isfirst) tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t\t// col 2: category\n\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\tfillColumn2coefficientsTable(td.append('div'), term1, c.category1)\n\t\t\t\tfillColumn2coefficientsTable(td.append('div'), term2, c.category2)\n\n\t\t\t\tconst cols = c.lst\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// skip for now for interactions\n\t\t\t\t\t// TODO: how to handle sample size/event counts for interactions?\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t}\n\n\t\t\t\t// display forest plot\n\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t// display data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw: term1, tw2: term2, categoryKey: c.category1, categoryKey2: c.category2 })\n\n\t\t\t\tisfirst = false\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_coefficients_uniMulti = result => {\n\t\t// generate coefficients table for\n\t\t// univariate and multivariate analyses\n\t\tif (!result.coefficients_uni || !result.coefficients_multi) return\n\n\t\tconst div = self.newDiv(result.coefficients_uni.label)\n\t\tdiv.style('margin-bottom', '200px') // to provide space for rendering result tooltips\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '0px')\n\t\t\t.attr('data-testid', 'sjpp-regression-resultCoefficientTable')\n\n\t\t// padding is set on every <td>. need a better solution\n\n\t\t/* forest plot: a plot for univariate data and a plot for multivariate data\n\t\tare shown as separate columns in each row, with their axis on the header row */\n\t\tconst forestPlotter_uni = self.getForestPlotter(result.coefficients_uni.terms, result.coefficients_uni.interactions)\n\t\tconst forestPlotter_multi = self.getForestPlotter(\n\t\t\tresult.coefficients_multi.terms,\n\t\t\tresult.coefficients_multi.interactions\n\t\t)\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr_label = table.append('tr').style('opacity', 0.4) // labels displayed above header row\n\t\t\tconst tr = table.append('tr') // header row\n\n\t\t\tconst header_uni = result.coefficients_uni.header\n\t\t\tconst header_multi = result.coefficients_multi.header\n\n\t\t\t// header for variable column\n\t\t\ttr.append('td').text(header_uni.shift()).style('padding', '8px')\n\t\t\ttr_label.append('td').style('padding', '8px')\n\t\t\theader_multi.shift() // same value as in header_uni\n\n\t\t\t// header for category column\n\t\t\ttr.append('td').text(header_uni.shift()).style('padding', '8px')\n\t\t\ttr_label.append('td').style('padding', '8px')\n\t\t\theader_multi.shift() // same value as in header_uni\n\n\t\t\t// skip headers for sample and event count columns\n\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\theader_uni.shift()\n\t\t\t\theader_uni.shift()\n\t\t\t\theader_multi.shift()\n\t\t\t\theader_multi.shift()\n\t\t\t}\n\n\t\t\t// combine headers for 95% CI columns\n\t\t\theader_uni.splice(1, 2, '95% CI')\n\t\t\theader_multi.splice(1, 2, '95% CI')\n\n\t\t\t// fill headers for data columns, along with the forest plot axes\n\t\t\tself.fillDataHeaders(header_uni, tr, tr_label, 'Univariate', forestPlotter_uni)\n\t\t\ttr.append('td').style('width', '2px') //separation between univariate/multivariate\n\t\t\ttr_label.append('td').style('width', '2px')\n\t\t\tself.fillDataHeaders(header_multi, tr, tr_label, 'Multivariable-adjusted', forestPlotter_multi)\n\t\t}\n\n\t\t/* term rows:\n\t\tfor each independent terms, show 1 or multiple rows\n\t\t*/\n\n\t\t// get tws of all independent variables\n\t\t// will be used for tooltip message of estimate value\n\t\tself.independentTws = Object.keys(result.coefficients_uni.terms).map(tid => self.getIndependentInput(tid).term)\n\n\t\tlet varcount = 0,\n\t\t\trowcolor\n\t\tfor (const tid in result.coefficients_uni.terms) {\n\t\t\t// termdata is data from univariate analysis\n\t\t\t// will be used to fill in variable, category, and\n\t\t\t// univariate data columns\n\t\t\tconst termdata = result.coefficients_uni.terms[tid]\n\t\t\t// termdata_multi is data from multivariate analysis\n\t\t\t// will be used to fill in multivariate data columns\n\t\t\tconst termdata_multi = result.coefficients_multi.terms[tid]\n\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of a variable will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t// col 1: term name\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillCoefficientTermname(tw, termNameTd)\n\n\t\t\tif (termdata.fields) {\n\t\t\t\t// create only 1 row for this term in coefficients table, as it doesn't have categories\n\n\t\t\t\tconst cols = termdata.fields\n\t\t\t\tconst cols_multi = termdata_multi.fields\n\n\t\t\t\t// col 2: category column\n\t\t\t\t{\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw)\n\t\t\t\t}\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// cox regression\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// but do not need to report for continuous variable\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\tcols_multi.shift()\n\t\t\t\t}\n\n\t\t\t\t// display univariate forest plot\n\t\t\t\tforestPlotter_uni(tr.append('td'), cols)\n\n\t\t\t\t// display univariate data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, isUnivariate: true })\n\n\t\t\t\ttr.append('td').style('width', '2px') // separation between univariate/multivariate\n\n\t\t\t\t// display multivariate forest plot\n\t\t\t\tforestPlotter_multi(tr.append('td'), cols_multi)\n\n\t\t\t\t// display multivariate data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols: cols_multi, tw })\n\t\t\t} else if (termdata.categories) {\n\t\t\t\t// term has categories, create one sub-row for each category in coefficient tables\n\n\t\t\t\tconst orderedCategories = []\n\t\t\t\tconst input = self.getIndependentInput(tid)\n\t\t\t\tif (input.orderedLabels) {\n\t\t\t\t\t// reorder rows by predefined order\n\t\t\t\t\tfor (const k of input.orderedLabels) {\n\t\t\t\t\t\tif (termdata.categories[k]) orderedCategories.push(k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const k in termdata.categories) {\n\t\t\t\t\tif (!orderedCategories.includes(k)) orderedCategories.push(k)\n\t\t\t\t}\n\n\t\t\t\t// multiple categories\n\t\t\t\t// show first category as full row, with first cell spanning rest of categories\n\t\t\t\ttermNameTd.attr('rowspan', orderedCategories.length).style('vertical-align', 'top')\n\n\t\t\t\tlet isfirst = true\n\t\t\t\tfor (const k of orderedCategories) {\n\t\t\t\t\tif (!isfirst) {\n\t\t\t\t\t\t// create new row starting from 2nd category\n\t\t\t\t\t\ttr = table.append('tr').style('background', rowcolor)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cols = termdata.categories[k]\n\t\t\t\t\tconst cols_multi = termdata_multi.categories[k]\n\n\t\t\t\t\t// col 2: category column\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw, k)\n\n\t\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t\t// cox regression\n\t\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t\tif (tw.q.mode == 'spline') {\n\t\t\t\t\t\t\t// skip columns for cubic spline variable\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// report sample sizes and event counts of coefficients\n\t\t\t\t\t\t\t// for both ref and non-ref categories\n\t\t\t\t\t\t\tconst [samplesize_ref, samplesize_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tconst [eventcnt_ref, eventcnt_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tif (isfirst) {\n\t\t\t\t\t\t\t\tconst variableBottomDiv = termNameTd.select('.sjpcb-coef-variable-bottom')\n\t\t\t\t\t\t\t\tvariableBottomDiv.style('align-items', 'baseline')\n\t\t\t\t\t\t\t\tconst refGrpDiv = variableBottomDiv.selectAll('div').filter((d, i) => i === 1)\n\t\t\t\t\t\t\t\trefGrpDiv.append('div').html(`n=${samplesize_ref}<br>events=${eventcnt_ref}`)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttd.append('div').style('font-size', '.8em').html(`n=${samplesize_c}<br>events=${eventcnt_c}`)\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// display univariate forest plot\n\t\t\t\t\tforestPlotter_uni(tr.append('td'), cols)\n\n\t\t\t\t\t// display univariate data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, categoryKey: k, isUnivariate: true })\n\n\t\t\t\t\ttr.append('td').style('width', '2px') // separation between univariate/multivariate\n\n\t\t\t\t\t// display multivariate forest plot\n\t\t\t\t\tforestPlotter_multi(tr.append('td'), cols_multi)\n\n\t\t\t\t\t// display multivariate data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols: cols_multi, tw, categoryKey: k })\n\n\t\t\t\t\tisfirst = false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttr.append('td').text('ERROR: no .fields[] or .categories{}')\n\t\t\t}\n\t\t}\n\t}\n\n\t// fill headers of data columns of coefficients table\n\tself.fillDataHeaders = (header, tr, tr_label, label, forestPlotter) => {\n\t\tconst startColN = tr.selectAll('td').size()\n\t\t// header for forest plot column, showing the forest plot axis\n\t\tconst forestTd = tr.append('td')\n\t\tif (forestPlotter) {\n\t\t\t// call plotter without data to render the axis\n\t\t\tforestTd.style('vertical-align', 'bottom')\n\t\t\tforestPlotter(forestTd)\n\t\t}\n\t\t// headers for data columns\n\t\theader.forEach((h, i, arr) => {\n\t\t\tif (i === 0) {\n\t\t\t\t// header for estimate column\n\t\t\t\tconst est = h\n\t\t\t\tconst estTd = tr.append('td').style('padding', '8px').text(est)\n\t\t\t\tconst estInfo = estTd.append('sup').style('cursor', 'default').html(' ⓘ')\n\t\t\t\testInfo.on('mouseover', event => {\n\t\t\t\t\tconst tip = self.dom.tip.clear()\n\t\t\t\t\ttip.d.append('div').text('Hover over each value to view explanation of the result')\n\t\t\t\t\ttip.showunder(event.target)\n\t\t\t\t})\n\t\t\t\testInfo.on('mouseout', () => self.dom.tip.hide())\n\t\t\t} else {\n\t\t\t\t// headers for all other data columns\n\t\t\t\tconst td = tr.append('td').text(h).style('padding', '8px')\n\t\t\t\tif (i === arr.length - 1) td.style('font-style', 'italic')\n\t\t\t}\n\t\t})\n\t\t// fill label row, if defined\n\t\tif (tr_label) {\n\t\t\tconst endColN = tr.selectAll('td').size()\n\t\t\ttr_label\n\t\t\t\t.append('td')\n\t\t\t\t.attr('colspan', endColN - startColN)\n\t\t\t\t.style('padding', '0px 8px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.append('div')\n\t\t\t\t.text(label)\n\t\t\t\t.style('border-bottom', '1px solid')\n\t\t\t\t.style('padding', '5px')\n\t\t}\n\t}\n\n\t// fill data columns of row of coefficients table\n\tself.fillCoefDataCols = arg => {\n\t\tconst { tr, cols, tw } = arg\n\t\t// estimate (Beta/OR/HR) column\n\t\tconst est = cols.shift()\n\t\tconst estSpan = tr.append('td').style('padding', '8px').style('cursor', 'default').append('span').text(est)\n\t\t// on mouseover, display explanation of estimate value\n\t\testSpan.on('mouseover', event => {\n\t\t\tif (tw && tw.q.mode == 'spline') return\n\t\t\tconst tip = self.dom.tip.clear()\n\t\t\tlet estimateMsg = self.getEstimateMsg(Object.assign({ est: Number(est) }, arg))\n\t\t\tif (tw) {\n\t\t\t\tconst pvalue = Number(cols[cols.length - 1])\n\t\t\t\testimateMsg += `<br><br><span style=\"font-style: italic\">This association is ${\n\t\t\t\t\tpvalue < 0.05 ? 'statistically significant (P < 0.05)' : 'not statistically significant (P \u2265 0.05)</span>'\n\t\t\t\t}.`\n\t\t\t}\n\t\t\ttip.d.append('div').style('max-width', '500px').html(estimateMsg)\n\t\t\ttip.showunder(event.target)\n\t\t})\n\t\testSpan.on('mouseout', () => self.dom.tip.hide())\n\t\t// 95% CI column\n\t\ttr.append('td').html(`${cols.shift()} – ${cols.shift()}`).style('padding', '8px')\n\t\t// rest of columns\n\t\tfor (const v of cols) tr.append('td').text(v).style('padding', '8px')\n\t}\n\n\t// get tooltip message explaining the estimate value\n\tself.getEstimateMsg = arg =>\n\t\tgetEstimateMsg(\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\tregressionType: self.config.regressionType,\n\t\t\t\t\toutcomeTw: self.config.outcome,\n\t\t\t\t\tindependentTws: self.independentTws,\n\t\t\t\t\ttermdbConfig: self.app.vocabApi.termdbConfig,\n\t\t\t\t\tgetIndependentInput: tid => self.getIndependentInput(tid)\n\t\t\t\t},\n\t\t\t\targ\n\t\t\t)\n\t\t)\n\n\t// show disclaimer message under the coefficient tables when\n\t// regressionType == 'cox\n\tself.mayshow_coxDisclaimer = () => {\n\t\tconst disclaimer = self.app.vocabApi.termdbConfig.regression?.settings?.coxDisclaimer\n\t\tif (disclaimer && self.config.regressionType == 'cox') {\n\t\t\tself.dom.oneSetResultDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('white-space', 'wrap') // somewhere in the parent dom there must be a nowrap setting that causes overly long text to look bad. must apply this so it will auto wrap\n\t\t\t\t.attr('data-testid', 'sjpp-regression-result-coxDisclaimer')\n\t\t\t\t.style('margin', '20px 0px 20px 10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.text(disclaimer)\n\t\t}\n\t}\n\n\tself.mayshow_totalSnpEffect = result => {\n\t\tif (!result.totalSnpEffect) return\n\t\tconst div = self.newDiv(result.totalSnpEffect.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\tfor (const v of result.totalSnpEffect.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// total snp effect row\n\t\tconst tr = table.append('tr').style('background', '#eee')\n\t\tfor (const v of result.totalSnpEffect.lst) {\n\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t}\n\t\tconst snp = self.getIndependentInput(result.totalSnpEffect.snp).term\n\t\tconst interactions = result.totalSnpEffect.interactions.map(interaction => {\n\t\t\treturn {\n\t\t\t\tt1: self.getIndependentInput(interaction.term1).term,\n\t\t\t\tt2: self.getIndependentInput(interaction.term2).term\n\t\t\t}\n\t\t})\n\t\tconst bottomInfo = `Total: total effect of removing the snp (${snp.term.name}) and its interactions (${interactions\n\t\t\t.map(interaction => interaction.t1.term.name + ' : ' + interaction.t2.term.name)\n\t\t\t.join(' ; ')}) from the model`\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '20px 0px 20px 10px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('text-align', 'left')\n\t\t\t.style('color', '#999')\n\t\t\t.text(bottomInfo)\n\t}\n\n\tself.mayshow_type3 = result => {\n\t\tif (!result.type3 || self.app.vocabApi.termdbConfig.regression?.settings?.hideType3) return\n\t\tconst div = self.newDiv(result.type3.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\tfor (const v of result.type3.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// intercept row\n\t\tif (self.config.regressionType != 'cox') {\n\t\t\tconst tr = table.append('tr').style('background', '#eee')\n\t\t\tfor (const v of result.type3.intercept) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// term rows\n\t\t// independent terms (no interaction)\n\t\tlet rowcount = self.config.regressionType == 'cox' ? 1 : 0\n\t\tfor (const tid in result.type3.terms) {\n\t\t\t// get term data\n\t\t\tconst termdata = result.type3.terms[tid]\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\tlet tr = table.append('tr').style('background', rowcount++ % 2 ? '#eee' : 'none')\n\t\t\t// col 1: variable\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillTdName(termNameTd, tw.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of termdata) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t\t// interactions\n\t\tfor (const row of result.type3.interactions) {\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? '#eee' : 'none')\n\t\t\tconst t1 = self.getIndependentInput(row.term1).term\n\t\t\tconst t2 = self.getIndependentInput(row.term2).term\n\t\t\t// col 1: variable\n\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\tfillTdName(td.append('div'), t1.term.name + ' : ')\n\t\t\tfillTdName(td.append('div'), t2.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of row.lst) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_nonlinearity = result => {\n\t\t// only present when the model has cubic spline variables\n\t\tif (!result.nonlinearity) return\n\t\tconst div = self.newDiv(result.nonlinearity.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\tfor (const v of result.nonlinearity.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// one row per spline variable\n\t\tlet rowcount = 0\n\t\tfor (const tid in result.nonlinearity.terms) {\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? 'none' : '#eee')\n\t\t\t// col 1: variable\n\t\t\tfillTdName(tr.append('td').style('padding', '8px'), tw.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of result.nonlinearity.terms[tid]) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '10px 0px 0px 0px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#999')\n\t\t\t.text(\n\t\t\t\t'Comparison of the cubic spline fit against a linear fit of the same variable. A small p-value indicates the effect of the variable departs from linearity.'\n\t\t\t)\n\t}\n\n\tself.mayshow_tests = result => {\n\t\tif (!result.tests || self.app.vocabApi.termdbConfig.regression?.settings?.hideTests) return\n\t\tconst div = self.newDiv(result.tests.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\t\tconst header = table.append('tr').style('opacity', 0.4)\n\t\tfor (const cell of result.tests.header) {\n\t\t\theader.append('td').text(cell).style('padding', '8px')\n\t\t}\n\t\tlet rowcount = 0\n\t\tfor (const row of result.tests.rows) {\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? 'none' : '#eee')\n\t\t\tfor (const cell of row) {\n\t\t\t\ttr.append('td').text(cell).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_other = result => {\n\t\tif (!result.other) return\n\t\tconst div = self.newDiv(result.other.label)\n\t\tconst table = div.append('table').style('border-spacing', '8px')\n\t\tfor (let i = 0; i < result.other.header.length; i++) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').style('opacity', 0.4).text(result.other.header[i])\n\t\t\ttr.append('td').text(result.other.rows[i])\n\t\t}\n\t}\n\n\t/*\n\tthe function takes all data rows (except intercept) from coefficients table, and return a callback\n\tthe callback closures the axis range of all data\n\trun callback on each coefficient table row to plot the forest plot\n\n\tcollect all numeric data points from terms/interactons\n\tto derive forest plot axis range\n\tsort numbers in an array\n\tin logistic, if array[i]=0 then cannot use log(0) as axis min,\n\tin that case should use array[i+1] or next to find the smallest real number as axis min\n\tan arbitary cap is used to guard against extreme estimate values\n\t*/\n\tself.getForestPlotter = (terms, interactions) => {\n\t\t// array indices are the same for both non-interacting and interacting rows\n\t\tlet midIdx, // array index of the beta/odds ratio\n\t\t\tCIlow, // array(column) index of low end of confidence interval of midIdx\n\t\t\tCIhigh, // array index of high end of confidence interval\n\t\t\taxislab, // data type to show as axis label\n\t\t\tbaselineValue, // baseline value to show a vertical line\n\t\t\t// min/max value capping the axis, to guard against extreme estimates\n\t\t\t// only used for logistic odds ratio\n\t\t\t// for linear, will use actual range from estimates and confidence interval\n\t\t\tcapMin,\n\t\t\tcapMax\n\t\tif (self.config.regressionType == 'linear') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Beta value'\n\t\t\tbaselineValue = 0\n\t\t\tcapMin = null\n\t\t\tcapMax = null\n\t\t} else if (self.config.regressionType == 'logistic') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Odds ratio'\n\t\t\tbaselineValue = 1\n\t\t\tcapMin = 0.1\n\t\t\tcapMax = 10\n\t\t} else if (self.config.regressionType == 'cox') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Hazard ratio'\n\t\t\tbaselineValue = 1\n\t\t\tcapMin = 0.1\n\t\t\tcapMax = 10\n\t\t} else {\n\t\t\tthrow 'unknown regressionType'\n\t\t}\n\n\t\t// collect mid/CIlow/CIhigh numeric values into a flat array\n\t\tconst values = []\n\t\tfor (const tid in terms) {\n\t\t\tconst d = terms[tid]\n\t\t\tif (d.fields) {\n\t\t\t\tnumbers2array(d.fields)\n\t\t\t} else {\n\t\t\t\tfor (const k in d.categories) {\n\t\t\t\t\tnumbers2array(d.categories[k])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const i of interactions) {\n\t\t\tfor (const k of i.categories) {\n\t\t\t\tnumbers2array(k.lst)\n\t\t\t}\n\t\t}\n\n\t\tif (values.length == 0) {\n\t\t\t// no valid estimates\n\t\t\t// return blank function for inability to make plot\n\t\t\treturn () => {}\n\t\t}\n\n\t\t// all valid numbers are collected into values[]\n\t\tvalues.sort((a, b) => a - b) // ascending\n\n\t\tif (capMin == null) {\n\t\t\t// use actual range as cap; all values are valid numbers\n\t\t\tcapMin = values[0]\n\t\t\tcapMax = values[values.length - 1]\n\t\t}\n\n\t\t// graph dimension\n\t\tconst width = 180 // plottable dimension\n\t\tconst height = 20\n\t\tconst xleftpad = 10,\n\t\t\txrightpad = 10 // leave space for axis\n\n\t\tconst scale = get_scale(values)\n\n\t\t// todo: logistic, add center line; linear: 0 value\n\t\treturn (td, lst) => {\n\t\t\tif (!scale) {\n\t\t\t\t// scale is not built, do not plot\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// lst is data from a row from either terms or interactions\n\n\t\t\tconst fontsize = 12 // of the axis label\n\t\t\t/* the axis is rendered on the header row, using axisTop so that ticks and\n\t\t\taxis label are drawn above the axis line and next to the plots below it.\n\t\t\tthus for the axis, the svg is made taller and the axis line is pushed to\n\t\t\tthe bottom, to reserve space above it for the ticks and the axis label.\n\t\t\t1 pixel is spared at the bottom, otherwise the axis line is clipped */\n\t\t\tconst svg = td\n\t\t\t\t.append('svg')\n\t\t\t\t.attr('width', width + xleftpad + xrightpad)\n\t\t\t\t.attr('height', lst ? height : height + fontsize)\n\t\t\tconst g = svg.append('g').attr('transform', `translate(${xleftpad},${lst ? 0 : height + fontsize - 1})`)\n\n\t\t\tif (!lst) {\n\t\t\t\t//////////////////////////////\n\t\t\t\t// no data; render axis instead\n\n\t\t\t\t// do not apply this format for linear regression,\n\t\t\t\t// had encountered a bug that '.1r' will print \"20\" at the tick of \"15\"\n\t\t\t\tconst tickFormat = self.config.regressionType == 'logistic' ? '.1r' : undefined\n\n\t\t\t\tconst axis = axisTop().ticks(4, tickFormat).scale(scale)\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: g.call(axis),\n\t\t\t\t\tcolor: forestcolor,\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('fill', forestcolor)\n\t\t\t\t\t.text(axislab)\n\t\t\t\t\t.attr('x', width / 2)\n\t\t\t\t\t.attr('y', -height) // above the ticks, at the top of the svg\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// vertical baseline\n\t\t\t\tconst x = scale(baselineValue)\n\t\t\t\tg.append('line').attr('x1', x).attr('y1', 0).attr('x2', x).attr('y2', height).attr('stroke', '#ccc')\n\t\t\t}\n\n\t\t\tconst mid = Number(lst[midIdx]),\n\t\t\t\tcilow = Number(lst[CIlow]),\n\t\t\t\tcihigh = Number(lst[CIhigh])\n\t\t\tif (Number.isNaN(mid)) {\n\t\t\t\t// not plottable\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tg.append('circle')\n\t\t\t\t.attr('cx', scale(Math.min(Math.max(mid, capMin), capMax)))\n\t\t\t\t.attr('cy', height / 2)\n\t\t\t\t.attr('r', 3)\n\t\t\t\t.attr('fill', forestcolor)\n\n\t\t\tif (Number.isNaN(cilow) || Number.isNaN(cihigh)) {\n\t\t\t\t// cannot plot confidence interval\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// confidence interval\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', scale(Math.min(Math.max(cilow, capMin), capMax)))\n\t\t\t\t.attr('y1', height / 2)\n\t\t\t\t.attr('x2', scale(Math.min(Math.max(cihigh, capMin), capMax)))\n\t\t\t\t.attr('y2', height / 2)\n\t\t\t\t.attr('stroke', forestcolor)\n\t\t}\n\t\t///////// helpers\n\t\tfunction numbers2array(_lst) {\n\t\t\tconst lst = self.config.regressionType == 'cox' ? _lst.slice(2) : _lst // exclude sample and event count columns\n\t\t\tconst m = Number(lst[midIdx])\n\t\t\tif (!Number.isNaN(m)) values.push(m)\n\t\t\tconst l = Number(lst[CIlow]),\n\t\t\t\th = Number(lst[CIhigh])\n\t\t\tif (!Number.isNaN(l) && !Number.isNaN(h)) {\n\t\t\t\t// if either low/high is NA, do not use\n\t\t\t\t// this prevent the case of low=NA, high=3e+41 (somehow high is extremely large value)\n\t\t\t\tvalues.push(l)\n\t\t\t\tvalues.push(h)\n\t\t\t}\n\t\t}\n\t\tfunction get_scale(values) {\n\t\t\tif (self.config.regressionType == 'logistic') {\n\t\t\t\t// apply log to odds ratio\n\t\t\t\t// iterate to find a non-0 value\n\t\t\t\tlet i = 0\n\t\t\t\twhile (values[i] <= 0) {\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\tif (i >= values.length || values[i] <= 0) {\n\t\t\t\t\t// no valid value, won't build scale\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst min = values[i]\n\t\t\t\tconst max = values[values.length - 1]\n\t\t\t\treturn scaleLog()\n\t\t\t\t\t.domain([Math.max(min, capMin), Math.min(max, capMax)])\n\t\t\t\t\t.range([0, width])\n\t\t\t\t\t.nice()\n\t\t\t}\n\t\t\tif (self.config.regressionType == 'linear' || self.config.regressionType == 'cox') {\n\t\t\t\treturn scaleLinear()\n\t\t\t\t\t.domain([Math.max(values[0], capMin), Math.min(values[values.length - 1], capMax)])\n\t\t\t\t\t.range([0, width])\n\t\t\t}\n\t\t\tthrow 'unknown type'\n\t\t}\n\t}\n}\n\nfunction fillTdName(td, name) {\n\tif (name.length < 40) {\n\t\ttd.text(name)\n\t} else {\n\t\ttd.text(name.substring(0, 35) + ' ...').attr('aria-label', name)\n\t}\n}\nfunction fillCoefficientTermname(tw, td) {\n\t// fill column 1 <td> using term name\n\tfillTdName(td, tw.term.name || tid)\n\t// fill refGrp or effect allele, if applicable\n\tconst hasRefGrp = 'refGrp' in tw && tw.refGrp != refGrp_NA && tw.q.mode != 'spline'\n\tif (hasRefGrp || tw.effectAllele) {\n\t\t// has refGrp or effect allele\n\t\t// display beneath term name\n\t\tconst bottomDiv = td\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sjpcb-coef-variable-bottom')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('margin-top', '2px')\n\t\t\t.style('font-size', '.8em')\n\n\t\tlet label\n\t\tif (hasRefGrp) {\n\t\t\tlabel = tw.term.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw.refGrp\n\t\t} else {\n\t\t\tlabel = tw.effectAllele\n\t\t}\n\n\t\tbottomDiv\n\t\t\t.append('div')\n\t\t\t.style('padding', '1px 5px')\n\t\t\t.style('border', '1px solid #aaa')\n\t\t\t.style('border-radius', '10px')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.text(hasRefGrp ? 'REF' : 'EFFECT ALLELE')\n\n\t\tbottomDiv.append('div').style('padding', '1px 3px').text(label)\n\t}\n\n\t/* a numeric variable of a term with valueConversion{} is analyzed by the converted unit\n\t(see makeRinput() in server/src/routes/termdb.regression.ts). name that unit under the variable,\n\tso the estimate is not misread as being per the unit the term's values are stored in */\n\tconst toUnit = tw.term.valueConversion?.toUnit\n\tif (toUnit && (tw.q.mode == 'continuous' || tw.q.mode == 'spline')) {\n\t\ttd.append('div').style('margin-top', '2px').style('font-size', '.7em').style('opacity', 0.6).text(`per ${toUnit}`)\n\t}\n}\n\nfunction make_mds3_variants(tw, resultLst, regressionType) {\n\t/* return a list of variants as mds3 client-side custom data\n\ttw:\n\t\tterm:\n\t\t\tsnps[ {} ]\n\t\t\t\tsnpid\n\t\t\t\tmlst[]\n\t\t\t\t\telement: {alt/class/dt/mname}\n\t\tq{}\n\t\t\tsnp2effAle:{}\n\n\tresultLst: [{data,id},{data,id},...]\n\t*/\n\tconst mlst = []\n\tfor (const snp of tw.term.snps) {\n\t\tconst m = {\n\t\t\tchr: snp.chr,\n\t\t\tpos: snp.pos,\n\t\t\tssm_id: snp.snpid // needed for highlighting dot\n\t\t}\n\t\tmlst.push(m)\n\t\t// decide class/mname for this based on effect allele\n\t\tconst effAle = tw.q.snp2effAle[snp.snpid]\n\t\tconst m2 = snp.mlst.find(i => i.alt == effAle)\n\t\tif (m2) {\n\t\t\t// eff ale is an alt allele, transfer its class to m\n\t\t\tObject.assign(m, m2)\n\t\t} else {\n\t\t\t// eff allele is not an alterative allele!\n\t\t\t// just use the class of the first alt allele\n\t\t\tObject.assign(m, snp.mlst[0])\n\t\t}\n\n\t\t// set default values as missing, to be able to show all variants in track\n\t\t// overwrite with real values if found in result\n\t\tm.regressionPvalue = 'NA'\n\t\tm.mlpv = 0 // display the dot at the bottom\n\n\t\tconst thisresult = resultLst.find(i => i.id == snp.snpid)\n\t\tif (!thisresult) {\n\t\t\t// missing result for this variant, caused by variable-skipping in R\n\t\t\tm.regressionResult = {\n\t\t\t\tdata: {\n\t\t\t\t\terr: ['No result for this variant at ' + snp.snpid]\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// reg result is found for this snp; can call displayResult_oneset\n\t\tm.regressionResult = thisresult // for displaying via click_snvindel()\n\n\t\tconst d = thisresult.data\n\t\tif (!d) throw '.data{} missing'\n\n\t\tif (d.type3) {\n\t\t\t/* result has type3 section, this variant has AF>cutoff and used for model-fitting\n\t\t\tshow this variant as a dot, do not set .shape = 'filledTriangle'\n\t\t\tfind p-value in regression results\n\t\t\t*/\n\t\t\tconst v = getSnpPvalueFromRegressionResults(d, snp.snpid)\n\t\t\tif (v == undefined) {\n\t\t\t\t// no valid pvalue from regression results\n\t\t\t} else {\n\t\t\t\t// has valid pvalue from regression results\n\t\t\t\tm.regressionPvalue = v\n\t\t\t\tm.mlpv = -Math.log10(v)\n\t\t\t}\n\n\t\t\t// assign estimate, for tooltip display\n\t\t\tif (!d.coefficients || !d.coefficients.terms) throw '.data.coefficients.terms{} missing'\n\t\t\tconst r = d.coefficients.terms[snp.snpid]\n\t\t\tif (!r) throw 'snp missing from data.coefficients.terms{}'\n\t\t\tif (Array.isArray(r.fields)) {\n\t\t\t\t// has fields[], snp is used as additive/dominant/recessive\n\t\t\t\tm.regressionEstimate = regressionType == 'cox' ? r.fields[2] : r.fields[0]\n\t\t\t} else if (r.categories) {\n\t\t\t\t// has categories{}: {C/T: Array(6), T/T: Array(6)}\n\t\t\t\t// snp is used by genotype\n\t\t\t\tconst lst = []\n\t\t\t\tfor (const gt in r.categories) {\n\t\t\t\t\tlst.push(gt + ':' + regressionType == 'cox' ? r.categories[gt][2] : r.categories[gt][0])\n\t\t\t\t}\n\t\t\t\tm.regressionEstimate = ' ' + lst.join(' ')\n\t\t\t} else {\n\t\t\t\tthrow 'unknown way to get snp estimates from coefficients table'\n\t\t\t}\n\t\t} else if (d.fisher) {\n\t\t\t/* { pvalue:float, table:[] }\n\t\t\tthis variant is tested by fisher, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.fisher.pvalue\n\t\t\tm.mlpv = -Math.log10(d.fisher.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else if (d.wilcoxon) {\n\t\t\t/* { pvalue:float }\n\t\t\tthis variant is tested by wilcoxon, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.wilcoxon.pvalue\n\t\t\tm.mlpv = -Math.log10(d.wilcoxon.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else if (d.cuminc) {\n\t\t\t/* { pvalue:float }\n\t\t\tthis variant is tested by cuminc, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.cuminc.pvalue\n\t\t\tm.mlpv = -Math.log10(d.cuminc.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else {\n\t\t\t// none of above. is monomorphic, show as hollow circle\n\t\t\tm.shape = 'emptyCircle'\n\t\t}\n\t}\n\treturn mlst\n}\n\nasync function createGenomebrowser(self, input, resultLst) {\n\t// create block instance that harbors the mds3 track for showing variants from the snplocus term\n\t// input is the snplocus Input instance\n\tconst arg = {\n\t\tholder: self.dom.snplocusBlockDiv,\n\t\tgenome: self.parent.genomeObj,\n\t\tchr: input.term.q.chr,\n\t\tstart: input.term.q.start,\n\t\tstop: input.term.q.stop,\n\t\tnobox: true,\n\t\ttklst: [],\n\t\tonCoordinateChange: async rglst => {\n\t\t\t// at the mds3 track, clear highlights added before\n\t\t\t// so that nothing is highlighted by default in updated data\n\t\t\tfor (const t of self.snplocusBlock.tklst) {\n\t\t\t\tif (t.type == 'mds3') delete t.skewer.hlssmid\n\t\t\t}\n\n\t\t\tconst { chr, start, stop } = rglst[0]\n\t\t\t// temporary tw as override for pill.runCallback()\n\t\t\tconst overrideTw = {\n\t\t\t\tterm: {\n\t\t\t\t\tid: input.term.term.id,\n\t\t\t\t\ttype: 'snplocus'\n\t\t\t\t},\n\t\t\t\tq: JSON.parse(JSON.stringify(input.term.q))\n\t\t\t}\n\t\t\toverrideTw.q.chr = chr\n\t\t\toverrideTw.q.start = start\n\t\t\toverrideTw.q.stop = stop\n\t\t\t// call fillTW of snplocus.js to recompute tw.term.snps[] and cache file\n\t\t\tconst _ = await import('../termsetting/handlers/snplocus')\n\t\t\tawait _.fillTW(overrideTw, self.vocabApi)\n\t\t\t/*\n\t\t\tupdated term info (term.snps[] and q.cacheid etc) are now in overrideTw\n\t\t\tcall pill.runCallback() with this override\n\t\t\twhich in turn calls editConfig() and\n\t\t\tdispatch action and write the updated tw into state;\n\t\t\tstate change will trigger pill.main()\n\t\t\tto propagate updated data to termsetting instance\n\n\t\t\t* Note *\n\t\t\tit is incorrect to call pill.main() or inputs.editConfig() here\n\n\t\t\taction dispatch will contain hasUnsubmittedEdits=true,\n\t\t\teffect of which is to hide result UI and require user to click submit button to rerun analysis\n\t\t\tset a single-use flag to nullify it so results.js can automatically run analysis\n\t\t\tso user can continuously look at genome browser\n\t\t\twithout break/interruption to user experience\n\t\t\t*/\n\t\t\tself.hasUnsubmittedEdits_nullify_singleuse = true\n\t\t\tinput.pill.runCallback(overrideTw)\n\t\t}\n\t}\n\n\t// add mds3 tk\n\targ.tklst.push({\n\t\ttype: 'mds3', // tkt.mds3\n\t\tname: 'Variants',\n\t\tskewerModes: [\n\t\t\t{\n\t\t\t\ttype: 'numeric',\n\t\t\t\tbyAttribute: 'mlpv', // corresponds to the \"mlpv\" attribute in m{}, can be anything\n\t\t\t\tlabel: '-log10 p-value',\n\t\t\t\tinuse: true,\n\t\t\t\ttooltipPrintValue: m => getMtooltipValues(m, self.config.regressionType)\n\t\t\t}\n\t\t],\n\t\tcustom_variants: make_mds3_variants(input.term, resultLst, self.config.regressionType),\n\t\tlegend: {\n\t\t\tcustomShapeLabels: {\n\t\t\t\tfilledCircle: 'common variants analyzed by model-fitting',\n\t\t\t\tfilledTriangle:\n\t\t\t\t\t'rare variants analyzed by ' +\n\t\t\t\t\t(self.config.regressionType == 'linear'\n\t\t\t\t\t\t? 'Wilcoxon rank sum test'\n\t\t\t\t\t\t: self.config.regressionType == 'logistic'\n\t\t\t\t\t\t? \"Fisher's exact test\"\n\t\t\t\t\t\t: 'Cumulative incidence test'),\n\t\t\t\temptyCircle: 'monomorphic variants skipped'\n\t\t\t}\n\t\t},\n\t\tclick_snvindel: async m => {\n\t\t\t// displayResult_oneset() will modify m.regressionResult.data\n\t\t\t// during rendering, so need to input clone of data\n\t\t\tself.displayResult_oneset(structuredClone(m.regressionResult.data))\n\t\t\tawait mayCheckLD(m, input, self)\n\t\t\tconst result_y = self.dom.oneSetResultDiv.node().getBoundingClientRect().top + window.scrollY\n\t\t\tconst nav_height = document.querySelector('.sjpp-nav').getBoundingClientRect().height\n\t\t\twindow.scroll({ behavior: 'smooth', top: result_y - nav_height })\n\t\t}\n\t})\n\n\tfirst_genetrack_tolist(self.parent.genomeObj, arg.tklst)\n\tconst _ = await import('../src/block')\n\treturn new _.Block(arg)\n}\n\nasync function updateMds3Tk(self, input, resultLst) {\n\t// browser is already created\n\t// find the mds3 track\n\tconst tk = self.snplocusBlock.tklst.find(i => i.type == 'mds3')\n\t// apply new sets of variants and results to track and render\n\ttk.custom_variants = make_mds3_variants(input.term, resultLst, self.config.regressionType)\n\t// if user changes position using termsetting ui,\n\t// input.term.q{} will hold different chr/start/stop than block\n\t// and block will need to update coord\n\tconst r = self.snplocusBlock.rglst[0]\n\tif (r.chr == input.term.q.chr && r.start == input.term.q.start && r.stop == input.term.q.stop) {\n\t\t// coord is the same between input and block\n\t\t// only need to rerender tk\n\t\ttk.load()\n\t} else {\n\t\tawait self.snplocusBlock.jump_1basedcoordinate(input.term.q)\n\t}\n\tself.snplocusBlock.cloakOff()\n}\n\nconst LDcolor0 = '#2E6594',\n\tLDcolor1 = '#ff0000',\n\tLDcolorScale = interpolateRgb(LDcolor0, LDcolor1)\n\nasync function mayCheckLD(m, input, self) {\n\t/*\n\tm: the mutation data object for the clicked dot in mds3 tk\n\t\t{chr, pos, ref, alt}\n\tinput: the snplocus Input instance\n\tself: result instance\n\t*/\n\tif (!input.term.q.restrictAncestry) {\n\t\t// requires restrictAncestry\n\t\t// may also support ld overlay without specifying an ancestry\n\t\treturn\n\t}\n\tconst tk = self.snplocusBlock.tklst.find(i => i.type == 'mds3')\n\tif (!tk || !tk.skewer || !tk.skewer.nmg) return\n\n\t// clear old result\n\tfor (const m of tk.custom_variants) delete m.regressionR2\n\n\tconst wait = self.dom.LDresultDiv.append('span').text('Loading LD data...')\n\n\ttry {\n\t\tconst data = await self.vocabApi.getLDdata(input.term.q.restrictAncestry.name, m)\n\t\tif (data.error) throw data.error\n\n\t\tif (data.nodata || !data.lst || data.lst.length == 0) {\n\t\t\t// either dataset does not have ld tracks, or no ld track found by name\n\t\t\t// or no ld data retrieved using given variant\n\t\t\t// restore color in case dots have been colored by ld in a prior click\n\t\t\twait.text('No LD data')\n\t\t\ttk.skewer.nmg.selectAll('.sja_aa_disk_fill').attr('fill', m => (m.shapeCircle ? 'none' : tk.color4disc(m)))\n\t\t\treturn\n\t\t}\n\t\ttk.skewer.nmg.selectAll('.sja_aa_disk_fill').attr('fill', m2 => {\n\t\t\tif (m2.pos == m.pos && m2.ref == m.ref && m2.alt == m.alt) {\n\t\t\t\t// same as m\n\t\t\t\treturn LDcolor1\n\t\t\t}\n\t\t\tfor (const i of data.lst) {\n\t\t\t\tif (i.pos == m2.pos && i.alleles == m2.ref + '.' + m2.alt) {\n\t\t\t\t\t// matched, record new result for displaying in hover tooltip\n\t\t\t\t\tm2.regressionR2 = i.r2\n\t\t\t\t\treturn LDcolorScale(i.r2)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LDcolorScale(0)\n\t\t})\n\n\t\twait.html(input.term.q.restrictAncestry.name + ' LD r<sup>2</sup>')\n\t\tshowLDlegend(self.dom.LDresultDiv, LDcolorScale)\n\t} catch (e) {\n\t\twait.text('Error: ' + (e.message || e))\n\t}\n}\n\nexport function showLDlegend(div, colorScale) {\n\tconst colorbardiv = div.append('span').style('margin-left', '10px')\n\tconst colorlst = []\n\tfor (let i = 0; i <= 1; i += 0.1) {\n\t\tcolorlst.push(colorScale(i))\n\t}\n\n\tconst axisheight = 20\n\tconst barheight = 15\n\tconst xpad = 10\n\tconst axiswidth = 150\n\n\t/** ColorScale component requires the color and data array to be the same\n\t * length. This data array is purely to fulfill that requirement.*/\n\tconst domain = colorlst.map((d, i) => i / (colorlst.length - 1))\n\n\tnew ColorScale({\n\t\tholder: colorbardiv,\n\t\tdomain,\n\t\ttopTicks: true,\n\t\twidth: xpad * 2 + axiswidth,\n\t\theight: axisheight + barheight,\n\t\tbarheight,\n\t\tbarwidth: axiswidth,\n\t\tfontSize: 12,\n\t\tcolors: colorlst,\n\t\tposition: `${xpad},${axisheight}`,\n\t\ttickSize: 6\n\t})\n}\n\nfunction getMtooltipValues(m, regressionType) {\n\tconst lst = [{ k: 'p-value', v: m.regressionPvalue }]\n\tif (m.regressionResult.AFstr) {\n\t\tlst.push({ k: 'AF', v: m.regressionResult.AFstr })\n\t}\n\tif (m.regressionEstimate) {\n\t\tif (regressionType == 'linear') lst.push({ k: 'beta', v: m.regressionEstimate })\n\t\telse if (regressionType == 'logistic') lst.push({ k: 'odds ratio', v: m.regressionEstimate })\n\t\telse if (regressionType == 'cox') lst.push({ k: 'hazard ratio', v: m.regressionEstimate })\n\t\telse throw 'unknown regression type'\n\t}\n\tif (m.regressionR2) {\n\t\tlst.push({ k: 'LD r2', v: m.regressionR2 })\n\t}\n\treturn lst\n}\n\nfunction getSnpPvalueFromRegressionResults(d, snpid) {\n\tlet str\n\tif (d.totalSnpEffect) {\n\t\t// snp has interactions\n\t\t// use p-value from total snp effect table\n\t\tstr = d.totalSnpEffect.lst[d.totalSnpEffect.lst.length - 1]\n\t} else {\n\t\t// snp has no interactions\n\t\t// use p-value from type3 stats table\n\t\tif (!d.type3.terms) throw '.data{type3:{terms}} missing'\n\t\tif (!d.type3.terms[snpid]) throw snpid + ' missing in type3.terms{}'\n\t\tif (!Array.isArray(d.type3.terms[snpid])) throw `type3.terms[${snp.snpid}] not array`\n\t\tstr = d.type3.terms[snpid][d.type3.terms[snpid].length - 1]\n\t}\n\tconst v = Number(str) // p-value string can be 'NA'\n\tif (Number.isFinite(v)) {\n\t\treturn v\n\t}\n\treturn undefined\n}\n\nfunction fillColumn2coefficientsTable(div, tw, categoryKey) {\n\tif (categoryKey) {\n\t\tdiv.text(tw && tw.term.values && tw.term.values[categoryKey] ? tw.term.values[categoryKey].label : categoryKey)\n\t\treturn\n\t}\n\t// the term doesn't have category, so indicate helpful status\n\tdiv.style('opacity', 0.3) // also gray out text to differentiate it from a category\n\tif ('geneticModel' in tw.q) {\n\t\tconst v = tw.q.geneticModel\n\t\tdiv.text(v == 0 ? '(additive)' : v == 1 ? '(dominant)' : '(recessive)')\n\t\treturn\n\t}\n\tif (tw.q.mode) {\n\t\tdiv.text('(' + tw.q.mode + ')')\n\t\treturn\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["tid", "snp", "tw", "category", "msg", "refGrp", "tid", "snp", "row", "tr", "values", "_", "m"]
|
|
7
|
+
}
|