cellbrowser 1.2.8__tar.gz → 1.2.10__tar.gz
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.
- cellbrowser-1.2.10/PKG-INFO +37 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/setup.cfg +3 -2
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/R/cellbrowser.R +21 -19
- cellbrowser-1.2.10/src/cbPyLib/cellbrowser/__init__.py +4 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/_version.py +5 -5
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/css/cellBrowser.css +20 -4
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/js/cbData.js +75 -38
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/js/cellBrowser.js +850 -270
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/js/maxPlot.js +257 -89
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cellbrowser.py +228 -98
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/convert.py +5 -3
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/cellbrowser.conf +7 -1
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/desc.conf +2 -1
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/scanpy.conf +6 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/seurat.py +1 -1
- cellbrowser-1.2.10/src/cbPyLib/cellbrowser.egg-info/PKG-INFO +37 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser.egg-info/entry_points.txt +0 -1
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/versioneer.py +795 -340
- cellbrowser-1.2.8/PKG-INFO +0 -27
- cellbrowser-1.2.8/src/cbPyLib/cellbrowser/__init__.py +0 -5
- cellbrowser-1.2.8/src/cbPyLib/cellbrowser.egg-info/PKG-INFO +0 -27
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/LICENSE +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/MANIFEST.in +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/README.rst +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/setup.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/RangeHTTPServer/__init__.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/RangeHTTPServer/__main__.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.eot +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.ttf +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff2 +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/Chart.bundle.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/FastBitSet.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/FileSaver.1.1.20151003.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/OverlayScrollbars.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-dropmenu.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.3.3.7.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/chartjs-chart-box-and-violin-plot.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite@2x.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.1.8.2.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.jquery.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/drawImage-clipper.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/font-awesome.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/googleMaterialIcons.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/hamster.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_444444_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_555555_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777620_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777777_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_cc0000_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_ffffff_256x240.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/intro.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/introjs.2.4.0.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui-1.12.1.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.3.1.1.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.event.drag-2.3.0.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.overlayScrollbars.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.sparkline.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.widgets.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.1.0.3.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.ui.position.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/jsurl2.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/lz-string.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/materialIcons.woff +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/minified.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/mousetrap.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/normalizeWheel.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/pako_inflate.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/palette.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/papaparse.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/reorder.v1.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/scaleColorPerceptual.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/science.v1.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.4.0.4.min.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.bootstrap3.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangedecorator.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangeselector.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellselectionmodel.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.core.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.editors.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.examples.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.formatters.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum-1.8.0.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/split.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.number.min.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/.npmignore +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/LICENSE +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/Makefile +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/README.md +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/browser.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/build.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/d3-random-matrix.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/example.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/gradients.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/package.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/inferno.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/magma.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/plasma.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/viridis.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/inferno.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/magma.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/package.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/plasma.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/inferno.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/magma.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/plasma.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/viridis.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/hex2rgb.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/interpolate.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/rgb2hex.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/viridis.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/theme.bootstrap_3.css +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/ext/tiny-queue.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/files.json +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.gc34.tsv +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.json.gz +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.gc34.tsv +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.json.gz +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/log.txt +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/makeGenes.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.json.gz +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.vm25.tsv +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/README.md +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/center.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/README.txt +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-justify-left.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-save.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/log.txt +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-24.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-24.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-edit-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-gravity-west-24.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-24.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-merge-down-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-scale-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-22.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-22.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-22.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-16.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-22.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/icons8-help-32.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/info.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/lasso.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/marker.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/move.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/select.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/img/zoom.png +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/cbWeb/js/maxHeat.js +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/download.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/geneinfo.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/genes.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/hubmaker.py +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/hub.conf +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/seurat.conf +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser/sampleConfig/summary.html +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser.egg-info/SOURCES.txt +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser.egg-info/dependency_links.txt +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser.egg-info/not-zip-safe +0 -0
- {cellbrowser-1.2.8 → cellbrowser-1.2.10}/src/cbPyLib/cellbrowser.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: cellbrowser
|
|
3
|
+
Version: 1.2.10
|
|
4
|
+
Summary: UCSC Cellbrowser, an interactive browser for single cell data. Includes converters and basic pipelines for text files, Seurat, Scanpy and Cellranger.
|
|
5
|
+
Home-page: https://github.com/maximilianh/cellBrowser
|
|
6
|
+
Author: Maximilian Haeussler
|
|
7
|
+
Author-email: max@soe.ucsc.edu
|
|
8
|
+
License: GPL 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 2
|
|
10
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: JavaScript
|
|
13
|
+
Requires-Python: >=2.5
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Dynamic: author
|
|
17
|
+
Dynamic: author-email
|
|
18
|
+
Dynamic: classifier
|
|
19
|
+
Dynamic: description
|
|
20
|
+
Dynamic: description-content-type
|
|
21
|
+
Dynamic: home-page
|
|
22
|
+
Dynamic: license
|
|
23
|
+
Dynamic: requires-python
|
|
24
|
+
Dynamic: summary
|
|
25
|
+
|
|
26
|
+
The UCSC Cell Browser is an interactive browser for
|
|
27
|
+
single cell data, like mRNA or ATAC-seq data. You can display
|
|
28
|
+
dimensionality reductions, navigate them with the mouse or the cursor keys,
|
|
29
|
+
select cells, color by genes or meta annotations and make many other
|
|
30
|
+
changes. The main site runs at https://cells.ucsc.edu, but using this
|
|
31
|
+
package you can also convert data yourself and build a Cell Browser HTML
|
|
32
|
+
directory that can be served through any University or any other webserver
|
|
33
|
+
for static webpages. You can try the Cell Browser at https://cells.ucsc.edu
|
|
34
|
+
or read about how to convert data with this package on
|
|
35
|
+
https://cellbrowser.rtfd.org.
|
|
36
|
+
|
|
37
|
+
We strongly recommend that to use Python3, but we make an effort to remain compatible with Python2.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
[versioneer]
|
|
2
|
-
|
|
2
|
+
VCS = git
|
|
3
3
|
style = pep440-pre
|
|
4
4
|
versionfile_source = src/cbPyLib/cellbrowser/_version.py
|
|
5
5
|
versionfile_build = cellbrowser/_version.py
|
|
6
|
-
tag_prefix =
|
|
6
|
+
tag_prefix = v
|
|
7
|
+
parentdir_prefix = cellbrowser-
|
|
7
8
|
|
|
8
9
|
[build_ext]
|
|
9
10
|
inplace = 1
|
|
@@ -381,21 +381,20 @@ ExportToCellbrowser <- function(
|
|
|
381
381
|
}
|
|
382
382
|
if (is.null(markers.file) && !skip.markers) {
|
|
383
383
|
if (length(levels(Idents(object))) > 1) {
|
|
384
|
-
markers.helper <- function(x) {
|
|
385
|
-
partition <- markers[x,]
|
|
384
|
+
#markers.helper <- function(x) {
|
|
385
|
+
#partition <- markers[x,]
|
|
386
386
|
|
|
387
387
|
# Seurat4 changed the field name! grrrr...
|
|
388
|
-
if ("avg_log2FC" %in% colnames(markers))
|
|
389
|
-
avgs <- -partition$avg_log2FC
|
|
390
|
-
else
|
|
391
|
-
avgs <- -partition$avg_logFC
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
}
|
|
388
|
+
#if ("avg_log2FC" %in% colnames(markers))
|
|
389
|
+
#avgs <- -partition$avg_log2FC
|
|
390
|
+
#else
|
|
391
|
+
#avgs <- -partition$avg_logFC
|
|
392
|
+
#ord <- order(partition$p_val_adj < 0.05, avgs)
|
|
393
|
+
#res <- x[ord]
|
|
394
|
+
#naCount <- max(0, length(x) - markers.n)
|
|
395
|
+
#res <- c(res[1:markers.n], rep(NA, naCount))
|
|
396
|
+
#return(res)
|
|
397
|
+
#}
|
|
399
398
|
if (.hasSlot(object, "misc") && !is.null(x = object@misc["markers"][[1]])) {
|
|
400
399
|
message("Found precomputed markers in obj@misc['markers']")
|
|
401
400
|
markers <- object@misc["markers"]$markers
|
|
@@ -404,15 +403,18 @@ ExportToCellbrowser <- function(
|
|
|
404
403
|
markers <- FindAllMarkers(
|
|
405
404
|
object,
|
|
406
405
|
do.print = TRUE,
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
406
|
+
only.pos = TRUE,
|
|
407
|
+
logfc.threshold = 0.25,
|
|
408
|
+
min.pct = 0.25
|
|
410
409
|
)
|
|
411
410
|
}
|
|
412
411
|
message("Writing top ", markers.n, ", cluster markers to ", fname)
|
|
413
|
-
markers.order <- ave(x = rownames(x = markers), markers$cluster, FUN = markers.helper)
|
|
414
|
-
top.markers <- markers[markers.order[!is.na(x = markers.order)], ]
|
|
415
|
-
|
|
412
|
+
#markers.order <- ave(x = rownames(x = markers), markers$cluster, FUN = markers.helper)
|
|
413
|
+
#top.markers <- markers[markers.order[!is.na(x = markers.order)], ]
|
|
414
|
+
require(dplyr);
|
|
415
|
+
#markers %>% group_by(cluster) %>% top_n(n = markers.n, wt = avg_logFC)
|
|
416
|
+
markers %>% group_by(cluster) %>% dplyr::filter(avg_log2FC > 1) %>% slice_head(n = markers.n) %>% ungroup() -> topMarkers
|
|
417
|
+
write.table(x = topMarkers, file = fname, quote = FALSE, sep = "\t", col.names = NA)
|
|
416
418
|
} else {
|
|
417
419
|
message("No clusters found in Seurat object and no external marker file provided, so no marker genes can be computed")
|
|
418
420
|
file <- NULL
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
# This file was generated by 'versioneer.py' (0.
|
|
2
|
+
# This file was generated by 'versioneer.py' (0.29) from
|
|
3
3
|
# revision-control system data, or from the parent directory name of an
|
|
4
4
|
# unpacked source archive. Distribution tarballs contain a pre-generated copy
|
|
5
5
|
# of this file.
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "
|
|
12
|
-
"dirty":
|
|
11
|
+
"date": "2025-01-28T10:22:44-0800",
|
|
12
|
+
"dirty": true,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "
|
|
14
|
+
"full-revisionid": "9c7c13d28b253ed763bd7086efb71fc484704080",
|
|
15
|
+
"version": "1.2.10"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -48,6 +48,10 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
|
|
|
48
48
|
margin-right: 6px;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
.tpTitle {
|
|
52
|
+
z-index: 100;
|
|
53
|
+
}
|
|
54
|
+
|
|
51
55
|
.tpGeneExprCombo {
|
|
52
56
|
margin-left: 6px;
|
|
53
57
|
margin-right: 6px;
|
|
@@ -92,6 +96,7 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
|
|
|
92
96
|
position : absolute;
|
|
93
97
|
display: grid;
|
|
94
98
|
grid-template-columns: 45px 120px 15px;
|
|
99
|
+
background: rgba(255,255,255,0.5);
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
.sliderLabel {
|
|
@@ -130,8 +135,9 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
|
|
|
130
135
|
.ui-menu-item { font-size:13px }
|
|
131
136
|
.ui-menu .ui-menu-item-wrapper { padding: 1px 1em 1px .4em; }
|
|
132
137
|
.ui-tooltip { font-size: 13px }
|
|
133
|
-
#tpButtonInfo { height: 24px; top: 1px; margin-right: 8px;
|
|
138
|
+
#tpButtonInfo { height: 24px; top: 1px; margin-right: 8px; border-radius: 4px; padding-top: 4px }
|
|
134
139
|
.tpDialogInput { margin-left: 12px; margin-top: 5px; margin-bottom: 12px; }
|
|
140
|
+
#tpDialog { z-index: 1001; }}
|
|
135
141
|
|
|
136
142
|
.tpIconButton {
|
|
137
143
|
padding: 1px 2px 1px 2px;
|
|
@@ -168,6 +174,13 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
|
|
|
168
174
|
cursor: pointer;
|
|
169
175
|
}
|
|
170
176
|
|
|
177
|
+
.tpSameLink {
|
|
178
|
+
text-decoration: underline;
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
color: darkgrey;
|
|
181
|
+
float: right
|
|
182
|
+
}
|
|
183
|
+
|
|
171
184
|
.tpDatasetPane {
|
|
172
185
|
padding-top: 10px !important;
|
|
173
186
|
border-radius: 4px;
|
|
@@ -319,12 +332,15 @@ input[type=checkbox], input[type=radio] {
|
|
|
319
332
|
}
|
|
320
333
|
|
|
321
334
|
.tpMetaBox { font-size: 13px; cursor:default; overflow:hidden }
|
|
322
|
-
.tpMetaHover {
|
|
335
|
+
.tpMetaHover {
|
|
336
|
+
color: white;
|
|
337
|
+
background-color: #333 !important;
|
|
338
|
+
}
|
|
323
339
|
.tpMetaLabel { font-weight: bold; padding-left: 2px}
|
|
324
340
|
.tpMetaLabelGrey { color: #666666}
|
|
325
341
|
.tpMetaMultiVal { font-style: italic; color: gray }
|
|
326
342
|
.tpMetaHistLabel { text-decoration: underline; color: blue }
|
|
327
|
-
.tpMetaValue { height: 1.3em;
|
|
343
|
+
.tpMetaValue { height: 1.3em; padding-left: 3px; background-color:#EEE; }
|
|
328
344
|
.tpMetaSelect { outline: 2px solid black; background-color: #DEDEDE }
|
|
329
345
|
.tpMetaValueSelect { background-color: #CCC}
|
|
330
346
|
.tpMetaPerc { color:grey; float:right }
|
|
@@ -342,7 +358,7 @@ button { line-height: 12px }
|
|
|
342
358
|
.btn-default { background: linear-gradient(#fff 20%, #f7f7f7 60%, #f5f5f5 100%) }
|
|
343
359
|
|
|
344
360
|
#tpButtonBar {display: block; }
|
|
345
|
-
.tpButton { border-radius: 0; font-size: 15px; display: inline-block; background-color: #f6f6f6; border: 1px solid #c5c5c5; margin: 1px 3px 1px 1px; padding: 1px 3px 1px 3px; cursor:default; vertical-align: middle; user-select: none}
|
|
361
|
+
.tpButton { border-radius: 0; font-size: 15px; display: inline-block; background-color: #f6f6f6; border: 1px solid #c5c5c5; margin: 1px 3px 1px 1px; padding: 1px 3px 1px 3px; cursor:default; vertical-align: middle; user-select: none; }
|
|
346
362
|
.tpButton:active { background-color: #888; }
|
|
347
363
|
.tpButton active { background-color: #888; }
|
|
348
364
|
.tpButton:hover { background-color: #eee }
|
|
@@ -480,6 +480,15 @@ function CbDbFile(url) {
|
|
|
480
480
|
}
|
|
481
481
|
}
|
|
482
482
|
|
|
483
|
+
this.findCoordIdx = function(name) {
|
|
484
|
+
/* given coord label return its index */
|
|
485
|
+
coords = self.conf.coords;
|
|
486
|
+
for (let i=0; i<coords.length; i++) {
|
|
487
|
+
if (coords[i].name===coordLabel)
|
|
488
|
+
return i;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
483
492
|
this.loadCoords = function(coordIdx, onDone, onSpatialDone, onProgress) {
|
|
484
493
|
/* load coordinates from URL and call onDone(array of (x,y), coordInfoObj, labelMids) when done */
|
|
485
494
|
var i = 0;
|
|
@@ -487,6 +496,17 @@ function CbDbFile(url) {
|
|
|
487
496
|
var meta = null;
|
|
488
497
|
var labelMids; // null means: no json file found
|
|
489
498
|
|
|
499
|
+
var coordInfo = self.conf.coords[coordIdx];
|
|
500
|
+
if (coordInfo===null) {
|
|
501
|
+
alert("Could not find coordinates with name "+this.coordName);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
let hasSpatial = coordInfo.images || self.conf.spatial;
|
|
506
|
+
|
|
507
|
+
//if (hasSpatial && coordInfo.aspectRatio===undefined) // patch up old datasets
|
|
508
|
+
//coordInfo.aspectRatio = 1.0
|
|
509
|
+
|
|
490
510
|
function binDone(data, other) {
|
|
491
511
|
binData = data;
|
|
492
512
|
meta = other;
|
|
@@ -505,13 +525,7 @@ function CbDbFile(url) {
|
|
|
505
525
|
return;
|
|
506
526
|
}
|
|
507
527
|
|
|
508
|
-
|
|
509
|
-
if (coordInfo===null) {
|
|
510
|
-
alert("Could not find coordinates with name "+this.coordName);
|
|
511
|
-
return;
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
if (coordInfo.images || self.conf.spatial) {
|
|
528
|
+
if (hasSpatial) {
|
|
515
529
|
var spatials = coordInfo.images;
|
|
516
530
|
if (!spatials)// older placement of the object
|
|
517
531
|
spatials = self.conf.spatial; //now spatial settings must be on the coords to support multi-coord datasets
|
|
@@ -547,7 +561,7 @@ function CbDbFile(url) {
|
|
|
547
561
|
};
|
|
548
562
|
|
|
549
563
|
this.getDefaultColorField = function() {
|
|
550
|
-
/* return
|
|
564
|
+
/* return the meta field to colors on */
|
|
551
565
|
if (self.conf.clusterField)
|
|
552
566
|
return self.conf.clusterField; // just for backwards-compat. with old datasets
|
|
553
567
|
else
|
|
@@ -853,15 +867,22 @@ function CbDbFile(url) {
|
|
|
853
867
|
|
|
854
868
|
this.locusToOffset = function(name) {
|
|
855
869
|
/* for both gene and ATAC mode: */
|
|
856
|
-
/* return an array [start, end, name] given a locus description (=a string: gene symbol or chr|start|end) */
|
|
870
|
+
/* return an array [start, end, name] given a locus description (=a string: gene ID/symbol or chr|start|end) */
|
|
857
871
|
var off = null;
|
|
872
|
+
var geneId = name;
|
|
858
873
|
//if (name.includes("|")) { // atac mode: name is chrom|start|end
|
|
859
874
|
if (self.peakOffsets !== null) { // atac mode: name is chrom|start|end
|
|
860
875
|
let pos = name.split("|");
|
|
861
876
|
off = self.findAtacOffsets(pos[0], parseInt(pos[1]), parseInt(pos[2]));
|
|
862
877
|
}
|
|
863
878
|
else {
|
|
864
|
-
|
|
879
|
+
var geneIds = self.findGenesExact(name);
|
|
880
|
+
if (geneIds.length!==0) {
|
|
881
|
+
geneId = geneIds[0];
|
|
882
|
+
off = self.geneOffsets[geneIds[0]];
|
|
883
|
+
if (geneIds.length>1)
|
|
884
|
+
alert("More than one match for gene name "+name+", using only first match.");
|
|
885
|
+
}
|
|
865
886
|
}
|
|
866
887
|
|
|
867
888
|
if (off===null || off===undefined) {
|
|
@@ -872,7 +893,7 @@ function CbDbFile(url) {
|
|
|
872
893
|
let start = off[0];
|
|
873
894
|
let len = off[1];
|
|
874
895
|
let end = start+len;
|
|
875
|
-
return [start, end,
|
|
896
|
+
return [start, end, geneId];
|
|
876
897
|
}
|
|
877
898
|
|
|
878
899
|
this.namesToChunks = function(lociNames) {
|
|
@@ -1382,19 +1403,22 @@ function CbDbFile(url) {
|
|
|
1382
1403
|
return lo;
|
|
1383
1404
|
}
|
|
1384
1405
|
|
|
1385
|
-
function
|
|
1406
|
+
function addToGeneSynsAndSplit(geneSyns, name) {
|
|
1386
1407
|
/* given a symbol which can be geneId|sym, append to geneSyn array 1 or 2 tuples with [searchKey, geneId] */
|
|
1408
|
+
var geneId = name;
|
|
1409
|
+
var sym = name;
|
|
1387
1410
|
if (name.indexOf("|")===-1) {
|
|
1388
1411
|
// datasets with only one gene name: old behavior
|
|
1389
1412
|
geneSyns.push( [name.toLowerCase(), name] );
|
|
1390
1413
|
} else {
|
|
1391
1414
|
// dataset with geneId and symbol
|
|
1392
1415
|
var parts = name.split("|");
|
|
1393
|
-
|
|
1394
|
-
|
|
1416
|
+
geneId = parts[0];
|
|
1417
|
+
sym = parts[1];
|
|
1395
1418
|
geneSyns.push( [geneId.toLowerCase(), geneId] );
|
|
1396
1419
|
geneSyns.push( [sym.toLowerCase(), geneId] );
|
|
1397
1420
|
}
|
|
1421
|
+
return [geneId, sym];
|
|
1398
1422
|
}
|
|
1399
1423
|
|
|
1400
1424
|
this.indexGenes = function() {
|
|
@@ -1405,24 +1429,16 @@ function CbDbFile(url) {
|
|
|
1405
1429
|
var newIdx = {};
|
|
1406
1430
|
var geneIdx = self.geneOffsets;
|
|
1407
1431
|
var geneSyns = [];
|
|
1408
|
-
for (var
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
var
|
|
1412
|
-
var
|
|
1413
|
-
var
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
}
|
|
1419
|
-
|
|
1420
|
-
var newVal = [val[0], val[1], sym];
|
|
1421
|
-
newIdx[geneId] = newVal;
|
|
1422
|
-
|
|
1423
|
-
self.geneOffsets=newIdx;
|
|
1424
|
-
self.geneSyns = geneSyns;
|
|
1425
|
-
}
|
|
1432
|
+
for (var geneName in geneIdx) { // as of 2019, faster than Object.entries()
|
|
1433
|
+
// a geneName can be either a single symbol or a string like geneId|sym
|
|
1434
|
+
var offsets = geneIdx[geneName];
|
|
1435
|
+
var geneIdSym = addToGeneSynsAndSplit(geneSyns, geneName);
|
|
1436
|
+
var geneId = geneIdSym[0];
|
|
1437
|
+
var sym = geneIdSym[1];
|
|
1438
|
+
newIdx[geneId] = [offsets[0], offsets[1], sym];
|
|
1439
|
+
}
|
|
1440
|
+
self.geneOffsets=newIdx;
|
|
1441
|
+
self.geneSyns = geneSyns;
|
|
1426
1442
|
}
|
|
1427
1443
|
|
|
1428
1444
|
function searchGeneNames(geneSyns, searchStr) {
|
|
@@ -1437,7 +1453,7 @@ function CbDbFile(url) {
|
|
|
1437
1453
|
return foundIds;
|
|
1438
1454
|
}
|
|
1439
1455
|
|
|
1440
|
-
this.
|
|
1456
|
+
this.findGeneIdsPrefixSuffix = function(searchStr) {
|
|
1441
1457
|
/* return an array of matching geneIds for searchStr, uses self.geneSyns */
|
|
1442
1458
|
searchStr = searchStr.toLowerCase();
|
|
1443
1459
|
var geneSyns = self.geneSyns;
|
|
@@ -1452,7 +1468,7 @@ function CbDbFile(url) {
|
|
|
1452
1468
|
* returns an array of objects with .id and .sym.
|
|
1453
1469
|
* There is a version using this for ATAC mode, see findGenesAtac()
|
|
1454
1470
|
* */
|
|
1455
|
-
var foundIds = self.
|
|
1471
|
+
var foundIds = self.findGeneIdsPrefixSuffix(searchStr);
|
|
1456
1472
|
var geneNameObjs = [];
|
|
1457
1473
|
for (var geneId of foundIds)
|
|
1458
1474
|
geneNameObjs.push(self.getGeneInfo(geneId)); // for selectizeSendGenes
|
|
@@ -1460,10 +1476,10 @@ function CbDbFile(url) {
|
|
|
1460
1476
|
return geneNameObjs;
|
|
1461
1477
|
};
|
|
1462
1478
|
|
|
1463
|
-
this.findGenesExact = function(
|
|
1479
|
+
this.findGenesExact = function(geneSym) {
|
|
1464
1480
|
/* search the geneSyns (arr of [syn, geneId]) for matches. Return arr of geneIds
|
|
1465
1481
|
* Used to resolve symbol to geneId (symToGene)*/
|
|
1466
|
-
geneSym =
|
|
1482
|
+
geneSym = geneSym.toLowerCase();
|
|
1467
1483
|
var geneSyns = self.geneSyns;
|
|
1468
1484
|
var foundIds = [];
|
|
1469
1485
|
for (var i=0; i<geneSyns.length; i++) {
|
|
@@ -1475,6 +1491,27 @@ function CbDbFile(url) {
|
|
|
1475
1491
|
return foundIds;
|
|
1476
1492
|
}
|
|
1477
1493
|
|
|
1494
|
+
this.mustFindOneGeneExact= function(symOrId) {
|
|
1495
|
+
/* given a geneId or symbol, return the geneId. If 0 or >1 are found, abort and show error message. */
|
|
1496
|
+
if (symOrId.indexOf("|")!==-1)
|
|
1497
|
+
symOrId = symOrId.split("|")[0];
|
|
1498
|
+
|
|
1499
|
+
let geneIds = self.findGenesExact(symOrId);
|
|
1500
|
+
if (geneIds.length===0) {
|
|
1501
|
+
alert("Could not find gene symbold or ID: "+symOrId);
|
|
1502
|
+
return null;
|
|
1503
|
+
}
|
|
1504
|
+
if (geneIds.length>1) {
|
|
1505
|
+
alert("Found more than one geneId for symbol, using only the first match: "+symOrId);
|
|
1506
|
+
}
|
|
1507
|
+
return geneIds[0];
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
this.isGeneId = function (geneId) {
|
|
1511
|
+
/* check if a given string is a geneId */
|
|
1512
|
+
return (geneId in self.geneOffsets);
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1478
1515
|
function pickTssForGene(loc) {
|
|
1479
1516
|
/* given a chromLoc tuple (start, end, strand, sym), return the TSS of the gene (start or end )*/
|
|
1480
1517
|
var start = loc[0];
|
|
@@ -1530,7 +1567,7 @@ function CbDbFile(url) {
|
|
|
1530
1567
|
this.findGenesAtac = function(searchStr) {
|
|
1531
1568
|
/* like findGenes(), but for ATAC mode: return an array of {.id and .sym} given a search string */
|
|
1532
1569
|
//var geneInfos = cbUtil.searchKeys(self.geneToTss, searchStr);
|
|
1533
|
-
var geneIds = self.
|
|
1570
|
+
var geneIds = self.findGeneIdsPrefixSuffix(searchStr);
|
|
1534
1571
|
|
|
1535
1572
|
if (geneIds.length===0)
|
|
1536
1573
|
return [];
|
|
@@ -1666,7 +1703,7 @@ function CbDbFile(url) {
|
|
|
1666
1703
|
},
|
|
1667
1704
|
onProgress, strategy);
|
|
1668
1705
|
}
|
|
1669
|
-
|
|
1706
|
+
}
|
|
1670
1707
|
};
|
|
1671
1708
|
|
|
1672
1709
|
this.loadGeneSetExpr = function(onDone) {
|