Recording and ground truth#
Recording#
- pydantic model minisim.Recording[source]#
Bases:
BaseModelA complete simulated recording: the spec, the observed movie, and the truth.
observedholds the integer-valued sensor counts in a float container (perOutput.store_dtype).snapshotsis populated only whenOutput.save_intermediatesis set, keyed by each step’s stagename;stage()reads them.- Fields:
ground_truth (minisim.recording.GroundTruth)observed (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* frame, * height, * width], (snapshots (dict[str, xarray.core.dataarray.DataArray])spec (minisim.spec.Spec)
- field ground_truth: GroundTruth [Required]#
GroundTruth#
- pydantic model minisim.GroundTruth[source]#
Bases:
BaseModelThe per-recording truth: structural targets + per-cell and per-effect fields.
The planted vs observed footprint split is load-bearing:
A_observedis what CNMF can actually recover (tests match against it), whileA_plantedis the ideal, optics-free target that quantifies the irreducible limit. Both are exposed as dense(unit, height, width)arrays via properties, but neither is stored dense:Footprints are stored sparse, as canvas-coordinate patches in
planted(aFootprintStack);fov_offset/fov_shapecrop them to the sensor FOV.The observed footprint is not stored at all: it is the deterministic blur
gain · (planted ⊛ Gaussian(sigma_px))of the planted one, so it is regenerated on demand from the per-unitobserved_sigma_px/observed_gainscalars. Deep cells’ observed footprints are near-full-canvas, so storing them dominated memory and disk; regenerating is bit-identical and far cheaper to keep.
Per-effect fields are
Nonewhen their step is absent from the recording.- Fields:
C (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit, * frame], (S (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit, * frame], (amplitude_per_cell (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], (bleaching (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit, * frame], (centers_um (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit, 3], (detectable (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], numpy.bool])focal_depth_um (float | None)fov_offset (tuple[int, int])fov_shape (tuple[int, int])illumination (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* height, * width], (in_focus (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], numpy.bool])leakage (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* height, * width], (neuropil_population (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* frame], (neuropil_spatial (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* component, * height, * width], (neuropil_temporal (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* component, * frame], (observed_gain (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], (observed_sigma_px (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], (planted (minisim.footprint.FootprintStack)shifts (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* frame, 2], (vasculature_mask (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* height, * width], (vessel_overlap_fraction (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* unit], (vignette (numpydantic.vendor.nptyping.base_meta_classes.NDArray[numpydantic.vendor.nptyping.base_meta_classes.Shape[* height, * width], (
- field planted: FootprintStack [Required]#
finalize#
- minisim.finalize(scene, spec)[source]#
Distill an exhausted
Sceneinto a frozen, typedRecording.Keeps each cell’s canvas-coordinate planted footprint (sparse) plus its canvas-frame position rebased to the sensor FOV, drops cells left entirely in the motion margin, records the per-unit optics scalars (so
A_observedcan be regenerated rather than stored), assembles the per-cell structural truth, setsdetectablefrom the realized optical × illumination peak versus the sensor noise floor (folding in vessel transmission, and recording each cell’s vessel-occlusion burden), reads the per-effect fields offscene.truth, and downcasts the working movie toOutput.store_dtypeforobserved.