cellbrowser 1.2.15.post0.dev8__tar.gz → 1.2.17__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.
Files changed (181) hide show
  1. {cellbrowser-1.2.15.post0.dev8/src/cbPyLib/cellbrowser.egg-info → cellbrowser-1.2.17}/PKG-INFO +1 -1
  2. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/README.rst +31 -14
  3. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/R/cellbrowser.R +38 -6
  4. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/_version.py +3 -3
  5. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/css/cellBrowser.css +12 -14
  6. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/js/cbData.js +39 -17
  7. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/js/cellBrowser.js +207 -71
  8. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/js/maxPlot.js +1 -1
  9. cellbrowser-1.2.17/src/cbPyLib/cellbrowser/cbWeb/js/violinWorker.js +134 -0
  10. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cellbrowser.py +287 -191
  11. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/convert.py +8 -2
  12. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/geneinfo.py +16 -1
  13. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/genes.py +26 -17
  14. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/hubmaker.py +2 -4
  15. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17/src/cbPyLib/cellbrowser.egg-info}/PKG-INFO +1 -1
  16. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser.egg-info/SOURCES.txt +1 -0
  17. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/LICENSE +0 -0
  18. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/MANIFEST.in +0 -0
  19. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/setup.cfg +0 -0
  20. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/setup.py +0 -0
  21. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/RangeHTTPServer/__init__.py +0 -0
  22. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/RangeHTTPServer/__main__.py +0 -0
  23. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/__init__.py +0 -0
  24. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/bw_genes.py +0 -0
  25. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.eot +0 -0
  26. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.ttf +0 -0
  27. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff +0 -0
  28. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff2 +0 -0
  29. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/Chart.bundle.min.js +0 -0
  30. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/FastBitSet.js +0 -0
  31. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/FileSaver.1.1.20151003.min.js +0 -0
  32. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/OverlayScrollbars.min.css +0 -0
  33. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-dropmenu.min.css +0 -0
  34. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.js +0 -0
  35. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.min.css +0 -0
  36. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.3.3.7.min.css +0 -0
  37. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.css +0 -0
  38. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.js +0 -0
  39. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/chartjs-chart-box-and-violin-plot.js +0 -0
  40. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite.png +0 -0
  41. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite@2x.png +0 -0
  42. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.1.8.2.min.css +0 -0
  43. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.jquery.min.js +0 -0
  44. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/drawImage-clipper.js +0 -0
  45. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/font-awesome.css +0 -0
  46. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/googleMaterialIcons.css +0 -0
  47. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/hamster.js +0 -0
  48. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  49. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_444444_256x240.png +0 -0
  50. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_555555_256x240.png +0 -0
  51. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777620_256x240.png +0 -0
  52. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777777_256x240.png +0 -0
  53. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_cc0000_256x240.png +0 -0
  54. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_ffffff_256x240.png +0 -0
  55. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/intro.min.js +0 -0
  56. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/introjs.2.4.0.min.css +0 -0
  57. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui-1.12.1.css +0 -0
  58. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui.min.js +0 -0
  59. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.3.1.1.min.js +0 -0
  60. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.css +0 -0
  61. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.js +0 -0
  62. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.event.drag-2.3.0.js +0 -0
  63. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.overlayScrollbars.min.js +0 -0
  64. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.sparkline.min.js +0 -0
  65. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.js +0 -0
  66. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.widgets.js +0 -0
  67. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.1.0.3.min.css +0 -0
  68. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.min.js +0 -0
  69. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.ui.position.min.js +0 -0
  70. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/jsurl2.js +0 -0
  71. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/lz-string.js +0 -0
  72. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/materialIcons.woff +0 -0
  73. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/minified.js +0 -0
  74. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/mousetrap.min.js +0 -0
  75. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/normalizeWheel.js +0 -0
  76. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/pako_inflate.min.js +0 -0
  77. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/palette.js +0 -0
  78. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/papaparse.min.js +0 -0
  79. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/reorder.v1.js +0 -0
  80. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/scaleColorPerceptual.js +0 -0
  81. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/science.v1.js +0 -0
  82. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.4.0.4.min.css +0 -0
  83. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.min.js +0 -0
  84. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.bootstrap3.css +0 -0
  85. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.js +0 -0
  86. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangedecorator.js +0 -0
  87. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangeselector.js +0 -0
  88. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellselectionmodel.js +0 -0
  89. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.core.js +0 -0
  90. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.editors.js +0 -0
  91. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.examples.css +0 -0
  92. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.formatters.js +0 -0
  93. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.css +0 -0
  94. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.js +0 -0
  95. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum-1.8.0.css +0 -0
  96. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum.min.js +0 -0
  97. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/split.js +0 -0
  98. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.js +0 -0
  99. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.number.min.js +0 -0
  100. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/.npmignore +0 -0
  101. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/LICENSE +0 -0
  102. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/Makefile +0 -0
  103. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/README.md +0 -0
  104. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/browser.js +0 -0
  105. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/build.js +0 -0
  106. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/d3-random-matrix.js +0 -0
  107. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/example.png +0 -0
  108. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/gradients.js +0 -0
  109. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/package.json +0 -0
  110. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/inferno.json +0 -0
  111. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/magma.json +0 -0
  112. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/plasma.json +0 -0
  113. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/viridis.json +0 -0
  114. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/inferno.js +0 -0
  115. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/magma.js +0 -0
  116. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/package.json +0 -0
  117. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/plasma.js +0 -0
  118. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/inferno.json +0 -0
  119. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/magma.json +0 -0
  120. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/plasma.json +0 -0
  121. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/viridis.json +0 -0
  122. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/hex2rgb.js +0 -0
  123. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/interpolate.js +0 -0
  124. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/rgb2hex.js +0 -0
  125. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/viridis.js +0 -0
  126. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/theme.bootstrap_3.css +0 -0
  127. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/ext/tiny-queue.js +0 -0
  128. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/files.json +0 -0
  129. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.gc34.tsv +0 -0
  130. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.json.gz +0 -0
  131. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.gc34.tsv +0 -0
  132. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.json.gz +0 -0
  133. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/log.txt +0 -0
  134. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/makeGenes.py +0 -0
  135. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.json.gz +0 -0
  136. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.vm25.tsv +0 -0
  137. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/README.md +0 -0
  138. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/center.png +0 -0
  139. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/README.txt +0 -0
  140. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-justify-left.png +0 -0
  141. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-save.png +0 -0
  142. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/log.txt +0 -0
  143. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-16.png +0 -0
  144. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-24.png +0 -0
  145. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-16.png +0 -0
  146. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-24.png +0 -0
  147. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-edit-16.png +0 -0
  148. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-gravity-west-24.png +0 -0
  149. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-16.png +0 -0
  150. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-24.png +0 -0
  151. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-merge-down-16.png +0 -0
  152. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-scale-16.png +0 -0
  153. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-16.png +0 -0
  154. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-22.png +0 -0
  155. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-16.png +0 -0
  156. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-22.png +0 -0
  157. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-16.png +0 -0
  158. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-22.png +0 -0
  159. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-16.png +0 -0
  160. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-22.png +0 -0
  161. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/icons8-help-32.png +0 -0
  162. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/info.png +0 -0
  163. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/lasso.png +0 -0
  164. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/marker.png +0 -0
  165. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/move.png +0 -0
  166. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/select.png +0 -0
  167. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/img/zoom.png +0 -0
  168. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/cbWeb/js/maxHeat.js +0 -0
  169. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/download.py +0 -0
  170. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/cellbrowser.conf +0 -0
  171. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/desc.conf +0 -0
  172. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/hub.conf +0 -0
  173. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/scanpy.conf +0 -0
  174. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/seurat.conf +0 -0
  175. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/sampleConfig/summary.html +0 -0
  176. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser/seurat.py +0 -0
  177. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser.egg-info/dependency_links.txt +0 -0
  178. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser.egg-info/entry_points.txt +0 -0
  179. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser.egg-info/not-zip-safe +0 -0
  180. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/src/cbPyLib/cellbrowser.egg-info/top_level.txt +0 -0
  181. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.17}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cellbrowser
3
- Version: 1.2.15.post0.dev8
3
+ Version: 1.2.17
4
4
  Summary: UCSC Cellbrowser, an interactive browser for single cell data. Includes converters and basic pipelines for text files, Seurat, Scanpy and Cellranger.
5
5
  Home-page: https://github.com/maximilianh/cellBrowser
6
6
  Author: Maximilian Haeussler
@@ -12,21 +12,38 @@ spatial gene/ATAC, multi-modal combinations of these and trajectory lines.
12
12
  It comes with one-line data exporters for all common analysis formats: Seurat, Scanpy, Cellranger, Monocle and
13
13
  you can always use tsv/csv files to import your data. The exporters are part of Seurat 3/4 and Scanpy.
14
14
 
15
- To look at a list of selected single cell datasets, see http://cells.ucsc.edu
16
-
17
- To setup your own cell browser, from Cellranger, Seurat, Scanpy or text files
15
+ Here are a few datasets that demonstrate these features:
16
+
17
+ - A simple gene expression dataset: https://cortex-dev.cells.ucsc.edu
18
+ - ATAC support https://cortex-atac.cells.ucsc.edu
19
+ - Spatial transcriptomics support https://ms-subcortical-lesions.cells.ucsc.edu
20
+ - Split screen mode to display both the spatial and snRNA-seq data side by side https://cells.ucsc.edu/?ds=dup15q-cortex-organoids+spatial+control
21
+ - Pseudotime cell trajectories from Monocle3 https://cells-test.gi.ucsc.edu/?ds=pre-postnatal-cortex+ex-neu+rna
22
+ - Tree-like cell trajectories from URD https://cells.ucsc.edu/?ds=cardiac-differentiation+trajectory+cm-combined-trajectory
23
+ - Clone lineage tracing support: color by the field CellTag, select tags in the legend, then click "recolor checked": https://cells.ucsc.edu/?ds=gbm-nvp+nvp-celltag
24
+ - Brain lipidomics https://cells.ucsc.edu/?ds=brain-lipids
25
+
26
+ To show all our > 300 single cell datasets, see http://cells.ucsc.edu
27
+
28
+ To upload datasets for the cells.ucsc.edu website, use https://cells-submit.gi.ucsc.edu. Or email us at cells@ucsc.edu. We reply usually on the same day.
29
+
30
+ Most users prefer uploading their datasets to us rather than hosting them on their own webserver.
31
+ Our webserver is reliable, fast and we take care
32
+ of adding new features and keeping the data online.
33
+ But, if you really want to make your own website, to setup your own cell
34
+ browser, on your own web server, from Cellranger, Seurat, Scanpy or text files
18
35
  (tsv/csv), or just a single cell expression matrix, read the documentation
19
- at http://cellbrowser.rtfd.io. If you use the UCSC Cell Browser in your research, please cite
36
+ at http://cellbrowser.rtfd.io.
37
+
38
+ If you use the UCSC Cell Browser in your research, please cite
20
39
  `our Bioinformatics paper <https://dx.doi.org/10.1093/bioinformatics/btab503>`_.
21
40
  If you are also using data from a specific dataset we host, please also cite
22
41
  the original authors of that dataset (visible under 'Info & Download' while viewing that dataset).
23
42
 
24
- If you want us to add a single cell dataset to the website http://cells.ucsc.edu,
25
- please contact us at cells@ucsc.edu. We are happy to add any dataset.
26
-
27
43
  This is a viewer for a static, precomputed layout. If you're looking for an interative layout, where you can
28
44
  move the cells around and run some algorithms interactively, try Chan-Zuckerberg's own cellxgene or Spring.
29
- A website with both datasets and some analysis is `Scope <http://scope.aertslab.org/>`_.
45
+ Another website with both datasets and some analysis is `Scope <http://scope.aertslab.org/>`_. There are many other
46
+ similar websites now, usually with a few dozen datasets.
30
47
 
31
48
  Many labs host their data at cells.ucsc.edu by sending it to us, but some groups have setup their own cell browsers:
32
49
 
@@ -48,8 +65,7 @@ Many labs host their data at cells.ucsc.edu by sending it to us, but some groups
48
65
  * Paul Gontarz, WUSTL, http://regmedsrv1.wustl.edu/Public_SPACE/pgontarz/Public_html/cellbrower/Exp1/
49
66
  * Dylan Farnsworth, U Oregon, https://pages.uoregon.edu/drf/browser/lens_230620/
50
67
 
51
-
52
- These papers have cell browsers made at UCSC:
68
+ These are some papers that reference cell browsers made at UCSC but there are many more, search for "cells.ucsc.edu" in Google Scholar to find more:
53
69
 
54
70
  * organoidatlas: https://www.sciencedirect.com/science/article/pii/S221112472030053X
55
71
  * dros-brain: https://elifesciences.org/articles/50354
@@ -59,8 +75,9 @@ These papers have cell browsers made at UCSC:
59
75
 
60
76
  Before judging this project by the number of issue tickets or PRs, note that at UCSC we use an internal
61
77
  ticket system with more features and that a lot of communication with wetlab users is by email at cells@ucsc.edu, as we
62
- do not require a Github account for feedback. But we do reply to issues here, as you can see from the Github
63
- account and also use Github for source control.
78
+ do not require a Github account for feedback, as our submitters are biologists, not computer scientists.
79
+ But we do reply to issues here, as you can see from the Github account and also use Github for source control, and
80
+ we get emails every day. The project is much more active than the Github issues suggest.
64
81
 
65
82
  Install and use
66
83
  ---------------
@@ -72,9 +89,9 @@ Install and use
72
89
  * Galaxy: there is a Galaxy tool for UCSC CellBrowser, which can be installed on any Galaxy instance via its `Galaxy Toolshed entry <https://toolshed.g2.bx.psu.edu/view/ebi-gxa/ucsc_cell_browser>`_ or it can be directly used by users at the `Human Cell Atlas Galaxy instance <https://humancellatlas.usegalaxy.eu/root?tool_id=toolshed.g2.bx.psu.edu/repos/ebi-gxa/ucsc_cell_browser/ucsc_cell_browser>`_ or as part of the example workflows, such as the `Human Cell Atlas / Scanpy CellBrowser workflow <https://humancellatlas.usegalaxy.eu/u/pmoreno/w/humancellatlas-scanpy-cellbrowser>`_ or the `EBI Single Cell Expression Atlas / Scanpy / CellBrowser workflow <https://humancellatlas.usegalaxy.eu/u/pmoreno/w/atlas-scanpy-cellbrowser-imported-from-uploaded-file>`_
73
90
 
74
91
  This project was funded by the California Institute of Regenerative Medicine and the
75
- Chan-Zuckerberg Initiative https://www.chanzuckerberg.com/. In 2020, it was funded through a supplement to the NHGRI Genome Browser grant. Since 2023, it is funded by a grant from NIMH BRAIN.
92
+ Chan-Zuckerberg Initiative https://www.chanzuckerberg.com/. In 2020, it was funded through a supplement to the NHGRI Genome Browser grant. Since 2023, it is funded by a grant from NIMH BRAIN and a DISC0 from CIRM.
76
93
 
77
- This is early research software. You are likely to find bugs. Please open a Github
94
+ This is early research software. It may contain bugs. Please open a Github
78
95
  ticket or email us at cells@ucsc.edu, we can usually fix them quickly.
79
96
 
80
97
  Citation
@@ -87,6 +87,28 @@ exportImages <- function(obj, outDir, embeddings.conf) {
87
87
  require(png)
88
88
  for (name in names(obj@images)) {
89
89
  message(name);
90
+ # SlideSeq-class SpatialImage objects do not contain a bitmap image
91
+ # They only contain a coordinates df, so test if this image is a SlideSeq
92
+ # And process using this code block (instead of usual steps further below)
93
+ if ("SlideSeq" %in% class(obj@images$image)[1]) {
94
+ coordsPath <- file.path(outDir, paste0(name, ".coords.tsv"))
95
+ message("Writing coords for image to ", coordsPath)
96
+ coords <- GetTissueCoordinates(object = obj[[name]])
97
+ # One of the columns I want to delete is currently named 'NA' for
98
+ # a missing value
99
+ colnames(coords)[3] <- "missing"
100
+ # Delete columns 3 and 4 by name, keeping columns 1 and 2 for printing out
101
+ coords = subset(coords, select = -c(missing, cells))
102
+
103
+ write.table(coords, coordsPath, sep="\t", row.names=T, quote=F, col.names=NA)
104
+ conf <- sprintf(
105
+ ' {\n "file": "%s",\n "shortLabel": "Spatial %s",\n }',
106
+ coordsPath,
107
+ name
108
+ )
109
+ embeddings.conf <- c(conf, embeddings.conf)
110
+ return(embeddings.conf)
111
+ }
90
112
  img = GetImage(obj, mode="raw", image=name);
91
113
  if (is.null(img)) {
92
114
  message("The image is not a bitmap image, cannot export yet.")
@@ -100,11 +122,18 @@ exportImages <- function(obj, outDir, embeddings.conf) {
100
122
  xMax = dim(img)[2]; # there is a difference of 3 pixels on height when comparing "identify file.jpeg" with this. NO IDEA WHY!
101
123
  coordsPath <- file.path(outDir, paste0(name, ".coords.tsv"))
102
124
  message("Writing coords for image to ", coordsPath)
103
- #coords <- GetTissueCoordinates(object = obj[[img]])
104
-
105
125
  coords <- GetTissueCoordinates(object = obj[[name]])
106
- coordsRev <- coords[, c("imagecol", "imagerow")] # Grrrr... Seurat stores coordinates as (y,x) in this particular case. reverse the order now.
107
- colnames(coordsRev) <- c("x", "y")
126
+
127
+ if (all(c("imagecol", "imagerow") %in% colnames(coords))) {
128
+ # Seurat-style naming: reverse order
129
+ coordsRev <- coords[, c("imagecol", "imagerow")]
130
+ colnames(coordsRev) <- c("x", "y")
131
+ } else if (all(c("x", "y") %in% colnames(coords))) {
132
+ # Already in standard x/y format
133
+ coordsRev <- coords[, c("y", "x")]
134
+ } else {
135
+ stop("Error: coordinates must have either (imagecol, imagerow) or (x, y) columns.")
136
+ }
108
137
 
109
138
  write.table(coordsRev, coordsPath, sep="\t", row.names=T, quote=F, col.names=NA)
110
139
  conf <- sprintf(
@@ -415,9 +444,12 @@ ExportToCellbrowser <- function(
415
444
  markers <- object@misc["markers"]$markers
416
445
  } else {
417
446
  message("Running FindAllMarkers(), using wilcox test, min logfc diff 0.25")
418
- if ("SCT" %in% names(object@assays)) {
447
+ # Only run this block if the Active assay is SCT
448
+ if ("SCT" %in% DefaultAssay(object = object)) {
419
449
  message("Looks like an SCT object, so running PrepSCTFindMarkers()")
420
- PrepSCTFindMarkers(object = object)
450
+ # The results from this command need to be written back to the object prior to
451
+ # running FindAllMarkers
452
+ object <- PrepSCTFindMarkers(object = object)
421
453
  }
422
454
  markers <- FindAllMarkers(
423
455
  object,
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-05-22T14:10:47-0700",
11
+ "date": "2026-04-22T13:09:32-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "ebe2e27cb09c7f85bdbfee91093a58c64c8ed1b9",
15
- "version": "1.2.15.post0.dev8"
14
+ "full-revisionid": "73100b2c3973b545756150bc92f27113edf0f592",
15
+ "version": "1.2.17"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -69,16 +69,6 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
69
69
  height:100%;
70
70
  }
71
71
 
72
- #tpLegendColorChecked,
73
- #tpLegendAll,
74
- #tpLegendNone,
75
- #tpLegendInvert,
76
- #tpLegendNotNull {
77
- font-size: 13px;
78
- margin-right: 2px;
79
- margin-bottom: 2px;
80
- }
81
-
82
72
  .tpDatasetPane {
83
73
  padding: 5px !important;
84
74
  padding-left: 10px !important;
@@ -117,12 +107,12 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
117
107
 
118
108
  .tpLegend { font-size:13px; /* border: 2px solid transparent; */ cursor:default; word-wrap: break-word; clear:both}
119
109
  .tpLegendHl { background-color: #ccc; color: black; }
120
- .tpHint { font-weight:normal; line-height:1.4; font-size: 80%}
121
- #tpLegendHeader { background-color:#eee; color: #777 }
110
+ .tpHint { font-weight:normal; line-height:1.4; font-size: 80%; margin-top:4px}
111
+ #tpLegendHeader { background-color:#eee; color: #777; margin-top: 2px}
122
112
  #tpLegendTitle { font-weight: bold }
123
113
  #tpLegendSubTitle { font-size: 80%; font-style: italic }
124
- #tpLegendCol1 { padding-left: 1px}
125
- #tpLegendCol2 { float: right; padding-right: 2px}
114
+ #tpLegendCol1 { padding-left: 1px; vertical-align: middle}
115
+ #tpLegendCol2 { float: right; padding-right: 2px; padding-top:2px}
126
116
  .tpLegendSelect { outline: 2px solid black }
127
117
  .tpLegendLabel { display:inline; user-select: none; }
128
118
  /*.tpLegendCount { display:inline-block; position: absolute; right: 4px; color: #888} */
@@ -130,6 +120,14 @@ section { font-weight: bold; padding-top: 5px; padding-bottom: 5px }
130
120
  .tpLegend .tpLegendCheckbox { margin-right: 2px; margin-top: 2px}
131
121
  .tpGrey { color: #bbb }
132
122
 
123
+ #tpLegendColorChecked,
124
+ #tpLegendAll,
125
+ #tpLegendNone,
126
+ #tpLegendInvert,
127
+ #tpLegendNotNull {
128
+ font-size: 14px;
129
+ margin: 1px 1px;
130
+ }
133
131
 
134
132
  .ui-helper-reset { font-size: 12px}
135
133
  .ui-tabs { padding: 0 }
@@ -106,13 +106,14 @@ var cbUtil = (function () {
106
106
  onSuccess(data);
107
107
  },
108
108
  error : function() {
109
- if (!silent)
109
+ if (!silent) {
110
110
  if (url.search("dataset.json")>-1)
111
111
  alert("Could not find a dataset at "+url+". If you are sure that the link is correct, please "+
112
112
  "contact the administrator of this server, "+
113
113
  "or cells@ucsc.edu if this is running at UCSC. ");
114
114
  else
115
115
  alert("Could not load "+url);
116
+ }
116
117
  onSuccess(null);
117
118
  }
118
119
  });
@@ -440,6 +441,11 @@ function CbDbFile(url) {
440
441
  }
441
442
  }
442
443
 
444
+ function gotMatrix(data) {
445
+ matrixIndex = data;
446
+ gotOneFile();
447
+ }
448
+
443
449
  // load config and call onDone
444
450
  var dsUrl = cbUtil.joinPaths([this.url, "dataset.json"]);
445
451
  // deactivate the cache - this is a small file that users typically change often
@@ -452,7 +458,7 @@ function CbDbFile(url) {
452
458
  if (self.name!='') {
453
459
  // start loading gene offsets in the background now, because this takes a while
454
460
  var osUrl = cbUtil.joinPaths([this.url, "exprMatrix.json"]);
455
- cbUtil.loadJson(osUrl, function(data) { matrixIndex = data; gotOneFile();}, true);
461
+ cbUtil.loadJson(osUrl, gotMatrix, true);
456
462
  } else {
457
463
  gotOneFile();
458
464
  }
@@ -765,29 +771,34 @@ function CbDbFile(url) {
765
771
  /* supports NaN special values */
766
772
  var breaks = [];
767
773
 
774
+ // remove the Nan values - XX REVISIT
775
+ for (let i = 0; i < arr.length; i++) {
776
+ if (Number.isNaN(arr[i])) {
777
+ arr[i] = -Infinity;
778
+ }
779
+ }
780
+
768
781
  // sort expression values into a new array
769
782
  var arrSorted = arr.slice(); // slice() = "make copy"
770
783
  arrSorted.sort();
771
784
 
772
- var pos = 0;
773
- if (arrSorted[0] == bin0Val) { // skip all bin0Val and remember position
774
- var zeros = 0;
785
+ var minPos = 0;
786
+ if (arrSorted[0] == bin0Val) { // do we have any values in bin0? -> skip them and keep their position
775
787
  for (var i = 0, I = arrSorted.length; i < I; i++) {
776
788
  if (arrSorted[i] > bin0Val) {
777
- pos = i;
789
+ minPos = i;
778
790
  break;
779
791
  }
780
- zeros += 1;
781
792
  }
782
793
  }
783
- var minVal = arrSorted[pos];
794
+ var minVal = arrSorted[minPos];
784
795
  // calculate optimal bin size in numbers of cells
785
- var desiredBinSize = Math.floor((arrSorted.length - pos) / (maxBinCount - breaks.length));
796
+ var desiredBinSize = Math.floor((arrSorted.length - minPos) / (maxBinCount - breaks.length));
786
797
  var currentCount = 0;
787
- var binMin = arrSorted[pos];
798
+ var binMin = arrSorted[minPos];
788
799
  var binMax;
789
800
  var lastValue;
790
- for (var i = pos, I = arrSorted.length; i < I; i++) {
801
+ for (var i = minPos, I = arrSorted.length; i < I; i++) {
791
802
  // determine if current value can be used as a break
792
803
  // i.e. it is different from the previous
793
804
  var isBreak = false;
@@ -816,16 +827,19 @@ function CbDbFile(url) {
816
827
 
817
828
  var binInfo = [];
818
829
 
819
- var bin0MinMax = "Unknown";
830
+ var bin0MinMax = "Unknown"; // meta data often has empty string = "Unknown"
820
831
  if (bin0Val === 0) {
821
832
  bin0MinMax = 0;
822
833
  }
834
+ if (bin0Val === FLOATNAN) { // this can only happen for expression matrices with "NAN" values in them
835
+ bin0MinMax = "NaN";
836
+ }
823
837
  binInfo.push([bin0MinMax, bin0MinMax, binCounts[0]]);
824
838
 
825
839
  var idx = binCounts[0];
826
840
  for (let i=0; i < breaks.length; i++) {
827
841
  // use sorted array of expression values
828
- // to get more accurate values
842
+ // to get the exact break values
829
843
  var binMin = arrSorted[idx];
830
844
  var binCount = binCounts[i+1];
831
845
  idx += binCount - 1;
@@ -1008,11 +1022,13 @@ function CbDbFile(url) {
1008
1022
  else
1009
1023
  geneDesc = geneDescs.join("; ");
1010
1024
 
1011
- // specVal is the value for a special bin, usually 0
1025
+ // specVal is the value for the first bin, usually 0. But can also be -Infinity
1012
1026
  var specVal = 0;
1013
1027
  var matrixMin = self.getMatrixMin();
1014
1028
  if (matrixMin < 0)
1015
- specVal = null;
1029
+ specVal = null; // null = no special bin handling at all
1030
+ if (matrixMin === FLOATNAN)
1031
+ specVal = FLOATNAN;
1016
1032
 
1017
1033
  let newArr = [];
1018
1034
  if (updateOp) {
@@ -1023,8 +1039,12 @@ function CbDbFile(url) {
1023
1039
  newArr = cbUtil.arrAddMult(self.currExprArr, arrs);
1024
1040
  else
1025
1041
  newArr = cbUtil.arrSubMult(self.currExprArr, arrs);
1026
- } else
1027
- newArr = sumAllArrs(ArrType, arrs);
1042
+ } else {
1043
+ if (arrs.length===1)
1044
+ newArr = arrs[0];
1045
+ else
1046
+ newArr = sumAllArrs(ArrType, arrs);
1047
+ }
1028
1048
 
1029
1049
  var discFunc = null;
1030
1050
  if (strategy==="range")
@@ -1682,6 +1702,8 @@ function CbDbFile(url) {
1682
1702
  var matrixMin = 0;
1683
1703
  if ("_range" in validNames)
1684
1704
  matrixMin = validNames["_range"][0];
1705
+ if (matrixMin === null)
1706
+ matrixMin = FLOATNAN;
1685
1707
  return matrixMin;
1686
1708
  }
1687
1709