Glossary#
The vocabulary acia uses, and the distinctions that trip people up most often.
- THWC#
The in-memory axis convention for image sequences:
(T, H, W, C)— time, height, width, channel, with channel last and no Z axis.aciais a 2D+t library; the ND2 and CZI readers rejectZ > 1rather than guess. Readers normalize to this layout by axis name where the format provides one, so you never have to reason about the file’s native ordering.THWCSequenceSourceis the canonical in-memory implementation and validates the shape on construction.Note this is the in-memory convention only.
save_tiff_stack()writes ImageJ-canonical channel-firstTCYXto disk.- ImageSequenceSource#
The central abstraction (
acia.base.ImageSequenceSource): a sized, iterable time series of frames. A subclass only has to implementget_frame()and the size properties; indexing, slicing, channel selection, calibration, cropping, registration and RGB rendering all come from the base class. Every reader is one of these, which is why the same code works for ND2, CZI, TIFF stacks, folders of TIFFs, OMERO and SMB.- lazy view#
A source derived from another source that computes frames on demand instead of copying pixels —
SlicedSequenceSource,RotatedCropSequenceSource,RegisteredSequenceSource,RGBSequenceSource. Views compose freely (src[::2][1:]). Callmaterialize()when you deliberately want the whole stack in memory.- Instance#
A mask-backed detection (
acia.base.Instance): it owns a boolean mask, and derives its area, centre and polygon from it. This is what segmentation backends produce.- Contour#
A polygon-backed detection (
acia.base.Contour): it owns an array of coordinates. Cheaper to store and serialize, and whatsave_segmentation()writes.InstanceandContourare two representations of the same idea — one detected object in one frame — and both satisfy the interface an Overlay expects. Converting a mask with more than one connected component to a polygon is lossy;Instance.is_fragmentedtells you when that applies.- Overlay#
A collection of detections across all frames of a sequence (
acia.base.Overlay), plus an optional time model. Index it by detection id (overlay[contour_id]) or slice it temporally (overlay[:20], which remaps frames to0..n-1). Iterating frame by frame isoverlay.time_iterator().- Processor#
A callable that transforms data. Segmentation processors take a source and return an Overlay; tracking processors take a source and an overlay and return an overlay plus two graphs. Models are built lazily and, with
autorelease=True, GPU memory is freed after each call.- tracklet graph#
A graph whose nodes are tracklets — uninterrupted runs of the same cell between division events. This is the graph you plot lineages from and compute doubling times on.
- tracking graph#
A graph whose nodes are individual detections, one per cell per frame, linked frame to frame. Finer-grained than the tracklet graph;
tracklet_to_tracking()converts between them.Both are returned by every tracking processor, in the order
(overlay, tracklet_graph, tracking_graph).- extractor#
A
PropertyExtractorthat measures one property per detection — area, perimeter, length, circularity, fluorescence, time, position.ExtractorExecutorruns a list of them and returns a tidy, id-indexed DataFrame. Extractors pull their units from the source’s calibration automatically; see Units in the extracted tables.- position#
One field of view within a multi-position acquisition — the ND2
Paxis and the CZIS(scene) axis, unified byopen_sequence()so notebooks never branch on format. A folder whose subfolders each hold per-timepoint TIFFs also exposes one position per subfolder.- pixel size / frame interval#
The physical calibration, carried as pint quantities on the source. Set them once at load and they survive slicing, flow into overlays as per-detection timestamps, and are picked up by the extractors — so results come out in µm² and hours rather than px² and frames.