cellbrowser 1.2.15.post0.dev8__tar.gz → 1.2.16__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 (180) hide show
  1. {cellbrowser-1.2.15.post0.dev8/src/cbPyLib/cellbrowser.egg-info → cellbrowser-1.2.16}/PKG-INFO +1 -1
  2. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/README.rst +11 -1
  3. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/R/cellbrowser.R +38 -6
  4. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/_version.py +3 -3
  5. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/css/cellBrowser.css +12 -14
  6. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/js/cbData.js +39 -17
  7. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/js/cellBrowser.js +202 -68
  8. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/js/maxPlot.js +1 -1
  9. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cellbrowser.py +287 -191
  10. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/convert.py +8 -2
  11. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/geneinfo.py +16 -1
  12. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/genes.py +26 -17
  13. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/hubmaker.py +2 -4
  14. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16/src/cbPyLib/cellbrowser.egg-info}/PKG-INFO +1 -1
  15. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/LICENSE +0 -0
  16. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/MANIFEST.in +0 -0
  17. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/setup.cfg +0 -0
  18. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/setup.py +0 -0
  19. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/RangeHTTPServer/__init__.py +0 -0
  20. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/RangeHTTPServer/__main__.py +0 -0
  21. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/__init__.py +0 -0
  22. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/bw_genes.py +0 -0
  23. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.eot +0 -0
  24. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.ttf +0 -0
  25. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff +0 -0
  26. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/css/MaterialIcons-Regular.woff2 +0 -0
  27. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/Chart.bundle.min.js +0 -0
  28. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/FastBitSet.js +0 -0
  29. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/FileSaver.1.1.20151003.min.js +0 -0
  30. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/OverlayScrollbars.min.css +0 -0
  31. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-dropmenu.min.css +0 -0
  32. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.js +0 -0
  33. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap-submenu.min.css +0 -0
  34. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.3.3.7.min.css +0 -0
  35. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.css +0 -0
  36. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/bootstrap.min.js +0 -0
  37. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/chartjs-chart-box-and-violin-plot.js +0 -0
  38. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite.png +0 -0
  39. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen-sprite@2x.png +0 -0
  40. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.1.8.2.min.css +0 -0
  41. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/chosen.jquery.min.js +0 -0
  42. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/drawImage-clipper.js +0 -0
  43. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/font-awesome.css +0 -0
  44. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/googleMaterialIcons.css +0 -0
  45. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/hamster.js +0 -0
  46. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  47. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_444444_256x240.png +0 -0
  48. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_555555_256x240.png +0 -0
  49. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777620_256x240.png +0 -0
  50. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_777777_256x240.png +0 -0
  51. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_cc0000_256x240.png +0 -0
  52. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/images/ui-icons_ffffff_256x240.png +0 -0
  53. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/intro.min.js +0 -0
  54. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/introjs.2.4.0.min.css +0 -0
  55. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui-1.12.1.css +0 -0
  56. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery-ui.min.js +0 -0
  57. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.3.1.1.min.js +0 -0
  58. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.css +0 -0
  59. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.contextMenu.js +0 -0
  60. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.event.drag-2.3.0.js +0 -0
  61. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.overlayScrollbars.min.js +0 -0
  62. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.sparkline.min.js +0 -0
  63. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.js +0 -0
  64. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tablesorter.widgets.js +0 -0
  65. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.1.0.3.min.css +0 -0
  66. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.tipsy.min.js +0 -0
  67. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jquery.ui.position.min.js +0 -0
  68. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/jsurl2.js +0 -0
  69. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/lz-string.js +0 -0
  70. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/materialIcons.woff +0 -0
  71. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/minified.js +0 -0
  72. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/mousetrap.min.js +0 -0
  73. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/normalizeWheel.js +0 -0
  74. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/pako_inflate.min.js +0 -0
  75. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/palette.js +0 -0
  76. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/papaparse.min.js +0 -0
  77. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/reorder.v1.js +0 -0
  78. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/scaleColorPerceptual.js +0 -0
  79. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/science.v1.js +0 -0
  80. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.4.0.4.min.css +0 -0
  81. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/select2.min.js +0 -0
  82. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.bootstrap3.css +0 -0
  83. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/selectize.js +0 -0
  84. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangedecorator.js +0 -0
  85. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellrangeselector.js +0 -0
  86. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.cellselectionmodel.js +0 -0
  87. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.core.js +0 -0
  88. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.editors.js +0 -0
  89. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.examples.css +0 -0
  90. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.formatters.js +0 -0
  91. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.css +0 -0
  92. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/slick.grid.js +0 -0
  93. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum-1.8.0.css +0 -0
  94. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/spectrum.min.js +0 -0
  95. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/split.js +0 -0
  96. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.js +0 -0
  97. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/tablesort.number.min.js +0 -0
  98. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/.npmignore +0 -0
  99. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/LICENSE +0 -0
  100. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/Makefile +0 -0
  101. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/README.md +0 -0
  102. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/browser.js +0 -0
  103. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/build.js +0 -0
  104. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/d3-random-matrix.js +0 -0
  105. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/example.png +0 -0
  106. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/gradients.js +0 -0
  107. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/example/package.json +0 -0
  108. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/inferno.json +0 -0
  109. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/magma.json +0 -0
  110. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/plasma.json +0 -0
  111. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/hex/viridis.json +0 -0
  112. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/inferno.js +0 -0
  113. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/magma.js +0 -0
  114. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/package.json +0 -0
  115. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/plasma.js +0 -0
  116. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/inferno.json +0 -0
  117. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/magma.json +0 -0
  118. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/plasma.json +0 -0
  119. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/rgb/viridis.json +0 -0
  120. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/hex2rgb.js +0 -0
  121. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/interpolate.js +0 -0
  122. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/utils/rgb2hex.js +0 -0
  123. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/temp/node_modules/scale-color-perceptual/viridis.js +0 -0
  124. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/theme.bootstrap_3.css +0 -0
  125. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/ext/tiny-queue.js +0 -0
  126. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/files.json +0 -0
  127. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.gc34.tsv +0 -0
  128. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/hg19.json.gz +0 -0
  129. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.gc34.tsv +0 -0
  130. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/hg38.json.gz +0 -0
  131. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/log.txt +0 -0
  132. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/makeGenes.py +0 -0
  133. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.json.gz +0 -0
  134. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/genes/mm10.vm25.tsv +0 -0
  135. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/README.md +0 -0
  136. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/center.png +0 -0
  137. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/README.txt +0 -0
  138. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-justify-left.png +0 -0
  139. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/gtk-save.png +0 -0
  140. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/log.txt +0 -0
  141. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-16.png +0 -0
  142. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-center-24.png +0 -0
  143. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-16.png +0 -0
  144. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-controller-24.png +0 -0
  145. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-edit-16.png +0 -0
  146. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-gravity-west-24.png +0 -0
  147. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-16.png +0 -0
  148. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-info-24.png +0 -0
  149. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-merge-down-16.png +0 -0
  150. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-scale-16.png +0 -0
  151. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-16.png +0 -0
  152. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-free-select-22.png +0 -0
  153. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-16.png +0 -0
  154. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-move-22.png +0 -0
  155. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-16.png +0 -0
  156. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-rect-select-22.png +0 -0
  157. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-16.png +0 -0
  158. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/gimpFlat/stock-tool-zoom-22.png +0 -0
  159. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/icons8-help-32.png +0 -0
  160. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/info.png +0 -0
  161. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/lasso.png +0 -0
  162. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/marker.png +0 -0
  163. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/move.png +0 -0
  164. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/select.png +0 -0
  165. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/img/zoom.png +0 -0
  166. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/cbWeb/js/maxHeat.js +0 -0
  167. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/download.py +0 -0
  168. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/cellbrowser.conf +0 -0
  169. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/desc.conf +0 -0
  170. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/hub.conf +0 -0
  171. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/scanpy.conf +0 -0
  172. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/seurat.conf +0 -0
  173. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/sampleConfig/summary.html +0 -0
  174. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser/seurat.py +0 -0
  175. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser.egg-info/SOURCES.txt +0 -0
  176. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser.egg-info/dependency_links.txt +0 -0
  177. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser.egg-info/entry_points.txt +0 -0
  178. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser.egg-info/not-zip-safe +0 -0
  179. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/src/cbPyLib/cellbrowser.egg-info/top_level.txt +0 -0
  180. {cellbrowser-1.2.15.post0.dev8 → cellbrowser-1.2.16}/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.16
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,7 +12,17 @@ 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
15
+ Here are a few datasets that demonstrate these features:
16
+
17
+ - A simple gene expression dataset: https://cells.ucsc.edu/?ds=cortex-dev
18
+ - Spatial transcriptomics support https://ms-subcortical-lesions.cells.ucsc.edu
19
+ - 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
20
+ - Cell trajectories from monocle https://cells-test.gi.ucsc.edu/?ds=pre-postnatal-cortex+ex-neu+rna
21
+ - Cell trajectories from URD https://cells.ucsc.edu/?ds=cardiac-differentiation+trajectory+cm-combined-trajectory
22
+ - 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
23
+ - Brain lipidomics https://cells.ucsc.edu/?ds=brain-lipids
24
+
25
+ To show all our > 200 single cell datasets, see http://cells.ucsc.edu
16
26
 
17
27
  To setup your own cell browser, from Cellranger, Seurat, Scanpy or text files
18
28
  (tsv/csv), or just a single cell expression matrix, read the documentation
@@ -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": "2025-11-12T13:17:35-0800",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "ebe2e27cb09c7f85bdbfee91093a58c64c8ed1b9",
15
- "version": "1.2.15.post0.dev8"
14
+ "full-revisionid": "9d80bedf1b39a0e74cf2e6f9f1481d6b6a66c9cc",
15
+ "version": "1.2.16"
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