Thayer Alshaabi1,2*, Daniel E. Milkie1, Gaoxiang Liu2, Cyna Shirazinejad2, Jason L. Hong2, Kemal Achour2, Frederik Görlitz2, Ana Milunovic-Jevtic2, Cat Simmons2, Ibrahim S. Abuzahriyeh2, Erin Hong2, Samara Erin Williams2, Nathanael Harrison2, Evan Huang2, Eun Seok Bae2, Alison N. Killilea2, David G. Drubin2, Ian A. Swinburne2, Srigokul Upadhyayula2,3,4*, Eric Betzig1,2,5*
Important
Source code is tested on the following operating systems:
- Ubuntu 22.04
- Rocky Linux 8.10 & 9.3
- Windows 11 Pro 22621
numpy
pandas
cupy
cuda-version==12.8
astropy
seaborn
scikit-image
scikit-spatial
pytest
pytest-order
matplotlib==3.8.4
ujson
zarr
pycudadecon
dphtools
tifffile==2023.9.18
imagecodecs==2023.9.18
nvitop
pycuda
pytest
tqdm
cachetools
line_profiler_pycharm
Caution
NVIDIA GPU with a driver release 545 or later, and CUDA 12.8.
git clone --recurse-submodules https://github.com/cell-observatory/beads_simulator.git
To later update to the latest, greatest
git pull --recurse-submodules
conda/mamba create --name beads --file requirements.txt
Or use pip install -r requirements.txt
Activate conda environment
conda activate beads
- Wavefront simulation
- Fourier embedding
- PSF dataset generator
- Beads dataset generator
- Multimodal beads dataset generator
- Simulation of ideal and aberrated wavefronts where the amplitudes of the zernike modes are drawn from a given distribution:
- Single
- Bimodal
- Multinomial
- Powerlaw
- Dirichlet
Tip
For more options, please refer to wavefront.py
Tip
For more options, please refer to embedding.py
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_random_aberrated_psf
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_random_aberrated_psf Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/_home_thayer_Github_beads_simulator_lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
PASSED
=============================================== 1 passed, 8 deselected, 1 warning in 7.68s ================================================
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_random_defocused_psf
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_random_defocused_psf Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/_home_thayer_Github_beads_simulator_lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
PASSED
=============================================== 1 passed, 8 deselected, 1 warning in 7.68s ================================================
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_random_aberrated_defocused_psf
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_random_aberrated_defocused_psf Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/_home_thayer_Github_beads_simulator_lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
PASSED
=============================================== 1 passed, 8 deselected, 1 warning in 7.71s ================================================
Tip
For more options, please refer to psf_dataset.py
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_psf_dataset
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_psf_dataset Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/_home_thayer_Github_beads_simulator_lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 2.83it/s]
PASSED
===================================================== 1 passed, 8 deselected in 5.19s =====================================================
Tip
For more options, please refer to psf_dataset.py --help
usage: psf_dataset.py [-h] [--filename FILENAME] [--outdir OUTDIR] [--emb] [--iters ITERS] [--kernels] [--noise] [--normalize] [--x_voxel_size X_VOXEL_SIZE] [--y_voxel_size Y_VOXEL_SIZE] [--z_voxel_size Z_VOXEL_SIZE] [--input_shape INPUT_SHAPE] [--modes MODES] [--min_photons MIN_PHOTONS] [--max_photons MAX_PHOTONS] [--psf_type PSF_TYPE] [--dist DIST] [--mode_dist MODE_DIST] [--gamma GAMMA] [--signed] [--rotate] [--min_amplitude MIN_AMPLITUDE]
[--max_amplitude MAX_AMPLITUDE] [--min_lls_defocus_offset MIN_LLS_DEFOCUS_OFFSET] [--max_lls_defocus_offset MAX_LLS_DEFOCUS_OFFSET] [--refractive_index REFRACTIVE_INDEX] [--na_detection NA_DETECTION] [--lam_detection LAM_DETECTION] [--cpu_workers CPU_WORKERS] [--use_theoretical_widefield_simulator] [--skip_remove_background]
options:
-h, --help show this help message and exit
--filename FILENAME
--outdir OUTDIR
--emb toggle to save fourier embeddings only
--iters ITERS number of samples (Default: `10`)
--kernels toggle to save raw kernels
--noise toggle to add random background and shot noise to the generated PSFs
--normalize toggle to scale the generated PSFs to 1.0
--x_voxel_size X_VOXEL_SIZE
lateral voxel size in microns for X (Default: `0.125`)
--y_voxel_size Y_VOXEL_SIZE
lateral voxel size in microns for Y (Default: `0.125`)
--z_voxel_size Z_VOXEL_SIZE
axial voxel size in microns for Z (Default: `0.2`)
--input_shape INPUT_SHAPE
PSF input shape (Default: `64`)
--modes MODES number of modes to describe aberration (Default: `55`)
--min_photons MIN_PHOTONS
minimum photons for training samples (Default: `5000`)
--max_photons MAX_PHOTONS
maximum photons for training samples (Default: `10000`)
--psf_type PSF_TYPE widefield, 2photon, confocal, or a path to an LLS excitation profile (Default: `../lattice/YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat`)
--dist DIST distribution of the zernike amplitudes (Default: `single`)
--mode_dist MODE_DIST
distribution of the zernike modes (Default: `pyramid`)
--gamma GAMMA exponent for the powerlaw distribution (Default: `0.75`)
--signed optional flag to generate a symmetric (pos/neg) semi-distributions for the given range of amplitudes
--rotate optional flag to introduce a random radial rotation to each zernike mode
--min_amplitude MIN_AMPLITUDE
min amplitude for the zernike coefficients (Default: `0`)
--max_amplitude MAX_AMPLITUDE
max amplitude for the zernike coefficients (Default: `0.25`)
--min_lls_defocus_offset MIN_LLS_DEFOCUS_OFFSET
min value for the offset between the excitation and detection focal plan (microns) (Default: `0`)
--max_lls_defocus_offset MAX_LLS_DEFOCUS_OFFSET
max value for the offset between the excitation and detection focal plan (microns) (Default: `0`)
--refractive_index REFRACTIVE_INDEX
the quotient of the speed of light as it passes through two media (Default: `1.33`)
--na_detection NA_DETECTION
Numerical aperture (Default: `1.0`)
--lam_detection LAM_DETECTION
wavelength in microns (Default: `0.51`)
--cpu_workers CPU_WORKERS
number of CPU cores to use (Default: `-1`)
--use_theoretical_widefield_simulator
optional toggle to use an experimental complex pupil to estimate amplitude attenuation (cosine factor)
--skip_remove_background
optional toggle to skip preprocessing input data using the DoG filter
Synthatic samples with 1 up to
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_multipoint_dataset
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_multipoint_dataset Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/_home_thayer_Github_beads_simulator_lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:14<00:00, 1.48s/it]
PASSED
=============================================== 1 passed, 8 deselected, 1 warning in 16.47s ===============================================
Tip
For more options, please refer to multipoint_dataset.py
usage: multipoint_dataset.py [-h] [--filename FILENAME] [--npoints NPOINTS] [--outdir OUTDIR] [--emb] [--embedding_option EMBEDDING_OPTION] [--iters ITERS] [--kernels] [--noise] [--normalize] [--x_voxel_size X_VOXEL_SIZE] [--y_voxel_size Y_VOXEL_SIZE] [--z_voxel_size Z_VOXEL_SIZE] [--input_shape INPUT_SHAPE] [--random_crop RANDOM_CROP] [--modes MODES] [--min_photons MIN_PHOTONS] [--max_photons MAX_PHOTONS] [--psf_type PSF_TYPE] [--dist DIST]
[--mode_dist MODE_DIST] [--gamma GAMMA] [--signed] [--rotate] [--randomize_object_size] [--min_amplitude MIN_AMPLITUDE] [--max_amplitude MAX_AMPLITUDE] [--min_lls_defocus_offset MIN_LLS_DEFOCUS_OFFSET] [--max_lls_defocus_offset MAX_LLS_DEFOCUS_OFFSET] [--refractive_index REFRACTIVE_INDEX] [--na_detection NA_DETECTION] [--fill_radius FILL_RADIUS] [--object_size OBJECT_SIZE] [--uniform_background UNIFORM_BACKGROUND]
[--lam_detection LAM_DETECTION] [--alpha_val ALPHA_VAL] [--phi_val PHI_VAL] [--cpu_workers CPU_WORKERS] [--override] [--plot] [--use_theoretical_widefield_simulator] [--skip_remove_background]
options:
-h, --help show this help message and exit
--filename FILENAME
--npoints NPOINTS
--outdir OUTDIR
--emb toggle to save fourier embeddings only
--embedding_option EMBEDDING_OPTION
type of embedding to use: ["spatial_planes", "principle_planes", "rotary_slices", "spatial_quadrants"] (Default: `['spatial_planes']`)
--iters ITERS number of samples (Default: `10`)
--kernels toggle to save raw kernels
--noise toggle to add random background and shot noise to the generated PSFs
--normalize toggle to scale the generated PSFs to 1.0
--x_voxel_size X_VOXEL_SIZE
lateral voxel size in microns for X (Default: `0.125`)
--y_voxel_size Y_VOXEL_SIZE
lateral voxel size in microns for Y (Default: `0.125`)
--z_voxel_size Z_VOXEL_SIZE
axial voxel size in microns for Z (Default: `0.2`)
--input_shape INPUT_SHAPE
PSF input shape (Default: `64`)
--random_crop RANDOM_CROP
--modes MODES number of modes to describe aberration (Default: `55`)
--min_photons MIN_PHOTONS
minimum photons for training samples (Default: `5000`)
--max_photons MAX_PHOTONS
maximum photons for training samples (Default: `10000`)
--psf_type PSF_TYPE widefield, 2photon, confocal, or a path to an LLS excitation profile (Default: `['../lattice/YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat']`)
--dist DIST distribution of the zernike amplitudes (Default: `single`)
--mode_dist MODE_DIST
distribution of the zernike modes (Default: `pyramid`)
--gamma GAMMA exponent for the powerlaw distribution (Default: `0.75`)
--signed optional flag to generate a symmetric (pos/neg) semi-distributions for the given range of amplitudes
--rotate optional flag to introduce a random radial rotation to each zernike mode
--randomize_object_size
optional flag to randomize voxel size during training
--min_amplitude MIN_AMPLITUDE
min amplitude for the zernike coefficients (Default: `0`)
--max_amplitude MAX_AMPLITUDE
max amplitude for the zernike coefficients (Default: `0.25`)
--min_lls_defocus_offset MIN_LLS_DEFOCUS_OFFSET
min value for the offset between the excitation and detection focal plan (microns) (Default: `0`)
--max_lls_defocus_offset MAX_LLS_DEFOCUS_OFFSET
max value for the offset between the excitation and detection focal plan (microns) (Default: `0`)
--refractive_index REFRACTIVE_INDEX
the quotient of the speed of light as it passes through two media (Default: `1.33`)
--na_detection NA_DETECTION
Numerical aperture (Default: `1.0`)
--fill_radius FILL_RADIUS
Fractional cylinder radius (0-1) that defines where a bead may be placed in X Y Z. (Default: `0.0`)
--object_size OBJECT_SIZE
optional bead size (Default: 0 for diffraction-limited beads, -1 for beads with random sizes) (Default: `0.0`)
--uniform_background UNIFORM_BACKGROUND
optional uniform background value (Default: `0`)
--lam_detection LAM_DETECTION
wavelength in microns (Default: `0.51`)
--alpha_val ALPHA_VAL
values to use for the `alpha` embedding [options: real, abs] (Default: `abs`)
--phi_val PHI_VAL values to use for the `phi` embedding [options: angle, imag, abs] (Default: `angle`)
--cpu_workers CPU_WORKERS
number of CPU cores to use (Default: `-1`)
--override optional toggle to override existing data
--plot optional toggle to plot preprocessing
--use_theoretical_widefield_simulator
optional toggle to use an experimental complex pupil to estimate amplitude attenuation (cosine factor)
--skip_remove_background
optional toggle to skip preprocessing input data using the DoG filter
Synthatic samples with 1 up to
pytest -s -v --disable-pytest-warnings --color=yes tests/test_datasets.py -k test_multimodal_dataset
=========================================================== test session starts ===========================================================
platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /home/thayer/miniforge3/envs/beads/bin/python3.12
cachedir: .pytest_cache
rootdir: /home/thayer/Github/beads_simulator
plugins: order-1.3.0
collected 9 items / 8 deselected / 1 selected
tests/test_datasets.py::test_multimodal_dataset Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_YuMB_NAlattice0p35_NAAnnulusMax0p40_NAsigma0p1.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_Gaussian_NAexc0p21_NAsigma0p21_annulus0p4-0p2_crop0p1_FWHM51p0.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_Gaussian_NAexc0p21_NAsigma0p21_annulus0p4-0p2_crop0p1_FWHM51p0.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_MBSq_NAexc0p30_annulus0p375-0p225_FWHM48p5.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_MBSq_NAexc0p30_annulus0p375-0p225_FWHM48p5.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_Sinc_by_lateral_SW_NAexc0p32_NAsigma5p0_annulus0p4-0p2_realSLM_FWHM51p5.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_Sinc_by_lateral_SW_NAexc0p32_NAsigma5p0_annulus0p4-0p2_realSLM_FWHM51p5.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_v2Hex_NAexc0p50_NAsigma0p075_annulus0p60-0p40_FWHM53p0.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_v2Hex_NAexc0p50_NAsigma0p075_annulus0p60-0p40_FWHM53p0.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_v2HexRect_NAexc0p50_NAsigma0p15_annulus0p60-0p40_FWHM_56p0.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_v2HexRect_NAexc0p50_NAsigma0p15_annulus0p60-0p40_FWHM_56p0.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_ACHex_NAexc0p40_NAsigma0p075_annulus0p6-0p2_crop0p1_FWHM52p0.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_ACHex_NAexc0p40_NAsigma0p075_annulus0p6-0p2_crop0p1_FWHM52p0.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_MBHex_NAexc0p43_annulus0p47_0p40_crop0p08_FWHM48p0.mat_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/.._lattice_MBHex_NAexc0p43_annulus0p47_0p40_crop0p08_FWHM48p0.mat_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/widefield_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/widefield_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/2photon_shape_64-64-64_lam_0.92_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/2photon_shape_128-128-128_lam_0.92_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/confocal_shape_64-64-64_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
Loading cached SyntheticPSF instance from /home/thayer/Github/beads_simulator/SyntheticPSFCache/confocal_shape_128-128-128_lam_0.51_na_1.0_ri_1.33_x_0.097_y_0.097_z_0.2_twd_simulator_False
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [04:48<00:00, 28.83s/it]
PASSED
========================================= 1 passed, 8 deselected, 1 warning in 290.55s (0:04:50) ==========================================
@article{alshaabi2025fourier,
title={Fourier-Based 3D Multistage Transformer for Aberration Correction in Multicellular Specimens},
author={Thayer Alshaabi and Daniel E. Milkie and Gaoxiang Liu and Cyna Shirazinejad and Jason L. Hong and Kemal Achour and Frederik Görlitz and Ana Milunovic-Jevtic and Cat Simmons and Ibrahim S. Abuzahriyeh and Erin Hong and Samara Erin Williams and Nathanael Harrison and Evan Huang and Eun Seok Bae and Alison N. Killilea and David G. Drubin and Ian A. Swinburne and Srigokul Upadhyayula and Eric Betzig},
journal={arXiv preprint arXiv:2503.12593},
year={2025},
url={https://arxiv.org/abs/2503.12593},
}
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Copyright 2025 Cell Observatory.