Compare runs Export
Dataset Figures Sensitivity Report

mouse_2609_150ms_control_MiCAM, Open-Source Low-Cost Cardiac Optical Mapping System: mouse_2609_150ms_control_MiCAM

100 × 100 px, 2,047 frames, 0.977 kHz, pixel size not stated, deposit checks: negative values

Run 6e21b7f8, 2026-10-28 18:15 UTC, protocol parameters v3, code 008c2dc (uncommitted changes), 9 workers, signature 804ddd67, run view 6e21b7f8, 2 signatures of this recording

Not reportable: range check not passed, code uncommitted changes, parameters unsigned, reviewer sign-off pending; 16 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 (7, images): 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 = 17
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
Whole recording0–2,047500–1,5477 (86% of pixels)not statedrecording start → recording end

Frames at 2,047 total, 1.024 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 (admission (project lead); no comparison defined).

Metrics

MetricUnitWhole recordingPhysiological Range
Rhythm
Dominant frequencyHz 55.989–107.311 none cited
Rotors
Persistent rotorscount 1–5,211 none cited
Max concurrent persistent rotorscount 1–124 none cited
Frames with a singularityfraction 1.000 none cited
Beats, where a global rhythm exists
Beatscount 63 none cited
Global amplitude ratioratio 2.00 gate ≥ 0.30 provisional
APD50ms 4 none cited
APD90ms 5 none cited
Conduction velocitycm/s [not computed] 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: 55.989 Hz.

CriterionRuleResult
Design expectationsnone stated for this recording's segmentsno criterion to test; counts are descriptive 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 provisional protocol f65d786f-f194-4be2-88b8-10d3dd25d674 with provisional parameter set version 3, the fixed analysis parameters were 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 2047 frames of 100 by 100 pixels in mat format; the frame rate used was 977.0 Hz from the recording-row admission entry citing 10.1371/journal.pone.0259174, and the pixel size was not available. The analysed window used for rhythm reporting was frames 500 to 1547, and the provisional segment definition was one whole_recording segment spanning frames 0 to 2047; the parameter set, segment definitions, and criteria are provisional.

Reportable values

MetricSegmentValueUnitStatus
persistent rotor tracksall1–5.21e+03countunstable, not reportable
dominant freq (Hz)whole recording56–107Hzunstable, not reportable
persistent rotorswhole recording1–5.21e+03countunstable, not reportable
singularity frames fractionwhole recording1fraction of framesno cited range
persistent rotor count maxwhole recording1–124countunstable, not reportable

physiology_ok: not decided (no cited range passed or failed); send back: False. Verdict: no physiology pass/fail can be computed because no stable ranged checks are available; the provisional ranges, stability threshold, and criteria should be treated as provisional. What is reportable is the stable whole-recording singularity-frames fraction, range 1.0 to 1.0, only as an observed output without a cited physiological range. What is not reportable as single values is persistent rotors, range 1.0 to 5211.0; maximum concurrent persistent-rotor count, range 1.0 to 124.0; dominant frequency, range 55.989 to 107.311 Hz; and persistent rotor tracks, range 1.0 to 5211.0. A same-species mouse spiral-wave context passage is available, but dominant-frequency comparison should wait because this metric is unstable (DOI 10.1371/journal.pcbi.1011660). Review the tracker count sensitivity, with strict/default/loose counts of 327, 1118, and 94, and the inspector concerns about 977.0 Hz MiCAM frame-rate provenance, likely pre-deposit sign or conditioning, all-negative integer data values, rhythm-detector unsuitability for the expected paced period, and the non-biological mask.

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
pipeline_check
worker/agents/pipeline.py (INSTRUCTIONS, validator)
The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameteroptical mapping analystprovisional
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
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

Review items

TopicDetailSeverityReviewer
unstable:whole_recording.persistent_rotorsPersistent-rotor count varies across the range 1.0 to 5211.0 across filter and tracker settings, exceeding the provisional stability rule.warnanalysis
unstable:whole_recording.persistent_rotor_count_maxMaximum concurrent persistent-rotor count varies across the range 1.0 to 124.0 across filter and tracker settings, exceeding the provisional stability rule.warnanalysis
unstable:whole_recording.dominant_freq_hzDominant frequency varies across the range 55.989 to 107.311 Hz across baseline windows, exceeding the provisional stability rule.warnanalysis
unstable:persistent_rotor_tracksPersistent rotor tracks vary across the range 1.0 to 5211.0 across filter and tracker settings, exceeding the provisional stability rule.warnanalysis
tracker_count_sensitivityTracker variants produced different counts: strict 327, default 1118, and loose 94, so count magnitude needs tracking-parameter review even though rule-level agreement is true.warnanalysis
Frame-rate provenance for a MiCAM fileUse 977.0 Hz as the working frame rate, but the cited paper quote is for the custom system whereas this file is labelled MiCAM; Zenodo metadata does not state the MiCAM frame rate.warninspector
Pre-deposit sign/conditioningMeasured polarity is consistently non-inverted despite Di-4-ANEPPS normally dimming on depolarization, suggesting a sign flip or conditioning before deposit or export.warninspector
Unexplained all-negative data valuesAll values are negative integers and are flagged as processed_before_deposit; the linked paper documents possible workflows, but the deposit README does not explain this file-level transformation.warninspector
Rhythm detector not suitable for the expected paced period hereThe rhythm tool result should not be used for physiology or frame-rate inference here because the expected paced period lies beyond the rhythm tool's baseline-window suitability.infoinspector
Mask is not a heart segmentationThe mask is based only on nonzero temporal standard deviation and covers almost the entire image; tissue-only spatial interpretation needs a biological mask.warninspector

Data and code availability

Recording10.5281/zenodo.5557829, cc-by-4.0, Rybashlykov Dmitry
Publication10.1371/journal.pone.0259174
Analysis code008c2dc076bcebf9e7fa01a05e8b7c4b5a713b37 (uncommitted changes)
Stored arraysruns/6e21b7f8-7cd1-499c-8e8f-ab37b36c7113/frames/voltage.npy, runs/6e21b7f8-7cd1-499c-8e8f-ab37b36c7113/frames/phase.npy, runs/6e21b7f8-7cd1-499c-8e8f-ab37b36c7113/frames/maps.npz
Rundone
Review items27 open