M13Rec001, Mouse heart, spiral wave and optogenetic termination
64 × 55 px, 9,267 frames, 1 kHz, 133 µm/px, deposit checks: negative values, nan mask all frames, temporal smoothing, spatial smoothing
Run 202e66c5, 2026-10-27 23:02 UTC, protocol parameters v3, code b1be824 (uncommitted changes), None workers, signature 6ed9c8e5, run view 202e66c5, 13 signatures of this recording
Not reportable: range check not passed, code uncommitted changes, parameters unsigned, reviewer sign-off pending; 20 rules open
Properties
| Deposit | 10.5281/zenodo.10228296, https://zenodo.org/records/10228296 |
| Publication | 10.1371/journal.pcbi.1011660 |
| Licence | CC-BY-4.0 (as stated: cc-by-4.0) |
| Authors | Hussaini, Sayedeh; Luther, Stefan; Lädke, Sarah L. |
| File | public/M13Rec001_complete.npy, npy, 260,958,848 bytes |
| sha256 | 3f8f2e1b8f776633089b33ccd4bf3fccb4f13140b71991f1dcd0e0a12bb48cbc |
| Frame rate | 1000 Hz, publication 10.1371/journal.pcbi.1011660, Camera frames are 64 x 64 in the paper; the deposit is 64 x 55 (cropped). Consistent with the DAQ: 10 samples per frame and a 5 s light pulse spanning 50,001 samples imply a 10 kHz DAQ. |
| Pixel size | 133 µm, publication 10.1371/journal.pcbi.1011660, paper states 64 x 64 px at 133 um; the deposit is 64 x 55 (cropped, not rebinned) |
| Polarity | inverted (depolarization downward), measured |
| Segments source | project lead (not a domain scientist), following the paper's design, 10.1371/journal.pcbi.1011660 |
| Protocol | Mouse whole heart optical mapping (Luther lab), mouse, whole heart; parameters v3 set by developer (not a domain scientist): version 3: baseline 901 frames = 2.1 x the 433-frame (2.31 Hz) post-termination cycle resolved under v2; v2's 641 frames was 1.48 cycles, on the 1.5-cycle line, and the pipeline check held one run and passed another on the same inputs. pad 500 >= half the window. Provisional (REVIEW_NEEDED item 16). |
| Run | 202e66c5-944f-4d65-bbb1-a060487247e1 |
| Started, finished | 2026-10-27 23:02 UTC, 2026-10-27 23:08 UTC |
| Code | b1be82429ddde2ad90ee88afacaae98a173e4403 (uncommitted changes) |
| Workers | [not recorded] |
| Steps | load, deposit_checks, baseline_correct, polarity, spatial_filter(phase only), hilbert_phase, phase_singularities, track_and_pair, beats_apd_cv, sensitivity, render |
| Signature | 6ed9c8e5-4bef-4549-b04f-f5014db32b5b, 2026-10-27 23:08 UTC |
| Movie | runs/202e66c5-944f-4d65-bbb1-a060487247e1/movie.mp4 |
| Lossless frames | [not stored] |
Parameters
% Mouse whole heart optical mapping (Luther lab), v3, read-only % set by developer (not a domain scientist); provisional, REVIEW_NEEDED 16 baseline_frames = 901; % >= 2 x slowest cycle (415, MAP): ok pad_frames = 500; % each side, outside the window spatial_sigma = 1.0; % px, Gaussian, phase only spatial_truncate = 4.0; % kernel radius, sigma lowpass = []; % none polarity = -1; % measured, skew of dV/dt rotor_threshold = 0.9; % turns, |winding| per plaquette rotor_erode_px = 3; % px from tissue edge ignored link_px = 4.0; % tracking, max step per frame max_gap = 5; % frames a track may vanish min_cycles = 1.0; % own rotations, min_frames = 52 pair_dist_px = 3.0; % opposite-charge pairing paired_frac = 0.5; % max paired fraction of a track render_step = 4; % movie only
Segments
| Segment | Defined | Analysed | Cycle, frames | Expected Rotors | Bounded By |
|---|---|---|---|---|---|
| Illumination with arrhythmia | 0–3,170 | 500–3,170 | 52 (n = 53) | present | LED on before frame 0 (DAQ) → termination step (image, ±17 frames) |
| Illumination after termination | 3,170–4,977 | 3,170–4,977 | 415 (n = 4) | absent | termination step (image, ±17 frames) → illumination off (DAQ, ±11 frames) |
| Light off | 4,977–9,267 | 4,977–8,767 | 411 (n = 10) | absent | illumination off (DAQ, ±11 frames) → recording end |
Frames at 9,267 total, 1.0 ms per frame. Cycle from the MAP channel of the DAQ log (median interval) when one exists, else from per-pixel dominant frequency. Boundaries, expectations and the segment design are provisional (project lead (not a domain scientist), following the paper's design, 10.1371/journal.pcbi.1011660).
Metrics
| Metric | Unit | Illumination with arrhythmia | Illumination after termination | Light off | Physiological Range |
|---|---|---|---|---|---|
| Rhythm | |||||
| Dominant frequency | Hz | 15.356–19.850 | 2.214 | 2.375 | 18.75–20 Hz, one recording, 10.1371/journal.pcbi.1011660, ±25% provisional |
| Rotors | |||||
| Persistent rotors | count | 4–15 | 0 | 0 | none cited |
| Max concurrent persistent rotors | count | 1–2 | 0 | 0 | none cited |
| Frames with a singularity | fraction | 0.479 | 0.001–0.015 | 0.003–0.030 | none cited |
| Beats, where a global rhythm exists | |||||
| Beats | count | 57 | 4 | 9 | none cited |
| Global amplitude ratio | ratio | 0.72 | 0.95 | 0.95 | gate ≥ 0.30 provisional |
| APD50 | ms | 14 | 16 | 16 | none cited |
| APD90 | ms | 25 | 76 | 75 | none cited |
| Conduction velocity | cm/s | 31.3 | 58.5 | 60.0 | none cited |
Values at the run setting. Red: range across the sensitivity grid (12 baseline × sigma settings, 3 trackers) where the spread exceeds 25 % of the median; not reportable as a value. Beat metrics are not varied over the grid. Dominant frequency over the whole analysed window: 2.419 Hz.
| Criterion | Rule | Result |
|---|---|---|
| Singularities present where the design expects them, absent elsewhere | each 'present' segment: frac >= 0.1 and >= 2.0 x max frac over 'absent' segments, at every setting | holds at 12 filter settings provisional |
| Persistent rotors present where the design expects them, absent elsewhere | each 'present' segment: count >= 1; each 'absent' segment: count <= 0, at every setting | holds at 12 filter settings and 3 trackers provisional |
| Persistence threshold, paper context | lifetime ≥ 52 frames (measured cycle) and ≥ 50 frames (cited 20 Hz) | agree provisional |
Report
The PDF carries the parameters as run, segments, metrics, criteria, reportable values, every provisional rule, the review items, the opening frame as camera, voltage and phase with the parameter footer, and the provenance block. The JSON carries the same plus the full stored metrics, sensitivity and critic records.
Methods
Using the provisional parameter set version 3, with provisional segment definitions and provisional criteria, the recording was checked under the Mouse whole heart optical mapping (Luther lab) protocol with baseline_frames = 901, spatial_sigma = 1.0, spatial_truncate = 4.0, pad_frames = 500, rotor_threshold = 0.9, rotor_erode_px = 3, link_px = 4.0, max_gap = 5, min_cycles = 1.0, pair_dist_px = 3.0, paired_frac = 0.5, and render_step = 4. The recording has 9267 frames in npy format with image size 64 × 55, frame rate 1000 Hz from the publication, and pixel size 133 µm from the publication. The analysed window is frames 500–8767; the provisional segments are illuminated_arrhythmia, frames 0–3170; illuminated_after_termination, frames 3170–4977; and light_off, frames 4977–9267.
Reportable values
| Metric | Segment | Value | Unit | Status |
|---|---|---|---|---|
| persistent rotor tracks | all | 4–15 | count | unstable, not reportable |
| dominant freq (Hz) | light off | 2.375 | Hz | no cited range |
| persistent rotors | light off | 0 | count | no cited range |
| singularity frames fraction | light off | 0.0029–0.0296 | fraction of frames | unstable, not reportable |
| persistent rotor count max | light off | 0 | count | no cited range |
| dominant freq (Hz) | illuminated arrhythmia | 15.4–19.9 | Hz | unstable, not reportable |
| persistent rotors | illuminated arrhythmia | 4–15 | count | unstable, not reportable |
| dominant freq (Hz) | illuminated after termination | 2.214 | Hz | no cited range |
| singularity frames fraction | illuminated arrhythmia | 0.479 | fraction of frames | no cited range |
| persistent rotors | illuminated after termination | 0 | count | no cited range |
| persistent rotor count max | illuminated arrhythmia | 1–2 | count | unstable, not reportable |
| singularity frames fraction | illuminated after termination | 0.000553–0.0149 | fraction of frames | unstable, not reportable |
| persistent rotor count max | illuminated after termination | 0 | count | no cited range |
physiology_ok: not decided (no cited range passed or failed); send back: False. Verdict: the signature has no stable metric outside a cited range, but the only ranged check, illuminated_arrhythmia.dominant_freq_hz, is unstable and therefore not reportable as a single value; physiology_ok is null. Reportable items are limited to provisional algorithmic findings: singularity presence in illuminated_arrhythmia is stable over 0.3816479400749064–0.48801498127340825 fraction of frames, persistent-rotor presence in illuminated_arrhythmia holds across filters and trackers, and absence of persistent rotors is stable at 0 in light_off and illuminated_after_termination. Unstable items are light_off.singularity_frames_frac 0.0029023746701846965–0.02955145118733509, illuminated_arrhythmia.persistent_rotors 4.0–15.0, illuminated_arrhythmia.persistent_rotor_count_max 1.0–2.0, illuminated_arrhythmia.dominant_freq_hz 15.356–19.85, illuminated_after_termination.singularity_frames_frac 0.0005534034311012728–0.014941892639734366, and persistent_rotor_tracks 4.0–15.0. Persistence-threshold criteria agree at 52 frames and 50 frames; the cited mouse spiral-wave context reports approximately 20 Hz before illumination and approximately 18.75 Hz during illumination (DOI 10.1371/journal.pcbi.1011660). Review is needed for pre-deposit processing/raw-data labeling, frame-3170 interpretation, baseline and illumination artifact, and all provisional thresholds; the ranges, stability threshold, and criteria are provisional.
Provisional rules
| Rule, Location | Description | Expert | Status |
|---|---|---|---|
| protocol_parameter_set worker/voltage/protocol_params.py (developer_defaults, set_params) | Each protocol's fixed, versioned analysis parameters (version 1 = developer defaults); no run or agent may deviate | optical mapping analyst | provisional |
| baseline_window_rule worker/voltage/baseline_rule.py (FACTOR, evaluate) | A run proceeds only if the protocol's baseline window is >= 2x the slowest segment's cycle, the cycle from the MAP channel when a DAQ log exists, else from per-pixel dominant frequency on linearly detrended pixels; otherwise the run is held by code | optical mapping analyst | provisional |
| filter_defaults worker/voltage/preprocess.py (Params) | Default baseline window (frames) and spatial Gaussian sigma/truncate for phase | optical mapping analyst (cardiac electrophysiology) | provisional |
| tissue_mask worker/voltage/io.py (tissue_mask) | Tissue = not NaN in frame 0 and nonzero temporal std | optical mapping analyst | provisional |
| polarity worker/voltage/preprocess.py (polarity) | Dye polarity from sign of median per-pixel skew of dV/dt | optical mapping analyst / voltage dye chemist | provisional |
| singularity_detection worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px) | Phase singularity = |winding| > threshold turns, >= erode px from tissue edge | computational cardiac electrophysiologist (phase mapping) | provisional |
| rotor_persistence worker/voltage/rotors.py (TrackParams) | Track linking distance/gap and minimum lifetime for a persistent rotor | computational cardiac electrophysiologist (phase mapping) | provisional |
| chirality_pairing worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac) | Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors | computational cardiac electrophysiologist (phase mapping) | provisional |
| sensitivity_grid worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels) | Filter levels tested: spatial sigma and baseline window values | optical mapping analyst | provisional |
| analysis_window worker/voltage/runs.py (default_window) | Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it) | cardiac electrophysiologist familiar with the dataset | provisional |
| prior_processing_flags worker/voltage/inspect.py (prior_processing) | Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing) | imaging scientist (camera acquisition and noise) | provisional |
| baseline_step_detection worker/voltage/events.py (detect_baseline_step) | Baseline step = consensus upward step in tissue-mean raw baseline (cause not inferred; first misread as light onset, contradicted by the DAQ) | optical mapping experimentalist | provisional |
| daq_interpretation worker/voltage/daq.py | DAQ channel names from depositor notebook; frames = first N triggers of closest burst; midpoint thresholds | experimentalist who recorded the data (or the depositor) | provisional |
| segment_definitions worker/voltage/annotations.py (MOUSE_SEGMENTS) | Mouse segments bounded by DAQ light events and the baseline step, interpreted as spiral termination under illumination (project lead, from Hussaini et al. 2023) | cardiac electrophysiologist (ideally the depositing authors) | provisional |
| rotor_finding_criterion worker/voltage/sensitivity.py (MIN_FRAC, MIN_RATIO) | Singularity before/after finding holds if frac(before) >= min_frac and >= min_ratio x frac(after) at every setting (also kept, superseded, for persistent rotors) | cardiac electrophysiologist + biostatistician | provisional |
| persistent_rotor_criterion worker/voltage/sensitivity.py (MIN_ROTORS_PRESENT, MAX_ROTORS_ABSENT) | Persistent-rotor finding holds if every 'present' segment has >= 1 persistent rotor and every 'absent' segment has none, at every setting | cardiac electrophysiologist | provisional |
| pipeline_check worker/agents/pipeline.py (INSTRUCTIONS, validator) | The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameter | optical mapping analyst | provisional |
| physiology_reference_rates worker/voltage/physiology.py (RANGES, TOLERANCE_FRAC) | Cited physiological ranges (single-study values widened by a 25% tolerance), applied to segments by their expected rhythm; used by the critic and for frame-rate sanity checks | cardiac electrophysiologist per species | provisional |
| stability_rule worker/agents/critic.py (STABLE_FRAC, stability) | A metric is reportable only if its spread across all sensitivity settings is <= 25% of its median (zero spread when all values are 0); otherwise 'unstable, not reportable' | biostatistician + optical mapping analyst | provisional |
| persistence_threshold_variants worker/agents/critic.py (persistence_variants) | The persistent-rotor rule is run at two lifetimes, one measured cycle of the fastest segment and the paper's cited rotation period; both verdicts stored, disagreement flagged | computational cardiac electrophysiologist (phase mapping) | provisional |
Review items
| Topic | Detail | Severity | Reviewer |
|---|---|---|---|
| unstable:light_off.singularity_frames_frac | Filter-grid dependence is large: 0.0029023746701846965–0.02955145118733509 fraction of frames, so the light-off singularity fraction is not reportable as a single value. | warn | domain scientist / signal-processing reviewer |
| unstable:illuminated_arrhythmia.persistent_rotors | The persistent-rotor count varies across filter and tracker settings from 4.0 to 15.0; keep only the qualitative presence/rule result until tracking sensitivity is reviewed. | warn | domain scientist / tracking reviewer |
| unstable:illuminated_arrhythmia.persistent_rotor_count_max | The maximum simultaneous persistent-rotor count varies from 1.0 to 2.0, so it is not reportable as a single value. | warn | domain scientist / tracking reviewer |
| unstable:illuminated_arrhythmia.dominant_freq_hz | Dominant frequency depends on baseline-window choice, 15.356–19.85 Hz, despite cited context of approximately 20 Hz and 18.75 Hz for this study; resolve baseline-window dependence before reporting a value. | warn | domain scientist / electrophysiology reviewer |
| unstable:illuminated_after_termination.singularity_frames_frac | Filter-grid dependence is large: 0.0005534034311012728–0.014941892639734366 fraction of frames, so the post-termination singularity fraction is not reportable as a single value. | warn | domain scientist / signal-processing reviewer |
| unstable:persistent_rotor_tracks | Total persistent-rotor tracks vary from 4.0 to 15.0 across filter and tracker settings, so the total track count is not reportable as a single value. | warn | domain scientist / tracking reviewer |
| Pre-deposit processing / raw-data label | The README labels M13Rec001 as raw experimental data, but the notebook documents masking, spatial smoothing, temporal smoothing, and normalization with Python Analyser; prior_processing measurements support processed data. Analyses requiring raw photon counts or independent pixel noise would be misleading if this is treated as raw camera data. | warn | data provenance reviewer |
| Event interpretation at frame 3170 | The image event at frame 3170 is a baseline_step only. The DAQ shows illumination began before frame 0 and ended at frame 4977, so treating frame 3170 as light onset would be wrong. The stored spiral-termination label is provisional and based on timing relative to the paper, not a direct measurement. | warn | domain scientist |
| Baseline and illumination artifact | The publication reports blue stimulation light crosstalk causing an increase in fluorescence baseline and re-normalization by division to the recorded stimulation light signal; the recording also has a large slow baseline range and a baseline step. Analyses using absolute baseline or amplitude should account for illumination/crosstalk/normalization effects. | warn | optical-mapping reviewer |
| Provisional tool thresholds | Event detection, processing flags, SNR, rhythm, and reference-rate thresholds are provisional and not yet reviewed by a domain scientist; conclusions depending on them should be checked for critical analyses. | info | domain scientist |
Data and code availability
| Recording | 10.5281/zenodo.10228296, CC-BY-4.0, Hussaini, Sayedeh; Luther, Stefan; Lädke, Sarah L. |
| Publication | 10.1371/journal.pcbi.1011660 |
| Analysis code | b1be82429ddde2ad90ee88afacaae98a173e4403 (uncommitted changes) |
| Stored arrays | [not stored] |