Compare runs Export
Dataset Figures Sensitivity Report
Recordings / M13Rec001 / Signature

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 c0c30a22, 2026-10-27 23:30 UTC, protocol parameters v3, code 905d5be, None workers, signature b456870e, run view c0c30a22, 13 signatures of this recording

Not reportable: range check not passed, code clean, parameters unsigned, reviewer sign-off pending; 19 rules open

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

SegmentDefinedAnalysedCycle, framesExpected RotorsBounded By
Illumination with arrhythmia0–3,170500–3,17052 (n = 53)presentLED on before frame 0 (DAQ) → termination step (image, ±17 frames)
Illumination after termination3,170–4,9773,170–4,977415 (n = 4)absenttermination step (image, ±17 frames) → illumination off (DAQ, ±11 frames)
Light off4,977–9,2674,977–8,767411 (n = 10)absentillumination 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

MetricUnitIllumination with arrhythmiaIllumination after terminationLight offPhysiological Range
Rhythm
Dominant frequencyHz 15.356–19.8502.2142.375 18.75–20 Hz, one recording, 10.1371/journal.pcbi.1011660, ±25% provisional
Rotors
Persistent rotorscount 4–1500 none cited
Max concurrent persistent rotorscount 1–200 none cited
Frames with a singularityfraction 0.4790.001–0.0150.003–0.030 none cited
Beats, where a global rhythm exists
Beatscount 5749 none cited
Global amplitude ratioratio 0.720.950.95 gate ≥ 0.30 provisional
APD50ms 141616 none cited
APD90ms 257675 none cited
Conduction velocitycm/s 31.358.560.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.

CriterionRuleResult
Singularities present where the design expects them, absent elsewhereeach 'present' segment: frac >= 0.1 and >= 2.0 x max frac over 'absent' segments, at every settingholds at 12 filter settings provisional
Persistent rotors present where the design expects them, absent elsewhereeach 'present' segment: count >= 1; each 'absent' segment: count <= 0, at every settingholds at 12 filter settings and 3 trackers provisional
Persistence threshold, paper contextlifetime ≥ 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

Recording Mouse heart, spiral wave and optogenetic termination (M13Rec001) (doi:10.5281/zenodo.10228296; 64x55 px, 9267 frames, 1000 Hz) was analysed over frames 500-8767. Deposit shows signs of prior processing (provisional): negative values, non integer, nan mask all frames, temporal smoothing, spatial smoothing. Each pixel was baseline-corrected by subtracting a 901-frame centered moving average; NaN pixels were set to zero. Dye polarity (inverted) was taken from the sign of the median per-pixel skew of dV/dt. For phase only, each frame was spatially filtered with a Gaussian (sigma 1.0 px, truncated at 4.0 sigma); no temporal low-pass was applied. Phase was the angle of the Hilbert transform with 500 frames of padding on each side. Phase singularities were plaquettes with |winding| > 0.9 turns at least 3 px inside the tissue edge; they were tracked across frames (same charge, <= 4.0 px per frame, gaps <= 5 frames), and a persistent rotor was a track lasting >= 52 frames (1 cycle(s) of the fastest segment) within 3.0 px of an opposite-charge singularity in no more than 50% of its frames. Acquisition log (LED trigger channel, provisional interpretation): illumination on over frames 500-4977 of the analysed frames 500-8767. Segments (provisional, project lead (not a domain scientist), following the paper's design): illumination with arrhythmia frames 500-3170 (expected persistent rotors: present); illumination after termination frames 3170-4977 (expected persistent rotors: absent); light off frames 4977-8767 (expected persistent rotors: absent). Sensitivity: baseline 2712, 1356, 678, 901 frames x sigma 0.5, 1.0, 2.0 px, and tracker variants. singularities: across filters holds (provisional). persistent rotors: across filters holds (provisional); across trackers holds (provisional). persistent rotors fraction superseded: across filters does not hold (provisional); across trackers does not hold (provisional). All thresholds and criteria are provisional pending review by a domain scientist.

Reportable values

MetricSegmentValueUnitStatus
persistent rotor tracksall4–15countunstable, not reportable
dominant freq (Hz)light off2.375Hzno cited range
persistent rotorslight off0countno cited range
singularity frames fractionlight off0.0029–0.0296fraction of framesunstable, not reportable
persistent rotor count maxlight off0countno cited range
dominant freq (Hz)illuminated arrhythmia15.4–19.9Hzunstable, not reportable
persistent rotorsilluminated arrhythmia4–15countunstable, not reportable
dominant freq (Hz)illuminated after termination2.214Hzno cited range
singularity frames fractionilluminated arrhythmia0.479fraction of framesno cited range
persistent rotorsilluminated after termination0countno cited range
persistent rotor count maxilluminated arrhythmia1–2countunstable, not reportable
singularity frames fractionilluminated after termination0.000553–0.0149fraction of framesunstable, not reportable
persistent rotor count maxilluminated after termination0countno cited range

physiology_ok: not decided (no cited range passed or failed); send back: False. Verdict: report only the stable, provisional signature components; physiology_ok is null because the only cited-range check, illuminated_arrhythmia.dominant_freq_hz, is unstable across baseline windows (15.356–19.85 Hz) and therefore not reportable as a single value, even though the same-study context gives approximately 18.75–20.0 Hz and a checked range of 14.0625–25.0 Hz (DOI 10.1371/journal.pcbi.1011660). Reportable with caveats: stable absence of persistent rotors in light_off and illuminated_after_termination (0 across filter and tracker variants), stable light_off and illuminated_after_termination dominant frequencies of 2.375 Hz and 2.214 Hz without cited ranges, and stable illuminated_arrhythmia singularity-frame fraction as a range of 0.3816479400749064–0.48801498127340825 without a cited range; unstable and not reportable as single values are light_off.singularity_frames_frac (0.0029023746701846965–0.02955145118733509), illuminated_arrhythmia.persistent_rotors and persistent_rotor_tracks (4.0–15.0), illuminated_arrhythmia.persistent_rotor_count_max (1.0–2.0), illuminated_arrhythmia.dominant_freq_hz (15.356–19.85 Hz), and illuminated_after_termination.singularity_frames_frac (0.0005534034311012728–0.014941892639734366). The persistent-rotor rule itself holds under both min_frames 52 and min_frames 50, and strict/default/loose tracker rule verdicts agree even though counts differ; review the processed-data status, frame 3170 event interpretation, baseline/illumination artifact, and provisional thresholds. The ranges, the stability threshold and the criteria are provisional.

Provisional rules

Rule, LocationDescriptionExpertStatus
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 deviateoptical mapping analystprovisional
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 codeoptical mapping analystprovisional
filter_defaults
worker/voltage/preprocess.py (Params)
Default baseline window (frames) and spatial Gaussian sigma/truncate for phaseoptical mapping analyst (cardiac electrophysiology)provisional
tissue_mask
worker/voltage/io.py (tissue_mask)
Tissue = not NaN in frame 0 and nonzero temporal stdoptical mapping analystprovisional
polarity
worker/voltage/preprocess.py (polarity)
Dye polarity from sign of median per-pixel skew of dV/dtoptical mapping analyst / voltage dye chemistprovisional
singularity_detection
worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px)
Phase singularity = |winding| > threshold turns, >= erode px from tissue edgecomputational cardiac electrophysiologist (phase mapping)provisional
rotor_persistence
worker/voltage/rotors.py (TrackParams)
Track linking distance/gap and minimum lifetime for a persistent rotorcomputational 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 rotorscomputational cardiac electrophysiologist (phase mapping)provisional
sensitivity_grid
worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels)
Filter levels tested: spatial sigma and baseline window valuesoptical mapping analystprovisional
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 datasetprovisional
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 experimentalistprovisional
daq_interpretation
worker/voltage/daq.py
DAQ channel names from depositor notebook; frames = first N triggers of closest burst; midpoint thresholdsexperimentalist 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 + biostatisticianprovisional
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 settingcardiac electrophysiologistprovisional
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 checkscardiac electrophysiologist per speciesprovisional
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 analystprovisional
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 flaggedcomputational cardiac electrophysiologist (phase mapping)provisional

Review items

TopicDetailSeverityReviewer
unstable:light_off.singularity_frames_fracReview the filter sensitivity before reporting the light_off singularity-frame fraction; use only the range 0.0029023746701846965–0.02955145118733509 for review, not a single value.warndomain scientist / signal-processing reviewer
unstable:illuminated_arrhythmia.persistent_rotorsReview rotor tracking/count sensitivity; the illuminated_arrhythmia persistent-rotor count spans 4.0–15.0 and is not reportable as a single count.warndomain scientist / tracking reviewer
unstable:illuminated_arrhythmia.persistent_rotor_count_maxReview concurrent rotor-count sensitivity; the maximum concurrent count spans 1.0–2.0 and should not be reported as a single value.warndomain scientist / tracking reviewer
unstable:illuminated_arrhythmia.dominant_freq_hzReview baseline-window dependence of the illuminated_arrhythmia frequency; it spans 15.356–19.85 Hz and is not reportable as a single value despite cited same-study context (DOI 10.1371/journal.pcbi.1011660).warndomain scientist / rhythm reviewer
unstable:illuminated_after_termination.singularity_frames_fracReview filter sensitivity before reporting the after-termination singularity-frame fraction; use only the range 0.0005534034311012728–0.014941892639734366 for review.warndomain scientist / signal-processing reviewer
unstable:persistent_rotor_tracksReview persistent-track counting sensitivity; total persistent tracks span 4.0–15.0 and are not reportable as a single value.warndomain scientist / tracking reviewer
Pre-deposit processing / raw-data labelThe README labels M13Rec001 as raw experimental data, but notebook and measurement flags indicate masking, spatial smoothing, temporal smoothing, and normalization; avoid analyses that require raw photon counts or independent pixel noise if treated as raw camera data.warndata curator / domain scientist
Event interpretation at frame 3170Frame 3170 is a baseline_step only; illumination began before frame 0 and ended at frame 4977, so frame 3170 should not be treated as light onset. The stored spiral-termination label is provisional.warndomain scientist
Baseline and illumination artifactBlue stimulation light crosstalk, re-normalization by stimulation light signal, a large slow baseline range, and a baseline step can affect absolute baseline or amplitude analyses.warndomain scientist / signal-processing reviewer
Provisional tool thresholdsEvent detection, processing flags, SNR, rhythm, reference-rate thresholds, the stability threshold, and criteria are provisional and should be checked for critical analyses.infodomain scientist

Data and code availability

Recording10.5281/zenodo.10228296, CC-BY-4.0, Hussaini, Sayedeh; Luther, Stefan; Lädke, Sarah L.
Publication10.1371/journal.pcbi.1011660
Analysis code905d5bebbb29da7ad46cd5045db14330695037c3
Stored arrays[not stored]
Rundone
Review items30 open