Skip to content

Load xenium points using tiled approach#2286

Merged
keller-mark merged 55 commits intomainfrom
keller-mark/xenium-points
Jan 16, 2026
Merged

Load xenium points using tiled approach#2286
keller-mark merged 55 commits intomainfrom
keller-mark/xenium-points

Conversation

@keller-mark
Copy link
Copy Markdown
Member

@keller-mark keller-mark commented Oct 8, 2025

Towards #1834
Fixes #2022
Related to #1993

Background

TODO:

  • Improve binary search using cached row groups (see comment in bisectRight function)
  • Point coloring and/or filtering features
  • Loading indicator for number of tiles remaining to load
    • Improve loading indicator UI (from text to loading bar)
  • Separate code paths for data loaders that support tiled loading vs. not.
    • Function to check whether loader supports tiled loading, and then whether the parquet schema contains the morton_code_2d column + zattrs bounding_box metadata.
  • Docs on data quirks required for usage. Pointers to vitessce-python data_utils helpers (once released)
  • Improve legend for Points layer in SpatialBetaSubscriber
  • Unit tests
  • Semantic zooming functionality via new coordination type(s)
  • Consideration of 2.5D / 3D datasets (filter based on targetZ in 2.5D case. do not render anything in 3D/volumetric rendering case)
  • Address comments in How to read a single row group batch, given only the row group bytes and the schema bytes kylebarron/parquet-wasm#804
  • Begin loading parquet metadata (and finding total num. parts) before any tile has been requested DeckGL begins loading tiles on initial tilelayer render
  • Limit queryCache size? Allow for custom implementations of QueryCache (limit cache size) TanStack/query#4596
  • Can intermediate react query queries can be cleared from cache?
  • Query cancellation via DeckGL tileLayer abortcontroller signal? But it does not seem to be triggered

Notes

This in effect couples obsPoints to featureType, rather than using separate featureLabels. But this PR only affects the spatial-beta view, so it does not result in a breaking change for the legacy Spatial view (e.g., the codeluppi-2018 example is unchanged https://vitessce.io/#?dataset=codeluppi-2018 ). In the future we probably want to make this change everywhere (E.g., featureType information must be supplied via the obsPoints data type, rather than a separate data type).

Essentially, after this PR, points should always be passed to the spatialBeta view via SpatialData Points. We will focus on passing points via SpatialData and ignore other data structures.

Checklist

  • Have tested PR with one or more demo configurations
  • Documentation added, updated, or not applicable

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Oct 8, 2025

Size Change: +30.5 kB (+0.16%)

Total Size: 18.5 MB

Filename Size Change
./packages/main/prod/dist/index-********.js 11.3 MB +30.5 kB (+0.27%)
./packages/main/prod/dist/ReactNeuroglancer-********.js 0 B -1.67 MB (removed) 🏆
./packages/main/prod/dist/troika-three-text.esm-B2xxew6-.js 0 B -179 kB (removed) 🏆
./packages/main/prod/dist/ReactNeuroglancer-C-MUPiqz.js 1.67 MB +1.67 MB (new file) 🆕
./packages/main/prod/dist/troika-three-text.esm-********.js 179 kB +179 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
./packages/main/prod/dist/blosc-********.js 612 kB
./packages/main/prod/dist/chunk-INHXZS53-********.js 558 B
./packages/main/prod/dist/deflate-********.js 208 B
./packages/main/prod/dist/higlass-********.js 3.57 MB
./packages/main/prod/dist/index.min.js 1.38 kB
./packages/main/prod/dist/jpeg-********.js 15.6 kB
./packages/main/prod/dist/lerc-********.js 89.3 kB
./packages/main/prod/dist/lz4-********.js 43.9 kB
./packages/main/prod/dist/lzw-********.js 2.07 kB
./packages/main/prod/dist/OrbitControls-********.js 229 kB
./packages/main/prod/dist/packbits-********.js 541 B
./packages/main/prod/dist/pako.esm-********.js 37.1 kB
./packages/main/prod/dist/raw-********.js 133 B
./packages/main/prod/dist/webimage-********.js 801 B
./packages/main/prod/dist/zstd-********.js 754 kB

compressed-size-action

@keller-mark keller-mark marked this pull request as draft October 8, 2025 14:30
@keller-mark keller-mark marked this pull request as ready for review December 17, 2025 20:02
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Dec 17, 2025

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 13.26% 9155 / 69030
🔵 Statements 13.26% 9155 / 69030
🔵 Functions 48.53% 529 / 1090
🔵 Branches 67.27% 1396 / 2075
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
examples/configs/src/index.js 0% 0% 0% 0% 1-252
examples/configs/src/view-configs/spatial-beta/spatialdata-xenium_rep1_io.js 0% 0% 0% 0% 1-173
packages/constants-internal/src/constants.ts 100% 100% 100% 100%
packages/constants-internal/src/coordination.ts 100% 100% 100% 100%
packages/file-types/csv/src/csv-loaders/ObsPointsCsv.js 0% 0% 0% 0% 1-50
packages/file-types/spatial-zarr/src/SpatialDataPointsSource.js 0% 100% 100% 0% 4-199
packages/file-types/spatial-zarr/src/SpatialDataTableSource.js 0% 100% 100% 0% 5-636
packages/file-types/spatial-zarr/src/parquet-query-utils.js 0% 100% 100% 0% 8-527
packages/file-types/spatial-zarr/src/spatialdata-points-zorder.js 0% 100% 100% 0% 6-224
packages/file-types/spatial-zarr/src/spatialdata-loaders/SpatialDataObsPointsLoader.js 0% 0% 0% 0% 1-202
packages/file-types/zarr/src/anndata-loaders/ObsPointsAnndataLoader.js 0% 0% 0% 0% 1-53
packages/gl/src/deck.js 0% 0% 0% 0% 1-12
packages/legend/src/Legend.tsx 0% 100% 100% 0% 2-1008
packages/legend/src/MultiLegend.tsx 0% 0% 0% 0% 1-275
packages/legend/src/types.ts 100% 100% 100% 100%
packages/main/all/src/base-plugins.ts 99.52% 85.71% 100% 99.52% 243-244
packages/styles/src/index.js 0% 100% 100% 0% 4-123
packages/view-types/layer-controller-beta/src/ImageLayerController.js 0% 100% 100% 0% 3-649
packages/view-types/layer-controller-beta/src/LayerController.js 0% 0% 0% 0% 1-147
packages/view-types/layer-controller-beta/src/LayerControllerSubscriber.js 0% 100% 100% 0% 4-360
packages/view-types/layer-controller-beta/src/PointLayerController.js 0% 100% 100% 0% 4-481
packages/view-types/spatial-beta/src/Spatial.js 0% 100% 100% 0% 3-2185
packages/view-types/spatial-beta/src/SpatialSubscriber.js 0% 100% 100% 0% 4-1135
packages/vit-s/src/data-hooks-multilevel.js 0% 0% 0% 0% 1-321
packages/vit-s/src/index.js 0% 0% 0% 0% 1-109
packages/vit-s/src/state/hooks.js 26.61% 87.75% 29.68% 26.61% 53-54, 60-61, 67-68, 91-96, 98-104, 107-108, 225-226, 262-291, 293-372, 374-387, 389-401, 403-411, 413-426, 435-439, 456-462, 503-507, 534-545, 564-592, 595-599, 602-622, 625-652, 655-720, 723-741, 749-750, 767-836, 845-859, 869-882, 893-960, 976-980, 998-1006, 1009, 1028-1054, 1063-1064, 1081-1095, 1111-1114, 1143-1144, 1153-1154, 1183-1184, 1193-1194, 1216-1217, 1226-1227, 1236-1237, 1246-1247, 1256-1257, 1266-1272, 1280-1281
Generated in workflow #4773 for commit 14a105b by the Vitest Coverage Report Action

@keller-mark keller-mark merged commit 424c943 into main Jan 16, 2026
7 checks passed
@keller-mark keller-mark deleted the keller-mark/xenium-points branch January 16, 2026 14:43
@github-actions github-actions bot mentioned this pull request Jan 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10X Xenium demo

1 participant