masked_data_RG_80nM, run e41d035d
Status done, stage done; requested by project lead; worker [not recorded]; started 2026-10-27 23:43 UTC, finished 2026-10-27 23:46 UTC, 173 s; signature 4f9dfa16
Stages
| Stage | Started | Seconds |
|---|---|---|
| [no stage log; run predates stage timing] | ||
Log
| Time | Agent | Action | Detail |
|---|---|---|---|
| 23:43:22 | runs | run started | {"checked_by": "no agent", "protocol_params_version": 1, "recording_id": "73e4ebe2-6b09-4582-a1d6-ded901b7d124", "run_id": "e41d035d-080a-4db2-a665-c4738243cdc3"} |
| 23:46:14 | runs | signature written | {"criteria": "provisional", "holds": null, "run_id": "e41d035d-080a-4db2-a665-c4738243cdc3", "signature_id": "4f9dfa16-d81f-4874-be78-8c0a38938b12"} |
Entries from the audit log for this run; new rows and stage changes arrive by realtime while the run is open (connecting).
Pipeline check
[no pipeline check stored for this run]
Inspector
This is a preprocessed ex vivo Langendorff rat whole-heart VF optical-mapping recording under 80 nM rotigaptide, recorded at 1000 Hz according to the deposit; that agrees with the value already on record. The 128 × 80 deposited image size matches both the deposit and the linked paper, and the paper also reports 1000 frames/s. The data have documented preprocessing before deposit, including background subtraction, 3 × 3 spatial binning, 100 Hz low-pass filtering, drift removal, and normalization, so analyses should not treat them as raw camera counts. Measured polarity is consistently non-inverted even though RH237 normally dims on depolarization, so use measured polarity for orientation. No acquisition-log or detected event annotations are available for this recording.
| Measurement | Value | Method, Caveat |
|---|---|---|
| SNR, median (p10–p90) | 18.8 (13.9–25.9) | assumes white noise; on temporally smoothed deposits noise is underestimated and SNR inflated |
| Mask coverage | 50.9%, 5216 of 10240 px | depositor NaN mask (frame 0) |
| Polarity | blocks 7, inverted False, blocks agreeing 7, median dvdt skew 0.08132843673229218 | sign of median per-pixel skew of dV/dt, baseline-corrected (121 frames) |
| Drift / bleaching | baseline change -0.0108, vs beat amplitude -0.0979, slow range 0.162, trend, Spearman -0.356 | running median (381 frames) of the tissue-mean raw signal; steps from events (light, rhythm change) and depositor normalization or drift removal change or erase the baseline; bleaching cannot be separated from them here |
| Prior processing | unit range, non integer, nan mask partial, temporal smoothing, spatial smoothing | deposit checks |
| Dominant cycle by block, frames | 0–1000: 29.4, 1000–2000: 28.6, 2000–3000: 28.6, 3000–3800: 25.0 |
| Concern | Severity | Detail |
|---|---|---|
| preprocessed deposit | warn | The deposit is not raw camera data: it is documented as background-subtracted, spatially binned, low-pass filtered, drift-removed, and the publication says normalized. Analyses requiring raw fluorescence/counts or unfiltered noise statistics would be misleading. |
| polarity transformed relative to dye | warn | RH237 normally dims on depolarization, but measured polarity is non-inverted with 7/7 blocks agreeing. The depositor appears to have flipped or transformed the sign; the pipeline should orient from the measured polarity, so this is not expected to make activation analysis wrong if handled. |
| SNR depends on preprocessing | info | Median SNR is high, but documented temporal filtering and detected temporal smoothing can inflate the SNR estimate by reducing apparent frame-to-frame noise. |
| reference thresholds provisional | info | No frame-rate inference was needed because the deposit states 1 kHz. Any conclusions from automated processing flags and provisional rhythm/reference-rate tools should be treated as not yet domain-scientist reviewed. |
Inspector report 2026-10-27 20:27 UTC, model openai:gpt-5.5, provisional. Median per-pixel SNR over tissue is 18.818067017408147, with p10 = 13.893293967898506 and p90 = 25.936276941781777 over 3000 frames. The SNR tool cautions that temporal smoothing underestimates noise and inflates SNR; that caveat applies because low-pass filtering is documented and temporal smoothing was detected. The tissue mask contains 5216 pixels out of 10240 total pixels, coverage 0.509375. The mask source is a depositor NaN mask in frame 0; frame 0 has 5024 NaN pixels. No stored events were returned, no acquisition log is present, and no detected light transitions or image baseline-step events were returned. Therefore there are no event frames to interpret for this recording. If events are later added, image-only baseline steps should be treated only as fluorescence changes unless a log shows a light transition at the same frame. The tissue-mean slow baseline, measured with a 381-frame running median, changes from 0.4981755316257477 to 0.48741528391838074, a change of -0.010760247707366943, equal to -0.09788043294092134 of the p5–p95 beat amplitude. Slow baseline range is 0.1622154712677002 and Spearman trend is -0.3557674750723145. Because the deposit documents drift removal and normalization, residual bleaching cannot be separated from preprocessing effects here.
Range checks
| Metric | Segment | Value at Run Setting | Cited Range | Status |
|---|---|---|---|---|
| persistent rotor tracks | all | 303 count | none cited | unstable not reportable |
| dominant freq (Hz) | whole recording | 40.29 Hz | none cited | no cited range |
| persistent rotors | whole recording | 303 count | none cited | unstable not reportable |
| singularity frames fraction | whole recording | 1 fraction of frames | none cited | no cited range |
| persistent rotor count max | whole recording | 15 count | none cited | unstable not reportable |
Compare with run 20dfde82
A: this run, code 905d5be (uncommitted changes), None workers. B: run 20dfde82, 2026-10-27 22:15 UTC, code 13d8ceb, None workers. 86 stored values differ.
| File | A | B | Same | How |
|---|---|---|---|---|
| frames/voltage | [none] | [none] | [not comparable] | recorded sha256 |
| frames/phase | [none] | [none] | [not comparable] | recorded sha256 |
| frames/maps | [none] | [none] | [not comparable] | recorded sha256 |
| maps/dominant_frequency.png | 8c71c54e3940 | 8c71c54e3940 | yes | sha256 of the stored file |
| movie.mp4 | 10906397 | 10906397 | yes | size in bytes only; frames not compared |
| Stored Value | A | B |
|---|---|---|
| criteria_status.rules[1].description | 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 | Default baseline window (frames) and spatial Gaussian sigma/truncate for phase |
| criteria_status.rules[1].expert | optical mapping analyst | optical mapping analyst (cardiac electrophysiology) |
| criteria_status.rules[1].location | worker/voltage/baseline_rule.py (FACTOR, evaluate) | worker/voltage/preprocess.py (Params) |
| criteria_status.rules[1].values.baseline_frames | [absent] | 121 |
| criteria_status.rules[1].values.factor | 2.0 | [absent] |
| criteria_status.rules[1].values.lowpass | [absent] | None |
| criteria_status.rules[1].values.ok | True | [absent] |
| criteria_status.rules[1].values.required_min_frames | 52 | [absent] |
| criteria_status.rules[1].values.slowest_cycle_frames | 26 | [absent] |
| criteria_status.rules[1].values.source | per-pixel dominant frequency (images) | [absent] |
| criteria_status.rules[1].values.spatial_sigma | [absent] | 1.0 |
| criteria_status.rules[1].values.spatial_truncate | [absent] | 4.0 |
| criteria_status.rules[2].description | Default baseline window (frames) and spatial Gaussian sigma/truncate for phase | Tissue = not NaN in frame 0 and nonzero temporal std |
| criteria_status.rules[2].expert | optical mapping analyst (cardiac electrophysiology) | optical mapping analyst |
| criteria_status.rules[2].location | worker/voltage/preprocess.py (Params) | worker/voltage/io.py (tissue_mask) |
| criteria_status.rules[2].values.baseline_frames | 121 | [absent] |
| criteria_status.rules[2].values.lowpass | None | [absent] |
| criteria_status.rules[2].values.rule | [absent] | not NaN in frame 0 and nonzero std |
| criteria_status.rules[2].values.spatial_sigma | 1.0 | [absent] |
| criteria_status.rules[2].values.spatial_truncate | 4.0 | [absent] |
| criteria_status.rules[2].values.tissue_pixels | [absent] | 5216 |
| criteria_status.rules[3].description | Tissue = not NaN in frame 0 and nonzero temporal std | Dye polarity from sign of median per-pixel skew of dV/dt |
| criteria_status.rules[3].expert | optical mapping analyst | optical mapping analyst / voltage dye chemist |
| criteria_status.rules[3].location | worker/voltage/io.py (tissue_mask) | worker/voltage/preprocess.py (polarity) |
| criteria_status.rules[3].values.method | [absent] | median skew of dV/dt |
| criteria_status.rules[3].values.result | [absent] | 1 |
| criteria_status.rules[3].values.rule | not NaN in frame 0 and nonzero std | [absent] |
| criteria_status.rules[3].values.tissue_pixels | 5216 | [absent] |
| criteria_status.rules[4].description | Dye polarity from sign of median per-pixel skew of dV/dt | Phase singularity = |winding| > threshold turns, >= erode px from tissue edge |
| criteria_status.rules[4].expert | optical mapping analyst / voltage dye chemist | computational cardiac electrophysiologist (phase mapping) |
| criteria_status.rules[4].location | worker/voltage/preprocess.py (polarity) | worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px) |
| criteria_status.rules[4].values.method | median skew of dV/dt | [absent] |
| criteria_status.rules[4].values.result | 1 | [absent] |
| criteria_status.rules[4].values.rotor_erode_px | [absent] | 3 |
| criteria_status.rules[4].values.rotor_threshold | [absent] | 0.9 |
| criteria_status.rules[5].description | Phase singularity = |winding| > threshold turns, >= erode px from tissue edge | Track linking distance/gap and minimum lifetime for a persistent rotor |
| criteria_status.rules[5].location | worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px) | worker/voltage/rotors.py (TrackParams) |
| criteria_status.rules[5].values.link_px | [absent] | 4.0 |
| criteria_status.rules[5].values.max_gap | [absent] | 5 |
| criteria_status.rules[5].values.min_cycles | [absent] | 1.0 |
| criteria_status.rules[5].values.min_frames | [absent] | 25 |
| criteria_status.rules[5].values.rotor_erode_px | 3 | [absent] |
| criteria_status.rules[5].values.rotor_threshold | 0.9 | [absent] |
| criteria_status.rules[6].description | Track linking distance/gap and minimum lifetime for a persistent rotor | Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors |
| criteria_status.rules[6].location | worker/voltage/rotors.py (TrackParams) | worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac) |
| criteria_status.rules[6].values.link_px | 4.0 | [absent] |
| criteria_status.rules[6].values.max_gap | 5 | [absent] |
| criteria_status.rules[6].values.min_cycles | 1.0 | [absent] |
| criteria_status.rules[6].values.min_frames | 25 | [absent] |
| criteria_status.rules[6].values.pair_dist_px | [absent] | 3.0 |
| criteria_status.rules[6].values.paired_frac | [absent] | 0.5 |
| criteria_status.rules[7].description | Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors | Filter levels tested: spatial sigma and baseline window values |
| criteria_status.rules[7].expert | computational cardiac electrophysiologist (phase mapping) | optical mapping analyst |
| criteria_status.rules[7].location | worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac) | worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels) |
| criteria_status.rules[7].values.baselines | [absent] | {'run': 121, '3x_cycle': 75, '6x_cycle': 150, '1.5x_cycle': 38} |
| criteria_status.rules[7].values.pair_dist_px | 3.0 | [absent] |
| criteria_status.rules[7].values.paired_frac | 0.5 | [absent] |
| criteria_status.rules[7].values.sigmas | [absent] | {'light': 0.5, 'default': 1.0, 'heavier': 2.0} |
| criteria_status.rules[7].values.trackers | [absent] | {'loose': [6.0, 10], 'strict': [2.0, 1], 'default': [4.0, 5]} |
| criteria_status.rules[8].description | Filter levels tested: spatial sigma and baseline window values | Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it) |
| criteria_status.rules[8].expert | optical mapping analyst | cardiac electrophysiologist familiar with the dataset |
| criteria_status.rules[8].location | worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels) | worker/voltage/runs.py (default_window) |
| criteria_status.rules[8].values.baselines | {'run': 121, '3x_cycle': 75, '6x_cycle': 150, '1.5x_cycle': 38} | [absent] |
| criteria_status.rules[8].values.f0 | [absent] | 200 |
| criteria_status.rules[8].values.f1 | [absent] | 3600 |
| criteria_status.rules[8].values.sigmas | {'light': 0.5, 'default': 1.0, 'heavier': 2.0} | [absent] |
| criteria_status.rules[8].values.trackers | {'loose': [6.0, 10], 'strict': [2.0, 1], 'default': [4.0, 5]} | [absent] |
| criteria_status.rules[9].description | Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it) | Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing) |
| criteria_status.rules[9].expert | cardiac electrophysiologist familiar with the dataset | imaging scientist (camera acquisition and noise) |
| criteria_status.rules[9].location | worker/voltage/runs.py (default_window) | worker/voltage/inspect.py (prior_processing) |
| criteria_status.rules[9].values.f0 | 200 | [absent] |
| criteria_status.rules[9].values.f1 | 3600 | [absent] |
| criteria_status.rules[9].values.flags | [absent] | ['unit_range', 'non_integer', 'nan_mask_partial', 'temporal_smoothing', 'spatial_smoothing'] |
| criteria_status.rules[9].values.thresholds | [absent] | {'int_frac': 0.5, 'neg_frac': 0.01, 'dv_autocorr': 0.5, 'neighbour_corr': 0.8} |
| criteria_status.rules[10].description | Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing) | The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameter |
| criteria_status.rules[10].expert | imaging scientist (camera acquisition and noise) | optical mapping analyst |
| criteria_status.rules[10].location | worker/voltage/inspect.py (prior_processing) | worker/agents/pipeline.py (INSTRUCTIONS, validator) |
| criteria_status.rules[10].values.anomalies | [absent] | ['preprocessed deposit', 'polarity transformed relative to dye'] |
| criteria_status.rules[10].values.flags | ['unit_range', 'non_integer', 'nan_mask_partial', 'temporal_smoothing', 'spatial_smoothing'] | [absent] |
| criteria_status.rules[10].values.mismatches | [absent] | [] |
| criteria_status.rules[10].values.model | [absent] | openai:gpt-5.5 |
| criteria_status.rules[10].values.proceed | [absent] | True |
| criteria_status.rules[10].values.thresholds | {'int_frac': 0.5, 'neg_frac': 0.01, 'dv_autocorr': 0.5, 'neighbour_corr': 0.8} | [absent] |
| pipeline.baseline_rule | {'ok': True, 'ratio': 4.654, 'cycles': {'whole_recording': {'n_frames': 3800, 'cycle_frames': 26, 'pixels_agreeing_frac': 0.8585122699386503, 'pixels_with_rhythm_frac': 1.0, 'interval_quartiles_frames': [25.0, 26.0, 29.0]}}, 'factor': 2.0, 'reason': None, 'source': 'per-pixel dominant frequency (images)', 'status': 'provisional', 'baseline_frames': 121, 'slowest_segment': 'whole_recording', 'required_min_frames': 52, 'slowest_cycle_frames': 26} | None |
| pipeline.check | None | {'model': 'openai:gpt-5.5', 'proceed': True, 'anomalies': [{'topic': 'preprocessed deposit', 'severity': 'warn', 'effect_on_analysis': 'The recording is documented as background-subtracted, 3 × 3 spatially binned, low-pass filtered at 100 Hz, drift-removed, and normalized before deposit. The fixed pipeline can be run, but its Gaussian phase smoothing and baseline removal are being applied on top of prior filtering and drift correction of unknown total effect; amplitude, noise, and SNR-related interpretations should not be treated as raw-camera measurements.'}, {'topic': 'polarity transformed relative to dye', 'severity': 'warn', 'effect_on_analysis': 'RH237 normally decreases fluorescence on depolarization, but the deposited data measure as non-inverted. The pipeline should orient activation from measured polarity rather than dye expectation, so activation analysis is not expected to be made wrong if measured polarity is used.'}], 'rationale': 'The recording matches the protocol at the level needed to use the fixed parameter set: it is a rat whole-heart ventricular-fibrillation optical-mapping recording from the referenced public dataset, and no protocol field conflicts with the recording facts. The recording frame rate is 1000 Hz from deposit metadata; the protocol does not prescribe a different frame rate, and with the fixed baseline window the measured dominant rhythm is not in the caveated regime where the baseline window is shorter than about 1.5 cycles. The run should proceed, but the reader must treat the data as preprocessed rather than raw because prior binning, low-pass filtering, drift removal, and normalization affect the meaning of further smoothing, baseline correction, amplitude, and noise estimates.', 'mismatches': [], 'hold_reason': None, 'protocol_id': 'a0059cf5-fbde-4942-a18f-399ebe70e9ff', 'methods_text': 'Using the provisional protocol parameter set and provisional criteria, version 1, the analysis uses baseline_frames = 121, spatial_sigma = 1.0, spatial_truncate = 4.0, pad_frames = 200, 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 frame rate is 1000 Hz from deposit metadata, and the pixel size is 112.5 µm from the deposit metadata midpoint of the stated range. The recording has 3800 frames, with the provisional segment definition whole_recording, labelled ventricular fibrillation (whole recording), spanning frames 0 to 3800; the analysed frames are 200 to 3600.', 'params_version': 1, 'prompt_version': 'pipeline-v2'} |
| methods_text | Recording Rat heart, ventricular fibrillation (RG 80 nM) (doi:10.5281/zenodo.18319102; 128x80 px, 3800 frames, 1000 Hz) was analysed over frames 200-3600. Deposit shows signs of prior processing (provisional): unit range, non integer, nan mask partial, temporal smoothing, spatial smoothing. Each pixel was baseline-corrected by subtracting a 121-frame centered moving average; NaN pixels were set to zero. Dye polarity (upright) 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 200 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 >= 25 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. Sensitivity: baseline 150, 75, 38, 121 frames x sigma 0.5, 1.0, 2.0 px, and tracker variants. All thresholds and criteria are provisional pending review by a domain scientist. | Using the provisional protocol parameter set and provisional criteria, version 1, the analysis uses baseline_frames = 121, spatial_sigma = 1.0, spatial_truncate = 4.0, pad_frames = 200, 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 frame rate is 1000 Hz from deposit metadata, and the pixel size is 112.5 µm from the deposit metadata midpoint of the stated range. The recording has 3800 frames, with the provisional segment definition whole_recording, labelled ventricular fibrillation (whole recording), spanning frames 0 to 3800; the analysed frames are 200 to 3600. |