@sjcrh/proteinpaint-client 2.79.5 → 2.79.7-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-MDLDUNEO.js +1403 -0
- package/dist/2dmaf-MDLDUNEO.js.map +7 -0
- package/dist/AppHeader-NKFRKH24.js +849 -0
- package/dist/AppHeader-NKFRKH24.js.map +7 -0
- package/dist/DEanalysis-AD6P4CMM.js +608 -0
- package/dist/DEanalysis-AD6P4CMM.js.map +7 -0
- package/dist/Disco-Y63VRUFG.js +2462 -0
- package/dist/Disco-Y63VRUFG.js.map +7 -0
- package/dist/Disco.UI-4UPRCFKM.js +255 -0
- package/dist/Disco.UI-4UPRCFKM.js.map +7 -0
- package/dist/HicApp-QGNKS4BP.js +2274 -0
- package/dist/HicApp-QGNKS4BP.js.map +7 -0
- package/dist/WSIViewer-CMI2NG5H.js +23529 -0
- package/dist/adSandbox-3SUMXENO.js +26 -0
- package/dist/app-AFC7K3QJ.js +44 -0
- package/dist/app-KOFKVIHE.js +72 -0
- package/dist/app.js +14 -16
- package/dist/bam-3Z43YZZX.js +840 -0
- package/dist/bam-3Z43YZZX.js.map +7 -0
- package/dist/barchart-46A6ZUSK.js +57 -0
- package/dist/barchart.data-RAXR5Z4M.js +27 -0
- package/dist/barchart.events-FTQ6DCCY.js +45 -0
- package/dist/bars.renderer-TPIVXMGV.js +20 -0
- package/dist/block-CKZFJS4C.js +6549 -0
- package/dist/block-CKZFJS4C.js.map +7 -0
- package/dist/block.init-PSSP7HZM.js +22 -0
- package/dist/block.mds.cnv-OCKCYC3P.js +493 -0
- package/dist/block.mds.cnv-OCKCYC3P.js.map +7 -0
- package/dist/block.mds.expressionrank-L5KD6WCQ.js +363 -0
- package/dist/block.mds.expressionrank-L5KD6WCQ.js.map +7 -0
- package/dist/block.mds.geneboxplot-EATHMZWR.js +837 -0
- package/dist/block.mds.geneboxplot-EATHMZWR.js.map +7 -0
- package/dist/block.mds.junction-KQVJ3BV5.js +1440 -0
- package/dist/block.mds.junction-KQVJ3BV5.js.map +7 -0
- package/dist/block.mds.svcnv-WHAXHU7V.js +7060 -0
- package/dist/block.mds.svcnv-WHAXHU7V.js.map +7 -0
- package/dist/block.mds2-55NGSUBZ.js +3448 -0
- package/dist/block.mds2-55NGSUBZ.js.map +7 -0
- package/dist/block.svg-NOXRJYFH.js +151 -0
- package/dist/block.svg-NOXRJYFH.js.map +7 -0
- package/dist/block.tk.aicheck-ASP3R6KR.js +291 -0
- package/dist/block.tk.aicheck-ASP3R6KR.js.map +7 -0
- package/dist/block.tk.ase-6XBTIUUW.js +375 -0
- package/dist/block.tk.ase-6XBTIUUW.js.map +7 -0
- package/dist/block.tk.bam-BRUMOYK5.js +1958 -0
- package/dist/block.tk.bam-BRUMOYK5.js.map +7 -0
- package/dist/block.tk.bedgraphdot-IPEI67BH.js +379 -0
- package/dist/block.tk.bedgraphdot-IPEI67BH.js.map +7 -0
- package/dist/block.tk.bigwig.ui-UC3D3VF3.js +203 -0
- package/dist/block.tk.bigwig.ui-UC3D3VF3.js.map +7 -0
- package/dist/block.tk.hicstraw-ST5VCSKI.js +865 -0
- package/dist/block.tk.hicstraw-ST5VCSKI.js.map +7 -0
- package/dist/block.tk.junction-UCSNHJE3.js +2389 -0
- package/dist/block.tk.junction-UCSNHJE3.js.map +7 -0
- package/dist/block.tk.junction.textmatrixui-XYKYR2MN.js +196 -0
- package/dist/block.tk.junction.textmatrixui-XYKYR2MN.js.map +7 -0
- package/dist/block.tk.ld-XYAI2WU2.js +98 -0
- package/dist/block.tk.ld-XYAI2WU2.js.map +7 -0
- package/dist/block.tk.menu-E5D7FQRC.js +1074 -0
- package/dist/block.tk.menu-E5D7FQRC.js.map +7 -0
- package/dist/block.tk.pgv-JIJQSCMO.js +985 -0
- package/dist/block.tk.pgv-JIJQSCMO.js.map +7 -0
- package/dist/boxplot-DKOSXV5O.js +287 -0
- package/dist/boxplot-DKOSXV5O.js.map +7 -0
- package/dist/brainImaging-6653SBED.js +258 -0
- package/dist/brainImaging-6653SBED.js.map +7 -0
- package/dist/categorical-DYB4UK3H.js +43 -0
- package/dist/chunk-2AXMPMVD.js +2042 -0
- package/dist/chunk-2AXMPMVD.js.map +7 -0
- package/dist/chunk-2QZPEAAC.js +328 -0
- package/dist/chunk-2TBUEEHC.js +2504 -0
- package/dist/chunk-34ICXQIT.js +361 -0
- package/dist/chunk-3RMUHZP7.js +506 -0
- package/dist/chunk-43IAAZGD.js +232 -0
- package/dist/chunk-43XN7MWL.js +128 -0
- package/dist/chunk-4VSIBQA2.js +55 -0
- package/dist/chunk-54THUYS6.js +1101 -0
- package/dist/chunk-54THUYS6.js.map +7 -0
- package/dist/chunk-5JAV4AND.js +287 -0
- package/dist/chunk-5TRXIQ5D.js +335 -0
- package/dist/chunk-6BHKLDWV.js +66 -0
- package/dist/chunk-6BHKLDWV.js.map +7 -0
- package/dist/chunk-6RP3HKKV.js +56 -0
- package/dist/chunk-7KQS6G33.js +572 -0
- package/dist/chunk-7NMRJUVQ.js +337 -0
- package/dist/chunk-A424TGKZ.js +1296 -0
- package/dist/chunk-A424TGKZ.js.map +7 -0
- package/dist/chunk-A6IPLGJ7.js +1301 -0
- package/dist/chunk-AI4P4YBY.js +496 -0
- package/dist/chunk-AJEQEARY.js +369 -0
- package/dist/chunk-ASH22YHA.js +454 -0
- package/dist/chunk-ASH22YHA.js.map +7 -0
- package/dist/chunk-BEHTZGNV.js +949 -0
- package/dist/chunk-BEHTZGNV.js.map +7 -0
- package/dist/chunk-BFEYWEIF.js +267 -0
- package/dist/chunk-BM5YBUEB.js +4763 -0
- package/dist/chunk-BM5YBUEB.js.map +7 -0
- package/dist/chunk-CCUY32QB.js +94 -0
- package/dist/chunk-CMPUZHAK.js +310 -0
- package/dist/chunk-CVWXP35F.js +123 -0
- package/dist/chunk-DKFNDR6B.js +193 -0
- package/dist/chunk-DKM3C7EW.js +364 -0
- package/dist/chunk-EHM2BRQX.js +1272 -0
- package/dist/chunk-EKXE73PZ.js +3385 -0
- package/dist/chunk-EQMW56G3.js +419 -0
- package/dist/chunk-EQMW56G3.js.map +7 -0
- package/dist/chunk-EW7ND3XZ.js +251 -0
- package/dist/chunk-FPFJ7KA5.js +219 -0
- package/dist/chunk-FSKRSQBG.js +174 -0
- package/dist/chunk-GB4U6TLN.js +1158 -0
- package/dist/chunk-GCUGTS2F.js +1008 -0
- package/dist/chunk-GFSWZVFJ.js +389 -0
- package/dist/chunk-GMAKKWKW.js +406 -0
- package/dist/chunk-H54UZQBQ.js +96 -0
- package/dist/chunk-H77FJYAH.js +6543 -0
- package/dist/chunk-H77FJYAH.js.map +7 -0
- package/dist/chunk-HBQOXTSD.js +14 -0
- package/dist/chunk-IBN5BEOY.js +2831 -0
- package/dist/chunk-IPNHDLML.js +479 -0
- package/dist/chunk-JFRRERO5.js +31 -0
- package/dist/chunk-JIHLNT2K.js +1779 -0
- package/dist/chunk-JIHLNT2K.js.map +7 -0
- package/dist/chunk-JOCEI72L.js +228 -0
- package/dist/chunk-K3MEWWGO.js +2389 -0
- package/dist/chunk-K3MEWWGO.js.map +7 -0
- package/dist/chunk-KECEUABR.js +339 -0
- package/dist/chunk-KT3GR2WO.js +581 -0
- package/dist/chunk-KT3GR2WO.js.map +7 -0
- package/dist/chunk-L3BEUWSG.js +2325 -0
- package/dist/chunk-L3BEUWSG.js.map +7 -0
- package/dist/chunk-LOEMEXB4.js +159 -0
- package/dist/chunk-M6GWX3QG.js +638 -0
- package/dist/chunk-MI3B3QMC.js +153 -0
- package/dist/chunk-MRCZTYKD.js +133 -0
- package/dist/chunk-MWK77NSW.js +232 -0
- package/dist/chunk-MXIDZVHS.js +83 -0
- package/dist/chunk-NWTQKS22.js +1245 -0
- package/dist/chunk-NZ44KDJL.js +273 -0
- package/dist/chunk-ON6B4J6U.js +2646 -0
- package/dist/chunk-OTWQWP6Z.js +120 -0
- package/dist/chunk-PDB7U2LQ.js +184 -0
- package/dist/chunk-PEOQXBJT.js +604 -0
- package/dist/chunk-PEOQXBJT.js.map +7 -0
- package/dist/chunk-PHPTWH37.js +2859 -0
- package/dist/chunk-PM7NASSJ.js +391 -0
- package/dist/chunk-PM7NASSJ.js.map +7 -0
- package/dist/chunk-PN65XLN6.js +301 -0
- package/dist/chunk-QJGZWXLL.js +456 -0
- package/dist/chunk-QWEOZIHZ.js +524 -0
- package/dist/chunk-RWP3TLNT.js +172 -0
- package/dist/chunk-RZAXZKVC.js +782 -0
- package/dist/chunk-S73S6WNT.js +1384 -0
- package/dist/chunk-S73S6WNT.js.map +7 -0
- package/dist/chunk-SEACSRFV.js +471 -0
- package/dist/chunk-SXGBW6OZ.js +303 -0
- package/dist/chunk-TWMHUWQX.js +134 -0
- package/dist/chunk-UBVVTQC3.js +233 -0
- package/dist/chunk-UM63WBJM.js +165 -0
- package/dist/chunk-VU3I7SFL.js +358 -0
- package/dist/chunk-W7ZDKCZJ.js +584 -0
- package/dist/chunk-W7ZDKCZJ.js.map +7 -0
- package/dist/chunk-WTVD5AS2.js +1074 -0
- package/dist/chunk-YJJGRDHN.js +2049 -0
- package/dist/chunk-YJJGRDHN.js.map +7 -0
- package/dist/chunk-YR6I3PPZ.js +295 -0
- package/dist/chunk-ZODVYN2Z.js +358 -0
- package/dist/chunk-ZZILTP5U.js +520 -0
- package/dist/condition-DJZK4SPZ.js +347 -0
- package/dist/condition-DJZK4SPZ.js.map +7 -0
- package/dist/controls-IWAM6RFC.js +44 -0
- package/dist/controls.config-TI77G7KY.js +40 -0
- package/dist/cuminc-U4NOF53Y.js +1179 -0
- package/dist/cuminc-U4NOF53Y.js.map +7 -0
- package/dist/customdata.inputui-6XKBI6PH.js +293 -0
- package/dist/customdata.inputui-6XKBI6PH.js.map +7 -0
- package/dist/dataDownload-W4P5SO55.js +336 -0
- package/dist/dataDownload-W4P5SO55.js.map +7 -0
- package/dist/databrowser.ui-KRP4HBP2.js +464 -0
- package/dist/databrowser.ui-KRP4HBP2.js.map +7 -0
- package/dist/density-QSWCWH3N.js +17 -0
- package/dist/dictionary-NLP4SNGC.js +107 -0
- package/dist/dictionary-NLP4SNGC.js.map +7 -0
- package/dist/e2pca-IC4DUN4N.js +335 -0
- package/dist/e2pca-IC4DUN4N.js.map +7 -0
- package/dist/ep-3XO2PP4I.js +1271 -0
- package/dist/ep-3XO2PP4I.js.map +7 -0
- package/dist/expclust.gdc.spec-75WY6JHY.js +298 -0
- package/dist/expclust.gdc.spec-75WY6JHY.js.map +7 -0
- package/dist/facet-254A33ML.js +434 -0
- package/dist/facet-254A33ML.js.map +7 -0
- package/dist/geneExpClustering-2DHMSUQM.js +275 -0
- package/dist/geneExpClustering-2DHMSUQM.js.map +7 -0
- package/dist/geneExpression-4VXMDANU.js +313 -0
- package/dist/geneExpression-BC2HALKU.js +57 -0
- package/dist/geneExpression-BC2HALKU.js.map +7 -0
- package/dist/geneExpression-ISHYTKOB.js +57 -0
- package/dist/geneORA-NTVGTU5J.js +279 -0
- package/dist/geneORA-NTVGTU5J.js.map +7 -0
- package/dist/geneVariant-5UNVOLWP.js +54 -0
- package/dist/geneVariant-5UNVOLWP.js.map +7 -0
- package/dist/geneVariant-BUVWXAHB.js +381 -0
- package/dist/geneVariant-BUVWXAHB.js.map +7 -0
- package/dist/genefusion.ui-HK2FGUCD.js +237 -0
- package/dist/genefusion.ui-HK2FGUCD.js.map +7 -0
- package/dist/geneset-7232T7FY.js +207 -0
- package/dist/geneset-7232T7FY.js.map +7 -0
- package/dist/genomeBrowser-P2LMJ7F6.js +406 -0
- package/dist/genomeBrowser-P2LMJ7F6.js.map +7 -0
- package/dist/genomeBrowser.controls-DD7JSNI3.js +47 -0
- package/dist/genomeBrowser.spec-EVJQXY7E.js +260 -0
- package/dist/genomeBrowser.spec-EVJQXY7E.js.map +7 -0
- package/dist/groupsetting-VMK33QN3.js +18 -0
- package/dist/gsea-XTG2QFED.js +296 -0
- package/dist/gsea-XTG2QFED.js.map +7 -0
- package/dist/hierCluster-CBTA34XL.js +68 -0
- package/dist/hierCluster-EOTGIBVT.js +72 -0
- package/dist/hierCluster.config-4GZ46YHN.js +40 -0
- package/dist/hierCluster.integration.spec-XHEPKUWG.js +309 -0
- package/dist/hierCluster.integration.spec-XHEPKUWG.js.map +7 -0
- package/dist/hierCluster.interactivity-6SNGRTKW.js +52 -0
- package/dist/hierCluster.renderers-ZPR7EDHZ.js +20 -0
- package/dist/imagePlot-TSQFWVE6.js +145 -0
- package/dist/imagePlot-TSQFWVE6.js.map +7 -0
- package/dist/launch.adhoc-DFJIN2WT.js +50 -0
- package/dist/leftlabel.sample-XK37AJTO.js +270 -0
- package/dist/leftlabel.sample-XK37AJTO.js.map +7 -0
- package/dist/legacyDataset-HU2PMBRF.js +119 -0
- package/dist/legacyDataset-HU2PMBRF.js.map +7 -0
- package/dist/lollipop-J74HX7Z7.js +107 -0
- package/dist/lollipop-J74HX7Z7.js.map +7 -0
- package/dist/maf-LSRH5RNV.js +390 -0
- package/dist/maf-LSRH5RNV.js.map +7 -0
- package/dist/maftimeline-45LRI447.js +600 -0
- package/dist/maftimeline-45LRI447.js.map +7 -0
- package/dist/matrix-B7ZILOQ7.js +68 -0
- package/dist/matrix-X6CPIDIV.js +63 -0
- package/dist/matrix.cells-M4YYMUCX.js +25 -0
- package/dist/matrix.config-N3VRUIBE.js +41 -0
- package/dist/matrix.controls-QZRCJ35M.js +40 -0
- package/dist/matrix.data-RT6C2K3X.js +28 -0
- package/dist/matrix.groups-VWOCE2OX.js +26 -0
- package/dist/matrix.interactivity-PUMHTQES.js +42 -0
- package/dist/matrix.layout-E23ZOPZ3.js +22 -0
- package/dist/matrix.legend-MWSRG6FJ.js +19 -0
- package/dist/matrix.renderers-ALGBNBK2.js +38 -0
- package/dist/matrix.serieses-HKO6DYLL.js +18 -0
- package/dist/matrix.sort-63NHPQNT.js +26 -0
- package/dist/matrix.sort.unit.spec-H7ZRFRSA.js +473 -0
- package/dist/matrix.sort.unit.spec-H7ZRFRSA.js.map +7 -0
- package/dist/matrix.sorterUi-QXXZTD4A.js +17 -0
- package/dist/matrix.sorterUi.unit.spec-QQQRY7WX.js +351 -0
- package/dist/matrix.sorterUi.unit.spec-QQQRY7WX.js.map +7 -0
- package/dist/mavb-6D73BQUS.js +740 -0
- package/dist/mavb-6D73BQUS.js.map +7 -0
- package/dist/mds.fimo-LYNQPMC2.js +531 -0
- package/dist/mds.fimo-LYNQPMC2.js.map +7 -0
- package/dist/mds.samplescatterplot-M43QXAWP.js +1676 -0
- package/dist/mds.samplescatterplot-M43QXAWP.js.map +7 -0
- package/dist/mds.survivalplot-27ZD3H3G.js +491 -0
- package/dist/mds.survivalplot-27ZD3H3G.js.map +7 -0
- package/dist/metaboliteIntensity-BMKNKDXS.js +47 -0
- package/dist/numeric-W63IFV67.js +43 -0
- package/dist/numeric.binary-PSSGVL3B.js +257 -0
- package/dist/numeric.binary-PSSGVL3B.js.map +7 -0
- package/dist/numeric.continuous-IYEBNZ62.js +139 -0
- package/dist/numeric.continuous-IYEBNZ62.js.map +7 -0
- package/dist/numeric.discrete-VOD3KY74.js +47 -0
- package/dist/numeric.spline-HL2ZNGB6.js +235 -0
- package/dist/numeric.spline-HL2ZNGB6.js.map +7 -0
- package/dist/numeric.toggle-RCKPB7ZD.js +40 -0
- package/dist/oncomatrix-C4VVZ35P.js +317 -0
- package/dist/oncomatrix-C4VVZ35P.js.map +7 -0
- package/dist/oncomatrix.spec-XBUDASGU.js +442 -0
- package/dist/oncomatrix.spec-XBUDASGU.js.map +7 -0
- package/dist/plot.2dvaf-GBMAPZEA.js +361 -0
- package/dist/plot.2dvaf-GBMAPZEA.js.map +7 -0
- package/dist/plot.app-I7VDXUNL.js +49 -0
- package/dist/plot.barplot-TIKVR2H2.js +84 -0
- package/dist/plot.barplot-TIKVR2H2.js.map +7 -0
- package/dist/plot.boxplot-JSFD5VNN.js +147 -0
- package/dist/plot.boxplot-JSFD5VNN.js.map +7 -0
- package/dist/plot.brainImaging-EUS4O2WC.js +56 -0
- package/dist/plot.disco-CZMU6PAR.js +99 -0
- package/dist/plot.disco-CZMU6PAR.js.map +7 -0
- package/dist/plot.dzi-7JMXXJQ5.js +33 -0
- package/dist/plot.ssgq-2UZCKGCN.js +131 -0
- package/dist/plot.ssgq-2UZCKGCN.js.map +7 -0
- package/dist/plot.vaf2cov-AM5VVCE4.js +243 -0
- package/dist/plot.vaf2cov-AM5VVCE4.js.map +7 -0
- package/dist/plot.wsi-K7X6UIFM.js +32 -0
- package/dist/profile.spec-VG6LAYCS.js +160 -0
- package/dist/profile.spec-VG6LAYCS.js.map +7 -0
- package/dist/profileBarchart-N4S524O7.js +280 -0
- package/dist/profileBarchart-N4S524O7.js.map +7 -0
- package/dist/profileHome-QHKVUYVV.js +124 -0
- package/dist/profileHome-QHKVUYVV.js.map +7 -0
- package/dist/profilePlot-64ZHU4EX.js +56 -0
- package/dist/profilePolar-GPGVQGSZ.js +207 -0
- package/dist/profilePolar-GPGVQGSZ.js.map +7 -0
- package/dist/profileRadar-QAUVTFBC.js +287 -0
- package/dist/profileRadar-QAUVTFBC.js.map +7 -0
- package/dist/profileRadarFacility-UQYKW2LF.js +277 -0
- package/dist/profileRadarFacility-UQYKW2LF.js.map +7 -0
- package/dist/profileSummary-VWHD3IPM.js +109 -0
- package/dist/profileSummary-VWHD3IPM.js.map +7 -0
- package/dist/regression-BSLYVSPL.js +69 -0
- package/dist/regression.inputs-PSLCZH3F.js +61 -0
- package/dist/regression.inputs.term-7I5ATFPY.js +61 -0
- package/dist/regression.inputs.values.table-ZHTQ5ODD.js +58 -0
- package/dist/regression.results-6BCE6DZ6.js +36 -0
- package/dist/sampleScatter-5CFQKO2N.js +78 -0
- package/dist/sampleScatter.interactivity-GNZ7P5QO.js +52 -0
- package/dist/sampleScatter.renderer-XLFS24OP.js +58 -0
- package/dist/sampleView-K4ZUOIEI.js +56 -0
- package/dist/samplelst-AY3RB35L.js +115 -0
- package/dist/samplelst-AY3RB35L.js.map +7 -0
- package/dist/samplematrix-RZXVDTO3.js +2325 -0
- package/dist/samplematrix-RZXVDTO3.js.map +7 -0
- package/dist/scatter-GVRBLQS5.js +370 -0
- package/dist/scatter-GVRBLQS5.js.map +7 -0
- package/dist/selectGenomeWithTklst-UB3IPBDI.js +124 -0
- package/dist/selectGenomeWithTklst-UB3IPBDI.js.map +7 -0
- package/dist/singleCellCellType-UUD5CNBN.js +72 -0
- package/dist/singleCellCellType-UUD5CNBN.js.map +7 -0
- package/dist/singleCellGeneExpression-PODHL6V6.js +53 -0
- package/dist/singleCellPlot-6EIGKBUB.js +916 -0
- package/dist/singleCellPlot-6EIGKBUB.js.map +7 -0
- package/dist/singlecell-BYUSKTYJ.js +212 -0
- package/dist/singlecell-BYUSKTYJ.js.map +7 -0
- package/dist/singlecell-HBSRAGWQ.js +853 -0
- package/dist/singlecell-HBSRAGWQ.js.map +7 -0
- package/dist/snp-LFBGPOJQ.js +68 -0
- package/dist/snp-LFBGPOJQ.js.map +7 -0
- package/dist/snp-QK47CEPT.js +75 -0
- package/dist/snp-QK47CEPT.js.map +7 -0
- package/dist/snplocus-WKG4VHPQ.js +233 -0
- package/dist/snplocus-WKG4VHPQ.js.map +7 -0
- package/dist/spliceevent.a53ss.diagram-ZPWMOOJJ.js +137 -0
- package/dist/spliceevent.a53ss.diagram-ZPWMOOJJ.js.map +7 -0
- package/dist/spliceevent.exonskip.diagram-2N6N3K3Q.js +259 -0
- package/dist/spliceevent.exonskip.diagram-2N6N3K3Q.js.map +7 -0
- package/dist/spliceevent.noeventdiagram-7LT7FZ3E.js +461 -0
- package/dist/spliceevent.noeventdiagram-7LT7FZ3E.js.map +7 -0
- package/dist/summary-ERKCPDNZ.js +71 -0
- package/dist/sunburst-ZCKU76X6.js +271 -0
- package/dist/sunburst-ZCKU76X6.js.map +7 -0
- package/dist/survival-BKQ3YKO3.js +62 -0
- package/dist/survival-BKQ3YKO3.js.map +7 -0
- package/dist/survival-OISHAQ2M.js +1150 -0
- package/dist/survival-OISHAQ2M.js.map +7 -0
- package/dist/svgraph-QSPFWAZD.js +1423 -0
- package/dist/svgraph-QSPFWAZD.js.map +7 -0
- package/dist/svmr-AAUIAOVT.js +3975 -0
- package/dist/svmr-AAUIAOVT.js.map +7 -0
- package/dist/table-5FRGEFP2.js +208 -0
- package/dist/table-5FRGEFP2.js.map +7 -0
- package/dist/tk-II3BDHPV.js +49 -0
- package/dist/tp.ui-V4WLJDJ4.js +1499 -0
- package/dist/tp.ui-V4WLJDJ4.js.map +7 -0
- package/dist/tvs.geneVariant-CNUMGBXK.js +182 -0
- package/dist/tvs.geneVariant-CNUMGBXK.js.map +7 -0
- package/dist/tvs.numeric-W2UF3S26.js +21 -0
- package/dist/violin-PT2CYSKC.js +56 -0
- package/dist/violin.interactivity-SP5KDTDF.js +44 -0
- package/dist/violin.renderer-DDVZZIRT.js +19 -0
- package/dist/vocabulary-P7P5QIKP.js +46 -0
- package/package.json +2 -2
- package/dist/2dmaf-Z2ZUELKI.js +0 -1406
- package/dist/2dmaf-Z2ZUELKI.js.map +0 -7
- package/dist/AppHeader-6WKFJB6M.js +0 -853
- package/dist/AppHeader-6WKFJB6M.js.map +0 -7
- package/dist/DEanalysis-C3CCOYCK.js +0 -606
- package/dist/DEanalysis-C3CCOYCK.js.map +0 -7
- package/dist/Disco-GMOS6IAB.js +0 -2466
- package/dist/Disco-GMOS6IAB.js.map +0 -7
- package/dist/Disco.UI-4BGV6REO.js +0 -259
- package/dist/Disco.UI-4BGV6REO.js.map +0 -7
- package/dist/HicApp-QHH3AH37.js +0 -2278
- package/dist/HicApp-QHH3AH37.js.map +0 -7
- package/dist/WSIViewer-2L33KLK4.js +0 -23529
- package/dist/adSandbox-GLNWQRUP.js +0 -28
- package/dist/app-E3YQIJAO.js +0 -76
- package/dist/app-FWXMHBCV.js +0 -48
- package/dist/bam-5K2SUBKO.js +0 -824
- package/dist/bam-5K2SUBKO.js.map +0 -7
- package/dist/barchart-U34XCAS4.js +0 -61
- package/dist/barchart.data-GTPRPSXS.js +0 -29
- package/dist/barchart.events-NOHHD6UP.js +0 -49
- package/dist/bars.renderer-OOMLYTR5.js +0 -22
- package/dist/block-EN434L5D.js +0 -6552
- package/dist/block-EN434L5D.js.map +0 -7
- package/dist/block.init-6ESUW5F3.js +0 -24
- package/dist/block.mds.cnv-YPI7MTC7.js +0 -495
- package/dist/block.mds.cnv-YPI7MTC7.js.map +0 -7
- package/dist/block.mds.expressionrank-FTKDDLIJ.js +0 -365
- package/dist/block.mds.expressionrank-FTKDDLIJ.js.map +0 -7
- package/dist/block.mds.geneboxplot-U736ZHW3.js +0 -839
- package/dist/block.mds.geneboxplot-U736ZHW3.js.map +0 -7
- package/dist/block.mds.junction-ER7WZBRE.js +0 -1443
- package/dist/block.mds.junction-ER7WZBRE.js.map +0 -7
- package/dist/block.mds.svcnv-W44ROM4O.js +0 -7062
- package/dist/block.mds.svcnv-W44ROM4O.js.map +0 -7
- package/dist/block.mds2-OMZRUYUS.js +0 -3452
- package/dist/block.mds2-OMZRUYUS.js.map +0 -7
- package/dist/block.svg-MBOXDT54.js +0 -153
- package/dist/block.svg-MBOXDT54.js.map +0 -7
- package/dist/block.tk.aicheck-6QEHJXOU.js +0 -282
- package/dist/block.tk.aicheck-6QEHJXOU.js.map +0 -7
- package/dist/block.tk.ase-SSCLC5GR.js +0 -377
- package/dist/block.tk.ase-SSCLC5GR.js.map +0 -7
- package/dist/block.tk.bam-CAO2P6CG.js +0 -1947
- package/dist/block.tk.bam-CAO2P6CG.js.map +0 -7
- package/dist/block.tk.bedgraphdot-TRV5LE6B.js +0 -381
- package/dist/block.tk.bedgraphdot-TRV5LE6B.js.map +0 -7
- package/dist/block.tk.bigwig.ui-2L2EC7WH.js +0 -205
- package/dist/block.tk.bigwig.ui-2L2EC7WH.js.map +0 -7
- package/dist/block.tk.hicstraw-YM7VNCPD.js +0 -869
- package/dist/block.tk.hicstraw-YM7VNCPD.js.map +0 -7
- package/dist/block.tk.junction-5QD4UNLO.js +0 -2392
- package/dist/block.tk.junction-5QD4UNLO.js.map +0 -7
- package/dist/block.tk.junction.textmatrixui-WBQLKM5H.js +0 -198
- package/dist/block.tk.junction.textmatrixui-WBQLKM5H.js.map +0 -7
- package/dist/block.tk.ld-BIGNA4XA.js +0 -102
- package/dist/block.tk.ld-BIGNA4XA.js.map +0 -7
- package/dist/block.tk.menu-6Y2J6D2U.js +0 -1076
- package/dist/block.tk.menu-6Y2J6D2U.js.map +0 -7
- package/dist/block.tk.pgv-7Y6C635Y.js +0 -988
- package/dist/block.tk.pgv-7Y6C635Y.js.map +0 -7
- package/dist/boxplot-L2FRJ7BC.js +0 -292
- package/dist/boxplot-L2FRJ7BC.js.map +0 -7
- package/dist/brainImaging-LBQ6BOCL.js +0 -262
- package/dist/brainImaging-LBQ6BOCL.js.map +0 -7
- package/dist/categorical-DCXSZ4FW.js +0 -47
- package/dist/chunk-252GVCUB.js +0 -1241
- package/dist/chunk-252GVCUB.js.map +0 -7
- package/dist/chunk-2BIZZCIY.js +0 -782
- package/dist/chunk-2EX476BR.js +0 -1245
- package/dist/chunk-2HB765M6.js +0 -3385
- package/dist/chunk-2JPSZLBQ.js +0 -369
- package/dist/chunk-2TA7MXMQ.js +0 -2504
- package/dist/chunk-34EXRT37.js +0 -1301
- package/dist/chunk-3EAPD7JJ.js +0 -128
- package/dist/chunk-3O3KNFZC.js +0 -6547
- package/dist/chunk-3O3KNFZC.js.map +0 -7
- package/dist/chunk-3PMPFLEK.js +0 -361
- package/dist/chunk-452UVSLH.js +0 -1074
- package/dist/chunk-4T6RODBA.js +0 -2859
- package/dist/chunk-4ZM4VOAG.js +0 -946
- package/dist/chunk-4ZM4VOAG.js.map +0 -7
- package/dist/chunk-542K2WZ7.js +0 -479
- package/dist/chunk-5IJCZCP7.js +0 -1971
- package/dist/chunk-5IJCZCP7.js.map +0 -7
- package/dist/chunk-5MCPDYY5.js +0 -601
- package/dist/chunk-5MCPDYY5.js.map +0 -7
- package/dist/chunk-6XR2LO7D.js +0 -120
- package/dist/chunk-7F5D236F.js +0 -358
- package/dist/chunk-7HTQ4K63.js +0 -339
- package/dist/chunk-7IHOFVZL.js +0 -2045
- package/dist/chunk-7IHOFVZL.js.map +0 -7
- package/dist/chunk-7TXNDPDZ.js +0 -96
- package/dist/chunk-7XHY4JRS.js +0 -520
- package/dist/chunk-A3GQXDSC.js +0 -416
- package/dist/chunk-A3GQXDSC.js.map +0 -7
- package/dist/chunk-A4GCSMHF.js +0 -267
- package/dist/chunk-A6DVKLWZ.js +0 -1776
- package/dist/chunk-A6DVKLWZ.js.map +0 -7
- package/dist/chunk-AGZQS6NY.js +0 -1101
- package/dist/chunk-AGZQS6NY.js.map +0 -7
- package/dist/chunk-AHQMETMT.js +0 -2646
- package/dist/chunk-BVLEQWF7.js +0 -524
- package/dist/chunk-BWZULQJJ.js +0 -94
- package/dist/chunk-C7BN5SOB.js +0 -572
- package/dist/chunk-EY7JFZ4D.js +0 -2041
- package/dist/chunk-EY7JFZ4D.js.map +0 -7
- package/dist/chunk-F2MOO6WD.js +0 -364
- package/dist/chunk-F62WPE3A.js +0 -393
- package/dist/chunk-F62WPE3A.js.map +0 -7
- package/dist/chunk-F7VAC4AZ.js +0 -134
- package/dist/chunk-FBZOZZR4.js +0 -83
- package/dist/chunk-FOSTUUJG.js +0 -123
- package/dist/chunk-FZXMYGIE.js +0 -310
- package/dist/chunk-FZXP5CZS.js +0 -456
- package/dist/chunk-H5PEOOWY.js +0 -165
- package/dist/chunk-H6RBOOCS.js +0 -1008
- package/dist/chunk-HQSR7OMV.js +0 -14
- package/dist/chunk-HVMI7J4K.js +0 -301
- package/dist/chunk-I3L3IGAB.js +0 -228
- package/dist/chunk-IRSVZT57.js +0 -184
- package/dist/chunk-J4L5RHSK.js +0 -232
- package/dist/chunk-JEBLRUTI.js +0 -406
- package/dist/chunk-JJ3EMEG5.js +0 -2831
- package/dist/chunk-KGBQ2WA5.js +0 -4761
- package/dist/chunk-KGBQ2WA5.js.map +0 -7
- package/dist/chunk-KW2UVQY4.js +0 -56
- package/dist/chunk-L6PTW3VL.js +0 -328
- package/dist/chunk-LRZTKKFF.js +0 -159
- package/dist/chunk-MBDAETWX.js +0 -232
- package/dist/chunk-MUGEX62S.js +0 -303
- package/dist/chunk-MWACWA3L.js +0 -638
- package/dist/chunk-NF3ZP7DN.js +0 -358
- package/dist/chunk-NI43XRK3.js +0 -153
- package/dist/chunk-NVZ3KU7Y.js +0 -273
- package/dist/chunk-NZ7FIKRZ.js +0 -31
- package/dist/chunk-O32YEJMI.js +0 -26
- package/dist/chunk-O32YEJMI.js.map +0 -7
- package/dist/chunk-OUBSJVOW.js +0 -174
- package/dist/chunk-P7BTNMOS.js +0 -421
- package/dist/chunk-P7BTNMOS.js.map +0 -7
- package/dist/chunk-PGCZMKZL.js +0 -68
- package/dist/chunk-PGCZMKZL.js.map +0 -7
- package/dist/chunk-PKXCLLK7.js +0 -609
- package/dist/chunk-PKXCLLK7.js.map +0 -7
- package/dist/chunk-PUN4NR6N.js +0 -389
- package/dist/chunk-PWTXVCZ4.js +0 -17
- package/dist/chunk-PWTXVCZ4.js.map +0 -7
- package/dist/chunk-QRZG6ZOQ.js +0 -593
- package/dist/chunk-QRZG6ZOQ.js.map +0 -7
- package/dist/chunk-RB5IPUK7.js +0 -496
- package/dist/chunk-SNJ7HF7A.js +0 -456
- package/dist/chunk-SNJ7HF7A.js.map +0 -7
- package/dist/chunk-TNWYWD33.js +0 -471
- package/dist/chunk-U6LQM5ZN.js +0 -219
- package/dist/chunk-UE2GNACI.js +0 -287
- package/dist/chunk-UIQRT242.js +0 -133
- package/dist/chunk-UUFZPMHA.js +0 -1385
- package/dist/chunk-UUFZPMHA.js.map +0 -7
- package/dist/chunk-VVD765YV.js +0 -172
- package/dist/chunk-VWAAOYZH.js +0 -506
- package/dist/chunk-W5MSYM3R.js +0 -295
- package/dist/chunk-WFANY24Z.js +0 -335
- package/dist/chunk-WMK7VUYQ.js +0 -2214
- package/dist/chunk-WMK7VUYQ.js.map +0 -7
- package/dist/chunk-WPMWODEH.js +0 -233
- package/dist/chunk-XNPZE2WZ.js +0 -1272
- package/dist/chunk-XOVDGXRX.js +0 -337
- package/dist/chunk-YQQK3HHV.js +0 -193
- package/dist/chunk-YUNMO4LV.js +0 -251
- package/dist/chunk-Z2BVISN7.js +0 -55
- package/dist/chunk-ZRUQHHLI.js +0 -114
- package/dist/chunk-ZRUQHHLI.js.map +0 -7
- package/dist/chunk-ZUXHWTIS.js +0 -1158
- package/dist/condition-ENXC72T7.js +0 -351
- package/dist/condition-ENXC72T7.js.map +0 -7
- package/dist/controls-KE64YGOW.js +0 -48
- package/dist/controls.config-ROGPIAS2.js +0 -44
- package/dist/cuminc-GPYPSTDW.js +0 -1184
- package/dist/cuminc-GPYPSTDW.js.map +0 -7
- package/dist/customdata.inputui-U7WDAHBT.js +0 -295
- package/dist/customdata.inputui-U7WDAHBT.js.map +0 -7
- package/dist/dataDownload-KVOKPGAH.js +0 -340
- package/dist/dataDownload-KVOKPGAH.js.map +0 -7
- package/dist/databrowser.ui-AWTK5DEK.js +0 -468
- package/dist/databrowser.ui-AWTK5DEK.js.map +0 -7
- package/dist/density-BSCDN4GB.js +0 -19
- package/dist/dictionary-3GC3G5ZE.js +0 -111
- package/dist/dictionary-3GC3G5ZE.js.map +0 -7
- package/dist/e2pca-KUOJJB35.js +0 -338
- package/dist/e2pca-KUOJJB35.js.map +0 -7
- package/dist/ep-MGFVUFBS.js +0 -1275
- package/dist/ep-MGFVUFBS.js.map +0 -7
- package/dist/expclust.gdc.spec-YTZOTDAG.js +0 -300
- package/dist/expclust.gdc.spec-YTZOTDAG.js.map +0 -7
- package/dist/facet-77P4ZYOE.js +0 -438
- package/dist/facet-77P4ZYOE.js.map +0 -7
- package/dist/geneExpClustering-ULFWB552.js +0 -279
- package/dist/geneExpClustering-ULFWB552.js.map +0 -7
- package/dist/geneExpression-437MUZKR.js +0 -313
- package/dist/geneExpression-FWUR3N2K.js +0 -61
- package/dist/geneExpression-FWUR3N2K.js.map +0 -7
- package/dist/geneExpression-O45ZRK5X.js +0 -57
- package/dist/geneORA-QTPGCSCO.js +0 -281
- package/dist/geneORA-QTPGCSCO.js.map +0 -7
- package/dist/geneVariant-BXTG7KIJ.js +0 -56
- package/dist/geneVariant-BXTG7KIJ.js.map +0 -7
- package/dist/geneVariant-MRX5FFUK.js +0 -385
- package/dist/geneVariant-MRX5FFUK.js.map +0 -7
- package/dist/genefusion.ui-S6NSIWSQ.js +0 -239
- package/dist/genefusion.ui-S6NSIWSQ.js.map +0 -7
- package/dist/geneset-UJMIMRZO.js +0 -211
- package/dist/geneset-UJMIMRZO.js.map +0 -7
- package/dist/genomeBrowser-M45R7UTC.js +0 -410
- package/dist/genomeBrowser-M45R7UTC.js.map +0 -7
- package/dist/genomeBrowser.controls-7USWCMS7.js +0 -51
- package/dist/genomeBrowser.spec-FPP73IGL.js +0 -262
- package/dist/genomeBrowser.spec-FPP73IGL.js.map +0 -7
- package/dist/groupsetting-X6E2Z5GU.js +0 -20
- package/dist/gsea-7J5ZJYZF.js +0 -336
- package/dist/gsea-7J5ZJYZF.js.map +0 -7
- package/dist/hierCluster-I5GYAJ67.js +0 -72
- package/dist/hierCluster-XV5XZRHW.js +0 -76
- package/dist/hierCluster.config-RLQNJMJK.js +0 -44
- package/dist/hierCluster.integration.spec-3Q6Q6SWU.js +0 -313
- package/dist/hierCluster.integration.spec-3Q6Q6SWU.js.map +0 -7
- package/dist/hierCluster.interactivity-7RNA4G33.js +0 -56
- package/dist/hierCluster.renderers-SSB7ZOMX.js +0 -22
- package/dist/imagePlot-4FBVKQ4N.js +0 -149
- package/dist/imagePlot-4FBVKQ4N.js.map +0 -7
- package/dist/launch.adhoc-TBBXX6SW.js +0 -54
- package/dist/leftlabel.sample-AYVRU4R5.js +0 -274
- package/dist/leftlabel.sample-AYVRU4R5.js.map +0 -7
- package/dist/legacyDataset-LM4FFTW3.js +0 -121
- package/dist/legacyDataset-LM4FFTW3.js.map +0 -7
- package/dist/lollipop-GTIUDECK.js +0 -109
- package/dist/lollipop-GTIUDECK.js.map +0 -7
- package/dist/maf-Z4FHNGXO.js +0 -372
- package/dist/maf-Z4FHNGXO.js.map +0 -7
- package/dist/maftimeline-AS6JKRXC.js +0 -603
- package/dist/maftimeline-AS6JKRXC.js.map +0 -7
- package/dist/matrix-PSBBYZHY.js +0 -72
- package/dist/matrix-VSVBKVHK.js +0 -67
- package/dist/matrix.cells-RO2BEWLS.js +0 -27
- package/dist/matrix.config-472MLJI3.js +0 -45
- package/dist/matrix.controls-3KV3A2SK.js +0 -44
- package/dist/matrix.data-APM7BGHQ.js +0 -30
- package/dist/matrix.groups-HHC5TA2L.js +0 -28
- package/dist/matrix.interactivity-YXFLANFQ.js +0 -46
- package/dist/matrix.layout-UY3I75BL.js +0 -24
- package/dist/matrix.legend-Y4S4HDWO.js +0 -21
- package/dist/matrix.renderers-C2Z5TP7R.js +0 -42
- package/dist/matrix.serieses-LXW6DVNY.js +0 -20
- package/dist/matrix.sort-ADYDTBHQ.js +0 -28
- package/dist/matrix.sort.unit.spec-SAITASIH.js +0 -477
- package/dist/matrix.sort.unit.spec-SAITASIH.js.map +0 -7
- package/dist/matrix.sorterUi-AHQ6OQSM.js +0 -19
- package/dist/matrix.sorterUi.unit.spec-EMMDTS65.js +0 -355
- package/dist/matrix.sorterUi.unit.spec-EMMDTS65.js.map +0 -7
- package/dist/mavb-KATYKKXJ.js +0 -742
- package/dist/mavb-KATYKKXJ.js.map +0 -7
- package/dist/mds.fimo-Z5FCON2A.js +0 -533
- package/dist/mds.fimo-Z5FCON2A.js.map +0 -7
- package/dist/mds.samplescatterplot-E2BO4L6O.js +0 -1680
- package/dist/mds.samplescatterplot-E2BO4L6O.js.map +0 -7
- package/dist/mds.survivalplot-WQQXHCQD.js +0 -494
- package/dist/mds.survivalplot-WQQXHCQD.js.map +0 -7
- package/dist/metaboliteIntensity-BRNMOEP7.js +0 -47
- package/dist/numeric-AKY5S4ZV.js +0 -43
- package/dist/numeric.binary-P5HXG7SW.js +0 -261
- package/dist/numeric.binary-P5HXG7SW.js.map +0 -7
- package/dist/numeric.continuous-HLZ235YY.js +0 -143
- package/dist/numeric.continuous-HLZ235YY.js.map +0 -7
- package/dist/numeric.discrete-Z27UIJL2.js +0 -51
- package/dist/numeric.spline-RCFY6OI5.js +0 -239
- package/dist/numeric.spline-RCFY6OI5.js.map +0 -7
- package/dist/numeric.toggle-ECHESLL6.js +0 -44
- package/dist/oncomatrix-QLSRANC6.js +0 -321
- package/dist/oncomatrix-QLSRANC6.js.map +0 -7
- package/dist/oncomatrix.spec-TMVS2MRS.js +0 -444
- package/dist/oncomatrix.spec-TMVS2MRS.js.map +0 -7
- package/dist/plot.2dvaf-4DSUOJLY.js +0 -363
- package/dist/plot.2dvaf-4DSUOJLY.js.map +0 -7
- package/dist/plot.app-TXH6JCHC.js +0 -53
- package/dist/plot.barplot-6VAQAJAQ.js +0 -86
- package/dist/plot.barplot-6VAQAJAQ.js.map +0 -7
- package/dist/plot.boxplot-SY7P5B43.js +0 -150
- package/dist/plot.boxplot-SY7P5B43.js.map +0 -7
- package/dist/plot.brainImaging-UWEE3ASQ.js +0 -56
- package/dist/plot.disco-Y7QJD6MY.js +0 -101
- package/dist/plot.disco-Y7QJD6MY.js.map +0 -7
- package/dist/plot.dzi-ACLWPR4N.js +0 -33
- package/dist/plot.ssgq-QSU55N6M.js +0 -133
- package/dist/plot.ssgq-QSU55N6M.js.map +0 -7
- package/dist/plot.vaf2cov-O4Q5OBYC.js +0 -246
- package/dist/plot.vaf2cov-O4Q5OBYC.js.map +0 -7
- package/dist/plot.wsi-XDP6H632.js +0 -32
- package/dist/profile.spec-MGAOZKFC.js +0 -162
- package/dist/profile.spec-MGAOZKFC.js.map +0 -7
- package/dist/profileBarchart-QBBPFWWC.js +0 -284
- package/dist/profileBarchart-QBBPFWWC.js.map +0 -7
- package/dist/profileHome-TFTR44T5.js +0 -128
- package/dist/profileHome-TFTR44T5.js.map +0 -7
- package/dist/profilePlot-W46V5WZY.js +0 -60
- package/dist/profilePolar-I22IOMQQ.js +0 -211
- package/dist/profilePolar-I22IOMQQ.js.map +0 -7
- package/dist/profileRadar-UNXOSJYG.js +0 -291
- package/dist/profileRadar-UNXOSJYG.js.map +0 -7
- package/dist/profileRadarFacility-4IPLM577.js +0 -281
- package/dist/profileRadarFacility-4IPLM577.js.map +0 -7
- package/dist/profileSummary-5M23GUCR.js +0 -113
- package/dist/profileSummary-5M23GUCR.js.map +0 -7
- package/dist/regression-3H3254JS.js +0 -73
- package/dist/regression.inputs-RN4ELCCQ.js +0 -65
- package/dist/regression.inputs.term-UU36JXKO.js +0 -65
- package/dist/regression.inputs.values.table-KNSYQELW.js +0 -62
- package/dist/regression.results-C7JMURE4.js +0 -40
- package/dist/sampleScatter-4FNFRHZ4.js +0 -82
- package/dist/sampleScatter.interactivity-XVLL4V3S.js +0 -56
- package/dist/sampleScatter.renderer-AT4NAZBS.js +0 -62
- package/dist/sampleView-24OQHMUF.js +0 -60
- package/dist/samplelst-CF23G24A.js +0 -119
- package/dist/samplelst-CF23G24A.js.map +0 -7
- package/dist/samplematrix-3EHMPDIQ.js +0 -2327
- package/dist/samplematrix-3EHMPDIQ.js.map +0 -7
- package/dist/scatter-M4XFDPFC.js +0 -374
- package/dist/scatter-M4XFDPFC.js.map +0 -7
- package/dist/selectGenomeWithTklst-XTQ4UXFG.js +0 -126
- package/dist/selectGenomeWithTklst-XTQ4UXFG.js.map +0 -7
- package/dist/singleCellCellType-XD5ZUVVS.js +0 -76
- package/dist/singleCellCellType-XD5ZUVVS.js.map +0 -7
- package/dist/singleCellGeneExpression-IBQJOINV.js +0 -53
- package/dist/singleCellPlot-5HXT5W34.js +0 -922
- package/dist/singleCellPlot-5HXT5W34.js.map +0 -7
- package/dist/singlecell-BSSUR3LC.js +0 -216
- package/dist/singlecell-BSSUR3LC.js.map +0 -7
- package/dist/singlecell-QAUS3LFJ.js +0 -856
- package/dist/singlecell-QAUS3LFJ.js.map +0 -7
- package/dist/snp-A2YNGQSD.js +0 -70
- package/dist/snp-A2YNGQSD.js.map +0 -7
- package/dist/snp-UQSHCWCJ.js +0 -79
- package/dist/snp-UQSHCWCJ.js.map +0 -7
- package/dist/snplocus-L6IAD5O2.js +0 -237
- package/dist/snplocus-L6IAD5O2.js.map +0 -7
- package/dist/spliceevent.a53ss.diagram-RWIHOT5N.js +0 -139
- package/dist/spliceevent.a53ss.diagram-RWIHOT5N.js.map +0 -7
- package/dist/spliceevent.exonskip.diagram-Q3XLNEQG.js +0 -261
- package/dist/spliceevent.exonskip.diagram-Q3XLNEQG.js.map +0 -7
- package/dist/spliceevent.noeventdiagram-2KYXXTHV.js +0 -463
- package/dist/spliceevent.noeventdiagram-2KYXXTHV.js.map +0 -7
- package/dist/summary-IBAGSXZC.js +0 -75
- package/dist/sunburst-BR6GCTIA.js +0 -274
- package/dist/sunburst-BR6GCTIA.js.map +0 -7
- package/dist/survival-7U5KRM4F.js +0 -66
- package/dist/survival-7U5KRM4F.js.map +0 -7
- package/dist/survival-H5ZRADT6.js +0 -1155
- package/dist/survival-H5ZRADT6.js.map +0 -7
- package/dist/svgraph-MKB3QQUM.js +0 -1425
- package/dist/svgraph-MKB3QQUM.js.map +0 -7
- package/dist/svmr-7G332AYS.js +0 -3977
- package/dist/svmr-7G332AYS.js.map +0 -7
- package/dist/table-KJXLZ2ZJ.js +0 -212
- package/dist/table-KJXLZ2ZJ.js.map +0 -7
- package/dist/tk-ENLUPDDN.js +0 -53
- package/dist/tp.ui-S7Q5QHJY.js +0 -1501
- package/dist/tp.ui-S7Q5QHJY.js.map +0 -7
- package/dist/tvs.geneVariant-J6BU4QWJ.js +0 -184
- package/dist/tvs.geneVariant-J6BU4QWJ.js.map +0 -7
- package/dist/tvs.numeric-3EKVOHHT.js +0 -23
- package/dist/violin-QV326UNM.js +0 -60
- package/dist/violin.interactivity-DTTFFLEM.js +0 -48
- package/dist/violin.renderer-X7IYO5OZ.js +0 -21
- package/dist/vocabulary-MQESDXTN.js +0 -50
- /package/dist/{WSIViewer-2L33KLK4.js.map → WSIViewer-CMI2NG5H.js.map} +0 -0
- /package/dist/{adSandbox-GLNWQRUP.js.map → adSandbox-3SUMXENO.js.map} +0 -0
- /package/dist/{app-E3YQIJAO.js.map → app-AFC7K3QJ.js.map} +0 -0
- /package/dist/{app-FWXMHBCV.js.map → app-KOFKVIHE.js.map} +0 -0
- /package/dist/{barchart-U34XCAS4.js.map → barchart-46A6ZUSK.js.map} +0 -0
- /package/dist/{barchart.data-GTPRPSXS.js.map → barchart.data-RAXR5Z4M.js.map} +0 -0
- /package/dist/{barchart.events-NOHHD6UP.js.map → barchart.events-FTQ6DCCY.js.map} +0 -0
- /package/dist/{bars.renderer-OOMLYTR5.js.map → bars.renderer-TPIVXMGV.js.map} +0 -0
- /package/dist/{block.init-6ESUW5F3.js.map → block.init-PSSP7HZM.js.map} +0 -0
- /package/dist/{categorical-DCXSZ4FW.js.map → categorical-DYB4UK3H.js.map} +0 -0
- /package/dist/{chunk-L6PTW3VL.js.map → chunk-2QZPEAAC.js.map} +0 -0
- /package/dist/{chunk-2TA7MXMQ.js.map → chunk-2TBUEEHC.js.map} +0 -0
- /package/dist/{chunk-3PMPFLEK.js.map → chunk-34ICXQIT.js.map} +0 -0
- /package/dist/{chunk-VWAAOYZH.js.map → chunk-3RMUHZP7.js.map} +0 -0
- /package/dist/{chunk-J4L5RHSK.js.map → chunk-43IAAZGD.js.map} +0 -0
- /package/dist/{chunk-3EAPD7JJ.js.map → chunk-43XN7MWL.js.map} +0 -0
- /package/dist/{chunk-Z2BVISN7.js.map → chunk-4VSIBQA2.js.map} +0 -0
- /package/dist/{chunk-UE2GNACI.js.map → chunk-5JAV4AND.js.map} +0 -0
- /package/dist/{chunk-WFANY24Z.js.map → chunk-5TRXIQ5D.js.map} +0 -0
- /package/dist/{chunk-KW2UVQY4.js.map → chunk-6RP3HKKV.js.map} +0 -0
- /package/dist/{chunk-C7BN5SOB.js.map → chunk-7KQS6G33.js.map} +0 -0
- /package/dist/{chunk-XOVDGXRX.js.map → chunk-7NMRJUVQ.js.map} +0 -0
- /package/dist/{chunk-34EXRT37.js.map → chunk-A6IPLGJ7.js.map} +0 -0
- /package/dist/{chunk-RB5IPUK7.js.map → chunk-AI4P4YBY.js.map} +0 -0
- /package/dist/{chunk-2JPSZLBQ.js.map → chunk-AJEQEARY.js.map} +0 -0
- /package/dist/{chunk-A4GCSMHF.js.map → chunk-BFEYWEIF.js.map} +0 -0
- /package/dist/{chunk-BWZULQJJ.js.map → chunk-CCUY32QB.js.map} +0 -0
- /package/dist/{chunk-FZXMYGIE.js.map → chunk-CMPUZHAK.js.map} +0 -0
- /package/dist/{chunk-FOSTUUJG.js.map → chunk-CVWXP35F.js.map} +0 -0
- /package/dist/{chunk-YQQK3HHV.js.map → chunk-DKFNDR6B.js.map} +0 -0
- /package/dist/{chunk-F2MOO6WD.js.map → chunk-DKM3C7EW.js.map} +0 -0
- /package/dist/{chunk-XNPZE2WZ.js.map → chunk-EHM2BRQX.js.map} +0 -0
- /package/dist/{chunk-2HB765M6.js.map → chunk-EKXE73PZ.js.map} +0 -0
- /package/dist/{chunk-YUNMO4LV.js.map → chunk-EW7ND3XZ.js.map} +0 -0
- /package/dist/{chunk-U6LQM5ZN.js.map → chunk-FPFJ7KA5.js.map} +0 -0
- /package/dist/{chunk-OUBSJVOW.js.map → chunk-FSKRSQBG.js.map} +0 -0
- /package/dist/{chunk-ZUXHWTIS.js.map → chunk-GB4U6TLN.js.map} +0 -0
- /package/dist/{chunk-H6RBOOCS.js.map → chunk-GCUGTS2F.js.map} +0 -0
- /package/dist/{chunk-PUN4NR6N.js.map → chunk-GFSWZVFJ.js.map} +0 -0
- /package/dist/{chunk-JEBLRUTI.js.map → chunk-GMAKKWKW.js.map} +0 -0
- /package/dist/{chunk-7TXNDPDZ.js.map → chunk-H54UZQBQ.js.map} +0 -0
- /package/dist/{chunk-HQSR7OMV.js.map → chunk-HBQOXTSD.js.map} +0 -0
- /package/dist/{chunk-JJ3EMEG5.js.map → chunk-IBN5BEOY.js.map} +0 -0
- /package/dist/{chunk-542K2WZ7.js.map → chunk-IPNHDLML.js.map} +0 -0
- /package/dist/{chunk-NZ7FIKRZ.js.map → chunk-JFRRERO5.js.map} +0 -0
- /package/dist/{chunk-I3L3IGAB.js.map → chunk-JOCEI72L.js.map} +0 -0
- /package/dist/{chunk-7HTQ4K63.js.map → chunk-KECEUABR.js.map} +0 -0
- /package/dist/{chunk-LRZTKKFF.js.map → chunk-LOEMEXB4.js.map} +0 -0
- /package/dist/{chunk-MWACWA3L.js.map → chunk-M6GWX3QG.js.map} +0 -0
- /package/dist/{chunk-NI43XRK3.js.map → chunk-MI3B3QMC.js.map} +0 -0
- /package/dist/{chunk-UIQRT242.js.map → chunk-MRCZTYKD.js.map} +0 -0
- /package/dist/{chunk-MBDAETWX.js.map → chunk-MWK77NSW.js.map} +0 -0
- /package/dist/{chunk-FBZOZZR4.js.map → chunk-MXIDZVHS.js.map} +0 -0
- /package/dist/{chunk-2EX476BR.js.map → chunk-NWTQKS22.js.map} +0 -0
- /package/dist/{chunk-NVZ3KU7Y.js.map → chunk-NZ44KDJL.js.map} +0 -0
- /package/dist/{chunk-AHQMETMT.js.map → chunk-ON6B4J6U.js.map} +0 -0
- /package/dist/{chunk-6XR2LO7D.js.map → chunk-OTWQWP6Z.js.map} +0 -0
- /package/dist/{chunk-IRSVZT57.js.map → chunk-PDB7U2LQ.js.map} +0 -0
- /package/dist/{chunk-4T6RODBA.js.map → chunk-PHPTWH37.js.map} +0 -0
- /package/dist/{chunk-HVMI7J4K.js.map → chunk-PN65XLN6.js.map} +0 -0
- /package/dist/{chunk-FZXP5CZS.js.map → chunk-QJGZWXLL.js.map} +0 -0
- /package/dist/{chunk-BVLEQWF7.js.map → chunk-QWEOZIHZ.js.map} +0 -0
- /package/dist/{chunk-VVD765YV.js.map → chunk-RWP3TLNT.js.map} +0 -0
- /package/dist/{chunk-2BIZZCIY.js.map → chunk-RZAXZKVC.js.map} +0 -0
- /package/dist/{chunk-TNWYWD33.js.map → chunk-SEACSRFV.js.map} +0 -0
- /package/dist/{chunk-MUGEX62S.js.map → chunk-SXGBW6OZ.js.map} +0 -0
- /package/dist/{chunk-F7VAC4AZ.js.map → chunk-TWMHUWQX.js.map} +0 -0
- /package/dist/{chunk-WPMWODEH.js.map → chunk-UBVVTQC3.js.map} +0 -0
- /package/dist/{chunk-H5PEOOWY.js.map → chunk-UM63WBJM.js.map} +0 -0
- /package/dist/{chunk-NF3ZP7DN.js.map → chunk-VU3I7SFL.js.map} +0 -0
- /package/dist/{chunk-452UVSLH.js.map → chunk-WTVD5AS2.js.map} +0 -0
- /package/dist/{chunk-W5MSYM3R.js.map → chunk-YR6I3PPZ.js.map} +0 -0
- /package/dist/{chunk-7F5D236F.js.map → chunk-ZODVYN2Z.js.map} +0 -0
- /package/dist/{chunk-7XHY4JRS.js.map → chunk-ZZILTP5U.js.map} +0 -0
- /package/dist/{controls-KE64YGOW.js.map → controls-IWAM6RFC.js.map} +0 -0
- /package/dist/{controls.config-ROGPIAS2.js.map → controls.config-TI77G7KY.js.map} +0 -0
- /package/dist/{density-BSCDN4GB.js.map → density-QSWCWH3N.js.map} +0 -0
- /package/dist/{geneExpression-437MUZKR.js.map → geneExpression-4VXMDANU.js.map} +0 -0
- /package/dist/{geneExpression-O45ZRK5X.js.map → geneExpression-ISHYTKOB.js.map} +0 -0
- /package/dist/{genomeBrowser.controls-7USWCMS7.js.map → genomeBrowser.controls-DD7JSNI3.js.map} +0 -0
- /package/dist/{groupsetting-X6E2Z5GU.js.map → groupsetting-VMK33QN3.js.map} +0 -0
- /package/dist/{hierCluster-I5GYAJ67.js.map → hierCluster-CBTA34XL.js.map} +0 -0
- /package/dist/{hierCluster-XV5XZRHW.js.map → hierCluster-EOTGIBVT.js.map} +0 -0
- /package/dist/{hierCluster.config-RLQNJMJK.js.map → hierCluster.config-4GZ46YHN.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-7RNA4G33.js.map → hierCluster.interactivity-6SNGRTKW.js.map} +0 -0
- /package/dist/{hierCluster.renderers-SSB7ZOMX.js.map → hierCluster.renderers-ZPR7EDHZ.js.map} +0 -0
- /package/dist/{launch.adhoc-TBBXX6SW.js.map → launch.adhoc-DFJIN2WT.js.map} +0 -0
- /package/dist/{matrix-PSBBYZHY.js.map → matrix-B7ZILOQ7.js.map} +0 -0
- /package/dist/{matrix-VSVBKVHK.js.map → matrix-X6CPIDIV.js.map} +0 -0
- /package/dist/{matrix.cells-RO2BEWLS.js.map → matrix.cells-M4YYMUCX.js.map} +0 -0
- /package/dist/{matrix.config-472MLJI3.js.map → matrix.config-N3VRUIBE.js.map} +0 -0
- /package/dist/{matrix.controls-3KV3A2SK.js.map → matrix.controls-QZRCJ35M.js.map} +0 -0
- /package/dist/{matrix.data-APM7BGHQ.js.map → matrix.data-RT6C2K3X.js.map} +0 -0
- /package/dist/{matrix.groups-HHC5TA2L.js.map → matrix.groups-VWOCE2OX.js.map} +0 -0
- /package/dist/{matrix.interactivity-YXFLANFQ.js.map → matrix.interactivity-PUMHTQES.js.map} +0 -0
- /package/dist/{matrix.layout-UY3I75BL.js.map → matrix.layout-E23ZOPZ3.js.map} +0 -0
- /package/dist/{matrix.legend-Y4S4HDWO.js.map → matrix.legend-MWSRG6FJ.js.map} +0 -0
- /package/dist/{matrix.renderers-C2Z5TP7R.js.map → matrix.renderers-ALGBNBK2.js.map} +0 -0
- /package/dist/{matrix.serieses-LXW6DVNY.js.map → matrix.serieses-HKO6DYLL.js.map} +0 -0
- /package/dist/{matrix.sort-ADYDTBHQ.js.map → matrix.sort-63NHPQNT.js.map} +0 -0
- /package/dist/{matrix.sorterUi-AHQ6OQSM.js.map → matrix.sorterUi-QXXZTD4A.js.map} +0 -0
- /package/dist/{metaboliteIntensity-BRNMOEP7.js.map → metaboliteIntensity-BMKNKDXS.js.map} +0 -0
- /package/dist/{numeric-AKY5S4ZV.js.map → numeric-W63IFV67.js.map} +0 -0
- /package/dist/{numeric.discrete-Z27UIJL2.js.map → numeric.discrete-VOD3KY74.js.map} +0 -0
- /package/dist/{numeric.toggle-ECHESLL6.js.map → numeric.toggle-RCKPB7ZD.js.map} +0 -0
- /package/dist/{plot.app-TXH6JCHC.js.map → plot.app-I7VDXUNL.js.map} +0 -0
- /package/dist/{plot.brainImaging-UWEE3ASQ.js.map → plot.brainImaging-EUS4O2WC.js.map} +0 -0
- /package/dist/{plot.dzi-ACLWPR4N.js.map → plot.dzi-7JMXXJQ5.js.map} +0 -0
- /package/dist/{plot.wsi-XDP6H632.js.map → plot.wsi-K7X6UIFM.js.map} +0 -0
- /package/dist/{profilePlot-W46V5WZY.js.map → profilePlot-64ZHU4EX.js.map} +0 -0
- /package/dist/{regression-3H3254JS.js.map → regression-BSLYVSPL.js.map} +0 -0
- /package/dist/{regression.inputs-RN4ELCCQ.js.map → regression.inputs-PSLCZH3F.js.map} +0 -0
- /package/dist/{regression.inputs.term-UU36JXKO.js.map → regression.inputs.term-7I5ATFPY.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-KNSYQELW.js.map → regression.inputs.values.table-ZHTQ5ODD.js.map} +0 -0
- /package/dist/{regression.results-C7JMURE4.js.map → regression.results-6BCE6DZ6.js.map} +0 -0
- /package/dist/{sampleScatter-4FNFRHZ4.js.map → sampleScatter-5CFQKO2N.js.map} +0 -0
- /package/dist/{sampleScatter.interactivity-XVLL4V3S.js.map → sampleScatter.interactivity-GNZ7P5QO.js.map} +0 -0
- /package/dist/{sampleScatter.renderer-AT4NAZBS.js.map → sampleScatter.renderer-XLFS24OP.js.map} +0 -0
- /package/dist/{sampleView-24OQHMUF.js.map → sampleView-K4ZUOIEI.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-IBQJOINV.js.map → singleCellGeneExpression-PODHL6V6.js.map} +0 -0
- /package/dist/{summary-IBAGSXZC.js.map → summary-ERKCPDNZ.js.map} +0 -0
- /package/dist/{tk-ENLUPDDN.js.map → tk-II3BDHPV.js.map} +0 -0
- /package/dist/{tvs.numeric-3EKVOHHT.js.map → tvs.numeric-W2UF3S26.js.map} +0 -0
- /package/dist/{violin-QV326UNM.js.map → violin-PT2CYSKC.js.map} +0 -0
- /package/dist/{violin.interactivity-DTTFFLEM.js.map → violin.interactivity-SP5KDTDF.js.map} +0 -0
- /package/dist/{violin.renderer-X7IYO5OZ.js.map → violin.renderer-DDVZZIRT.js.map} +0 -0
- /package/dist/{vocabulary-MQESDXTN.js.map → vocabulary-P7P5QIKP.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/singlecell.js"],
|
|
4
|
-
"sourcesContent": ["import * as client from './client'\nimport * as d3 from 'd3'\nimport { interpolatePlasma } from 'd3-scale-chromatic'\nimport { axisTop, axisBottom } from 'd3-axis'\nimport { scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { gene_searchbox, findgenemodel_bysymbol } from './gene'\nimport { legend_newrow } from './block.legend'\nimport { schemeCategory20 } from '#common/legacy-d3-polyfill'\n\n/*\n********************** EXPORTED\ninit()\n********************** INTERNAL\nsequence of calls by init()\n\tload_json()\n\tvalidate_obj()\n\tinit_view() // init three.js scene, camera and renderer\n\t\tadd_scriptTag() // add three.js scripts\n\tinit_controlpanel()\n\tpcd_pipeline() // query data from csv file and create pcd file to be rendered\n\t\tload_cell_pcd() // query data for category with color as auto/custom or gene expression\n\t\trender_cloud() // remove old points and create point cloud using PCDLoader() \n\t\trender_controlpanel() // render control panel for category or gene expression\n\tmake_legend() // make legend if predefined in json file as image file\n\nmake_zoom_panel() // change camera.fov when zoom in / out \nmake_menu() // menu when clicked on category or gene button at top of config\nmake_settings() //settings panel to change background, pointsize, reset, screenshot and zoom\nheatmap_menu() // menu to enter multiple genes and select category\n\tmake_heatmap() // make heatmap for multiple genes and category\nmake_plot() // for single gene\n\tmake_violin_plot() // make violin plot for single gene expression vs category\n\tmake_box_plot() // make box plot for single gene expression vs category\n*/\n\nexport async function init(arg, holder) {\n\ttry {\n\t\tconst obj = await load_json(arg)\n\t\tvalidate_obj(obj)\n\n\t\tobj.genome = arg.genome\n\t\tobj.holder = holder.style('position', 'relative')\n\t\tawait init_view(obj)\n\t\tinit_controlpanel(obj)\n\t\tawait pcd_pipeline(obj)\n\t\tmake_legend(arg, obj)\n\t} catch (e) {\n\t\tclient.sayerror(holder, e.message || e)\n\t}\n}\n\nasync function load_json(arg) {\n\tif (!arg.jsonfile) throw '.jsonfile missing'\n\tconst tmp = await client.dofetch('textfile', { file: arg.jsonfile })\n\tif (tmp.error) throw tmp.error\n\treturn JSON.parse(tmp.text)\n}\n\nfunction validate_obj(obj) {\n\tif (!obj.cells) throw '.cells{} missing'\n\tif (!obj.cells.file) throw '.cells.file missing'\n\tif (!obj.cells.axis2columnidx) throw '.cells.axis2columnidx missing'\n\tif (obj.cells.categories) {\n\t\tif (!Array.isArray(obj.cells.categories)) throw '.cells.categories should be an array'\n\t\tif (obj.cells.categories.length == 0) throw '.cells.categories[] is empty array'\n\t\tfor (const c of obj.cells.categories) {\n\t\t\tif (!Number.isInteger(c.columnidx)) throw 'columnidx missing from category ' + c\n\t\t\tif (c.autocolor) {\n\t\t\t\tc.autocolor = scaleOrdinal(schemeCategory20)\n\t\t\t}\n\t\t}\n\t\tif (!Number.isInteger(obj.use_category_index)) {\n\t\t\tobj.use_category_index = 0\n\t\t}\n\t\tif (!obj.cells.categories[obj.use_category_index]) throw 'use_category_index out of bound'\n\t\tif (!obj.cells.categories[obj.use_category_index].hidden_types)\n\t\t\tobj.cells.categories[obj.use_category_index].hidden_types = []\n\t}\n\tif (obj.gene_expression) {\n\t\tif (!obj.gene_expression.file) throw '.gene_expression.file missing'\n\t\tif (!Number.isInteger(obj.cells.barcodecolumnidx))\n\t\t\tthrow '.gene_expression in use but .cells.barcodecolumnidx is missing'\n\t}\n\tif (!obj.width) obj.width = window.innerWidth * 0.9\n\tif (!obj.height) obj.height = window.innerHeight * 0.9\n}\n\nasync function pcd_pipeline(obj) {\n\tif (Number.isInteger(obj.use_category_index)) {\n\t\tif (!obj.cells.categories[obj.use_category_index].hidden_types)\n\t\t\tobj.cells.categories[obj.use_category_index].hidden_types = []\n\t}\n\tconst data = await load_cell_pcd(obj)\n\n\t// get sphere radius from max of x, y and z coordinates and assign it to camera and controls\n\tobj.data_sphere_r = data.data_sphere_r\n\tif (!obj.camera.position.z) {\n\t\tobj.camera.position.z = obj.data_sphere_r * 3\n\t\tobj.controls.maxDistance = obj.data_sphere_r * 4\n\t\tobj.controls.minDistance = obj.data_sphere_r / 10\n\t}\n\tconst enc = new TextEncoder()\n\tconst pcd_buffer = enc.encode(data.pcddata).buffer\n\trender_cloud(obj, pcd_buffer)\n\trender_controlpanel(obj, data)\n\n\tanimate()\n\n\tfunction animate() {\n\t\trequestAnimationFrame(animate)\n\t\tobj.controls.update()\n\t\tobj.renderer.render(obj.scene, obj.camera)\n\t}\n}\n\nasync function load_cell_pcd(obj) {\n\t/*\nto load a new pcd file\ncall this when using a new category,\nor selected a gene for overlaying\n*/\n\tconst wait = obj.holder\n\t\t.append('div')\n\t\t.style('position', 'absolute')\n\t\t.style('top', 0)\n\t\t.style('left', 0)\n\t\t.style('padding', '10px')\n\t\t.style('font-size', '1.5rem')\n\t\t.text('Loading data...')\n\n\tconst arg = {\n\t\tgenome: obj.genome.name,\n\t\ttextfile: obj.cells.file,\n\t\tdelimiter: obj.cells.delimiter || '\\t',\n\t\tgetpcd: {\n\t\t\tcoord: obj.cells.axis2columnidx\n\t\t}\n\t}\n\n\tif (Number.isInteger(obj.use_category_index)) {\n\t\t/*\n\t\tthis is the array index of obj.categories[]\n\t\tto use this category for coloring cells\n\t\t*/\n\t\tif (!obj.cells.categories) throw 'using category index but cells.categories[] missing'\n\t\tconst cat = obj.cells.categories[obj.use_category_index]\n\t\tif (!cat) throw 'category array index out of bound'\n\t\targ.getpcd.category_index = cat.columnidx\n\n\t\tif (cat.autocolor) {\n\t\t\t// if categories are autocolored and not defined in config\n\t\t\targ.getpcd.category_autocolor = true\n\t\t\tif (cat.values_count) arg.getpcd.values_count = cat.values_count\n\t\t} else if (cat.values) {\n\t\t\t//if colors are defined in config\n\t\t\targ.getpcd.category_customcolor = true\n\t\t\targ.getpcd.cat_values = cat.values\n\t\t} else {\n\t\t\tif (!cat.autocolor && !cat.values) throw 'categories.values[] are not defined'\n\t\t\tthrow 'unknow coloring scheme for category ' + cat.name\n\t\t}\n\t\tif (cat.hidden_types) {\n\t\t\targ.hidden_types = cat.hidden_types\n\t\t}\n\t\tif (obj.background_color) {\n\t\t\targ.background_color = obj.background_color\n\t\t}\n\t\t//set flags for ordering legend\n\t\tif (!cat.customorder) {\n\t\t\t// if categories are autoordered and not defined in config\n\t\t\targ.getpcd.category_autoorder = true\n\t\t} else if (cat.customorder && cat.values) {\n\t\t\t//if order are defined in config\n\t\t\targ.getpcd.category_customorder = true\n\t\t\targ.getpcd.cat_values = cat.values\n\t\t} else {\n\t\t\tif (cat.customorder && !cat.values) throw 'categories.values[] are not defined'\n\t\t\tthrow 'unknow ordering scheme for category ' + cat.name\n\t\t}\n\t\t// update menu_button here\n\t\tobj.menu_button.html(cat.name + ' ▼')\n\t} else if (Number.isInteger(obj.use_gene_index)) {\n\t\tconst gene = obj.gene_expression.genes[obj.use_gene_index]\n\t\tobj.menu_button.html('Gene : ' + gene.gene + ' ▼')\n\t\targ.getpcd.gene_expression = {\n\t\t\tfile: obj.gene_expression.file,\n\t\t\tbarcodecolumnidx: obj.cells.barcodecolumnidx,\n\t\t\tchr: gene.chr,\n\t\t\tstart: gene.start,\n\t\t\tstop: gene.stop,\n\t\t\tautoscale: true,\n\t\t\tgenename: gene.gene,\n\t\t\tcolor_min: obj.gene_expression.color_min,\n\t\t\tcolor_max: obj.gene_expression.color_max\n\t\t}\n\t\tif (obj.gene_expression.color_no_exp) arg.getpcd.gene_expression.color_no_exp = obj.gene_expression.color_no_exp\n\t} else {\n\t\tthrow 'unknown method to color the cells'\n\t}\n\n\treturn client.dofetch('singlecell', arg).then(data => {\n\t\tif (data.error) throw data.error\n\n\t\twait.remove()\n\t\treturn data\n\t})\n}\n\nasync function init_view(obj) {\n\t// TODO only load below if to do 3d\n\tawait add_scriptTag('/static/js/three.js')\n\tawait add_scriptTag('/static/js/loaders/PCDLoader.js')\n\tawait add_scriptTag('/static/js/controls/TrackballControls.js')\n\tawait add_scriptTag('/static/js/WebGL.js')\n\n\tif (WEBGL.isWebGLAvailable() === false) {\n\t\tobj.holder.node().appendChild(WEBGL.getWebGLErrorMessage())\n\t\treturn\n\t}\n\n\tobj.scene = new THREE.Scene()\n\tif (obj.background_color) {\n\t\tobj.scene.background = new THREE.Color(obj.background_color)\n\t} else {\n\t\tobj.scene.background = new THREE.Color(0xffffff)\n\t}\n\n\tconst default_zoom = obj.default_zoom ? 100 - obj.default_zoom : 45\n\t// camera parameters explaination: https://observablehq.com/@grantcuster/understanding-scale-and-the-three-js-perspective-camera\n\tobj.camera = new THREE.PerspectiveCamera(default_zoom, obj.width / obj.height, 0.1, 1000)\n\n\tobj.camera.position.x = obj.canvas_2d ? 0 : 20\n\tobj.camera.position.y = obj.canvas_2d ? 0 : -10\n\n\tif (obj.canvas_2d) {\n\t\tobj.camera.up.set(0, 1, 0)\n\t} else {\n\t\tobj.camera.up.set(0, 0, 1)\n\t}\n\n\tobj.controls = new THREE.TrackballControls(obj.camera)\n\n\tobj.controls.rotateSpeed = obj.canvas_2d ? 0 : 2.0\n\tobj.controls.zoomSpeed = obj.canvas_2d ? 3.0 : 0.7\n\tobj.controls.panSpeed = obj.canvas_2d ? 3.0 : 0.7\n\n\tobj.controls.noZoom = true\n\tobj.controls.noPan = false\n\n\tobj.controls.staticMoving = true\n\tobj.controls.dynamicDampingFactor = 0.3\n\n\tobj.scene.add(obj.camera)\n\n\tobj.renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true })\n\tobj.renderer.setPixelRatio(window.devicePixelRatio)\n\tobj.renderer.setSize(obj.width, obj.height)\n\tobj.renderer.domElement.style.backgroundColor = '#ffffff'\n\tobj.renderer.domElement.style.border = 'solid #dddddd 2px'\n\n\tobj.holder\n\t\t.style('display', 'inline-block')\n\t\t.style('position', 'relative')\n\t\t.node()\n\t\t.appendChild(obj.renderer.domElement)\n\n\tobj.renderer.render(obj.scene, obj.camera)\n}\n\nfunction render_cloud(obj, pcd_buffer) {\n\t// remove old points before adding new\n\tobj.scene.children.forEach(function(v, i) {\n\t\tif (v.material) {\n\t\t\tv.material.dispose()\n\t\t\tv.geometry.dispose()\n\t\t\tobj.scene.remove(v)\n\t\t}\n\t})\n\n\t// add new points using loader\n\tconst loader = new THREE.PCDLoader()\n\tconst points = loader.parse(pcd_buffer, '')\n\n\tif (obj.point_size) {\n\t\tpoints.material.size = obj.point_size\n\t} else {\n\t\tpoints.material.size = obj.canvas_2d ? 0.3 : 0.05\n\t}\n\n\tobj.scene.add(points)\n\tobj.center = points.geometry.boundingSphere.center\n\tobj.controls.target.set(obj.center.x, obj.center.y, obj.center.z)\n\tobj.controls.update()\n}\n\nfunction init_controlpanel(obj) {\n\tobj.menu = new client.Menu()\n\tobj.menu.d.style('padding', '3px')\n\n\tobj.settings = new client.Menu()\n\tobj.settings.d.style('padding', '3px')\n\n\tconst panel = obj.holder\n\t\t.append('div')\n\t\t.style('padding', '10px')\n\t\t.style('position', 'absolute')\n\t\t.style('border-radius', '5px')\n\t\t.style('top', '20px')\n\t\t.style('right', '20px')\n\t\t.style('background-color', '#dddddd')\n\n\tobj.menu_button = panel\n\t\t.append('button')\n\t\t.style('display', 'inline-block')\n\t\t.style('padding', '4px')\n\t\t.on('click', () => make_menu(obj))\n\n\tconst minimize_btn = (obj.minimize_btn = panel\n\t\t.append('div')\n\t\t.style('margin-left', '10px')\n\t\t.style('display', 'inline-block')\n\t\t.style('padding-left', '0px')\n\t\t.style('padding-right', '2px')\n\t\t.style('float', 'right')\n\t\t.style('font-size', '.6em')\n\t\t.classed('active', obj.menu_minimized ? true : false)\n\t\t.text(obj.menu_minimized ? ' SHOW' : ' HIDE')\n\t\t.on('click', () => {\n\t\t\tobj.minimize_btn.classed('active', obj.minimize_btn.classed('active') ? false : true)\n\t\t\tif (obj.minimize_btn.classed('active')) {\n\t\t\t\tobj.minimize_btn.text(' SHOW')\n\t\t\t\tobj.menu_output.style('display', 'none')\n\t\t\t} else {\n\t\t\t\tobj.minimize_btn.text(' HIDE')\n\t\t\t\tobj.menu_output.style('display', 'block')\n\t\t\t}\n\t\t})\n\t\t.on('mouseover', () => {\n\t\t\tminimize_btn.style('text-decoration', 'underline')\n\t\t})\n\t\t.on('mouseout', () => {\n\t\t\tminimize_btn.style('text-decoration', 'none')\n\t\t}))\n\n\tobj.use_background_color = 0\n\n\tconst config_btn = (obj.settings_btn = panel\n\t\t.append('div')\n\t\t.style('margin-left', '10px')\n\t\t.style('display', 'inline-block')\n\t\t.style('padding-left', '3px')\n\t\t.style('padding-right', '3px')\n\t\t.style('float', 'right')\n\t\t.style('font-size', '.6em')\n\t\t.text('CONFIG')\n\t\t.on('click', () => make_settings(obj))\n\t\t.on('mouseover', () => {\n\t\t\tconfig_btn.style('text-decoration', 'underline')\n\t\t})\n\t\t.on('mouseout', () => {\n\t\t\tconfig_btn.style('text-decoration', 'none')\n\t\t}))\n\n\tobj.menu_output = panel\n\t\t.append('div')\n\t\t.style('margin-top', '10px')\n\t\t.style('display', obj.menu_minimized ? 'none' : 'block')\n\n\tobj.show_zoom = true //flag to show zoom div under legend div\n}\n\nfunction render_controlpanel(obj, data) {\n\tobj.menu_output.selectAll('*').remove()\n\n\tif (data.category2color) {\n\t\t/*\n\t\tshowing the color legend for the current category\n\t\tTODO\n\t\t\tpredefined colors\n\t\t\tat each type, show checkbox for filtering cells\n\t\t*/\n\t\tconst top_row = obj.menu_output.append('div').style('margin', '2px')\n\n\t\tconst select_all_checkbox = top_row\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.style('margin-right', '10px')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.on('change', () => {\n\t\t\t\tif (select_all_checkbox.node().checked) {\n\t\t\t\t\tobj.cells.categories[obj.use_category_index].hidden_types = []\n\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const type in data.category2color) {\n\t\t\t\t\t\tobj.cells.categories[obj.use_category_index].hidden_types.push(type)\n\t\t\t\t\t}\n\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t}\n\t\t\t})\n\n\t\tif (obj.cells.categories[obj.use_category_index].hidden_types.length == 0) {\n\t\t\tselect_all_checkbox.property('checked', 1)\n\t\t}\n\n\t\ttop_row\n\t\t\t.append('span')\n\t\t\t.text('Select All')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.attr('font-family', client.font)\n\n\t\tfor (const type in data.category2color) {\n\t\t\t// div for each label\n\t\t\tconst row = obj.menu_output.append('div').style('margin', '2px')\n\n\t\t\tconst checkbox = row\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.property('checked', 1)\n\t\t\t\t.style('margin-right', '10px')\n\t\t\t\t.style('vertical-align', 'top')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.on('change', () => {\n\t\t\t\t\tif (obj.cells.categories[obj.use_category_index].hidden_types.includes(type)) {\n\t\t\t\t\t\tconst index = obj.cells.categories[obj.use_category_index].hidden_types.indexOf(type)\n\t\t\t\t\t\tif (index !== -1) obj.cells.categories[obj.use_category_index].hidden_types.splice(index, 1)\n\t\t\t\t\t\tcheckbox.property('checked', 1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj.cells.categories[obj.use_category_index].hidden_types.push(type)\n\t\t\t\t\t}\n\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t})\n\n\t\t\tif (obj.cells.categories[obj.use_category_index].hidden_types.includes(type)) {\n\t\t\t\tcheckbox.property('checked', 0)\n\t\t\t}\n\n\t\t\t// square color for the label\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('height', '15px')\n\t\t\t\t.style('width', '15px')\n\t\t\t\t.style('background-color', data.category2color[type])\n\t\t\t\t.style('margin-right', '10px')\n\n\t\t\t//label text\n\t\t\trow\n\t\t\t\t.append('span')\n\t\t\t\t.text(type)\n\t\t\t\t.attr('font-family', client.font)\n\n\t\t\trow\n\t\t\t\t.append('span')\n\t\t\t\t.html(' n=' + data.categorycount[type])\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('float', 'right')\n\t\t\t\t.style('color', '#777')\n\t\t}\n\t} else if (data.maxexpvalue) {\n\t\t// for gene expression data show gradient scale with unit\n\n\t\tconst scale_height = 30\n\t\tconst scale_width = 150\n\n\t\tconst scale_div = obj.menu_output\n\t\t\t.append('div')\n\t\t\t.style('margin', '10px')\n\t\t\t.style('width', '120px')\n\t\t\t.style('height', '100px')\n\n\t\tscale_div\n\t\t\t.append('div')\n\t\t\t.text('Gene Expression ' + obj.gene_expression.datatype)\n\t\t\t.style('text-align', 'center')\n\t\t\t.style('width', '150px')\n\t\t\t.style('margin-bottom', '20px')\n\n\t\tconst svg = scale_div.append('svg').append('g')\n\n\t\tconst colorRange = [obj.gene_expression.color_max, obj.gene_expression.color_min]\n\n\t\tconst colorScale = scaleLinear()\n\t\t\t.range(colorRange)\n\t\t\t.domain([data.minexpvalue, data.maxexpvalue])\n\n\t\tconst defs = svg.append('defs')\n\n\t\tconst linearGradient = defs.append('linearGradient').attr('id', 'linear-gradient')\n\t\t// .attr('gradientTransform', 'rotate(90)')\n\n\t\tlinearGradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', '0%')\n\t\t\t.attr('stop-color', colorScale(data.maxexpvalue))\n\n\t\tlinearGradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', '100%')\n\t\t\t.attr('stop-color', colorScale(data.minexpvalue))\n\n\t\tsvg\n\t\t\t.append('rect')\n\t\t\t.attr('x', 0)\n\t\t\t.attr('y', 0)\n\t\t\t.attr('width', scale_width)\n\t\t\t.attr('height', scale_height)\n\t\t\t.attr('transform', 'translate(12, 0)')\n\t\t\t.style('fill', 'url(#linear-gradient)')\n\n\t\tconst y = scaleLinear()\n\t\t\t.range([0, scale_width])\n\t\t\t.domain([data.minexpvalue, data.maxexpvalue])\n\n\t\tconst legendAxis = axisBottom()\n\t\t\t.scale(y)\n\t\t\t.ticks(5)\n\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('class', 'legend axis')\n\t\t\t.attr('transform', 'translate(12,' + scale_height + ')')\n\t\t\t.call(legendAxis)\n\n\t\tconst stats_div = obj.menu_output\n\t\t\t.append('div')\n\t\t\t.style('padding-bottom', '20px')\n\t\t\t.style('text-align', 'center')\n\n\t\tstats_div\n\t\t\t.append('p')\n\t\t\t.style('font-size', '13px')\n\t\t\t.style('margin', '2px 0')\n\t\t\t.html('<b>Cells with Expression Data</b> ')\n\n\t\tstats_div\n\t\t\t.append('p')\n\t\t\t.style('font-size', '13px')\n\t\t\t.style('margin', '2px 0')\n\t\t\t.html(data.numbercellwithgeneexp + ' / ' + data.numbercelltotal)\n\n\t\tconst no_exp_div = stats_div\n\t\t\t.append('div')\n\t\t\t.style('display', 'block')\n\t\t\t.style('margin-top', '10px')\n\n\t\tno_exp_div\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('height', '15px')\n\t\t\t.style('width', '15px')\n\t\t\t.style('background-color', obj.gene_expression.color_no_exp ? obj.gene_expression.color_no_exp : '#2C2C2C')\n\t\t\t.style('margin-right', '10px')\n\n\t\tno_exp_div\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('font-size', '13px')\n\t\t\t.html(' Cells without Expression')\n\n\t\t// Show option for Boxplot for Gene Expression by catagories\n\t\tconst boxplot_div = obj.menu_output.append('div')\n\n\t\tboxplot_div\n\t\t\t.append('div')\n\t\t\t.style('display', 'block')\n\t\t\t.style('padding', '5px')\n\t\t\t.html('Violinplot / Boxplot of </br> Expression by')\n\n\t\tconst boxplot_cat_select = boxplot_div.append('select').style('display', 'block')\n\n\t\tboxplot_cat_select\n\t\t\t.append('option')\n\t\t\t.attr('value', 'none')\n\t\t\t.text('-- Select--')\n\n\t\tif (obj.cells.categories) {\n\t\t\tobj.cells.categories.forEach((category, i) => {\n\t\t\t\tboxplot_cat_select\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', category.columnidx)\n\t\t\t\t\t.text(category.name)\n\t\t\t})\n\t\t}\n\t\tboxplot_cat_select.on('change', () => {\n\t\t\tconst gene = obj.gene_expression.genes[obj.use_gene_index]\n\t\t\tconst cat = obj.cells.categories[parseInt(boxplot_cat_select.node().selectedIndex) - 1]\n\t\t\tconst arg = {\n\t\t\t\tgenome: obj.genome.name,\n\t\t\t\tgetgeneboxplot: {\n\t\t\t\t\texpfile: obj.gene_expression.file,\n\t\t\t\t\tchr: gene.chr,\n\t\t\t\t\tstart: gene.start,\n\t\t\t\t\tstop: gene.stop,\n\t\t\t\t\tgenename: gene.gene,\n\t\t\t\t\tcellfile: obj.cells.file,\n\t\t\t\t\tbarcodecolumnidx: obj.cells.barcodecolumnidx,\n\t\t\t\t\tcategorycolumnidx: parseInt(boxplot_cat_select.node().value),\n\t\t\t\t\tdelimiter: obj.cells.delimiter || '\\t',\n\t\t\t\t\tcategory_customorder: cat.customorder && cat.values ? true : false,\n\t\t\t\t\tcategory_autoorder: !cat.customorder ? true : false,\n\t\t\t\t\tcat_values: cat.values,\n\t\t\t\t\tvalues_count: cat.values_count\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient.dofetch('singlecell', arg).then(data => {\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tobj.box_plot = new client.Menu()\n\t\t\t\tmake_plot(data, obj, boxplot_cat_select.node().value)\n\t\t\t})\n\t\t})\n\t}\n\n\tmake_zoom_panel(obj)\n}\n\nfunction make_zoom_panel(obj) {\n\tif (obj.show_zoom) {\n\t\t// zoom in / zoom out\n\t\tconst zoom_div = obj.menu_output\n\t\t\t.append('div')\n\t\t\t.style('display', 'block')\n\t\t\t.text('Zoom')\n\t\t\t.style('margin', '10px 5px 5px 5px')\n\t\t\t.style('padding-top', '10px')\n\t\t\t.style('border-top', '1px solid #929292')\n\n\t\tconst zoom_hide_btn = zoom_div\n\t\t\t.append('div')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding-left', '0px')\n\t\t\t.style('padding-right', '2px')\n\t\t\t.style('float', 'right')\n\t\t\t.style('font-size', '.6em')\n\t\t\t.text('MOVE TO CONFIG')\n\t\t\t.on('click', () => {\n\t\t\t\tzoom_div.node().remove()\n\t\t\t\tobj.show_zoom = false\n\t\t\t})\n\t\t\t.on('mouseover', () => {\n\t\t\t\tzoom_hide_btn.style('text-decoration', 'underline')\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tzoom_hide_btn.style('text-decoration', 'none')\n\t\t\t})\n\n\t\tobj.zoom_slider = zoom_div\n\t\t\t.append('input')\n\t\t\t.style('display', 'block')\n\t\t\t.style('padding', '5px')\n\t\t\t.attr('type', 'range')\n\t\t\t.attr('min', 1)\n\t\t\t.attr('max', 100)\n\t\t\t.attr('value', obj.camera.fov)\n\t\t\t.style('direction', 'rtl')\n\t\t\t.on('change', () => {\n\t\t\t\tobj.camera.fov = parseInt(obj.zoom_slider.node().value)\n\t\t\t\tobj.camera.updateProjectionMatrix()\n\t\t\t})\n\t\t\t.on('mousedown', event => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t})\n\t}\n}\n\nfunction make_menu(obj) {\n\tobj.menu.clear().showunder(obj.menu_button.node())\n\n\tif (obj.cells.categories) {\n\t\tobj.cells.categories.forEach((category, i) => {\n\t\t\tif (i != obj.use_category_index) {\n\t\t\t\t// add option\n\t\t\t\tobj.menu.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text(category.name)\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\tobj.menu.hide()\n\n\t\t\t\t\t\tobj.use_category_index = i\n\t\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t\t})\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.style('display', category.values_count ? 'inline-block' : 'none')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('float', 'right')\n\t\t\t\t\t.style('color', '#777')\n\t\t\t\t\t.style('padding', '3px 5px')\n\t\t\t\t\t.html(category.values_count ? ' n=' + category.values_count : '')\n\t\t\t}\n\t\t})\n\t}\n\n\tif (obj.gene_expression) {\n\t\t// add option\n\t\tobj.menu.d\n\t\t\t.append('div')\n\t\t\t.text('Gene expression')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.on('click', () => {\n\t\t\t\tobj.menu.clear()\n\n\t\t\t\tconst gene_search_div = obj.menu.d.append('div').style('padding', '10px')\n\n\t\t\t\tgene_searchbox({\n\t\t\t\t\tdiv: gene_search_div.append('div'),\n\t\t\t\t\tresultdiv: gene_search_div.append('div'),\n\t\t\t\t\tgenome: obj.genome.name,\n\t\t\t\t\tcallback: async genename => {\n\t\t\t\t\t\tconst gmlst = await findgenemodel_bysymbol(obj.genome.name, genename)\n\t\t\t\t\t\tif (gmlst && gmlst[0]) {\n\t\t\t\t\t\t\tconst gm = gmlst[0]\n\t\t\t\t\t\t\tif (!obj.gene_expression.genes) obj.gene_expression.genes = []\n\t\t\t\t\t\t\tconst geneidx = obj.gene_expression.genes.findIndex(i => i.gene == genename)\n\t\t\t\t\t\t\tif (geneidx == -1) {\n\t\t\t\t\t\t\t\tobj.gene_expression.genes.push({\n\t\t\t\t\t\t\t\t\tgene: genename,\n\t\t\t\t\t\t\t\t\tchr: gm.chr,\n\t\t\t\t\t\t\t\t\tstart: gm.start,\n\t\t\t\t\t\t\t\t\tstop: gm.stop\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tobj.use_gene_index = obj.gene_expression.genes.length - 1\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobj.use_gene_index = geneidx\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobj.use_category_index = null\n\t\t\t\t\t\tobj.menu.hide()\n\n\t\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t// menu option for multi-gene heatmap\n\t\tobj.menu.d\n\t\t\t.append('div')\n\t\t\t.text('Multi-Gene Heatmap')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.on('click', () => {\n\t\t\t\theatmap_menu(obj)\n\t\t\t})\n\n\t\tif (obj.gene_expression.genes) {\n\t\t\tif (obj.gene_expression.genes.length > 1) {\n\t\t\t\tobj.menu.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('padding', '5px 10px')\n\t\t\t\t\t.text('Previously Selected')\n\t\t\t}\n\n\t\t\tobj.gene_expression.genes.forEach((gene, i) => {\n\t\t\t\tif (i != obj.use_gene_index) {\n\t\t\t\t\t// add option\n\t\t\t\t\tobj.menu.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.text('Gene : ' + gene.gene)\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\t\tobj.menu.hide()\n\n\t\t\t\t\t\t\tobj.use_category_index = null\n\t\t\t\t\t\t\tobj.use_gene_index = i\n\n\t\t\t\t\t\t\tpcd_pipeline(obj)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n\nfunction make_settings(obj) {\n\tobj.settings.clear().showunder(obj.settings_btn.node())\n\n\t// Background Color change option\n\tconst back_color_div = obj.settings.d\n\t\t.append('div')\n\t\t.style('display', 'block')\n\t\t.text('Background Color')\n\t\t.style('margin', '5px')\n\n\tconst black_div = back_color_div\n\t\t.append('div')\n\t\t.style('margin', '5px')\n\t\t.style('display', 'block')\n\n\tconst name = Math.random(),\n\t\tidblack = Math.random(),\n\t\tidwhite = Math.random()\n\n\tconst inputblack = black_div\n\t\t.append('input')\n\t\t.attr('type', 'radio')\n\t\t.style('display', 'inline-block')\n\t\t.attr('name', name)\n\t\t.attr('id', idblack)\n\t\t.on('change', toggle_background)\n\n\tblack_div\n\t\t.append('label')\n\t\t.style('display', 'inline-block')\n\t\t.style('font-size', '.8em')\n\t\t.text('Black')\n\t\t.style('padding-left', '10px')\n\t\t.attr('for', idblack)\n\n\tconst white_div = back_color_div\n\t\t.append('div')\n\t\t.style('margin', '5px')\n\t\t.style('display', 'block')\n\n\tconst inputwhite = white_div\n\t\t.append('input')\n\t\t.attr('type', 'radio')\n\t\t.style('display', 'inline-block')\n\t\t.attr('name', name)\n\t\t.attr('id', idwhite)\n\t\t.on('change', toggle_background)\n\n\twhite_div\n\t\t.append('label')\n\t\t.style('display', 'inline-block')\n\t\t.style('font-size', '.8em')\n\t\t.text('White')\n\t\t.style('padding-left', '10px')\n\t\t.attr('for', idwhite)\n\n\tif (obj.use_background_color == 0) {\n\t\tinputwhite.property('checked', 1)\n\t} else {\n\t\tinputblack.property('checked', 1)\n\t}\n\n\tfunction toggle_background() {\n\t\tconst isblack = obj.background_color == 'black'\n\t\tobj.scene.background = new THREE.Color(isblack ? 0xffffff : 0x000000)\n\t\tobj.use_background_color = isblack ? 0 : 1\n\t\tobj.background_color = isblack ? 'white' : 'black'\n\t}\n\t// point size change\n\tconst point_size_div = obj.settings.d\n\t\t.append('div')\n\t\t.style('display', 'block')\n\t\t.text('Point Size')\n\t\t.style('margin', '20px 5px')\n\n\tconst point_size_slider = point_size_div\n\t\t.append('input')\n\t\t.style('display', 'block')\n\t\t.style('padding', '5px')\n\t\t.attr('type', 'range')\n\t\t.attr('min', 1)\n\t\t.attr('max', 70)\n\t\t.attr('value', obj.scene.children[1].material.size * 100)\n\t\t.on('change', () => {\n\t\t\tobj.scene.children[1].material.size = point_size_slider.node().value / 100\n\t\t})\n\n\tif (obj.show_zoom == false) {\n\t\t// zoom in / zoom out\n\t\tconst zoom_div = obj.settings.d\n\t\t\t.append('div')\n\t\t\t.style('display', 'block')\n\t\t\t.text('Zoom')\n\t\t\t.style('margin', '20px 5px')\n\n\t\tconst zoom_hide_btn = zoom_div\n\t\t\t.append('div')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding-left', '0px')\n\t\t\t.style('padding-right', '2px')\n\t\t\t.style('float', 'right')\n\t\t\t.style('font-size', '.6em')\n\t\t\t.html('MOVE TO </br>LEGEND PANEL')\n\t\t\t.on('click', () => {\n\t\t\t\tzoom_div.node().remove()\n\t\t\t\tobj.show_zoom = true\n\t\t\t\tmake_zoom_panel(obj)\n\t\t\t})\n\t\t\t.on('mouseover', () => {\n\t\t\t\tzoom_hide_btn.style('text-decoration', 'underline')\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tzoom_hide_btn.style('text-decoration', 'none')\n\t\t\t})\n\n\t\tobj.zoom_slider = zoom_div\n\t\t\t.append('input')\n\t\t\t.style('display', 'block')\n\t\t\t.style('padding', '5px')\n\t\t\t.attr('type', 'range')\n\t\t\t.attr('min', 5)\n\t\t\t.attr('max', 70)\n\t\t\t.attr('value', obj.camera.fov)\n\t\t\t.style('direction', 'rtl')\n\t\t\t.on('change', () => {\n\t\t\t\tobj.camera.fov = parseInt(obj.zoom_slider.node().value)\n\t\t\t\tobj.camera.updateProjectionMatrix()\n\t\t\t})\n\t}\n\n\t// info for panning\n\tobj.settings.d\n\t\t.append('div')\n\t\t.style('margin', '5px')\n\t\t.text('Panning')\n\n\tobj.settings.d\n\t\t.append('div')\n\t\t.style('font-size', '.8em')\n\t\t.style('text-align', 'center')\n\t\t.style('margin-bottom', '10px')\n\t\t.html('<p style=\"margin:3px;\">Right mouse click </br>+ Mouse move</p>')\n\n\tif (!obj.canvas_2d) {\n\t\t// info for roatation\n\t\tobj.settings.d\n\t\t\t.append('div')\n\t\t\t.style('margin', '5px')\n\t\t\t.text('Rotate')\n\n\t\tobj.settings.d\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('text-align', 'center')\n\t\t\t.style('margin-bottom', '10px')\n\t\t\t.html('<p style=\"margin:3px;\">Left mouse click </br>+ Mouse move</p>')\n\t}\n\n\t// reset button\n\tobj.settings.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Reset view')\n\t\t.style('width', '80px')\n\t\t.style('margin', 'auto')\n\t\t.style('margin-top', '15px')\n\t\t.style('margin-bottom', '15px')\n\t\t.on('click', () => {\n\t\t\t// reset background checkbox\n\t\t\tinputwhite.property('checked', 1)\n\t\t\tobj.scene.background = new THREE.Color(obj.background_color ? obj.background_color : 0xffffff)\n\n\t\t\t// reset point size\n\t\t\tpoint_size_slider.node().value = obj.point_size ? obj.point_size * 100 : obj.canvas_2d ? 30 : 5\n\t\t\tobj.scene.children[1].material.size = obj.point_size ? obj.point_size : obj.canvas_2d ? 0.3 : 0.05\n\n\t\t\t//reset zoom and camera\n\t\t\tobj.camera.position.z = obj.data_sphere_r * 3\n\t\t\tobj.camera.position.x = obj.canvas_2d ? 0 : 20\n\t\t\tobj.camera.position.y = obj.canvas_2d ? 0 : -10\n\n\t\t\tconst cam_fov_default = 45\n\t\t\tobj.camera.fov = parseInt(cam_fov_default)\n\t\t\tobj.camera.updateProjectionMatrix()\n\t\t\tobj.zoom_slider.node().value = cam_fov_default\n\n\t\t\tif (obj.canvas_2d) {\n\t\t\t\tobj.camera.up.set(0, 1, 0)\n\t\t\t} else {\n\t\t\t\tobj.camera.up.set(0, 0, 1)\n\t\t\t}\n\n\t\t\t//reset panning\n\t\t\tobj.controls.target.set(obj.center.x, obj.center.y, obj.center.z)\n\t\t})\n\n\t// screenshot button\n\tconst screenshot_btn = obj.settings.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('padding', '5px')\n\t\t.style('width', '80px')\n\t\t.style('margin', 'auto')\n\t\t.style('margin-top', '15px')\n\t\t.style('margin-bottom', '15px')\n\t\t.html('<b>⧉</b> Capture')\n\t\t.on('mousedown', () => {\n\t\t\tconst imgData = obj.renderer.domElement.toDataURL()\n\n\t\t\tlet imgNode = document.createElement('img')\n\t\t\timgNode.src = imgData\n\t\t\t// document.body.appendChild(imgNode)\n\t\t\tscreenshot_btn\n\t\t\t\t.append('span')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.html(\n\t\t\t\t\t'<a download=\"scRNA_' +\n\t\t\t\t\t\tnew Date().toLocaleString() +\n\t\t\t\t\t\t'.png\" href=\"' +\n\t\t\t\t\t\timgNode.src +\n\t\t\t\t\t\t'\" title=\"ImageName\">Camera</a>'\n\t\t\t\t)\n\t\t\t// download_btn.node().click()\n\t\t})\n\t\t.on('mouseup', () => {\n\t\t\tscreenshot_btn\n\t\t\t\t.select('a')\n\t\t\t\t.node()\n\t\t\t\t.click()\n\t\t\tscreenshot_btn.selectAll('span').remove()\n\t\t})\n}\n\nfunction heatmap_menu(obj) {\n\tobj.menu.clear()\n\tobj.gene_expression.heatmap_genes = []\n\tobj.use_heatmap_category_index = null\n\n\tconst heatmap_menu_div = obj.menu.d\n\t\t.append('div')\n\t\t.style('display', 'block')\n\t\t.style('padding', '10px')\n\n\tconst genes_div = heatmap_menu_div.append('div').style('display', 'block')\n\n\tconst gene_search_div = genes_div\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.style('vertical-align', 'top')\n\t\t.style('padding', '10px')\n\n\tgene_search_div\n\t\t.append('div')\n\t\t.style('display', 'block')\n\t\t.style('padding-bottom', '5px')\n\t\t.text('Add Genes')\n\n\tgene_search_div\n\t\t.append('textarea')\n\t\t.attr('rows', '4')\n\t\t.attr('cols', '20')\n\t\t.attr('placeholder', 'Type gene names seperated by space')\n\n\t// Show option for Boxplot for Gene Expression by catagories\n\tconst catagory_div = heatmap_menu_div.append('div')\n\n\tcatagory_div\n\t\t.append('div')\n\t\t.style('display', 'block')\n\t\t.style('padding-bottom', '5px')\n\t\t.style('padding-left', '10px')\n\t\t.text('Heatmap by')\n\n\tconst cat_select = catagory_div\n\t\t.append('select')\n\t\t.style('display', 'block')\n\t\t.style('margin-left', '10px')\n\n\tcat_select\n\t\t.append('option')\n\t\t.attr('value', 'none')\n\t\t.text('-- Select--')\n\n\tif (obj.cells.categories) {\n\t\tobj.cells.categories.forEach((category, i) => {\n\t\t\tcat_select\n\t\t\t\t.append('option')\n\t\t\t\t.attr('value', category.columnidx)\n\t\t\t\t.text(category.name)\n\t\t})\n\t}\n\n\tcat_select.on('change', () => {\n\t\tobj.use_heatmap_category_index = parseInt(cat_select.node().value)\n\t})\n\n\t// button to generate heatmap\n\theatmap_menu_div\n\t\t.append('button')\n\t\t.text('Heatmap')\n\t\t.style('display', 'block')\n\t\t.style('float', 'right')\n\t\t.style('margin', '5px')\n\t\t.on('click', async () => {\n\t\t\tconst input_genelist = gene_search_div.select('textarea').node().value\n\t\t\tconst genelist = input_genelist.split(' ')\n\t\t\tfor (const gene of genelist) {\n\t\t\t\tconst gmlst = await findgenemodel_bysymbol(obj.genome.name, gene)\n\t\t\t\tif (gmlst && gmlst[0]) {\n\t\t\t\t\tconst gm = gmlst[0]\n\t\t\t\t\tif (!obj.gene_expression.heatmap_genes) obj.gene_expression.heatmap_genes = []\n\t\t\t\t\tconst geneidx = obj.gene_expression.heatmap_genes.findIndex(i => i.gene == gene)\n\t\t\t\t\tif (geneidx == -1) {\n\t\t\t\t\t\tobj.gene_expression.heatmap_genes.push({\n\t\t\t\t\t\t\tgene: gene,\n\t\t\t\t\t\t\tchr: gm.chr,\n\t\t\t\t\t\t\tstart: gm.start,\n\t\t\t\t\t\t\tstop: gm.stop\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\tconst arg = {\n\t\t\t\tgenome: obj.genome.name,\n\t\t\t\tgetheatmap: {\n\t\t\t\t\texpfile: obj.gene_expression.file,\n\t\t\t\t\tgene_list: obj.gene_expression.heatmap_genes,\n\t\t\t\t\tcellfile: obj.cells.file,\n\t\t\t\t\tbarcodecolumnidx: obj.cells.barcodecolumnidx,\n\t\t\t\t\tcategorycolumnidx: parseInt(cat_select.node().value),\n\t\t\t\t\tdelimiter: obj.cells.delimiter || '\\t'\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient.dofetch('singlecell', arg).then(data => {\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tobj.menu.hide()\n\t\t\t\tmake_heatmap(data, obj, cat_select.node().value)\n\t\t\t})\n\t\t})\n}\n\nfunction make_plot(data, obj, colidx) {\n\tconst gene = obj.gene_expression.genes[obj.use_gene_index]\n\tconst pane = client.newpane({ x: 600, y: 400 })\n\tconst cat = obj.cells.categories.find(x => x.columnidx == colidx)\n\tpane.header.text('Violinplot/Boxplot for ' + gene.gene + ' Expression by ' + cat.name)\n\n\tconst control_panel = pane.pane.append('div').style('margin', '10px 10px 10px 15px')\n\n\tconst svg = pane.pane.append('svg').style('margin', '10px')\n\n\t//toggle between violin and Boxplot\n\tconst plot_select = control_panel.append('select').style('display', 'inline-block')\n\n\tplot_select\n\t\t.append('option')\n\t\t.attr('value', 'violin')\n\t\t.text('Violin Plot')\n\n\tplot_select\n\t\t.append('option')\n\t\t.attr('value', 'box')\n\t\t.text('Box Plot')\n\n\tplot_select.on('change', () => {\n\t\tapply()\n\t})\n\n\t//toggle between cells with/without expression to be included in plot\n\tconst cell_select_div = control_panel\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.style('padding-left', '15px')\n\t\t.text('Cells without expression')\n\n\tconst cell_select = cell_select_div\n\t\t.append('select')\n\t\t.style('display', 'inline-block')\n\t\t.style('margin-left', '5px')\n\n\tcell_select\n\t\t.append('option')\n\t\t.attr('value', 'include')\n\t\t.text('Include')\n\n\tcell_select\n\t\t.append('option')\n\t\t.attr('value', 'exclude')\n\t\t.text('Exclude')\n\n\tcell_select.on('change', () => {\n\t\tapply()\n\t})\n\n\tmake_violin_plot(data, svg)\n\n\tfunction apply() {\n\t\tconst gene = obj.gene_expression.genes[obj.use_gene_index]\n\t\tconst arg = {\n\t\t\tgenome: obj.genome.name,\n\t\t\tgetgeneboxplot: {\n\t\t\t\texpfile: obj.gene_expression.file,\n\t\t\t\tchr: gene.chr,\n\t\t\t\tstart: gene.start,\n\t\t\t\tstop: gene.stop,\n\t\t\t\tgenename: gene.gene,\n\t\t\t\tcellfile: obj.cells.file,\n\t\t\t\tbarcodecolumnidx: obj.cells.barcodecolumnidx,\n\t\t\t\tcategorycolumnidx: parseInt(colidx),\n\t\t\t\tdelimiter: obj.cells.delimiter || '\\t',\n\t\t\t\tcategory_customorder: cat.customorder && cat.values ? true : false,\n\t\t\t\tcategory_autoorder: !cat.customorder ? true : false,\n\t\t\t\tcat_values: cat.values,\n\t\t\t\tvalues_count: cat.values_count\n\t\t\t}\n\t\t}\n\n\t\tif (cell_select.node().value == 'exclude') {\n\t\t\targ.getgeneboxplot.exclude_cells = true\n\t\t}\n\t\tclient.dofetch('singlecell', arg).then(data => {\n\t\t\tif (data.error) throw data.error\n\t\t\tif (plot_select.node().value == 'box') make_box_plot(data, svg)\n\t\t\telse if (plot_select.node().value == 'violin') make_violin_plot(data, svg)\n\t\t})\n\t}\n}\n\nfunction make_violin_plot(data, svg) {\n\tsvg.selectAll('*').remove()\n\n\tlet box_height = 50,\n\t\tbox_width = 200,\n\t\tbarspace = 2,\n\t\taxis_height = 30\n\n\tconst label_width = get_max_labelwidth(data.boxplots, svg)\n\n\tconst x_scale = scaleLinear()\n\t\t.range([0, box_width])\n\t\t.domain([data.minexpvalue, data.maxexpvalue])\n\n\tconst y_scale = scaleLinear()\n\t\t.range([box_height, 0])\n\t\t.domain([0, 1])\n\n\tconst svg_height = data.boxplots.length * (box_height + barspace) + axis_height\n\tconst svg_width = box_width + label_width + 20\n\n\tsvg\n\t\t.transition()\n\t\t.attr('width', svg_width)\n\t\t.attr('height', svg_height)\n\n\tif (data.boxplots) {\n\t\tdata.boxplots.forEach((boxplot, i) => {\n\t\t\tconst g = svg\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', 'translate(' + label_width + ',' + (i * (box_height + barspace) + axis_height) + ')')\n\n\t\t\tconst xlabel = g\n\t\t\t\t.append('text')\n\t\t\t\t.text(boxplot.category + ' (' + boxplot.numberofcells + ')')\n\t\t\t\t.attr('transform', 'translate(-4,' + box_height / 2 + ')')\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('font-size', 15)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\n\t\t\tif (boxplot.density) {\n\t\t\t\tconst density_max = Math.max(...boxplot.density)\n\n\t\t\t\tconst line = d3\n\t\t\t\t\t.line()\n\t\t\t\t\t.x(function(d, j) {\n\t\t\t\t\t\treturn x_scale((j * data.maxexpvalue) / boxplot.density.length)\n\t\t\t\t\t}) // set the x values for the line generator\n\t\t\t\t\t.y(function(d) {\n\t\t\t\t\t\treturn y_scale(d / density_max) / 2\n\t\t\t\t\t}) // set the y values for the line generator\n\t\t\t\t\t.curve(d3.curveMonotoneX) // apply smoothing to the line\n\n\t\t\t\tconst area = d3\n\t\t\t\t\t.area()\n\t\t\t\t\t.x(function(d, j) {\n\t\t\t\t\t\treturn x_scale((j * data.maxexpvalue) / boxplot.density.length)\n\t\t\t\t\t})\n\t\t\t\t\t.y0(function(d) {\n\t\t\t\t\t\tconst temp = y_scale(d / density_max) / 2\n\t\t\t\t\t\treturn box_height - temp\n\t\t\t\t\t})\n\t\t\t\t\t.y1(function(d) {\n\t\t\t\t\t\treturn y_scale(d / density_max) / 2\n\t\t\t\t\t})\n\t\t\t\t\t.curve(d3.curveMonotoneX)\n\n\t\t\t\tg.append('path')\n\t\t\t\t\t.datum(boxplot.density)\n\t\t\t\t\t.attr('class', 'area')\n\t\t\t\t\t.attr('d', area)\n\t\t\t\t\t// .style('fill','lightsteelblue')\n\t\t\t\t\t.style('fill', boxplot.color)\n\t\t\t\t\t.style('stroke', 'black')\n\t\t\t\t\t.style('stroke-width', 0.5)\n\t\t\t}\n\t\t})\n\n\t\tconst legendAxis = axisTop()\n\t\t\t.scale(x_scale)\n\t\t\t.ticks(5)\n\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('class', 'legend axis')\n\t\t\t.attr('transform', 'translate(' + label_width + ',' + (axis_height - 10) + ')')\n\t\t\t.call(legendAxis)\n\t}\n}\n\nfunction make_box_plot(data, svg) {\n\tsvg.selectAll('*').remove()\n\n\tlet box_height = 36,\n\t\tbox_width = 200,\n\t\tbarspace = 16,\n\t\taxis_height = 30\n\n\tconst label_width = get_max_labelwidth(data.boxplots, svg)\n\n\tconst x_scale = scaleLinear()\n\t\t.range([0, box_width])\n\t\t.domain([data.minexpvalue, data.maxexpvalue])\n\n\tconst y_scale = scaleLinear()\n\t\t.range([box_height, 0])\n\t\t.domain([0, 1])\n\n\tconst svg_height = data.boxplots.length * (box_height + barspace) + axis_height\n\tconst svg_width = box_width + label_width + 20\n\n\tsvg\n\t\t.transition()\n\t\t.attr('width', svg_width)\n\t\t.attr('height', svg_height)\n\n\tif (data.boxplots) {\n\t\tdata.boxplots.forEach((boxplot, i) => {\n\t\t\tconst g = svg\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', 'translate(' + label_width + ',' + (i * (box_height + barspace) + axis_height) + ')')\n\n\t\t\tconst xlabel = g\n\t\t\t\t.append('text')\n\t\t\t\t.text(boxplot.category + ' (' + boxplot.numberofcells + ')')\n\t\t\t\t.attr('transform', 'translate(-4,' + box_height / 2 + ')')\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('font-size', 15)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\n\t\t\tif (boxplot.p75) {\n\t\t\t\tg.append('line')\n\t\t\t\t\t.attr('x1', x_scale(boxplot.w1))\n\t\t\t\t\t.attr('y1', box_height / 2)\n\t\t\t\t\t.attr('x2', x_scale(boxplot.w2))\n\t\t\t\t\t.attr('y2', box_height / 2)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('stroke', 'black')\n\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', x_scale(boxplot.p25))\n\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t.attr('width', x_scale(boxplot.p75 - boxplot.p25))\n\t\t\t\t\t.attr('height', box_height)\n\t\t\t\t\t// .attr('fill','#901739')\n\t\t\t\t\t.attr('fill', boxplot.color)\n\n\t\t\t\tg.append('line')\n\t\t\t\t\t.attr('x1', x_scale(boxplot.w1))\n\t\t\t\t\t.attr('y1', 0)\n\t\t\t\t\t.attr('x2', x_scale(boxplot.w1))\n\t\t\t\t\t.attr('y2', box_height)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('stroke', 'black')\n\n\t\t\t\tg.append('line')\n\t\t\t\t\t.attr('x1', x_scale(boxplot.p50))\n\t\t\t\t\t.attr('y1', 0)\n\t\t\t\t\t.attr('x2', x_scale(boxplot.p50))\n\t\t\t\t\t.attr('y2', box_height)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('stroke', 'white')\n\n\t\t\t\tg.append('line')\n\t\t\t\t\t.attr('x1', x_scale(boxplot.w2))\n\t\t\t\t\t.attr('y1', 0)\n\t\t\t\t\t.attr('x2', x_scale(boxplot.w2))\n\t\t\t\t\t.attr('y2', box_height)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('stroke', 'black')\n\n\t\t\t\tif (boxplot.out) {\n\t\t\t\t\tfor (const outlier of boxplot.out) {\n\t\t\t\t\t\tg.append('circle')\n\t\t\t\t\t\t\t.attr('cx', x_scale(outlier.value))\n\t\t\t\t\t\t\t.attr('cy', box_height / 2)\n\t\t\t\t\t\t\t.attr('r', 2)\n\t\t\t\t\t\t\t.attr('fill', '#901739')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst legendAxis = axisTop()\n\t\t\t.scale(x_scale)\n\t\t\t.ticks(5)\n\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('class', 'legend axis')\n\t\t\t.attr('transform', 'translate(' + label_width + ',' + (axis_height - 10) + ')')\n\t\t\t.call(legendAxis)\n\t}\n}\n\nfunction make_heatmap(data, obj, colidx) {\n\tconst pane = client.newpane({ x: 600, y: 400 })\n\tconst cat = obj.cells.categories.find(x => x.columnidx == colidx)\n\tpane.header.text('Heatmap for Gene Expression by ' + cat.name)\n\tconst svg = pane.pane.append('svg').style('margin', '10px')\n\n\t// labels of x and y axis\n\tlet gene_list = []\n\tfor (const gene of data.gene_heatmap) gene_list.push(gene.genename)\n\n\t//find max value for heatmap\n\tlet means = []\n\tdata.gene_heatmap.forEach((gene, i) => {\n\t\tdata.gene_heatmap[i].heatmap.forEach(category => {\n\t\t\tmeans.push(category.mean)\n\t\t})\n\t})\n\tconst max_mean = Math.max(...means)\n\n\tlet categories = []\n\tfor (const category of data.gene_heatmap[0].heatmap)\n\t\tcategories.push(category.category + ' (' + category.numberofcells + ')')\n\n\tlet box_height = 20,\n\t\tbox_width = 80,\n\t\tbarspace = 2,\n\t\tgene_lable_height = 30,\n\t\tlegend_width = 60\n\n\tconst label_width = get_max_labelwidth(data.gene_heatmap[0].heatmap, svg)\n\n\tconst svg_height = (box_height + barspace) * categories.length + gene_lable_height\n\tconst svg_width = (box_width + barspace) * gene_list.length + label_width + legend_width + 20\n\n\tsvg\n\t\t.transition()\n\t\t.attr('width', svg_width)\n\t\t.attr('height', svg_height)\n\n\t// Build X scales and axis:\n\tconst x_scale = d3\n\t\t.scaleBand()\n\t\t.range([0, (box_width + barspace) * gene_list.length])\n\t\t.domain(gene_list)\n\t\t.padding(0.05)\n\n\tsvg\n\t\t.append('g')\n\t\t.style('font-size', 15)\n\t\t.attr('transform', 'translate(' + label_width + ',0)')\n\t\t.call(d3.axisBottom(x_scale).tickSize(0))\n\t\t.select('.domain')\n\t\t.remove()\n\n\t// Build Y scales and axis:\n\tconst y_scale = d3\n\t\t.scaleBand()\n\t\t.range([(box_height + barspace) * categories.length, 0])\n\t\t.domain(categories)\n\t\t.padding(0.05)\n\n\tsvg\n\t\t.append('g')\n\t\t.style('font-size', 15)\n\t\t.attr('transform', 'translate(' + label_width + ',' + gene_lable_height + ')')\n\t\t.call(d3.axisLeft(y_scale).tickSize(0))\n\t\t.select('.domain')\n\t\t.remove()\n\n\t// Build color scale\n\tvar myColor = d3\n\t\t.scaleSequential()\n\t\t.interpolator(interpolatePlasma)\n\t\t.domain([0, max_mean])\n\n\tconst div = pane.pane\n\t\t.append('div')\n\t\t.style('position', 'absolute')\n\t\t.attr('class', 'tooltip')\n\t\t.style('background-color', 'white')\n\t\t.style('border', 'solid')\n\t\t.style('border-width', '2px')\n\t\t.style('border-radius', '5px')\n\t\t.style('padding', '5px')\n\t\t.style('opacity', 0)\n\n\tdata.gene_heatmap.forEach((gene, i) => {\n\t\tdata.gene_heatmap[i].heatmap.forEach((category, j) => {\n\t\t\tconst g = svg.append('g').attr('transform', 'translate(' + label_width + ',' + gene_lable_height + ')')\n\n\t\t\tg.append('rect')\n\t\t\t\t.attr('x', x_scale(gene.genename))\n\t\t\t\t.attr('y', y_scale(category.category + ' (' + category.numberofcells + ')'))\n\t\t\t\t.attr('width', x_scale.bandwidth())\n\t\t\t\t.attr('height', y_scale.bandwidth())\n\t\t\t\t.style('fill', myColor(category.mean))\n\t\t\t\t.style('stroke-width', 4)\n\t\t\t\t.style('stroke', 'none')\n\t\t\t\t.style('opacity', 0.8)\n\t\t\t\t//tooltip\n\t\t\t\t.on('mouseover', function(event) {\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t.style('opacity', 0.9)\n\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.html('Mean Expression: ' + category.mean)\n\t\t\t\t\t\t.style('left', d3.pointer(event, this)[0] + 70 + 'px')\n\t\t\t\t\t\t.style('top', d3.pointer(event, this)[1] + 20 + 'px')\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function() {\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(500)\n\t\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t})\n\t\t})\n\t})\n\tconst legend_data = myColor.ticks(10).reverse()\n\tlegend_data.unshift(max_mean.toFixed(2))\n\n\t// Add a legend for the color values\n\tconst legend = svg\n\t\t.selectAll('.legend')\n\t\t.data(legend_data)\n\t\t.enter()\n\t\t.append('g')\n\t\t.attr('class', 'legend')\n\t\t.attr('transform', function(d, i) {\n\t\t\treturn 'translate(' + (svg_width - legend_width) + ',' + (30 + i * 20) + ')'\n\t\t})\n\n\tlegend\n\t\t.append('rect')\n\t\t.attr('width', 20)\n\t\t.attr('height', 20)\n\t\t.style('fill', myColor)\n\t\t.style('opacity', 0.8)\n\n\tlegend\n\t\t.append('text')\n\t\t.attr('x', 26)\n\t\t.attr('y', 10)\n\t\t.attr('dy', '.35em')\n\t\t.text(String)\n}\n\nfunction get_max_labelwidth(items, svg) {\n\tlet textwidth = 0\n\n\tfor (const i of items) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.text(i.category + ' (' + i.numberofcells + ')')\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('font-size', 15)\n\t\t\t.each(function() {\n\t\t\t\ttextwidth = Math.max(textwidth, this.getBBox().width)\n\t\t\t})\n\t\t\t.remove()\n\t}\n\treturn textwidth + 4\n}\n\nfunction add_scriptTag(path) {\n\t// path like /static/js/three.js, must begin with /\n\treturn new Promise((resolve, reject) => {\n\t\tconst script = document.createElement('script')\n\t\tscript.setAttribute('src', sessionStorage.getItem('hostURL') + path)\n\t\tdocument.head.appendChild(script)\n\t\tscript.onload = resolve\n\t})\n}\n\nasync function make_legend(arg, obj) {\n\tif (!arg.legendimg) return\n\n\tconst img_div = obj.holder.append('div').style('margin-top', '5px')\n\tobj.legendimg = arg.legendimg\n\tobj.legend = {\n\t\tholder: img_div,\n\t\tlegendcolor: '#7D6836'\n\t}\n\tlet shown = !arg.foldlegend\n\n\timg_div\n\t\t.append('div')\n\t\t.text('LEGEND')\n\t\t.attr('class', 'sja_clb')\n\t\t.style('display', 'inline-block')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', obj.legend.legendcolor)\n\t\t.style('font-family', client.font)\n\t\t.on('click', () => {\n\t\t\tif (shown) {\n\t\t\t\tshown = false\n\t\t\t\tclient.disappear(div2)\n\t\t\t} else {\n\t\t\t\tshown = true\n\t\t\t\tclient.appear(div2)\n\t\t\t}\n\t\t})\n\n\tconst div2 = obj.holder\n\t\t.append('div')\n\t\t.style('border-top', 'solid 1px ' + obj.legend.legendcolor)\n\t\t.style('background-color', '#FCFBF7')\n\n\tobj.legend.holder = div2\n\t\t.append('table')\n\t\t.style('border-spacing', '15px')\n\t\t.style('border-collapse', 'separate')\n\n\tconst [tr, td] = legend_newrow(obj, obj.legendimg.name || '')\n\tconst data = await client.dofetch2('img?file=' + obj.legendimg.file)\n\tif (data.error) {\n\t\ttd.text(data.error)\n\t\treturn\n\t}\n\tlet fold = true\n\tconst img = td\n\t\t.append('img')\n\t\t.attr('class', 'sja_clbb')\n\t\t.attr('src', data.src)\n\t\t.style('height', '80px')\n\timg.on('click', () => {\n\t\tif (fold) {\n\t\t\tfold = false\n\t\t\timg.transition().style('height', obj.legendimg.height ? obj.legendimg.height + 'px' : 'auto')\n\t\t} else {\n\t\t\tfold = true\n\t\t\timg.transition().style('height', '80px')\n\t\t}\n\t})\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["data", "gene"]
|
|
7
|
-
}
|
package/dist/snp-A2YNGQSD.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
addGeneSearchbox
|
|
3
|
-
} from "./chunk-A3GQXDSC.js";
|
|
4
|
-
import "./chunk-ALPXXDQD.js";
|
|
5
|
-
import "./chunk-ROQ5WSLC.js";
|
|
6
|
-
import "./chunk-452UVSLH.js";
|
|
7
|
-
import {
|
|
8
|
-
Menu
|
|
9
|
-
} from "./chunk-7YY2KB6H.js";
|
|
10
|
-
import "./chunk-2BM5YZ6X.js";
|
|
11
|
-
import "./chunk-WFANY24Z.js";
|
|
12
|
-
import "./chunk-BT2NCQ7T.js";
|
|
13
|
-
import "./chunk-XNPZE2WZ.js";
|
|
14
|
-
import "./chunk-WMK7VUYQ.js";
|
|
15
|
-
import "./chunk-ZRUQHHLI.js";
|
|
16
|
-
import "./chunk-JASS6SUY.js";
|
|
17
|
-
import "./chunk-NUYFQ7WK.js";
|
|
18
|
-
import "./chunk-P7BTNMOS.js";
|
|
19
|
-
import "./chunk-5IJCZCP7.js";
|
|
20
|
-
import "./chunk-CKF26VJ7.js";
|
|
21
|
-
import "./chunk-Y6SKTI7D.js";
|
|
22
|
-
import "./chunk-F3OQE4AZ.js";
|
|
23
|
-
|
|
24
|
-
// termdb/handlers/snp.ts
|
|
25
|
-
var SearchHandler = class {
|
|
26
|
-
init(opts) {
|
|
27
|
-
this.callback = opts.callback;
|
|
28
|
-
const geneSearch = addGeneSearchbox({
|
|
29
|
-
tip: new Menu({ padding: "0px" }),
|
|
30
|
-
genome: opts.genomeObj,
|
|
31
|
-
row: opts.holder,
|
|
32
|
-
searchOnly: "snp",
|
|
33
|
-
allowVariant: true,
|
|
34
|
-
callback: () => this.selectSnp(geneSearch)
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
async selectSnp(geneSearch) {
|
|
38
|
-
const { chr, ref, alt, fromWhat } = geneSearch;
|
|
39
|
-
if (!chr || !ref || !alt || !fromWhat)
|
|
40
|
-
throw "missing chr, ref, alt, or fromWhat of snp";
|
|
41
|
-
let start, stop;
|
|
42
|
-
if (!geneSearch.start && !geneSearch.stop) {
|
|
43
|
-
if (geneSearch.pos) {
|
|
44
|
-
start = geneSearch.pos - 1;
|
|
45
|
-
stop = geneSearch.pos;
|
|
46
|
-
} else {
|
|
47
|
-
throw "missing coordinate of snp";
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
start = geneSearch.start;
|
|
51
|
-
stop = geneSearch.stop;
|
|
52
|
-
}
|
|
53
|
-
const term = {
|
|
54
|
-
id: fromWhat,
|
|
55
|
-
chr,
|
|
56
|
-
start,
|
|
57
|
-
stop,
|
|
58
|
-
name: fromWhat,
|
|
59
|
-
ref,
|
|
60
|
-
alt: typeof alt == "string" ? [alt] : alt,
|
|
61
|
-
// is string if input to geneSearch was in variant or hgvs format // TODO: update genesearch.ts to parse alternative alleles from any input format into arrays
|
|
62
|
-
type: "snp"
|
|
63
|
-
};
|
|
64
|
-
this.callback(term);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
export {
|
|
68
|
-
SearchHandler
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=snp-A2YNGQSD.js.map
|
package/dist/snp-A2YNGQSD.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../termdb/handlers/snp.ts"],
|
|
4
|
-
"sourcesContent": ["import { Menu } from '#dom/menu'\nimport { addGeneSearchbox } from '../../dom/genesearch.ts'\n\nexport class SearchHandler {\n\tcallback: any\n\n\tinit(opts) {\n\t\tthis.callback = opts.callback\n\t\tconst geneSearch = addGeneSearchbox({\n\t\t\ttip: new Menu({ padding: '0px' }),\n\t\t\tgenome: opts.genomeObj,\n\t\t\trow: opts.holder,\n\t\t\tsearchOnly: 'snp',\n\t\t\tallowVariant: true,\n\t\t\tcallback: () => this.selectSnp(geneSearch)\n\t\t})\n\t}\n\n\tasync selectSnp(geneSearch) {\n\t\tconst { chr, ref, alt, fromWhat } = geneSearch\n\t\tif (!chr || !ref || !alt || !fromWhat) throw 'missing chr, ref, alt, or fromWhat of snp'\n\t\tlet start: number, stop: number\n\t\tif (!geneSearch.start && !geneSearch.stop) {\n\t\t\tif (geneSearch.pos) {\n\t\t\t\t// coordinate is .pos if input to geneSearch was\n\t\t\t\t// in variant/hgvs format\n\t\t\t\t// TODO: harmonize geneSearch output (also see TODO below)\n\t\t\t\tstart = geneSearch.pos - 1\n\t\t\t\tstop = geneSearch.pos\n\t\t\t} else {\n\t\t\t\tthrow 'missing coordinate of snp'\n\t\t\t}\n\t\t} else {\n\t\t\tstart = geneSearch.start\n\t\t\tstop = geneSearch.stop\n\t\t}\n\t\tconst term = {\n\t\t\tid: fromWhat,\n\t\t\tchr,\n\t\t\tstart,\n\t\t\tstop,\n\t\t\tname: fromWhat,\n\t\t\tref,\n\t\t\talt: typeof alt == 'string' ? [alt] : alt, // is string if input to geneSearch was in variant or hgvs format // TODO: update genesearch.ts to parse alternative alleles from any input format into arrays\n\t\t\ttype: 'snp'\n\t\t}\n\t\tthis.callback(term)\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,gBAAN,MAAoB;AAAA,EAG1B,KAAK,MAAM;AACV,SAAK,WAAW,KAAK;AACrB,UAAM,aAAa,iBAAiB;AAAA,MACnC,KAAK,IAAI,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,MAChC,QAAQ,KAAK;AAAA,MACb,KAAK,KAAK;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU,MAAM,KAAK,UAAU,UAAU;AAAA,IAC1C,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,YAAY;AAC3B,UAAM,EAAE,KAAK,KAAK,KAAK,SAAS,IAAI;AACpC,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAU,YAAM;AAC7C,QAAI,OAAe;AACnB,QAAI,CAAC,WAAW,SAAS,CAAC,WAAW,MAAM;AAC1C,UAAI,WAAW,KAAK;AAInB,gBAAQ,WAAW,MAAM;AACzB,eAAO,WAAW;AAAA,MACnB,OAAO;AACN,cAAM;AAAA,MACP;AAAA,IACD,OAAO;AACN,cAAQ,WAAW;AACnB,aAAO,WAAW;AAAA,IACnB;AACA,UAAM,OAAO;AAAA,MACZ,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,KAAK,OAAO,OAAO,WAAW,CAAC,GAAG,IAAI;AAAA;AAAA,MACtC,MAAM;AAAA,IACP;AACA,SAAK,SAAS,IAAI;AAAA,EACnB;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/snp-UQSHCWCJ.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getHandler
|
|
3
|
-
} from "./chunk-UIQRT242.js";
|
|
4
|
-
import "./chunk-2JPSZLBQ.js";
|
|
5
|
-
import {
|
|
6
|
-
set_hiddenvalues
|
|
7
|
-
} from "./chunk-EY7JFZ4D.js";
|
|
8
|
-
import "./chunk-CLHA5AEH.js";
|
|
9
|
-
import "./chunk-252GVCUB.js";
|
|
10
|
-
import "./chunk-7KFEDC2T.js";
|
|
11
|
-
import "./chunk-A3GQXDSC.js";
|
|
12
|
-
import "./chunk-6XR2LO7D.js";
|
|
13
|
-
import "./chunk-PWTXVCZ4.js";
|
|
14
|
-
import "./chunk-FCPSU6WB.js";
|
|
15
|
-
import "./chunk-O32YEJMI.js";
|
|
16
|
-
import "./chunk-FOSTUUJG.js";
|
|
17
|
-
import "./chunk-PGCZMKZL.js";
|
|
18
|
-
import "./chunk-EG3MKQQH.js";
|
|
19
|
-
import "./chunk-L7QWRU5Z.js";
|
|
20
|
-
import "./chunk-JVUJSWZ2.js";
|
|
21
|
-
import "./chunk-JV3G5Q3X.js";
|
|
22
|
-
import "./chunk-ALPXXDQD.js";
|
|
23
|
-
import "./chunk-CTQFEFIV.js";
|
|
24
|
-
import "./chunk-RKJGIOIF.js";
|
|
25
|
-
import "./chunk-P64DWRTC.js";
|
|
26
|
-
import "./chunk-ROQ5WSLC.js";
|
|
27
|
-
import "./chunk-452UVSLH.js";
|
|
28
|
-
import "./chunk-7YY2KB6H.js";
|
|
29
|
-
import "./chunk-2BM5YZ6X.js";
|
|
30
|
-
import "./chunk-WFANY24Z.js";
|
|
31
|
-
import {
|
|
32
|
-
copyMerge
|
|
33
|
-
} from "./chunk-BT2NCQ7T.js";
|
|
34
|
-
import "./chunk-XNPZE2WZ.js";
|
|
35
|
-
import "./chunk-WMK7VUYQ.js";
|
|
36
|
-
import "./chunk-ZRUQHHLI.js";
|
|
37
|
-
import "./chunk-JASS6SUY.js";
|
|
38
|
-
import "./chunk-NUYFQ7WK.js";
|
|
39
|
-
import "./chunk-P7BTNMOS.js";
|
|
40
|
-
import "./chunk-5IJCZCP7.js";
|
|
41
|
-
import "./chunk-CKF26VJ7.js";
|
|
42
|
-
import "./chunk-Y6SKTI7D.js";
|
|
43
|
-
import "./chunk-F3OQE4AZ.js";
|
|
44
|
-
|
|
45
|
-
// termsetting/handlers/snp.ts
|
|
46
|
-
async function getHandler2(self) {
|
|
47
|
-
return getHandler(self);
|
|
48
|
-
}
|
|
49
|
-
async function fillTW(tw, vocabApi, defaultQ = null) {
|
|
50
|
-
if (typeof tw.term !== "object")
|
|
51
|
-
throw "tw.term is not an object";
|
|
52
|
-
if (!tw.term.id || !tw.term.name)
|
|
53
|
-
throw "missing snp id/name";
|
|
54
|
-
if (!tw.term.chr || !Number.isInteger(tw.term.start) || !Number.isInteger(tw.term.stop))
|
|
55
|
-
throw "incomplete position information";
|
|
56
|
-
if (!tw.term.ref || !tw.term.alt)
|
|
57
|
-
"missing allele information";
|
|
58
|
-
if (!Object.keys(tw.q).includes("type"))
|
|
59
|
-
tw.q.type = "values";
|
|
60
|
-
if (!tw.term.groupsetting)
|
|
61
|
-
tw.term.groupsetting = { disabled: false };
|
|
62
|
-
if (tw.q.type == "predefined-groupset") {
|
|
63
|
-
if (!Number.isInteger(tw.q.predefined_groupset_idx))
|
|
64
|
-
throw "predefined_groupset_idx is not an integer";
|
|
65
|
-
}
|
|
66
|
-
if (tw.q.type == "custom-groupset") {
|
|
67
|
-
if (!tw.q.customset)
|
|
68
|
-
throw "invalid customset";
|
|
69
|
-
}
|
|
70
|
-
if (defaultQ) {
|
|
71
|
-
copyMerge(tw.q, defaultQ);
|
|
72
|
-
}
|
|
73
|
-
set_hiddenvalues(tw.q, tw.term);
|
|
74
|
-
}
|
|
75
|
-
export {
|
|
76
|
-
fillTW,
|
|
77
|
-
getHandler2 as getHandler
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=snp-UQSHCWCJ.js.map
|
package/dist/snp-UQSHCWCJ.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../termsetting/handlers/snp.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SnpTW, SnpQ, VocabApi } from '#types'\nimport { getHandler as getCategoricalHandler } from './categorical.ts'\nimport { copyMerge } from '#rx'\nimport { set_hiddenvalues } from '../termsetting.ts'\n\nexport async function getHandler(self) {\n\treturn getCategoricalHandler(self)\n}\n\nexport async function fillTW(tw: SnpTW, vocabApi: VocabApi, defaultQ: SnpQ | null = null) {\n\tif (typeof tw.term !== 'object') throw 'tw.term is not an object'\n\tif (!tw.term.id || !tw.term.name) throw 'missing snp id/name'\n\tif (!tw.term.chr || !Number.isInteger(tw.term.start) || !Number.isInteger(tw.term.stop))\n\t\tthrow 'incomplete position information'\n\tif (!tw.term.ref || !tw.term.alt) 'missing allele information'\n\n\tif (!Object.keys(tw.q).includes('type')) tw.q.type = 'values'\n\tif (!tw.term.groupsetting) tw.term.groupsetting = { disabled: false }\n\tif (tw.q.type == 'predefined-groupset') {\n\t\tif (!Number.isInteger(tw.q.predefined_groupset_idx)) throw 'predefined_groupset_idx is not an integer'\n\t}\n\tif (tw.q.type == 'custom-groupset') {\n\t\tif (!tw.q.customset) throw 'invalid customset'\n\t}\n\n\tif (defaultQ) {\n\t\t// merge defaultQ into tw.q\n\t\tcopyMerge(tw.q, defaultQ)\n\t}\n\n\tset_hiddenvalues(tw.q, tw.term)\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,eAAsBA,YAAW,MAAM;AACtC,SAAO,WAAsB,IAAI;AAClC;AAEA,eAAsB,OAAO,IAAW,UAAoB,WAAwB,MAAM;AACzF,MAAI,OAAO,GAAG,SAAS;AAAU,UAAM;AACvC,MAAI,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,KAAK;AAAM,UAAM;AACxC,MAAI,CAAC,GAAG,KAAK,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,KAAK,KAAK,CAAC,OAAO,UAAU,GAAG,KAAK,IAAI;AACrF,UAAM;AACP,MAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,KAAK;AAAK;AAElC,MAAI,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,SAAS,MAAM;AAAG,OAAG,EAAE,OAAO;AACrD,MAAI,CAAC,GAAG,KAAK;AAAc,OAAG,KAAK,eAAe,EAAE,UAAU,MAAM;AACpE,MAAI,GAAG,EAAE,QAAQ,uBAAuB;AACvC,QAAI,CAAC,OAAO,UAAU,GAAG,EAAE,uBAAuB;AAAG,YAAM;AAAA,EAC5D;AACA,MAAI,GAAG,EAAE,QAAQ,mBAAmB;AACnC,QAAI,CAAC,GAAG,EAAE;AAAW,YAAM;AAAA,EAC5B;AAEA,MAAI,UAAU;AAEb,cAAU,GAAG,GAAG,QAAQ;AAAA,EACzB;AAEA,mBAAiB,GAAG,GAAG,GAAG,IAAI;AAC/B;",
|
|
6
|
-
"names": ["getHandler"]
|
|
7
|
-
}
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
filterInit,
|
|
3
|
-
getNormalRoot
|
|
4
|
-
} from "./chunk-2HB765M6.js";
|
|
5
|
-
import {
|
|
6
|
-
makeSnpSelect,
|
|
7
|
-
mayRestrictAncestry
|
|
8
|
-
} from "./chunk-JS4PIGRN.js";
|
|
9
|
-
import "./chunk-ZQN7RJDL.js";
|
|
10
|
-
import "./chunk-L6PTW3VL.js";
|
|
11
|
-
import "./chunk-3EAPD7JJ.js";
|
|
12
|
-
import "./chunk-B2WJXDDI.js";
|
|
13
|
-
import "./chunk-EY7JFZ4D.js";
|
|
14
|
-
import "./chunk-CLHA5AEH.js";
|
|
15
|
-
import "./chunk-252GVCUB.js";
|
|
16
|
-
import "./chunk-7KFEDC2T.js";
|
|
17
|
-
import {
|
|
18
|
-
addGeneSearchbox
|
|
19
|
-
} from "./chunk-A3GQXDSC.js";
|
|
20
|
-
import "./chunk-6XR2LO7D.js";
|
|
21
|
-
import "./chunk-FZXMYGIE.js";
|
|
22
|
-
import "./chunk-PWTXVCZ4.js";
|
|
23
|
-
import "./chunk-FCPSU6WB.js";
|
|
24
|
-
import "./chunk-O32YEJMI.js";
|
|
25
|
-
import "./chunk-FOSTUUJG.js";
|
|
26
|
-
import "./chunk-PGCZMKZL.js";
|
|
27
|
-
import "./chunk-EG3MKQQH.js";
|
|
28
|
-
import "./chunk-L7QWRU5Z.js";
|
|
29
|
-
import "./chunk-JVUJSWZ2.js";
|
|
30
|
-
import "./chunk-JV3G5Q3X.js";
|
|
31
|
-
import "./chunk-ALPXXDQD.js";
|
|
32
|
-
import "./chunk-CTQFEFIV.js";
|
|
33
|
-
import "./chunk-RKJGIOIF.js";
|
|
34
|
-
import "./chunk-P64DWRTC.js";
|
|
35
|
-
import "./chunk-ROQ5WSLC.js";
|
|
36
|
-
import "./chunk-452UVSLH.js";
|
|
37
|
-
import "./chunk-7YY2KB6H.js";
|
|
38
|
-
import "./chunk-2BM5YZ6X.js";
|
|
39
|
-
import "./chunk-WFANY24Z.js";
|
|
40
|
-
import "./chunk-BT2NCQ7T.js";
|
|
41
|
-
import "./chunk-XNPZE2WZ.js";
|
|
42
|
-
import "./chunk-WMK7VUYQ.js";
|
|
43
|
-
import "./chunk-ZRUQHHLI.js";
|
|
44
|
-
import "./chunk-JASS6SUY.js";
|
|
45
|
-
import "./chunk-NUYFQ7WK.js";
|
|
46
|
-
import "./chunk-P7BTNMOS.js";
|
|
47
|
-
import "./chunk-5IJCZCP7.js";
|
|
48
|
-
import "./chunk-CKF26VJ7.js";
|
|
49
|
-
import "./chunk-Y6SKTI7D.js";
|
|
50
|
-
import "./chunk-F3OQE4AZ.js";
|
|
51
|
-
|
|
52
|
-
// termsetting/handlers/snplocus.ts
|
|
53
|
-
var term_name = "Variants in a locus";
|
|
54
|
-
function getHandler(self) {
|
|
55
|
-
return {
|
|
56
|
-
getPillName() {
|
|
57
|
-
return self.term.name;
|
|
58
|
-
},
|
|
59
|
-
getPillStatus() {
|
|
60
|
-
if (!self.term || !self.q)
|
|
61
|
-
return;
|
|
62
|
-
if (!self.term.snps)
|
|
63
|
-
throw `Missing term.snps [snplocs.ts getPillStatus()]`;
|
|
64
|
-
let text = `${self.q.chr}:${self.q.start}-${self.q.stop}, ${self.term.snps.length} variant${self.term.snps.length > 1 ? "s" : ""}`;
|
|
65
|
-
if (self.term.reachedVariantLimit) {
|
|
66
|
-
text += '<span style="margin-left: 6px; background:#aaa; font-size:1em;font-style: normal; border-radius: 7px;color:white;padding:0px 5px;">⚠<span>';
|
|
67
|
-
}
|
|
68
|
-
return { text };
|
|
69
|
-
},
|
|
70
|
-
validateQ(data) {
|
|
71
|
-
validateQ(data);
|
|
72
|
-
},
|
|
73
|
-
async showEditMenu(div) {
|
|
74
|
-
await makeEditMenu(self, div);
|
|
75
|
-
}
|
|
76
|
-
/* no need for postMain()
|
|
77
|
-
cache file contains all samples,
|
|
78
|
-
variants in a cache file is only determined by locus range and info fields
|
|
79
|
-
thus no need to regenerate cache file upon subcohort or filter change via pill.main()
|
|
80
|
-
async postMain() {
|
|
81
|
-
if (self.q && self.q.chr) {
|
|
82
|
-
await validateInput(self)
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
*/
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
async function makeEditMenu(self, div0) {
|
|
89
|
-
const div = div0.append("div").style("margin", "15px");
|
|
90
|
-
const select_ancestry = await mayRestrictAncestry(self, div);
|
|
91
|
-
const coordResult = addGeneSearchbox({
|
|
92
|
-
genome: self.opts.genomeObj,
|
|
93
|
-
tip: self.dom.tip2,
|
|
94
|
-
row: div.append("div").style("margin-top", "20px"),
|
|
95
|
-
defaultCoord: self.q && self.q.chr ? { chr: self.q.chr, start: self.q.start, stop: self.q.stop } : void 0
|
|
96
|
-
});
|
|
97
|
-
div.select(".sja_genesearchinput").style("margin", "0px");
|
|
98
|
-
div.append("span").style("margin", "5px 0px").style("display", "inline-block").style("opacity", 0.4).style("font-size", ".7em").html(
|
|
99
|
-
'"Gene": Gene name (e.g. AKT1)</br>"Position": chr:start-stop (e.g. chr1:5000-6000)</br>"dbSNP": dbSNP accession (e.g. rs1042522)'
|
|
100
|
-
);
|
|
101
|
-
await mayDisplayVariantFilter(self, self.q?.variant_filter, div);
|
|
102
|
-
const [input_AFcutoff, select_alleleType, select_geneticModel] = makeSnpSelect(
|
|
103
|
-
div.append("div").attr("class", "sjpp-snp-select").style("margin-top", "15px"),
|
|
104
|
-
self,
|
|
105
|
-
"snplocus"
|
|
106
|
-
);
|
|
107
|
-
if (self.usecase.target == "dataDownload")
|
|
108
|
-
div.select(".sjpp-snp-select").style("display", "none");
|
|
109
|
-
const btnRow = div.append("div").style("margin-top", "15px");
|
|
110
|
-
btnRow.append("button").style("margin-top", "15px").text("Submit").on("click", async (event) => {
|
|
111
|
-
if (!coordResult.chr)
|
|
112
|
-
return window.alert("Invalid coordinate");
|
|
113
|
-
event.target.disabled = true;
|
|
114
|
-
event.target.innerHTML = "Validating input...";
|
|
115
|
-
if (self.term) {
|
|
116
|
-
} else {
|
|
117
|
-
self.term = { id: makeId() };
|
|
118
|
-
}
|
|
119
|
-
if (!self.q)
|
|
120
|
-
self.q = {};
|
|
121
|
-
self.term.type = "snplocus";
|
|
122
|
-
self.q.chr = coordResult.chr;
|
|
123
|
-
self.q.start = coordResult.start;
|
|
124
|
-
self.q.stop = coordResult.stop;
|
|
125
|
-
self.term.name = term_name;
|
|
126
|
-
delete self.term.snps;
|
|
127
|
-
self.q.variant_filter = getNormalRoot(self.variantFilter.active);
|
|
128
|
-
await validateInput(self);
|
|
129
|
-
{
|
|
130
|
-
const v = Number(input_AFcutoff.property("value"));
|
|
131
|
-
self.q.AFcutoff = v < 0 || v >= 100 ? 5 : v;
|
|
132
|
-
}
|
|
133
|
-
self.q.alleleType = select_alleleType.property("selectedIndex");
|
|
134
|
-
self.q.geneticModel = select_geneticModel.property("selectedIndex");
|
|
135
|
-
if (select_ancestry) {
|
|
136
|
-
self.q.restrictAncestry = select_ancestry.node().options[select_ancestry.property("selectedIndex")].__ancestry_obj;
|
|
137
|
-
}
|
|
138
|
-
self.runCallback();
|
|
139
|
-
});
|
|
140
|
-
btnRow.append("span").style("padding-left", "15px").style("opacity", 0.8).style("font-size", ".8em").text(
|
|
141
|
-
self.usecase.target == "dataDownload" ? "" : "Variants will be treated individually in separate regression models"
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
async function validateInput(self) {
|
|
145
|
-
const data = await self.vocabApi.validateSnps(self.q);
|
|
146
|
-
if (data.error)
|
|
147
|
-
throw data.error;
|
|
148
|
-
self.q.cacheid = data.cacheid;
|
|
149
|
-
self.term.snps = data.snps;
|
|
150
|
-
self.term.reachedVariantLimit = data.reachedVariantLimit;
|
|
151
|
-
}
|
|
152
|
-
function validateQ(data) {
|
|
153
|
-
const q = data.q;
|
|
154
|
-
if (!Number.isFinite(q.AFcutoff))
|
|
155
|
-
throw "AFcutoff is not number";
|
|
156
|
-
if (q.AFcutoff < 0 || q.AFcutoff > 100)
|
|
157
|
-
throw "AFcutoff is not within 0 to 100";
|
|
158
|
-
if (![0, 1].includes(q.alleleType))
|
|
159
|
-
throw "alleleType value is not one of 0/1";
|
|
160
|
-
if (![0, 1, 2, 3].includes(q.geneticModel))
|
|
161
|
-
throw "geneticModel value is not one of 0/1";
|
|
162
|
-
if (!q.chr)
|
|
163
|
-
throw "chr missing";
|
|
164
|
-
if (!Number.isInteger(q.start))
|
|
165
|
-
throw "start coordinate is not integer";
|
|
166
|
-
if (!Number.isInteger(q.stop))
|
|
167
|
-
throw "stop coordinate is not integer";
|
|
168
|
-
if (q.start < 0)
|
|
169
|
-
throw "start < 0";
|
|
170
|
-
if (q.stop <= q.start)
|
|
171
|
-
throw "stop <= start";
|
|
172
|
-
}
|
|
173
|
-
async function fillTW(tw, vocabApi) {
|
|
174
|
-
try {
|
|
175
|
-
validateQ(tw);
|
|
176
|
-
} catch (e) {
|
|
177
|
-
throw "snplocus validateQ(): " + e;
|
|
178
|
-
}
|
|
179
|
-
if (!tw.term.name)
|
|
180
|
-
tw.term.name = term_name;
|
|
181
|
-
if (tw.id == void 0 || tw.id == "") {
|
|
182
|
-
if (tw.term.id == void 0 || tw.term.id == "") {
|
|
183
|
-
tw.term.id = makeId();
|
|
184
|
-
}
|
|
185
|
-
tw.id = tw.term.id;
|
|
186
|
-
} else {
|
|
187
|
-
if (tw.term.id == void 0 || tw.term.id == "") {
|
|
188
|
-
tw.term.id = tw.id;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
await validateInput({
|
|
192
|
-
term: tw.term,
|
|
193
|
-
q: tw.q,
|
|
194
|
-
vocabApi
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
function makeId() {
|
|
198
|
-
return "snplocus" + Math.random();
|
|
199
|
-
}
|
|
200
|
-
async function mayDisplayVariantFilter(self, filterInState, holder, callback2) {
|
|
201
|
-
if (!self.variantFilter) {
|
|
202
|
-
self.variantFilter = await self.vocabApi.get_variantFilter();
|
|
203
|
-
}
|
|
204
|
-
if (!self.variantFilter.terms) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
if (!self.variantFilter.opts)
|
|
208
|
-
throw "variantFilter.opts{} missing";
|
|
209
|
-
if (!self.variantFilter.filter)
|
|
210
|
-
throw ".filter missing from variantFilter{}";
|
|
211
|
-
if (!Array.isArray(self.variantFilter.terms) || self.variantFilter.terms.length == 0)
|
|
212
|
-
throw "variantFilter.terms[] is not non-empty array";
|
|
213
|
-
if (filterInState) {
|
|
214
|
-
self.variantFilter.active = JSON.parse(JSON.stringify(filterInState));
|
|
215
|
-
} else {
|
|
216
|
-
self.variantFilter.active = JSON.parse(JSON.stringify(self.variantFilter.filter));
|
|
217
|
-
}
|
|
218
|
-
const div = holder.append("div").style("margin-top", "15px");
|
|
219
|
-
div.append("span").text("VARIANT FILTERS").style("font-size", ".8em").style("opacity", 0.5);
|
|
220
|
-
const filterBody = div.append("div");
|
|
221
|
-
filterInit({
|
|
222
|
-
joinWith: self.variantFilter.opts.joinWith,
|
|
223
|
-
emptyLabel: "+Variant Filter",
|
|
224
|
-
holder: filterBody,
|
|
225
|
-
vocab: { terms: self.variantFilter.terms },
|
|
226
|
-
callback: async (filter) => {
|
|
227
|
-
self.variantFilter.active = filter;
|
|
228
|
-
if (callback2)
|
|
229
|
-
await callback2();
|
|
230
|
-
}
|
|
231
|
-
}).main(self.variantFilter.active);
|
|
232
|
-
}
|
|
233
|
-
export {
|
|
234
|
-
fillTW,
|
|
235
|
-
getHandler
|
|
236
|
-
};
|
|
237
|
-
//# sourceMappingURL=snplocus-L6IAD5O2.js.map
|