Experimental data
August 26, 2026 · View on GitHub
Links to publicaly available SMLM stacks for benchmarking and validation. Locally added files are currently git-ignored — see .gitignore.
That is deliberate:
- This repository is public. Committing a stack publishes it, along with any licensing or prior-publication implications.
- GitHub rejects files over 100 MB and warns above 50 MB. Raw SMLM stacks are routinely far larger.
- Git history is permanent. A large binary committed once bloats every future clone even if it is deleted in a later commit.
The files are still fully usable locally — they are simply untracked.
Dataset I — DNA nanorulers
GATTAquant GATTA-PAINT 80R DNA-PAINT nanoruler (80 nm mark-to-mark), acquired on a Leica GSD system.
Full raw dataset (public): GATTA-PAINT-80R-RAW.zip
from GATTAquant.
| Property | Value |
|---|---|
| Native frame size | 180 × 180 px |
| Bit depth | 16-bit, uncompressed |
| Byte order | little-endian per individual frame; big-endian once concatenated into a stack by ImageJ |
| Pixel size | 99.2 nm (from XResolution 4294967295/42605 = 100808.996 px/cm) |
| Exposure | 80 ms |
The public download is not a single ready-to-load stack — it's one TIFF per frame. webSMLM loads it directly: click Load movie, then select all the frame files at once (Ctrl/Cmd+click, or your file manager's "select all")
Three reasons this dataset is a good fixture beyond raw speed:
- It exercises the multi-file loader (
loadTiffSequence) — natural filename sorting (so frame 2 sorts before frame 10) and per-file decoding, each frame in its own little-endian byte order. - It carries a resolution ground truth — the 80 nm mark-to-mark spacing lets the FRC precision work be validated against a known distance rather than only self-consistency.
FRC on this dataset shows extra peaks at 40 nm and 20 nm, alongside the expected 80 nm one — exact submultiples of the ruler spacing (80/2, 80/4). A periodic structure like a regularly-spaced nanoruler array concentrates its Fourier content at the fundamental spatial frequency and its harmonics, so FRC — which assumes a generic, non-periodic structure — picks those harmonics. Expect this on any sufficiently periodic sample.
Dataset II — 3D STORM (very large, ~4.9 GB)
3D STORM of spectrin rings in neurons, by Christophe Leterrier, on figshare: 3D STORM spectrin rings in neurons.
| Property | Value |
|---|---|
| Frames | ~40,000 |
| Frame size | 256 × 256 px |
| Format | large multi-IFD TIFF (Micro-Manager MMStack) — indexed by walking the IFD chain |
| On disk | ~4.9 GB (never loaded whole — streamed frame-by-frame via File.slice()) |
A good stress test for large-stack handling: webSMLM never loads the file
whole — frames are streamed on demand via File.slice() — so this is a
practical check that a multi-GB stack processes without the browser running
out of memory. It's also a real 3D dataset, useful for exercising Phasor 3D
and z-drift correction on something larger than the synthetic generator.
Camera parameters (Andor iXon 897 EMCCD, 16 µm physical pixel, 256×256 center quadrant, 160 nm/pixel post-magnification; acquisition settings confirmed by Christophe Leterrier from the Nikon NIS-Elements panel): EM gain = 100, e⁻/ADU = 0.1248, baseline 100 ADU.
webSMLM settings to match: Pixel size (nm) = 160; Camera offset (ADU) = 100; Camera gain (photons/ADU) = 0.1248 — used directly, not divided by the EM gain again, since NIS-Elements' "e⁻/ADU" readout already reflects the current EM gain setting (system gain at a given EM setting = unity-gain sensitivity ÷ EM gain). Also consistent physically: 0.1248 e⁻/ADU alone would cap the 16-bit ADC at ~8,000 e⁻, far below this sensor's ~180,000 e⁻ well depth, while ×100 = 12.48 e⁻/ADU is a plausible unity-gain figure. The iXon 897 has a known QE curve (~92.5% peak at 575 nm, back-illuminated) that isn't part of the reported settings above, so as with the EPFL dataset's stated 0.90 e⁻/photon, a QE correction could be layered on top if wanted — not applied here.
Dataset III — 3D astigmatism ground truth (EPFL SMLM 2016 Challenge)
Three files from the EPFL Biomedical Imaging Group's SMLM 2016 3D simulation
challenge, astigmatism (AS) modality, MT0.N1 microtubule structure —
bigwww.epfl.ch/srm/dataset/challenge-3D-simulation
(Sage et al., Super-resolution fight club, Nat. Methods 2019). Unlike the
other stacks in this folder, these are fully synthetic with known
ground-truth emitter positions (positions.csv / activations.csv,
published alongside the LD/HD downloads on the site but not included here) —
the right fixture for validating fit accuracy against a known answer, not
just self-consistency.
| File | Role | Frames | Frame size | On disk |
|---|---|---|---|---|
sequence-as-stack-Beads-AS-Exp.tif | Z-calibration bead stack | 151 | 150 × 150 px | 6.5 MB |
sequence-as-stack-MT0.N1.HD-AS-Exp.tif | High-density microtubules (ground truth) | 2'500 | 64 × 64 px | 19.9 MB |
sequence-as-stack-MT0.N1.LD-AS-Exp.tif | Low-density microtubules (ground truth) | 19'996 | 64 × 64 px | 158.9 MB |
Frame counts and dimensions above were verified directly from each file's own
embedded ImageJ images= tag and TIFF ImageWidth/ImageLength (16-bit,
big-endian), not just copied off the site — its shared "Parameters of
simulation" table lists a generic 64 px / 6400 nm field of view that does
not apply to the beads file, which is actually 150 × 150 px (that row is
evidently boilerplate inherited from the MT0.N1 page template).
Simulation / camera parameters (from the HD dataset's and beads z-stack's "Parameters of simulation" tables on the site; MT0.N1 LD and HD share the same "N1" noise profile — "typical photon counts and background levels for Alexa647 labelled STORM sample"):
| Parameter | Value |
|---|---|
| Pixel size | 100.00 nm (MT0.N1 HD/LD; not embedded as a TIFF resolution tag — set manually) |
| Quantum efficiency (QE) | 0.90 e⁻/photon |
| Wavelength | 660.00 nm |
| Numerical aperture (NA) | 1.49 |
| Read-out noise | Gaussian, σ = 74.4 e⁻ |
| EM gain | 300× (Gamma-distributed multiplicative noise) |
| Spurious (clock-induced) charge | Poisson, mean 0.0020 e⁻/pixel/frame |
| Electron conversion | 45.00 e⁻/ADU |
| Baseline (offset) | 100.00 ADU |
| Saturation | 65535 ADU (16-bit) |
| Total system gain (QE × EM gain / e⁻ per ADU) | 6.00 ADU/photon |
webSMLM settings to match: Pixel size (nm) = 100; Camera offset (ADU) = 100; Camera gain (photons/ADU) = 1 / 6.00 ≈ 0.167 (webSMLM's field multiplies ADU by this to get photons — the site's "total gain" is the inverse, ADU per photon).
Beads z-calibration: 6 beads/slice, z-step 10 nm, range −750 to +750 nm, focal plane (z = 0) at the centre slice → frame 76 of 151, a ready value for the "z=0 ref frame" field. Spanning the full ±750 nm defocus range end to end, it's also a good stress-test for the "Fix bead x,y" calibration option (v0.9.x) — large defocus is exactly where per-frame detection is prone to drift or split.
Molecule density: LD "0.2", HD "2" (unit not stated on the source page).
Candidates for committing as fixtures: sequence-as-stack-Beads-AS-Exp.tif
(6.5 MB) and sequence-as-stack-MT0.N1.HD-AS-Exp.tif (19.9 MB) are both well
under GitHub's 50 MB warning threshold — worth force-adding once we've
validated webSMLM's fits against the published ground truth, so future
regression checks don't depend on re-downloading from EPFL.
sequence-as-stack-MT0.N1.LD-AS-Exp.tif (158.9 MB) stays local-only regardless
(over the 100 MB hard limit).
Dataset IV — spectrally resolved SMLM pair-finding
Data for Figure 2A of Martens et al. " Enabling Spectrally Resolved Single-Molecule Localization Microscopy at High Emitter Densities", Nano Lett. 22(21), 8618–8625 (2022), 10.1021/acs.nanolett.2c03140. The full dataset behind the paper — TIFF stacks for Figures 2–4 and Supplementary Figures 1–2, plus processed CSVs, 19.3 GB total — is on Zenodo: 10.5281/zenodo.6778964.
Localize run across 4
combined, cropped movies loaded together via the multi-file "combine
several multi-frame TIFFs" path (loadTiffFilesAuto()/makeConcatStack(),
see in/out in CLAUDE.md), then Pair. 100,000 frames total, z holds
the inter-order distance (~2,994–3,110 nm here), same trick as always.
Data found a sharp distance peak against the expected smooth
combinatorial background, and a dominant angle at ~0°/180° within that
window. The module's own PARAMS defaults
(sSmlmDistMin=2200, sSmlmDistMax=2800, sSmlmAngleTol=5) were tuned to that
peak, recovering 547,183 pairs (64.0%) there, mean distance 2546 ± 73 nm — a
mean-position sanity check (averaging all 0th-order positions vs. all
matched 1st-order positions, an entirely independent computation from the
per-pair distance stat) reproduced a (2544, 87) nm separation, confirming
the pairs found were self-consistent.
Useful properties to note for benchmarking
When adding a stack, record these — they determine which speed optimizations matter and make timings comparable:
| Property | Why it matters |
|---|---|
| Frame size (px) | Band-pass cost scales with pixel count |
| Frame count | Determines whether streaming or in-RAM loading is used |
| Bit depth / endianness | Exercises the TIFF decode paths |
| Pixel size (nm) | Needed for correct nm-space output |
| Approx. σ_PSF (px) | Sets the DoG kernel size — the dominant cost term |
| Emitter density | Affects detection count and the fit-vs-detect time split |