{
 "exported_at": "2026-10-28T23:56:59.389644+00:00",
 "exported_by": {
  "app": "quantetta-a web",
  "code": {
   "git_commit": "",
   "dirty": false
  }
 },
 "recording_short": "mouseventricle06062018_A_FLEC_1uM_Paced",
 "header": {
  "short": "mouseventricle06062018_A_FLEC_1uM_Paced",
  "label": "Mouse Whole Heart Optical Mapping Data: Mouse Whole Heart.zip/Mouse Whole Heart/06062018 A/mouseventricle06062018 A_FLEC 1uM Paced",
  "facts": "51 \u00d7 51 px, 5,000 frames, 1 kHz, 156 \u00b5m/px",
  "run_short": "1d65814d",
  "run_when": "2026-10-28 19:22 UTC",
  "params_version": 3,
  "commit": "4533745",
  "dirty": false,
  "workers": 4,
  "sig_short": "daa60525",
  "run_status": "done",
  "protocol_name": "Mouse whole heart optical mapping (Luther lab)"
 },
 "parameters": "% Mouse whole heart optical mapping (Luther lab), v3, read-only\n% set by developer (not a domain scientist); provisional, REVIEW_NEEDED 16\nbaseline_frames  = 901;     % >= 2 x slowest cycle (7, images): ok\npad_frames       = 500;     % each side, outside the window\nspatial_sigma    = 1.0;     % px, Gaussian, phase only\nspatial_truncate = 4.0;     % kernel radius, sigma\nlowpass          = [];      % none\npolarity         = -1;      % measured, skew of dV/dt\nrotor_threshold  = 0.9;     % turns, |winding| per plaquette\nrotor_erode_px   = 3;       % px from tissue edge ignored\nlink_px          = 4.0;     % tracking, max step per frame\nmax_gap          = 5;       % frames a track may vanish\nmin_cycles       = 1.0;     % own rotations, min_frames = 108\npair_dist_px     = 3.0;     % opposite-charge pairing\npaired_frac      = 0.5;     % max paired fraction of a track\nrender_step      = 4;       % movie only",
 "segments": [
  {
   "name": "whole_recording",
   "label": "Whole recording",
   "short": "whole recording",
   "defined": "0\u20135,000",
   "analysed": "500\u20134,500",
   "analysed_range": [
    500,
    4500
   ],
   "start": 0,
   "end": 5000,
   "cycle": "7 (98% of pixels)",
   "expected": "not stated",
   "bounded": "recording start \u2192 recording end",
   "defined_by": "admission (project lead); no comparison defined",
   "citation": null,
   "provisional": true
  }
 ],
 "metrics": {
  "maps": {
   "activation": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/activation_map.png",
   "dominant_frequency": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/dominant_frequency_map.png"
  },
  "frames": 4000,
  "tracks": 616,
  "cv_cm_s": 2.564866843208275,
  "apd50_ms": 15.0,
  "apd90_ms": 40.0,
  "segments": {
   "whole_recording": {
    "beats": {
     "note": null,
     "beats": 38,
     "per_beat": [
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         3.316515568458542,
         7.136308525472705
        ],
        "plane_fit": {
         "speed_cm_s": 410.2788290014063,
         "direction_deg": 144.85787921032608,
         "speed_px_per_frame": 26.29992493598758
        },
        "median_cm_s": 4.554687937903769,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.2125971518242655,
         0.4574556747097888
        ],
        "median_px_per_frame": 0.29196717550665185
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          4.0,
          30.0
         ],
         "median": 13.0
        },
        "apd90": {
         "iqr": [
          5.0,
          30.0
         ],
         "median": 13.0
        }
       },
       "window": [
        500,
        560
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          4.0,
          30.0
         ],
         "median": 13.0,
         "defined_frac": 0.729300941993059
        },
        "apd90": {
         "iqr": [
          5.0,
          30.0
         ],
         "median": 13.0,
         "defined_frac": 0.5716410510659395
        }
       },
       "upstroke_frame": 515,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 54.0,
       "activation_spread_frames": 54.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.713552056863962,
         3.6483329774285234
        ],
        "plane_fit": {
         "speed_cm_s": 277.9300453365165,
         "direction_deg": -55.80171303420778,
         "speed_px_per_frame": 17.816028547212596
        },
        "median_cm_s": 2.415913636025594,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.10984308056820269,
         0.23386749855311048
        ],
        "median_px_per_frame": 0.15486625871958937
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          17.0,
          49.0
         ],
         "median": 39.0
        }
       },
       "window": [
        560,
        672
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7347545860188398
        },
        "apd90": {
         "iqr": [
          17.0,
          49.0
         ],
         "median": 39.0,
         "defined_frac": 0.721864154685176
        }
       },
       "upstroke_frame": 581,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 98.0,
       "activation_spread_frames": 98.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7672817666649232,
         3.904880271061199
        ],
        "plane_fit": {
         "speed_cm_s": 174.98292426607205,
         "direction_deg": 172.15587540432972,
         "speed_px_per_frame": 11.216854119620004
        },
        "median_cm_s": 2.558126423254819,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11328729273493097,
         0.2503128378885384
        ],
        "median_px_per_frame": 0.16398246302915506
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          15.0,
          50.0
         ],
         "median": 38.0
        }
       },
       "window": [
        672,
        780
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 15.0,
         "defined_frac": 0.7129400099157164
        },
        "apd90": {
         "iqr": [
          15.0,
          50.0
         ],
         "median": 38.0,
         "defined_frac": 0.7050074367873079
        }
       },
       "upstroke_frame": 693,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 97.0,
       "activation_spread_frames": 97.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.870745841524629,
         3.9776388157893634
        ],
        "plane_fit": {
         "speed_cm_s": 120.01428264087853,
         "direction_deg": -60.64462499340378,
         "speed_px_per_frame": 7.693223246210163
        },
        "median_cm_s": 2.5645417789119156,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11991960522593775,
         0.25497684716598484
        ],
        "median_px_per_frame": 0.16439370377640486
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          19.0,
          51.0
         ],
         "median": 41.0
        }
       },
       "window": [
        780,
        890
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.7238472979672781
        },
        "apd90": {
         "iqr": [
          19.0,
          51.0
         ],
         "median": 41.0,
         "defined_frac": 0.7213683688646505
        }
       },
       "upstroke_frame": 801,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 93.0,
       "activation_spread_frames": 93.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.887303829466028,
         4.094089962953311
        ],
        "plane_fit": {
         "speed_cm_s": 135.65951761186787,
         "direction_deg": -95.22338543854062,
         "speed_px_per_frame": 8.696122923837684
        },
        "median_cm_s": 2.603234458482032,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12098101470936078,
         0.26244166429187893
        ],
        "median_px_per_frame": 0.1668740037488482
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          15.0,
          52.0
         ],
         "median": 41.0
        }
       },
       "window": [
        890,
        996
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.7426871591472484
        },
        "apd90": {
         "iqr": [
          15.0,
          52.0
         ],
         "median": 41.0,
         "defined_frac": 0.7228557263262271
        }
       },
       "upstroke_frame": 911,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.9064139825214341,
         4.268094303579629
        ],
        "plane_fit": {
         "speed_cm_s": 150.01449313244947,
         "direction_deg": -0.4508319615507368,
         "speed_px_per_frame": 9.616313662336504
        },
        "median_cm_s": 2.6678729892234285,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12220602452060475,
         0.2735957886910018
        ],
        "median_px_per_frame": 0.17101749930919413
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          27.0,
          54.0
         ],
         "median": 43.0
        }
       },
       "window": [
        996,
        1108
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7426871591472484
        },
        "apd90": {
         "iqr": [
          27.0,
          54.0
         ],
         "median": 43.0,
         "defined_frac": 0.7397124442240952
        }
       },
       "upstroke_frame": 1017,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8732109667541015,
         4.096807577226562
        ],
        "plane_fit": {
         "speed_cm_s": 94.73953039379393,
         "direction_deg": -32.83348684001503,
         "speed_px_per_frame": 6.073046820114996
        },
        "median_cm_s": 2.6505890025081507,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12007762607398087,
         0.26261587033503603
        ],
        "median_px_per_frame": 0.16990955144283018
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          26.0
         ],
         "median": 17.0
        },
        "apd90": {
         "iqr": [
          12.0,
          52.0
         ],
         "median": 40.0
        }
       },
       "window": [
        1108,
        1218
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          26.0
         ],
         "median": 17.0,
         "defined_frac": 0.7099652949925632
        },
        "apd90": {
         "iqr": [
          12.0,
          52.0
         ],
         "median": 40.0,
         "defined_frac": 0.6921170054536441
        }
       },
       "upstroke_frame": 1129,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 93.0,
       "activation_spread_frames": 93.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7670195256186736,
         3.8492866614024073
        ],
        "plane_fit": {
         "speed_cm_s": 111.35572665723649,
         "direction_deg": -15.008599407938764,
         "speed_px_per_frame": 7.1381876062331076
        },
        "median_cm_s": 2.521035253374827,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11327048241145343,
         0.24674914496169278
        ],
        "median_px_per_frame": 0.16160482393428377
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          23.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          24.0,
          51.0
         ],
         "median": 41.0
        }
       },
       "window": [
        1218,
        1327
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          23.0
         ],
         "median": 15.0,
         "defined_frac": 0.7382250867625186
        },
        "apd90": {
         "iqr": [
          24.0,
          51.0
         ],
         "median": 41.0,
         "defined_frac": 0.7258304412493802
        }
       },
       "upstroke_frame": 1239,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.663479343465853,
         3.609342512783273
        ],
        "plane_fit": {
         "speed_cm_s": 160.12650155012716,
         "direction_deg": 178.60789479720512,
         "speed_px_per_frame": 10.264519330136356
        },
        "median_cm_s": 2.3601098445999815,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.1066332912478111,
         0.23136810979379957
        ],
        "median_px_per_frame": 0.15128909260256293
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 14.0
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 38.0
        }
       },
       "window": [
        1327,
        1439
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 14.0,
         "defined_frac": 0.7139315815567675
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 38.0,
         "defined_frac": 0.7079821517104611
        }
       },
       "upstroke_frame": 1348,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 99.0,
       "activation_spread_frames": 99.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8040654115717822,
         3.8068444684043494
        ],
        "plane_fit": {
         "speed_cm_s": 512.1707291464884,
         "direction_deg": -22.34062394272832,
         "speed_px_per_frame": 32.83145699656977
        },
        "median_cm_s": 2.5321580002278767,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11564521869049886,
         0.2440284915643814
        ],
        "median_px_per_frame": 0.162317820527428
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 40.0
        }
       },
       "window": [
        1439,
        1546
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7387208725830441
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 40.0,
         "defined_frac": 0.7307882994546356
        }
       },
       "upstroke_frame": 1460,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.9433510607366584,
         4.185885950404845
        ],
        "plane_fit": {
         "speed_cm_s": 188.31189963940847,
         "direction_deg": -57.83022462970966,
         "speed_px_per_frame": 12.071275617910798
        },
        "median_cm_s": 2.6933453665740235,
        "pixels_used": 2016,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.1245737859446576,
         0.26832602246184906
        ],
        "median_px_per_frame": 0.17265034401115537
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 14.0
        },
        "apd90": {
         "iqr": [
          15.0,
          53.0
         ],
         "median": 40.0
        }
       },
       "window": [
        1546,
        1655
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 14.0,
         "defined_frac": 0.7540902330193356
        },
        "apd90": {
         "iqr": [
          15.0,
          53.0
         ],
         "median": 40.0,
         "defined_frac": 0.7461576598909271
        }
       },
       "upstroke_frame": 1567,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 91.0,
       "activation_spread_frames": 91.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.735710529931856,
         3.695711362244118
        ],
        "plane_fit": {
         "speed_cm_s": 106.61025659051676,
         "direction_deg": 138.81642026141014,
         "speed_px_per_frame": 6.833990807084407
        },
        "median_cm_s": 2.4179482067023765,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11126349550845231,
         0.2369045745028281
        ],
        "median_px_per_frame": 0.154996679916819
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          20.0,
          50.0
         ],
         "median": 39.0
        }
       },
       "window": [
        1655,
        1767
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.7297967278135845
        },
        "apd90": {
         "iqr": [
          20.0,
          50.0
         ],
         "median": 39.0,
         "defined_frac": 0.7208725830441249
        }
       },
       "upstroke_frame": 1676,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 96.0,
       "activation_spread_frames": 96.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7898008146093474,
         3.991334173939674
        ],
        "plane_fit": {
         "speed_cm_s": 200.3287972614793,
         "direction_deg": -25.896688317565836,
         "speed_px_per_frame": 12.841589568043545
        },
        "median_cm_s": 2.5830901358027667,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11473082144931714,
         0.2558547547397227
        ],
        "median_px_per_frame": 0.16558270101299788
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.25,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          24.0,
          49.0
         ],
         "median": 42.0
        }
       },
       "window": [
        1767,
        1876
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.25,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.6534457114526524
        },
        "apd90": {
         "iqr": [
          24.0,
          49.0
         ],
         "median": 42.0,
         "defined_frac": 0.6479920674268715
        }
       },
       "upstroke_frame": 1788,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 97.0,
       "activation_spread_frames": 97.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8660111964210078,
         4.098017755817031
        ],
        "plane_fit": {
         "speed_cm_s": 99.32949262126915,
         "direction_deg": -43.92729100509893,
         "speed_px_per_frame": 6.3672751680300745
        },
        "median_cm_s": 2.6192226105996004,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11961610233468,
         0.2626934458857071
        ],
        "median_px_per_frame": 0.16789888529484617
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          15.5,
          51.0
         ],
         "median": 40.0
        }
       },
       "window": [
        1876,
        1983
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7030242935052058
        },
        "apd90": {
         "iqr": [
          15.5,
          51.0
         ],
         "median": 40.0,
         "defined_frac": 0.6955875061973228
        }
       },
       "upstroke_frame": 1897,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 91.0,
       "activation_spread_frames": 91.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         2.0134891136090234,
         4.262368570650417
        ],
        "plane_fit": {
         "speed_cm_s": 563.1284908387723,
         "direction_deg": 61.91766738229999,
         "speed_px_per_frame": 36.09798018197258
        },
        "median_cm_s": 2.8619556805564876,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.1290698149749374,
         0.2732287545288729
        ],
        "median_px_per_frame": 0.18345869747156973
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          21.0,
          51.0
         ],
         "median": 41.0
        }
       },
       "window": [
        1983,
        2092
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7248388696083292
        },
        "apd90": {
         "iqr": [
          21.0,
          51.0
         ],
         "median": 41.0,
         "defined_frac": 0.7139315815567675
        }
       },
       "upstroke_frame": 2004,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7644480235752351,
         3.860759062384348
        ],
        "plane_fit": {
         "speed_cm_s": 298.160217860141,
         "direction_deg": -22.517972417356393,
         "speed_px_per_frame": 19.112834478214168
        },
        "median_cm_s": 2.5286673460795837,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11310564253687405,
         0.24748455528104796
        ],
        "median_px_per_frame": 0.16209406064612716
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          17.0,
          52.0
         ],
         "median": 39.0
        }
       },
       "window": [
        2092,
        2202
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7421913733267228
        },
        "apd90": {
         "iqr": [
          17.0,
          52.0
         ],
         "median": 39.0,
         "defined_frac": 0.7337630143777888
        }
       },
       "upstroke_frame": 2113,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 96.0,
       "activation_spread_frames": 96.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.766351428152223,
         3.8481285180459337
        ],
        "plane_fit": {
         "speed_cm_s": 360.48447396502326,
         "direction_deg": -177.47932744629378,
         "speed_px_per_frame": 23.107979100322005
        },
        "median_cm_s": 2.4478650113891622,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11322765565078353,
         0.24667490500294448
        ],
        "median_px_per_frame": 0.15691442380699758
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          27.0
         ],
         "median": 17.0
        },
        "apd90": {
         "iqr": [
          24.0,
          54.0
         ],
         "median": 43.0
        }
       },
       "window": [
        2202,
        2312
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          27.0
         ],
         "median": 17.0,
         "defined_frac": 0.7317798710956867
        },
        "apd90": {
         "iqr": [
          24.0,
          54.0
         ],
         "median": 43.0,
         "defined_frac": 0.7159147248388696
        }
       },
       "upstroke_frame": 2223,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 97.0,
       "activation_spread_frames": 97.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8821257094610302,
         4.1264807170015905
        ],
        "plane_fit": {
         "speed_cm_s": 579.9575099479373,
         "direction_deg": 48.46944369331423,
         "speed_px_per_frame": 37.17676345820111
        },
        "median_cm_s": 2.640120542274469,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12064908393980964,
         0.26451799467958914
        ],
        "median_px_per_frame": 0.16923849629964544
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 14.0
        },
        "apd90": {
         "iqr": [
          16.0,
          53.0
         ],
         "median": 40.0
        }
       },
       "window": [
        2312,
        2424
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 14.0,
         "defined_frac": 0.7258304412493802
        },
        "apd90": {
         "iqr": [
          16.0,
          53.0
         ],
         "median": 40.0,
         "defined_frac": 0.7188894397620228
        }
       },
       "upstroke_frame": 2333,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7744473337837972,
         3.7324267216722102
        ],
        "plane_fit": {
         "speed_cm_s": 210.77851517892498,
         "direction_deg": -59.719513333085885,
         "speed_px_per_frame": 13.51144328070032
        },
        "median_cm_s": 2.5240013281869924,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11374662396049982,
         0.23925812318411604
        ],
        "median_px_per_frame": 0.16179495693506363
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 14.0
        },
        "apd90": {
         "iqr": [
          14.0,
          51.0
         ],
         "median": 39.0
        }
       },
       "window": [
        2424,
        2532
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 14.0,
         "defined_frac": 0.6955875061973228
        },
        "apd90": {
         "iqr": [
          14.0,
          51.0
         ],
         "median": 39.0,
         "defined_frac": 0.6921170054536441
        }
       },
       "upstroke_frame": 2445,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 89.19999999999999,
       "activation_spread_frames": 89.19999999999999
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8509904652437965,
         4.003139510796724
        ],
        "plane_fit": {
         "speed_cm_s": 366.4956369264291,
         "direction_deg": -138.15335945582174,
         "speed_px_per_frame": 23.49331005938648
        },
        "median_cm_s": 2.5989863290561397,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11865323495152542,
         0.2566115071023541
        ],
        "median_px_per_frame": 0.16660168776000897
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          19.0,
          52.0
         ],
         "median": 42.0
        }
       },
       "window": [
        2532,
        2641
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7347545860188398
        },
        "apd90": {
         "iqr": [
          19.0,
          52.0
         ],
         "median": 42.0,
         "defined_frac": 0.7278135845314824
        }
       },
       "upstroke_frame": 2553,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7182020456297256,
         3.9558366422217572
        ],
        "plane_fit": {
         "speed_cm_s": 115.28884838446379,
         "direction_deg": -71.14205645877175,
         "speed_px_per_frame": 7.390310793875884
        },
        "median_cm_s": 2.489134718814088,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11014115677113626,
         0.25357927193729213
        ],
        "median_px_per_frame": 0.15955991787269797
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          16.0,
          52.0
         ],
         "median": 41.0
        }
       },
       "window": [
        2641,
        2751
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7084779375309866
        },
        "apd90": {
         "iqr": [
          16.0,
          52.0
         ],
         "median": 41.0,
         "defined_frac": 0.6955875061973228
        }
       },
       "upstroke_frame": 2662,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8822023317367802,
         4.079334909700157
        ],
        "plane_fit": {
         "speed_cm_s": 253.11031305063776,
         "direction_deg": 5.345488456916128,
         "speed_px_per_frame": 16.225020067348574
        },
        "median_cm_s": 2.679055453586324,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12065399562415258,
         0.2614958275448819
        ],
        "median_px_per_frame": 0.1717343239478413
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          12.0,
          53.0
         ],
         "median": 39.0
        }
       },
       "window": [
        2751,
        2860
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7521070897372335
        },
        "apd90": {
         "iqr": [
          12.0,
          53.0
         ],
         "median": 39.0,
         "defined_frac": 0.7501239464551314
        }
       },
       "upstroke_frame": 2772,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.19999999999982,
       "activation_spread_frames": 94.19999999999982
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7787934398636998,
         3.8760930342583784
        ],
        "plane_fit": {
         "speed_cm_s": 110.81620884668148,
         "direction_deg": -87.52428272075973,
         "speed_px_per_frame": 7.10360313119753
        },
        "median_cm_s": 2.4896313943135406,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11402522050408333,
         0.2484675021960499
        ],
        "median_px_per_frame": 0.15959175604573977
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          13.0,
          50.0
         ],
         "median": 38.0
        }
       },
       "window": [
        2860,
        2970
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.7347545860188398
        },
        "apd90": {
         "iqr": [
          13.0,
          50.0
         ],
         "median": 38.0,
         "defined_frac": 0.7238472979672781
        }
       },
       "upstroke_frame": 2881,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 96.0,
       "activation_spread_frames": 96.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.6385862385938004,
         3.431798150426564
        ],
        "plane_fit": {
         "speed_cm_s": 252.88991283219784,
         "direction_deg": -71.17532061666445,
         "speed_px_per_frame": 16.21089184821781
        },
        "median_cm_s": 2.26348985397932,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.10503757939703849,
         0.21998706092477976
        ],
        "median_px_per_frame": 0.14509550346021283
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          23.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 40.0
        }
       },
       "window": [
        2970,
        3082
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          23.0
         ],
         "median": 15.0,
         "defined_frac": 0.7283093703520079
        },
        "apd90": {
         "iqr": [
          18.0,
          51.0
         ],
         "median": 40.0,
         "defined_frac": 0.7109568666336142
        }
       },
       "upstroke_frame": 2991,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 98.0,
       "activation_spread_frames": 98.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8013855672027048,
         3.858131297699995
        ],
        "plane_fit": {
         "speed_cm_s": 415.84729321806185,
         "direction_deg": 8.346117183215583,
         "speed_px_per_frame": 26.65687777038858
        },
        "median_cm_s": 2.565191907504634,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11547343379504518,
         0.24731610882692276
        ],
        "median_px_per_frame": 0.1644353786861945
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          18.0,
          53.0
         ],
         "median": 42.0
        }
       },
       "window": [
        3082,
        3190
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          23.0
         ],
         "median": 15.0,
         "defined_frac": 0.7084779375309866
        },
        "apd90": {
         "iqr": [
          18.0,
          53.0
         ],
         "median": 42.0,
         "defined_frac": 0.698562221120476
        }
       },
       "upstroke_frame": 3103,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.745189564656396,
         3.8687375471531658
        ],
        "plane_fit": {
         "speed_cm_s": 662.0244462923268,
         "direction_deg": -102.37366001271127,
         "speed_px_per_frame": 42.43746450591839
        },
        "median_cm_s": 2.4937953031842417,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11187112593951257,
         0.24799599661238242
        ],
        "median_px_per_frame": 0.15985867328104114
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          16.0,
          50.0
         ],
         "median": 40.0
        }
       },
       "window": [
        3190,
        3300
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7055032226078334
        },
        "apd90": {
         "iqr": [
          16.0,
          50.0
         ],
         "median": 40.0,
         "defined_frac": 0.7020327218641547
        }
       },
       "upstroke_frame": 3211,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 100.0,
       "activation_spread_frames": 100.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7606880822333464,
         3.9157991243939962
        ],
        "plane_fit": {
         "speed_cm_s": 356.5310388997034,
         "direction_deg": 132.16172819893117,
         "speed_px_per_frame": 22.854553775622016
        },
        "median_cm_s": 2.4896850873224863,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11286462065598374,
         0.25101276438423054
        ],
        "median_px_per_frame": 0.1595951979052876
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          25.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          21.0,
          53.0
         ],
         "median": 43.0
        }
       },
       "window": [
        3300,
        3407
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          25.0
         ],
         "median": 16.0,
         "defined_frac": 0.668815071888944
        },
        "apd90": {
         "iqr": [
          21.0,
          53.0
         ],
         "median": 43.0,
         "defined_frac": 0.6574119980168567
        }
       },
       "upstroke_frame": 3321,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8827841034689448,
         3.983867206203118
        ],
        "plane_fit": {
         "speed_cm_s": 245.1704654425469,
         "direction_deg": 163.51427274478397,
         "speed_px_per_frame": 15.716055477086343
        },
        "median_cm_s": 2.6250327800252085,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.12069128868390672,
         0.25537610296173835
        ],
        "median_px_per_frame": 0.168271332052898
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          15.0,
          51.0
         ],
         "median": 41.0
        }
       },
       "window": [
        3407,
        3518
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.7005453644025781
        },
        "apd90": {
         "iqr": [
          15.0,
          51.0
         ],
         "median": 41.0,
         "defined_frac": 0.6921170054536441
        }
       },
       "upstroke_frame": 3428,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.754079783873876,
         3.8183976484746314
        ],
        "plane_fit": {
         "speed_cm_s": 260.51920900509856,
         "direction_deg": 116.32360601663005,
         "speed_px_per_frame": 16.699949295198625
        },
        "median_cm_s": 2.482966615684479,
        "pixels_used": 2016,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11244101178678692,
         0.2447690800304251
        ],
        "median_px_per_frame": 0.15916452664644098
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          20.0,
          51.0
         ],
         "median": 41.0
        }
       },
       "window": [
        3518,
        3627
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 16.0,
         "defined_frac": 0.7327714427367378
        },
        "apd90": {
         "iqr": [
          20.0,
          51.0
         ],
         "median": 41.0,
         "defined_frac": 0.7169062964799207
        }
       },
       "upstroke_frame": 3539,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7147144190632546,
         3.819455255187309
        ],
        "plane_fit": {
         "speed_cm_s": 201.41006448637782,
         "direction_deg": -8.958876712736888,
         "speed_px_per_frame": 12.910901569639604
        },
        "median_cm_s": 2.4242897538017014,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.10991759096559325,
         0.24483687533251983
        ],
        "median_px_per_frame": 0.1554031893462629
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          14.0,
          52.0
         ],
         "median": 41.0
        }
       },
       "window": [
        3627,
        3737
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 15.0,
         "defined_frac": 0.6846802181457611
        },
        "apd90": {
         "iqr": [
          14.0,
          52.0
         ],
         "median": 41.0,
         "defined_frac": 0.6757560733763014
        }
       },
       "upstroke_frame": 3648,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 98.0,
       "activation_spread_frames": 98.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8536919293959597,
         4.07029921057203
        ],
        "plane_fit": {
         "speed_cm_s": 77.81774226408344,
         "direction_deg": -29.998720162495786,
         "speed_px_per_frame": 4.98831681180022
        },
        "median_cm_s": 2.623465615192504,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11882640573051025,
         0.26091661606230965
        ],
        "median_px_per_frame": 0.16817087276875026
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          23.0,
          52.0
         ],
         "median": 42.0
        }
       },
       "window": [
        3737,
        3844
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7169062964799207
        },
        "apd90": {
         "iqr": [
          23.0,
          52.0
         ],
         "median": 42.0,
         "defined_frac": 0.7124442240951909
        }
       },
       "upstroke_frame": 3758,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 96.0,
       "activation_spread_frames": 96.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7915110764352162,
         3.9253663731113675
        ],
        "plane_fit": {
         "speed_cm_s": 479.9602405812491,
         "direction_deg": 32.14126356425983,
         "speed_px_per_frame": 30.766682088541607
        },
        "median_cm_s": 2.601294960564076,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11484045361764207,
         0.251626049558421
        ],
        "median_px_per_frame": 0.16674967695923565
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          21.0,
          52.0
         ],
         "median": 42.0
        }
       },
       "window": [
        3844,
        3955
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          26.0
         ],
         "median": 16.0,
         "defined_frac": 0.7169062964799207
        },
        "apd90": {
         "iqr": [
          21.0,
          52.0
         ],
         "median": 42.0,
         "defined_frac": 0.7089737233515121
        }
       },
       "upstroke_frame": 3865,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 93.0,
       "activation_spread_frames": 93.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8629327909512627,
         3.9527694373296076
        ],
        "plane_fit": {
         "speed_cm_s": 66.76731188270267,
         "direction_deg": -26.76535755339507,
         "speed_px_per_frame": 4.279955889916838
        },
        "median_cm_s": 2.5895724158795694,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11941876865072197,
         0.2533826562390774
        ],
        "median_px_per_frame": 0.1659982317871519
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          16.0,
          52.0
         ],
         "median": 40.0
        }
       },
       "window": [
        3955,
        4065
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          25.0
         ],
         "median": 16.0,
         "defined_frac": 0.729300941993059
        },
        "apd90": {
         "iqr": [
          16.0,
          52.0
         ],
         "median": 40.0,
         "defined_frac": 0.7273177987109569
        }
       },
       "upstroke_frame": 3976,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 95.0,
       "activation_spread_frames": 95.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.8441904068219053,
         4.223513991195452
        ],
        "plane_fit": {
         "speed_cm_s": 1045.369703563344,
         "direction_deg": 146.1604728744571,
         "speed_px_per_frame": 67.0108784335477
        },
        "median_cm_s": 2.666396912792373,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.11821733377063495,
         0.2707380763586828
        ],
        "median_px_per_frame": 0.17092287902515213
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          14.0,
          51.0
         ],
         "median": 40.0
        }
       },
       "window": [
        4065,
        4174
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          7.0,
          25.0
         ],
         "median": 16.0,
         "defined_frac": 0.7005453644025781
        },
        "apd90": {
         "iqr": [
          14.0,
          51.0
         ],
         "median": 40.0,
         "defined_frac": 0.6945959345562717
        }
       },
       "upstroke_frame": 4086,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 94.0,
       "activation_spread_frames": 94.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.7357347526017401,
         3.962493069137901
        ],
        "plane_fit": {
         "speed_cm_s": 373.27188853159595,
         "direction_deg": 8.929005891395938,
         "speed_px_per_frame": 23.927685162281794
        },
        "median_cm_s": 2.4450456082108247,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.1112650482437013,
         0.2540059659703783
        ],
        "median_px_per_frame": 0.15673369283402724
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          27.0
         ],
         "median": 16.0
        },
        "apd90": {
         "iqr": [
          17.0,
          50.0
         ],
         "median": 39.0
        }
       },
       "window": [
        4174,
        4283
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          27.0
         ],
         "median": 16.0,
         "defined_frac": 0.6440257808626674
        },
        "apd90": {
         "iqr": [
          17.0,
          50.0
         ],
         "median": 39.0,
         "defined_frac": 0.6415468517600397
        }
       },
       "upstroke_frame": 4195,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 101.0,
       "activation_spread_frames": 101.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         1.82902884628086,
         3.8457548074542367
        ],
        "plane_fit": {
         "speed_cm_s": 126.1988746733014,
         "direction_deg": -34.32254200614536,
         "speed_px_per_frame": 8.089671453416756
        },
        "median_cm_s": 2.5313839214004195,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.1172454388641577,
         0.2465227440675793
        ],
        "median_px_per_frame": 0.16226820008977047
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0
        },
        "apd90": {
         "iqr": [
          20.0,
          50.0
         ],
         "median": 40.0
        }
       },
       "window": [
        4283,
        4393
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          8.0,
          24.0
         ],
         "median": 15.0,
         "defined_frac": 0.6732771442736738
        },
        "apd90": {
         "iqr": [
          20.0,
          50.0
         ],
         "median": 40.0,
         "defined_frac": 0.6678235002478929
        }
       },
       "upstroke_frame": 4304,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 97.0,
       "activation_spread_frames": 97.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         3.26371424971003,
         7.3892614388861855
        ],
        "plane_fit": {
         "speed_cm_s": 271.4480348640943,
         "direction_deg": -22.831074979374133,
         "speed_px_per_frame": 17.400515055390663
        },
        "median_cm_s": 4.620056723214003,
        "pixels_used": 2017,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.20921245190448912,
         0.47367060505680675
        ],
        "median_px_per_frame": 0.2961574822573079
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          9.0,
          22.0
         ],
         "median": 14.0
        },
        "apd90": {
         "iqr": [
          23.0,
          46.0
         ],
         "median": 38.0
        }
       },
       "window": [
        4393,
        4465
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          9.0,
          22.0
         ],
         "median": 14.0,
         "defined_frac": 0.8730788299454636
        },
        "apd90": {
         "iqr": [
          23.0,
          46.0
         ],
         "median": 38.0,
         "defined_frac": 0.8413485374318295
        }
       },
       "upstroke_frame": 4414,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 60.0,
       "activation_spread_frames": 60.0
      },
      {
       "cv": {
        "fps": 1000.0,
        "method": "1/|grad T| on a 1 px Gaussian-smoothed max-dV/dt activation map; finite differences",
        "iqr_cm_s": [
         5.865918356736988,
         12.942980923203931
        ],
        "plane_fit": {
         "speed_cm_s": 281.7719440379171,
         "direction_deg": 15.916378498846084,
         "speed_px_per_frame": 18.062304104994684
        },
        "median_cm_s": 8.298928302134671,
        "pixels_used": 2016,
        "pixels_total": 2017,
        "pixel_size_um": 156.0,
        "iqr_px_per_frame": [
         0.37602040748314025,
         0.8296782643079443
        ],
        "median_px_per_frame": 0.5319825834701712
       },
       "apd_ms": {
        "apd50": {
         "iqr": [
          4.0,
          15.0
         ],
         "median": 8.0
        },
        "apd90": {
         "iqr": [
          5.0,
          15.0
         ],
         "median": 9.0
        }
       },
       "window": [
        4465,
        4500
       ],
       "apd_frames": {
        "apd50": {
         "iqr": [
          4.0,
          15.0
         ],
         "median": 8.0,
         "defined_frac": 0.7312840852751611
        },
        "apd90": {
         "iqr": [
          5.0,
          15.0
         ],
         "median": 9.0,
         "defined_frac": 0.624194348041646
        }
       },
       "upstroke_frame": 4486,
       "activation_coverage": 0.7754709727028066,
       "activation_spread_ms": 32.0,
       "activation_spread_frames": 32.0
      }
     ],
     "cv_cm_s_median": 2.564866843208275,
     "apd50_ms_median": 15.0,
     "apd90_ms_median": 40.0,
     "representative_beat": 0,
     "cv_px_per_frame_median": 0.16441454123129967,
     "global_amplitude_ratio": 0.7788020258110504
    },
    "frames": [
     500,
     4500
    ],
    "dominant_freq": 9.25,
    "persistent_rotors": 4,
    "singularity_count_max": 15,
    "singularity_count_mean": 0.305,
    "singularity_frames_frac": 0.14475,
    "persistent_rotor_count_max": 2,
    "persistent_rotor_durations": [
     {
      "end": 2968,
      "core": [
       3.75,
       12.5
      ],
      "start": 2946,
      "charge": 1,
      "rotations": 1.294,
      "lifetime_cycles": 0.21,
      "lifetime_frames": 23,
      "frames_in_segment": 23,
      "rotation_period_frames": 17.77
     },
     {
      "end": 2982,
      "core": [
       6.83,
       5.17
      ],
      "start": 2962,
      "charge": 1,
      "rotations": 2.133,
      "lifetime_cycles": 0.19,
      "lifetime_frames": 21,
      "frames_in_segment": 21,
      "rotation_period_frames": 9.84
     },
     {
      "end": 3687,
      "core": [
       5.7,
       4.3
      ],
      "start": 3670,
      "charge": -1,
      "rotations": 1.23,
      "lifetime_cycles": 0.17,
      "lifetime_frames": 18,
      "frames_in_segment": 18,
      "rotation_period_frames": 14.64
     },
     {
      "end": 4496,
      "core": [
       8.0,
       5.83
      ],
      "start": 4472,
      "charge": -1,
      "rotations": 1.308,
      "lifetime_cycles": 0.23,
      "lifetime_frames": 25,
      "frames_in_segment": 25,
      "rotation_period_frames": 19.11
     }
    ],
    "persistent_rotor_frames_frac": 0.02
   }
  },
  "computed_on": {
   "amplitude_p99": "baseline-corrected",
   "dominant_freq": "baseline-corrected, median of per-pixel spectral peaks",
   "activation_apd_cv": "baseline-corrected display signal, per global beat",
   "singularities_and_rotors": "phase of spatially filtered signal"
  },
  "amplitude_p99": 372.091796875,
  "dominant_freq": 9.25,
  "mask_coverage": 0.7754709727028066,
  "pixel_size_um": 156.0,
  "tissue_pixels": 2017,
  "min_rotor_frames": 108,
  "persistence_rule": "own_rotation",
  "dominant_freq_iqr": [
   9.25,
   9.25
  ],
  "persistent_rotors": 4,
  "dominant_freq_unit": "Hz",
  "singularity_count_max": 15,
  "singularity_count_mean": 0.305,
  "paired_singularity_frac": 0.6426229508196721,
  "persistent_rotor_tracks": 4,
  "singularity_frames_frac": 0.14475,
  "dominant_freq_tissue_mean": 9.25,
  "persistent_rotor_count_max": 2,
  "persistent_rotor_durations": [
   {
    "end": 2968,
    "core": [
     3.75,
     12.5
    ],
    "start": 2946,
    "charge": 1,
    "rotations": 1.294,
    "lifetime_cycles": 0.21,
    "lifetime_frames": 23,
    "frames_in_segment": 23,
    "rotation_period_frames": 17.77
   },
   {
    "end": 2982,
    "core": [
     6.83,
     5.17
    ],
    "start": 2962,
    "charge": 1,
    "rotations": 2.133,
    "lifetime_cycles": 0.19,
    "lifetime_frames": 21,
    "frames_in_segment": 21,
    "rotation_period_frames": 9.84
   },
   {
    "end": 3687,
    "core": [
     5.7,
     4.3
    ],
    "start": 3670,
    "charge": -1,
    "rotations": 1.23,
    "lifetime_cycles": 0.17,
    "lifetime_frames": 18,
    "frames_in_segment": 18,
    "rotation_period_frames": 14.64
   },
   {
    "end": 4496,
    "core": [
     8.0,
     5.83
    ],
    "start": 4472,
    "charge": -1,
    "rotations": 1.308,
    "lifetime_cycles": 0.23,
    "lifetime_frames": 25,
    "frames_in_segment": 25,
    "rotation_period_frames": 19.11
   }
  ],
  "persistent_rotor_lifetimes": [
   25,
   23,
   21,
   18
  ],
  "persistent_rotor_frames_frac": 0.02
 },
 "reportable": {
  "persistent_rotor_tracks": {
   "unit": "count",
   "status": "unstable, not reportable",
   "settings": "sensitivity grid + trackers",
   "range_across_settings": [
    0.0,
    13.0
   ]
  },
  "whole_recording.dominant_freq_hz": {
   "unit": "Hz",
   "value": 9.25,
   "checked": "no_cited_range"
  },
  "whole_recording.persistent_rotors": {
   "unit": "count",
   "status": "unstable, not reportable",
   "settings": "sensitivity grid + trackers",
   "range_across_settings": [
    0.0,
    13.0
   ]
  },
  "whole_recording.singularity_frames_frac": {
   "unit": "fraction of frames",
   "status": "unstable, not reportable",
   "settings": "sensitivity grid + trackers",
   "range_across_settings": [
    0.021,
    0.6705
   ]
  },
  "whole_recording.persistent_rotor_count_max": {
   "unit": "count",
   "status": "unstable, not reportable",
   "settings": "sensitivity grid + trackers",
   "range_across_settings": [
    0.0,
    2.0
   ]
  }
 },
 "physiology_ok": null,
 "sensitivity": {
  "grid": [
   {
    "sigma": "light",
    "baseline": "6x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 3,
      "singularity_count_max": 144,
      "singularity_count_mean": 6.14025,
      "singularity_frames_frac": 0.6465,
      "persistent_rotor_count_max": 1,
      "persistent_rotor_durations": [
       {
        "end": 1867,
        "core": [
         5.21,
         4.86
        ],
        "start": 1837,
        "charge": 1,
        "rotations": 1.236,
        "lifetime_cycles": 0.29,
        "lifetime_frames": 31,
        "frames_in_segment": 31,
        "rotation_period_frames": 25.08
       },
       {
        "end": 2747,
        "core": [
         3.94,
         9.62
        ],
        "start": 2703,
        "charge": -1,
        "rotations": 1.767,
        "lifetime_cycles": 0.42,
        "lifetime_frames": 45,
        "frames_in_segment": 45,
        "rotation_period_frames": 25.46
       },
       {
        "end": 2918,
        "core": [
         8.0,
         3.83
        ],
        "start": 2903,
        "charge": -1,
        "rotations": 1.197,
        "lifetime_cycles": 0.15,
        "lifetime_frames": 16,
        "frames_in_segment": 16,
        "rotation_period_frames": 13.37
       }
      ],
      "persistent_rotor_frames_frac": 0.023
     }
    },
    "spatial_sigma": 0.5,
    "is_run_setting": false,
    "baseline_frames": 648,
    "persistent_rotor_tracks": 3
   },
   {
    "sigma": "default",
    "baseline": "6x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 6,
      "singularity_count_max": 11,
      "singularity_count_mean": 0.27325,
      "singularity_frames_frac": 0.13775,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 1458,
        "core": [
         5.36,
         5.93
        ],
        "start": 1439,
        "charge": 1,
        "rotations": 1.863,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 20,
        "frames_in_segment": 20,
        "rotation_period_frames": 10.74
       },
       {
        "end": 2212,
        "core": [
         4.94,
         9.28
        ],
        "start": 2185,
        "charge": 1,
        "rotations": 1.575,
        "lifetime_cycles": 0.26,
        "lifetime_frames": 28,
        "frames_in_segment": 28,
        "rotation_period_frames": 17.78
       },
       {
        "end": 2966,
        "core": [
         3.61,
         12.61
        ],
        "start": 2946,
        "charge": 1,
        "rotations": 1.077,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 19.5
       },
       {
        "end": 2979,
        "core": [
         4.5,
         6.83
        ],
        "start": 2964,
        "charge": 1,
        "rotations": 1.888,
        "lifetime_cycles": 0.15,
        "lifetime_frames": 16,
        "frames_in_segment": 16,
        "rotation_period_frames": 8.48
       },
       {
        "end": 4461,
        "core": [
         5.0,
         4.67
        ],
        "start": 4443,
        "charge": -1,
        "rotations": 1.178,
        "lifetime_cycles": 0.18,
        "lifetime_frames": 19,
        "frames_in_segment": 19,
        "rotation_period_frames": 16.12
       },
       {
        "end": 4496,
        "core": [
         7.3,
         5.9
        ],
        "start": 4477,
        "charge": -1,
        "rotations": 1.071,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 20,
        "frames_in_segment": 20,
        "rotation_period_frames": 18.67
       }
      ],
      "persistent_rotor_frames_frac": 0.03025
     }
    },
    "spatial_sigma": 1.0,
    "is_run_setting": false,
    "baseline_frames": 648,
    "persistent_rotor_tracks": 6
   },
   {
    "sigma": "heavier",
    "baseline": "6x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 0,
      "singularity_count_max": 3,
      "singularity_count_mean": 0.04375,
      "singularity_frames_frac": 0.0335,
      "persistent_rotor_count_max": 0,
      "persistent_rotor_durations": [],
      "persistent_rotor_frames_frac": 0.0
     }
    },
    "spatial_sigma": 2.0,
    "is_run_setting": false,
    "baseline_frames": 648,
    "persistent_rotor_tracks": 0
   },
   {
    "sigma": "light",
    "baseline": "3x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 4,
      "singularity_count_max": 151,
      "singularity_count_mean": 7.04375,
      "singularity_frames_frac": 0.65725,
      "persistent_rotor_count_max": 1,
      "persistent_rotor_durations": [
       {
        "end": 2148,
        "core": [
         9.5,
         3.62
        ],
        "start": 2130,
        "charge": -1,
        "rotations": 1.069,
        "lifetime_cycles": 0.18,
        "lifetime_frames": 19,
        "frames_in_segment": 19,
        "rotation_period_frames": 17.77
       },
       {
        "end": 2736,
        "core": [
         3.67,
         9.0
        ],
        "start": 2703,
        "charge": -1,
        "rotations": 1.262,
        "lifetime_cycles": 0.31,
        "lifetime_frames": 34,
        "frames_in_segment": 34,
        "rotation_period_frames": 26.94
       },
       {
        "end": 3750,
        "core": [
         4.0,
         3.5
        ],
        "start": 3736,
        "charge": 1,
        "rotations": 1.063,
        "lifetime_cycles": 0.14,
        "lifetime_frames": 15,
        "frames_in_segment": 15,
        "rotation_period_frames": 14.11
       },
       {
        "end": 4185,
        "core": [
         4.38,
         7.0
        ],
        "start": 4159,
        "charge": 1,
        "rotations": 1.497,
        "lifetime_cycles": 0.25,
        "lifetime_frames": 27,
        "frames_in_segment": 27,
        "rotation_period_frames": 18.04
       }
      ],
      "persistent_rotor_frames_frac": 0.02375
     }
    },
    "spatial_sigma": 0.5,
    "is_run_setting": false,
    "baseline_frames": 324,
    "persistent_rotor_tracks": 4
   },
   {
    "sigma": "default",
    "baseline": "3x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 3,
      "singularity_count_max": 15,
      "singularity_count_mean": 0.3015,
      "singularity_frames_frac": 0.1435,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 2966,
        "core": [
         3.77,
         12.5
        ],
        "start": 2946,
        "charge": 1,
        "rotations": 1.16,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 18.1
       },
       {
        "end": 2982,
        "core": [
         6.94,
         5.39
        ],
        "start": 2962,
        "charge": 1,
        "rotations": 1.628,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 12.9
       },
       {
        "end": 3693,
        "core": [
         5.75,
         5.0
        ],
        "start": 3678,
        "charge": -1,
        "rotations": 1.384,
        "lifetime_cycles": 0.15,
        "lifetime_frames": 16,
        "frames_in_segment": 16,
        "rotation_period_frames": 11.56
       }
      ],
      "persistent_rotor_frames_frac": 0.01325
     }
    },
    "spatial_sigma": 1.0,
    "is_run_setting": false,
    "baseline_frames": 324,
    "persistent_rotor_tracks": 3
   },
   {
    "sigma": "heavier",
    "baseline": "3x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 0,
      "singularity_count_max": 3,
      "singularity_count_mean": 0.051,
      "singularity_frames_frac": 0.03825,
      "persistent_rotor_count_max": 0,
      "persistent_rotor_durations": [],
      "persistent_rotor_frames_frac": 0.0
     }
    },
    "spatial_sigma": 2.0,
    "is_run_setting": false,
    "baseline_frames": 324,
    "persistent_rotor_tracks": 0
   },
   {
    "sigma": "light",
    "baseline": "1.5x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 2,
      "singularity_count_max": 50,
      "singularity_count_mean": 2.368,
      "singularity_frames_frac": 0.52675,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 986,
        "core": [
         4.2,
         6.1
        ],
        "start": 967,
        "charge": -1,
        "rotations": 1.53,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 20,
        "frames_in_segment": 20,
        "rotation_period_frames": 13.07
       },
       {
        "end": 989,
        "core": [
         3.88,
         8.12
        ],
        "start": 971,
        "charge": -1,
        "rotations": 1.195,
        "lifetime_cycles": 0.18,
        "lifetime_frames": 19,
        "frames_in_segment": 19,
        "rotation_period_frames": 15.91
       }
      ],
      "persistent_rotor_frames_frac": 0.00575
     }
    },
    "spatial_sigma": 0.5,
    "is_run_setting": false,
    "baseline_frames": 162,
    "persistent_rotor_tracks": 2
   },
   {
    "sigma": "default",
    "baseline": "1.5x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 4,
      "singularity_count_max": 6,
      "singularity_count_mean": 0.17775,
      "singularity_frames_frac": 0.101,
      "persistent_rotor_count_max": 1,
      "persistent_rotor_durations": [
       {
        "end": 1453,
        "core": [
         5.4,
         7.8
        ],
        "start": 1427,
        "charge": -1,
        "rotations": 1.426,
        "lifetime_cycles": 0.25,
        "lifetime_frames": 27,
        "frames_in_segment": 27,
        "rotation_period_frames": 18.93
       },
       {
        "end": 2212,
        "core": [
         5.25,
         8.0
        ],
        "start": 2185,
        "charge": 1,
        "rotations": 1.167,
        "lifetime_cycles": 0.26,
        "lifetime_frames": 28,
        "frames_in_segment": 28,
        "rotation_period_frames": 23.99
       },
       {
        "end": 2979,
        "core": [
         4.12,
         7.75
        ],
        "start": 2957,
        "charge": 1,
        "rotations": 2.485,
        "lifetime_cycles": 0.21,
        "lifetime_frames": 23,
        "frames_in_segment": 23,
        "rotation_period_frames": 9.26
       },
       {
        "end": 3702,
        "core": [
         4.0,
         5.5
        ],
        "start": 3680,
        "charge": -1,
        "rotations": 1.265,
        "lifetime_cycles": 0.21,
        "lifetime_frames": 23,
        "frames_in_segment": 23,
        "rotation_period_frames": 18.18
       }
      ],
      "persistent_rotor_frames_frac": 0.02525
     }
    },
    "spatial_sigma": 1.0,
    "is_run_setting": false,
    "baseline_frames": 162,
    "persistent_rotor_tracks": 4
   },
   {
    "sigma": "heavier",
    "baseline": "1.5x_cycle",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 0,
      "singularity_count_max": 2,
      "singularity_count_mean": 0.026,
      "singularity_frames_frac": 0.021,
      "persistent_rotor_count_max": 0,
      "persistent_rotor_durations": [],
      "persistent_rotor_frames_frac": 0.0
     }
    },
    "spatial_sigma": 2.0,
    "is_run_setting": false,
    "baseline_frames": 162,
    "persistent_rotor_tracks": 0
   },
   {
    "sigma": "light",
    "baseline": "run",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 2,
      "singularity_count_max": 154,
      "singularity_count_mean": 7.49,
      "singularity_frames_frac": 0.6705,
      "persistent_rotor_count_max": 1,
      "persistent_rotor_durations": [
       {
        "end": 991,
        "core": [
         4.33,
         11.83
        ],
        "start": 974,
        "charge": 1,
        "rotations": 1.306,
        "lifetime_cycles": 0.17,
        "lifetime_frames": 18,
        "frames_in_segment": 18,
        "rotation_period_frames": 13.78
       },
       {
        "end": 1699,
        "core": [
         5.6,
         3.6
        ],
        "start": 1687,
        "charge": 1,
        "rotations": 1.332,
        "lifetime_cycles": 0.12,
        "lifetime_frames": 13,
        "frames_in_segment": 13,
        "rotation_period_frames": 9.76
       }
      ],
      "persistent_rotor_frames_frac": 0.00775
     }
    },
    "spatial_sigma": 0.5,
    "is_run_setting": false,
    "baseline_frames": 901,
    "persistent_rotor_tracks": 2
   },
   {
    "sigma": "default",
    "baseline": "run",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 4,
      "singularity_count_max": 15,
      "singularity_count_mean": 0.305,
      "singularity_frames_frac": 0.14475,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 2968,
        "core": [
         3.75,
         12.5
        ],
        "start": 2946,
        "charge": 1,
        "rotations": 1.294,
        "lifetime_cycles": 0.21,
        "lifetime_frames": 23,
        "frames_in_segment": 23,
        "rotation_period_frames": 17.77
       },
       {
        "end": 2982,
        "core": [
         6.83,
         5.17
        ],
        "start": 2962,
        "charge": 1,
        "rotations": 2.133,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 9.84
       },
       {
        "end": 3687,
        "core": [
         5.7,
         4.3
        ],
        "start": 3670,
        "charge": -1,
        "rotations": 1.23,
        "lifetime_cycles": 0.17,
        "lifetime_frames": 18,
        "frames_in_segment": 18,
        "rotation_period_frames": 14.64
       },
       {
        "end": 4496,
        "core": [
         8.0,
         5.83
        ],
        "start": 4472,
        "charge": -1,
        "rotations": 1.308,
        "lifetime_cycles": 0.23,
        "lifetime_frames": 25,
        "frames_in_segment": 25,
        "rotation_period_frames": 19.11
       }
      ],
      "persistent_rotor_frames_frac": 0.02
     }
    },
    "spatial_sigma": 1.0,
    "is_run_setting": true,
    "baseline_frames": 901,
    "persistent_rotor_tracks": 4
   },
   {
    "sigma": "heavier",
    "baseline": "run",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 0,
      "singularity_count_max": 4,
      "singularity_count_mean": 0.04625,
      "singularity_frames_frac": 0.0345,
      "persistent_rotor_count_max": 0,
      "persistent_rotor_durations": [],
      "persistent_rotor_frames_frac": 0.0
     }
    },
    "spatial_sigma": 2.0,
    "is_run_setting": false,
    "baseline_frames": 901,
    "persistent_rotor_tracks": 0
   }
  ],
  "fixed": {
   "expect": null,
   "window": [
    500,
    4500
   ],
   "polarity": -1,
   "segments": {
    "whole_recording": [
     500,
     4500
    ]
   },
   "rotor_erode_px": 3,
   "rotor_threshold": 0.9,
   "min_rotor_frames": 108
  },
  "holds": null,
  "status": "provisional",
  "varied": {
   "spatial_sigma": {
    "light": 0.5,
    "default": 1.0,
    "heavier": 2.0
   },
   "baseline_frames": {
    "run": 901,
    "3x_cycle": 324,
    "6x_cycle": 648,
    "1.5x_cycle": 162
   },
   "baseline_scaling": {
    "multiples": {
     "3x_cycle": 3.0,
     "6x_cycle": 6.0,
     "1.5x_cycle": 1.5
    },
    "reference_segment": "whole_recording",
    "segment_cycles_frames": {
     "whole_recording": 108
    },
    "reference_cycle_frames": 108,
    "window_over_cycle_per_segment": {
     "run": {
      "whole_recording": 8.34
     },
     "3x_cycle": {
      "whole_recording": 3.0
     },
     "6x_cycle": {
      "whole_recording": 6.0
     },
     "1.5x_cycle": {
      "whole_recording": 1.5
     }
    }
   },
   "tracker(link_px, max_gap)": {
    "loose": [
     6.0,
     10
    ],
    "strict": [
     2.0,
     1
    ],
    "default": [
     4.0,
     5
    ]
   }
  },
  "findings": null,
  "trackers": [
   {
    "link_px": 2.0,
    "max_gap": 1,
    "tracker": "strict",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 0,
      "singularity_count_max": 15,
      "singularity_count_mean": 0.305,
      "singularity_frames_frac": 0.14475,
      "persistent_rotor_count_max": 0,
      "persistent_rotor_durations": [],
      "persistent_rotor_frames_frac": 0.0
     }
    },
    "is_run_setting": false,
    "persistent_rotor_tracks": 0
   },
   {
    "link_px": 4.0,
    "max_gap": 5,
    "tracker": "default",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 4,
      "singularity_count_max": 15,
      "singularity_count_mean": 0.305,
      "singularity_frames_frac": 0.14475,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 2968,
        "core": [
         3.75,
         12.5
        ],
        "start": 2946,
        "charge": 1,
        "rotations": 1.294,
        "lifetime_cycles": 0.21,
        "lifetime_frames": 23,
        "frames_in_segment": 23,
        "rotation_period_frames": 17.77
       },
       {
        "end": 2982,
        "core": [
         6.83,
         5.17
        ],
        "start": 2962,
        "charge": 1,
        "rotations": 2.133,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 9.84
       },
       {
        "end": 3687,
        "core": [
         5.7,
         4.3
        ],
        "start": 3670,
        "charge": -1,
        "rotations": 1.23,
        "lifetime_cycles": 0.17,
        "lifetime_frames": 18,
        "frames_in_segment": 18,
        "rotation_period_frames": 14.64
       },
       {
        "end": 4496,
        "core": [
         8.0,
         5.83
        ],
        "start": 4472,
        "charge": -1,
        "rotations": 1.308,
        "lifetime_cycles": 0.23,
        "lifetime_frames": 25,
        "frames_in_segment": 25,
        "rotation_period_frames": 19.11
       }
      ],
      "persistent_rotor_frames_frac": 0.02
     }
    },
    "is_run_setting": true,
    "persistent_rotor_tracks": 4
   },
   {
    "link_px": 6.0,
    "max_gap": 10,
    "tracker": "loose",
    "findings": null,
    "segments": {
     "whole_recording": {
      "beats": null,
      "frames": [
       500,
       4500
      ],
      "dominant_freq": null,
      "persistent_rotors": 13,
      "singularity_count_max": 15,
      "singularity_count_mean": 0.305,
      "singularity_frames_frac": 0.14475,
      "persistent_rotor_count_max": 2,
      "persistent_rotor_durations": [
       {
        "end": 686,
        "core": [
         4.5,
         7.0
        ],
        "start": 665,
        "charge": 1,
        "rotations": 1.129,
        "lifetime_cycles": 0.2,
        "lifetime_frames": 22,
        "frames_in_segment": 22,
        "rotation_period_frames": 19.48
       },
       {
        "end": 861,
        "core": [
         6.14,
         5.29
        ],
        "start": 812,
        "charge": -1,
        "rotations": 3.069,
        "lifetime_cycles": 0.46,
        "lifetime_frames": 50,
        "frames_in_segment": 50,
        "rotation_period_frames": 16.29
       },
       {
        "end": 2212,
        "core": [
         3.5,
         12.0
        ],
        "start": 2188,
        "charge": 1,
        "rotations": 1.808,
        "lifetime_cycles": 0.23,
        "lifetime_frames": 25,
        "frames_in_segment": 25,
        "rotation_period_frames": 13.83
       },
       {
        "end": 2982,
        "core": [
         5.42,
         7.19
        ],
        "start": 2947,
        "charge": 1,
        "rotations": 3.089,
        "lifetime_cycles": 0.33,
        "lifetime_frames": 36,
        "frames_in_segment": 36,
        "rotation_period_frames": 11.65
       },
       {
        "end": 2985,
        "core": [
         5.4,
         8.6
        ],
        "start": 2947,
        "charge": -1,
        "rotations": 2.636,
        "lifetime_cycles": 0.36,
        "lifetime_frames": 39,
        "frames_in_segment": 39,
        "rotation_period_frames": 14.79
       },
       {
        "end": 3066,
        "core": [
         5.0,
         4.5
        ],
        "start": 3046,
        "charge": -1,
        "rotations": 1.074,
        "lifetime_cycles": 0.19,
        "lifetime_frames": 21,
        "frames_in_segment": 21,
        "rotation_period_frames": 19.55
       },
       {
        "end": 3491,
        "core": [
         3.9,
         4.5
        ],
        "start": 3444,
        "charge": -1,
        "rotations": 3.098,
        "lifetime_cycles": 0.44,
        "lifetime_frames": 48,
        "frames_in_segment": 48,
        "rotation_period_frames": 15.5
       },
       {
        "end": 3687,
        "core": [
         5.12,
         5.88
        ],
        "start": 3669,
        "charge": -1,
        "rotations": 1.671,
        "lifetime_cycles": 0.18,
        "lifetime_frames": 19,
        "frames_in_segment": 19,
        "rotation_period_frames": 11.37
       },
       {
        "end": 3747,
        "core": [
         10.5,
         4.28
        ],
        "start": 3708,
        "charge": -1,
        "rotations": 1.128,
        "lifetime_cycles": 0.37,
        "lifetime_frames": 40,
        "frames_in_segment": 40,
        "rotation_period_frames": 35.48
       },
       {
        "end": 4251,
        "core": [
         5.72,
         3.83
        ],
        "start": 4216,
        "charge": 1,
        "rotations": 2.192,
        "lifetime_cycles": 0.33,
        "lifetime_frames": 36,
        "frames_in_segment": 36,
        "rotation_period_frames": 16.43
       },
       {
        "end": 4473,
        "core": [
         6.06,
         7.06
        ],
        "start": 4443,
        "charge": 1,
        "rotations": 1.006,
        "lifetime_cycles": 0.29,
        "lifetime_frames": 31,
        "frames_in_segment": 31,
        "rotation_period_frames": 30.82
       },
       {
        "end": 4496,
        "core": [
         6.71,
         5.57
        ],
        "start": 4446,
        "charge": -1,
        "rotations": 2.298,
        "lifetime_cycles": 0.47,
        "lifetime_frames": 51,
        "frames_in_segment": 51,
        "rotation_period_frames": 22.19
       },
       {
        "end": 4498,
        "core": [
         4.3,
         8.1
        ],
        "start": 4474,
        "charge": 1,
        "rotations": 1.474,
        "lifetime_cycles": 0.23,
        "lifetime_frames": 25,
        "frames_in_segment": 25,
        "rotation_period_frames": 16.96
       }
      ],
      "persistent_rotor_frames_frac": 0.089
     }
    },
    "is_run_setting": false,
    "persistent_rotor_tracks": 13
   }
  ]
 },
 "critic": {
  "code": {
   "dirty": false,
   "git_commit": "4533745bb9cdd7aab7940336430ca22779950c4f"
  },
  "agent": "critic",
  "model": "openai:gpt-5.5",
  "checks": {
   "checks": {
    "persistent_rotor_tracks": {
     "unit": "count",
     "range": null,
     "metric": "persistent_rotor_tracks",
     "stable": false,
     "status": "unstable_not_reportable",
     "segment": null,
     "spread_frac": 4.333,
     "value_at_run_setting": 4,
     "range_across_settings": [
      0.0,
      13.0
     ]
    },
    "whole_recording.dominant_freq_hz": {
     "unit": "Hz",
     "range": null,
     "metric": "dominant_freq_hz",
     "stable": true,
     "status": "no_cited_range",
     "segment": "whole_recording",
     "spread_frac": 0.0,
     "value_at_run_setting": 9.25,
     "range_across_settings": [
      9.25,
      9.25
     ]
    },
    "whole_recording.persistent_rotors": {
     "unit": "count",
     "range": null,
     "metric": "persistent_rotors",
     "stable": false,
     "status": "unstable_not_reportable",
     "segment": "whole_recording",
     "spread_frac": 4.333,
     "value_at_run_setting": 4,
     "range_across_settings": [
      0.0,
      13.0
     ]
    },
    "whole_recording.singularity_frames_frac": {
     "unit": "fraction of frames",
     "range": null,
     "metric": "singularity_frames_frac",
     "stable": false,
     "status": "unstable_not_reportable",
     "segment": "whole_recording",
     "spread_frac": 4.619,
     "value_at_run_setting": 0.14475,
     "range_across_settings": [
      0.021,
      0.6705
     ]
    },
    "whole_recording.persistent_rotor_count_max": {
     "unit": "count",
     "range": null,
     "metric": "persistent_rotor_count_max",
     "stable": false,
     "status": "unstable_not_reportable",
     "segment": "whole_recording",
     "spread_frac": 2.0,
     "value_at_run_setting": 2,
     "range_across_settings": [
      0.0,
      2.0
     ]
    }
   },
   "unstable": [
    "whole_recording.singularity_frames_frac",
    "whole_recording.persistent_rotors",
    "whole_recording.persistent_rotor_count_max",
    "persistent_rotor_tracks"
   ],
   "physiology_ok": null,
   "ranged_checks": []
  },
  "ranges": [
   {
    "id": "mouse_spiral_rotation_hz",
    "low": 18.75,
    "high": 20.0,
    "unit": "Hz",
    "scope": "one optical mapping recording in the same study (spiral wave before and during illumination); not a population range",
    "metric": "dominant_freq_hz",
    "source": {
     "ref": "10.1371/journal.pcbi.1011660",
     "quotes": [
      "rotational frequency of \u2248 20 Hz before illumination",
      "the frequency of the arrhythmia decreases to \u2248 18\\.75 Hz"
     ],
     "passages": [
      " is shown in Fig 3B. It shows that the arrhythmia consists of a single spiral wave with a stationary core dynamic and a rotational frequency of \u2248 20 Hz before illumination. During a single global optical pulse with a PL of 5000 ms and an LI of 3.21 \u03bcW/mm2, the frequency of the arrhythmia de",
      "ncy of \u2248 20 Hz before illumination. During a single global optical pulse with a PL of 5000 ms and an LI of 3.21 \u03bcW/mm2, the frequency of the arrhythmia decreases to \u2248 18.75 Hz. It is important to note that the frequency reverses its original value of \u2248 20 Hz when the light is turned off. Fig 3C"
     ]
    },
    "status": "provisional",
    "tissue": "whole_heart",
    "species": "mouse",
    "applies_to": {
     "segment_expected_persistent_rotors": "present"
    },
    "checked_low": 14.0625,
    "checked_high": 25.0,
    "tolerance_frac": 0.25
   }
  ],
  "run_id": "1d65814d-f982-424e-ae62-1ed747dc6cf7",
  "status": "provisional",
  "verdict": {
   "send_back": false,
   "critic_notes": "Provisional review: the only stable metric is dominant_freq_hz at 9.25 Hz, but it has no applicable cited range for this paced mouse whole-heart recording; the mouse spiral-wave context from DOI 10.1371/journal.pcbi.1011660 gives \u224820 Hz and \u224818.75 Hz, corresponding at 1000 frames/s to 50 and 53 frames, but that is not a population range for this file. The rotor-related outputs are unstable and not reportable: singularity_frames_frac spans 0.021 to 0.6705, persistent_rotors spans 0.0 to 13.0, persistent_rotor_count_max spans 0.0 to 2.0, and persistent_rotor_tracks spans 0.0 to 13.0 across the tested settings. The persistent-rotor threshold variants are not applicable because there are no segment expectations; strict/default/loose trackers found 0, 4, and 13 persistent rotors, so tracking sensitivity needs review rather than serving as proof that the finding is false. Before reporting, review the inspector block on frame-rate provenance, unavailable depositor documentation, tissue annotation/mask, physiology-reference limitations, and baseline drift/bleaching; all ranges, the stability threshold, and the criteria are provisional.",
   "review_items": [
    {
     "topic": "unstable:whole_recording.singularity_frames_frac",
     "detail": "Varies from 0.021 to 0.6705 across the filter grid, exceeding the provisional stability rule.",
     "severity": "warn",
     "reviewer_type": "analysis"
    },
    {
     "topic": "unstable:whole_recording.persistent_rotors",
     "detail": "Varies from 0.0 to 13.0 across filter and tracker settings, so persistent-rotor count is not reportable.",
     "severity": "warn",
     "reviewer_type": "analysis"
    },
    {
     "topic": "unstable:whole_recording.persistent_rotor_count_max",
     "detail": "Varies from 0.0 to 2.0 across filter and tracker settings, so the maximum simultaneous count is not reportable.",
     "severity": "warn",
     "reviewer_type": "analysis"
    },
    {
     "topic": "unstable:persistent_rotor_tracks",
     "detail": "Varies from 0.0 to 13.0 across filter and tracker settings, so track count is not reportable.",
     "severity": "warn",
     "reviewer_type": "analysis"
    },
    {
     "topic": "Frame rate unavailable",
     "detail": "Inspector reports that no frame-rate source was available from upload/admission, accessible deposit metadata, publication text, or acquisition log, so time conversion for paced data needs review despite the analysis overview listing 1000.0 Hz.",
     "severity": "block",
     "reviewer_type": "data curator"
    },
    {
     "topic": "Accessible depositor documentation unavailable",
     "detail": "Figshare deposit documentation could not be read by the metadata tool, so preprocessing steps and protocol statements were not independently verified.",
     "severity": "warn",
     "reviewer_type": "data curator"
    },
    {
     "topic": "Tissue annotation/mask",
     "detail": "Recording metadata and path labeling conflict on atrium versus mouseventricle, and the analysis mask covers the full 51 x 51 frame based only on nonzero temporal standard deviation.",
     "severity": "warn",
     "reviewer_type": "imaging reviewer"
    },
    {
     "topic": "Physiology-reference limitations",
     "detail": "The only provisional reference rate is mouse spiral rotation at 14.0625 to 25.0 Hz from a different context, while this filename indicates paced recording.",
     "severity": "info",
     "reviewer_type": "physiology reviewer"
    },
    {
     "topic": "Baseline drift/bleaching",
     "detail": "Inspector reports slow baseline change nearly one beat amplitude, so detrending and baseline handling may materially affect amplitude-based and rotor-related measurements.",
     "severity": "warn",
     "reviewer_type": "signal-processing reviewer"
    },
    {
     "topic": "tracker sensitivity",
     "detail": "Strict/default/loose tracker settings returned 0/4/13 persistent rotors; treat as a tracking-sensitivity review item rather than a false-positive verdict by itself.",
     "severity": "warn",
     "reviewer_type": "analysis"
    }
   ],
   "tracker_note": "Strict, default, and loose tracking found 0, 4, and 13 persistent rotors respectively for whole_recording; the tracker-comparison rule reports agree=true, but the numerical sensitivity should still be reviewed and is not by itself a reason to call the finding false.",
   "physiology_ok": null,
   "metric_judgments": [
    {
     "note": "This sensitivity measure is not reportable because it varies from 0.021 to 0.6705 of frames across the filter grid; do not cite a single run-setting value until filter/mask/baseline handling is reviewed.",
     "metric": "whole_recording.singularity_frames_frac",
     "status": "unstable_not_reportable"
    },
    {
     "note": "The persistent-rotor count is not reportable because it ranges from 0.0 to 13.0 across filter and tracker settings; the mouse spiral-wave context in DOI 10.1371/journal.pcbi.1011660 is relevant background, but this unstable count should not be interpreted physiologically.",
     "metric": "whole_recording.persistent_rotors",
     "status": "unstable_not_reportable"
    },
    {
     "note": "The maximum simultaneous persistent-rotor count is not reportable because it ranges from 0.0 to 2.0 across filter and tracker settings; resolve sensitivity before using this as a signature feature.",
     "metric": "whole_recording.persistent_rotor_count_max",
     "status": "unstable_not_reportable"
    },
    {
     "note": "The dominant frequency is stable across tested baseline windows at 9.25 Hz, but there is no applicable cited range for this paced whole-heart recording; the provisional mouse spiral-wave reference in DOI 10.1371/journal.pcbi.1011660 is not a population range for this file.",
     "metric": "whole_recording.dominant_freq_hz",
     "status": "no_cited_range"
    },
    {
     "note": "The track count is not reportable because it ranges from 0.0 to 13.0 across filter and tracker settings; review tracking and preprocessing rather than reporting the run-setting count.",
     "metric": "persistent_rotor_tracks",
     "status": "unstable_not_reportable"
    }
   ],
   "send_back_reason": null,
   "persistence_threshold_note": "The persistent-rotor rule is not applicable at either the measured-cycle basis or the cited paper rotation-period basis because there are no segment expectations; the two persistence verdicts are therefore not applicable and have no agreement flag."
  },
  "passages": {
   "mouse_spiral_rotation_period": {
    "ref": "10.1371/journal.pcbi.1011660",
    "note": "At 1000 frames/s, 20 Hz is a 50-frame rotation; the illuminated value of 18.75 Hz would be 53 frames.",
    "quotes": [
     "rotational frequency of \u2248 20 Hz before illumination"
    ],
    "status": "provisional",
    "passages": [
     " is shown in Fig 3B. It shows that the arrhythmia consists of a single spiral wave with a stationary core dynamic and a rotational frequency of \u2248 20 Hz before illumination. During a single global optical pulse with a PL of 5000 ms and an LI of 3.21 \u03bcW/mm2, the frequency of the arrhythmia de"
    ],
    "applies_to": {
     "species": "mouse"
    },
    "rotation_hz": 20.0
   }
  },
  "trackers": {
   "note": "disagreement is reported as a review item, not folded into the pass/fail",
   "agree": true,
   "trackers": [
    {
     "link_px": 2.0,
     "max_gap": 1,
     "tracker": "strict",
     "is_run_setting": false,
     "persistent_rotors_by_segment": {
      "whole_recording": 0
     }
    },
    {
     "link_px": 4.0,
     "max_gap": 5,
     "tracker": "default",
     "is_run_setting": true,
     "persistent_rotors_by_segment": {
      "whole_recording": 4
     }
    },
    {
     "link_px": 6.0,
     "max_gap": 10,
     "tracker": "loose",
     "is_run_setting": false,
     "persistent_rotors_by_segment": {
      "whole_recording": 13
     }
    }
   ]
  },
  "stability": {
   "persistent_rotor_tracks": {
    "max": 13.0,
    "min": 0.0,
    "median": 3.0,
    "stable": false,
    "settings": 15,
    "spread_frac": 4.333,
    "values_grid": [
     3,
     6,
     0,
     4,
     3,
     0,
     2,
     4,
     0,
     2,
     4,
     0
    ],
    "varied_over": "filter grid + trackers",
    "values_trackers": [
     0,
     4,
     13
    ]
   },
   "whole_recording.dominant_freq_hz": {
    "max": 9.25,
    "min": 9.25,
    "median": 9.25,
    "stable": true,
    "settings": 4,
    "spread_frac": 0.0,
    "varied_over": "baseline windows",
    "values_by_baseline": {
     "162": 9.25,
     "324": 9.25,
     "648": 9.25,
     "901": 9.25
    }
   },
   "whole_recording.persistent_rotors": {
    "max": 13.0,
    "min": 0.0,
    "median": 3.0,
    "stable": false,
    "settings": 15,
    "spread_frac": 4.333,
    "values_grid": [
     3,
     6,
     0,
     4,
     3,
     0,
     2,
     4,
     0,
     2,
     4,
     0
    ],
    "varied_over": "filter grid + trackers",
    "values_trackers": [
     0,
     4,
     13
    ]
   },
   "whole_recording.singularity_frames_frac": {
    "max": 0.6705,
    "min": 0.021,
    "median": 0.140625,
    "stable": false,
    "settings": 12,
    "spread_frac": 4.619,
    "values_grid": [
     0.6465,
     0.13775,
     0.0335,
     0.65725,
     0.1435,
     0.03825,
     0.52675,
     0.101,
     0.021,
     0.6705,
     0.14475,
     0.0345
    ],
    "varied_over": "filter grid"
   },
   "whole_recording.persistent_rotor_present": {
    "stable": false,
    "values_grid": [
     true,
     true,
     false,
     true,
     true,
     false,
     true,
     true,
     false,
     true,
     true,
     false
    ],
    "varied_over": "filter grid + trackers",
    "values_trackers": [
     false,
     true,
     true
    ],
    "stable_across_filters": false,
    "stable_across_trackers": false
   },
   "whole_recording.persistent_rotor_count_max": {
    "max": 2.0,
    "min": 0.0,
    "median": 1.0,
    "stable": false,
    "settings": 15,
    "spread_frac": 2.0,
    "values_grid": [
     1,
     2,
     0,
     1,
     2,
     0,
     2,
     1,
     0,
     1,
     2,
     0
    ],
    "varied_over": "filter grid + trackers",
    "values_trackers": [
     0,
     2,
     2
    ]
   }
  },
  "reviewed_at": "2026-10-28T19:25:53.544540+00:00",
  "recording_id": "f84bc560-2a52-46d8-8ca3-e654c30d8fdf",
  "signature_id": "daa60525-79d0-40ac-80a8-d131bab1047a",
  "prompt_version": "critic-v1",
  "criteria_status": {
   "note": null,
   "rules": [
    {
     "id": "physiology_reference_rates",
     "expert": "cardiac electrophysiologist per species",
     "status": "provisional",
     "values": {
      "ranges": [
       "mouse_spiral_rotation_hz"
      ],
      "tolerance_frac": 0.25,
      "segment_rhythm_rule": "expected persistent rotors 'present' -> spiral arrhythmia"
     },
     "decision": null,
     "location": "worker/voltage/physiology.py (RANGES, TOLERANCE_FRAC)",
     "reviewed": false,
     "reviewer": null,
     "description": "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",
     "reviewed_at": null
    },
    {
     "id": "stability_rule",
     "expert": "biostatistician + optical mapping analyst",
     "status": "provisional",
     "values": {
      "unstable": [
       "whole_recording.singularity_frames_frac",
       "whole_recording.persistent_rotors",
       "whole_recording.persistent_rotor_count_max",
       "persistent_rotor_tracks"
      ],
      "stable_frac": 0.25
     },
     "decision": null,
     "location": "worker/agents/critic.py (STABLE_FRAC, stability)",
     "reviewed": false,
     "reviewer": null,
     "description": "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'",
     "reviewed_at": null
    },
    {
     "id": "persistence_threshold_variants",
     "expert": "computational cardiac electrophysiologist (phase mapping)",
     "status": "provisional",
     "values": {
      "measured_cycle": 108,
      "paper_rotation": null
     },
     "decision": null,
     "location": "worker/agents/critic.py (persistence_variants)",
     "reviewed": false,
     "reviewer": null,
     "description": "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",
     "reviewed_at": null
    },
    {
     "id": "persistent_rotor_criterion",
     "expert": "cardiac electrophysiologist",
     "status": "provisional",
     "values": {
      "max_absent": 0,
      "min_present": 1
     },
     "decision": null,
     "location": "worker/voltage/sensitivity.py (MIN_ROTORS_PRESENT, MAX_ROTORS_ABSENT)",
     "reviewed": false,
     "reviewer": null,
     "description": "Persistent-rotor finding holds if every 'present' segment has >= 1 persistent rotor and every 'absent' segment has none, at every setting",
     "reviewed_at": null
    },
    {
     "id": "sensitivity_grid",
     "expert": "optical mapping analyst",
     "status": "provisional",
     "values": {
      "spatial_sigma": {
       "light": 0.5,
       "default": 1.0,
       "heavier": 2.0
      },
      "baseline_frames": {
       "run": 901,
       "3x_cycle": 324,
       "6x_cycle": 648,
       "1.5x_cycle": 162
      },
      "baseline_scaling": {
       "multiples": {
        "3x_cycle": 3.0,
        "6x_cycle": 6.0,
        "1.5x_cycle": 1.5
       },
       "reference_segment": "whole_recording",
       "segment_cycles_frames": {
        "whole_recording": 108
       },
       "reference_cycle_frames": 108,
       "window_over_cycle_per_segment": {
        "run": {
         "whole_recording": 8.34
        },
        "3x_cycle": {
         "whole_recording": 3.0
        },
        "6x_cycle": {
         "whole_recording": 6.0
        },
        "1.5x_cycle": {
         "whole_recording": 1.5
        }
       }
      },
      "tracker(link_px, max_gap)": {
       "loose": [
        6.0,
        10
       ],
       "strict": [
        2.0,
        1
       ],
       "default": [
        4.0,
        5
       ]
      }
     },
     "decision": null,
     "location": "worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels)",
     "reviewed": false,
     "reviewer": null,
     "description": "Filter levels tested: spatial sigma and baseline window values",
     "reviewed_at": null
    }
   ],
   "status": "provisional",
   "all_reviewed": false,
   "superseded_by_run": null
  },
  "persistence_variants": {
   "agree": null,
   "measured_cycle": {
    "basis": "one dominant cycle of the fastest segment at the run setting",
    "reason": "no segment expectations, so the rule has nothing to test",
    "applicable": false,
    "min_frames": 108
   },
   "paper_rotation": {
    "reason": "no segment expectations",
    "applicable": false
   }
  },
  "required_review_topics": [
   "unstable:whole_recording.singularity_frames_frac",
   "unstable:whole_recording.persistent_rotors",
   "unstable:whole_recording.persistent_rotor_count_max",
   "unstable:persistent_rotor_tracks"
  ]
 },
 "criteria": [
  {
   "criterion": "Design expectations",
   "rule": "none stated for this recording's segments",
   "result": "no criterion to test; counts are descriptive",
   "provisional": true
  }
 ],
 "report": {
  "methods": "Using provisional parameter set version 3 for protocol f65d786f-f194-4be2-88b8-10d3dd25d674, the fixed parameters are 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 5000 frames of 51 x 51 MAT data, with frame rate 1000.0 Hz from admission/paper_methods for 10.1038/s41597-022-01253-1 and pixel size 156.0 \u00b5m from the same source. The analysed window is frames 500 to 4500. The provisional segment definition is whole_recording, labelled whole recording, spanning frames 0 to 5000, defined at admission with no events detected or logged; the parameter set, segment definitions, and criteria are provisional.",
  "rules": [
   {
    "id": "protocol_parameter_set",
    "description": "Each protocol's fixed, versioned analysis parameters (version 1 = developer defaults); no run or agent may deviate",
    "expert": "optical mapping analyst",
    "status": "provisional",
    "location": "worker/voltage/protocol_params.py (developer_defaults, set_params)",
    "values": {
     "set_by": "developer (not a domain scientist)",
     "protocol": "Mouse whole heart optical mapping (Luther lab)",
     "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
     "params_version": 3
    }
   },
   {
    "id": "baseline_window_rule",
    "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",
    "expert": "optical mapping analyst",
    "status": "provisional",
    "location": "worker/voltage/baseline_rule.py (FACTOR, evaluate)",
    "values": {
     "ok": true,
     "factor": 2.0,
     "source": "per-pixel dominant frequency (images)",
     "required_min_frames": 14,
     "slowest_cycle_frames": 7
    }
   },
   {
    "id": "filter_defaults",
    "description": "Default baseline window (frames) and spatial Gaussian sigma/truncate for phase",
    "expert": "optical mapping analyst (cardiac electrophysiology)",
    "status": "provisional",
    "location": "worker/voltage/preprocess.py (Params)",
    "values": {
     "lowpass": null,
     "spatial_sigma": 1.0,
     "baseline_frames": 901,
     "spatial_truncate": 4.0
    }
   },
   {
    "id": "tissue_mask",
    "description": "Tissue mask from, in order: (1) NaN in frame 0 when the recording has any NaN; (2) a mask or background-image variable shipped in the file whose shape matches the frame (binary as is, an intensity image thresholded with Otsu); (3) Otsu's threshold on the mean image, the class with more temporal signal as tissue, largest connected component kept; source, coverage and threshold recorded",
    "expert": "optical mapping analyst",
    "status": "provisional",
    "location": "worker/voltage/io.py (tissue_mask_info, otsu_threshold, largest_component)",
    "values": {
     "rule": "Otsu threshold 1.553e+04 on the mean image, class above with more temporal signal, largest connected component",
     "side": "above",
     "source": "otsu_mean_image",
     "coverage": 0.7754709727028066,
     "variable": null,
     "threshold": 15527.156127929688,
     "tissue_pixels": 2017
    }
   },
   {
    "id": "polarity",
    "description": "Dye polarity from sign of median per-pixel skew of dV/dt",
    "expert": "optical mapping analyst / voltage dye chemist",
    "status": "provisional",
    "location": "worker/voltage/preprocess.py (polarity)",
    "values": {
     "method": "median skew of dV/dt",
     "result": -1
    }
   },
   {
    "id": "singularity_detection",
    "description": "Phase singularity = |winding| > threshold turns, >= erode px from tissue edge",
    "expert": "computational cardiac electrophysiologist (phase mapping)",
    "status": "provisional",
    "location": "worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px)",
    "values": {
     "rotor_erode_px": 3,
     "rotor_threshold": 0.9
    }
   },
   {
    "id": "rotor_persistence",
    "description": "Track linking distance/gap and minimum lifetime for a persistent rotor",
    "expert": "computational cardiac electrophysiologist (phase mapping)",
    "status": "provisional",
    "location": "worker/voltage/rotors.py (TrackParams)",
    "values": {
     "link_px": 4.0,
     "max_gap": 5,
     "min_cycles": 1.0,
     "min_frames": 108
    }
   },
   {
    "id": "chirality_pairing",
    "description": "Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors",
    "expert": "computational cardiac electrophysiologist (phase mapping)",
    "status": "provisional",
    "location": "worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac)",
    "values": {
     "paired_frac": 0.5,
     "pair_dist_px": 3.0
    }
   },
   {
    "id": "sensitivity_grid",
    "description": "Filter levels tested: spatial sigma and baseline window values",
    "expert": "optical mapping analyst",
    "status": "provisional",
    "location": "worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels)",
    "values": {
     "sigmas": {
      "light": 0.5,
      "default": 1.0,
      "heavier": 2.0
     },
     "trackers": {
      "loose": [
       6.0,
       10
      ],
      "strict": [
       2.0,
       1
      ],
      "default": [
       4.0,
       5
      ]
     },
     "baselines": {
      "run": 901,
      "3x_cycle": 324,
      "6x_cycle": 648,
      "1.5x_cycle": 162
     }
    }
   },
   {
    "id": "analysis_window",
    "description": "Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it)",
    "expert": "cardiac electrophysiologist familiar with the dataset",
    "status": "provisional",
    "location": "worker/voltage/runs.py (default_window)",
    "values": {
     "f0": 500,
     "f1": 4500
    }
   },
   {
    "id": "prior_processing_flags",
    "description": "Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing)",
    "expert": "imaging scientist (camera acquisition and noise)",
    "status": "provisional",
    "location": "worker/voltage/inspect.py (prior_processing)",
    "values": {
     "flags": [],
     "thresholds": {
      "int_frac": 0.5,
      "neg_frac": 0.01,
      "dv_autocorr": 0.5,
      "neighbour_corr": 0.8
     }
    }
   },
   {
    "id": "pipeline_check",
    "description": "The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameter",
    "expert": "optical mapping analyst",
    "status": "provisional",
    "location": "worker/agents/pipeline.py (INSTRUCTIONS, validator)",
    "values": {
     "model": "openai:gpt-5.5",
     "proceed": true,
     "anomalies": [
      "Frame rate unavailable",
      "Accessible depositor documentation unavailable",
      "Tissue annotation/mask",
      "Baseline drift/bleaching",
      "Baseline-window rule"
     ],
     "mismatches": [
      "tissue"
     ]
    }
   },
   {
    "id": "physiology_reference_rates",
    "description": "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",
    "expert": "cardiac electrophysiologist per species",
    "status": "provisional",
    "location": "worker/voltage/physiology.py (RANGES, TOLERANCE_FRAC)",
    "values": {
     "ranges": [
      "mouse_spiral_rotation_hz"
     ],
     "tolerance_frac": 0.25,
     "segment_rhythm_rule": "expected persistent rotors 'present' -> spiral arrhythmia"
    }
   },
   {
    "id": "stability_rule",
    "description": "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'",
    "expert": "biostatistician + optical mapping analyst",
    "status": "provisional",
    "location": "worker/agents/critic.py (STABLE_FRAC, stability)",
    "values": {
     "unstable": [
      "whole_recording.singularity_frames_frac",
      "whole_recording.persistent_rotors",
      "whole_recording.persistent_rotor_count_max",
      "persistent_rotor_tracks"
     ],
     "stable_frac": 0.25
    }
   },
   {
    "id": "persistence_threshold_variants",
    "description": "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",
    "expert": "computational cardiac electrophysiologist (phase mapping)",
    "status": "provisional",
    "location": "worker/agents/critic.py (persistence_variants)",
    "values": {
     "measured_cycle": 108,
     "paper_rotation": null
    }
   },
   {
    "id": "persistent_rotor_criterion",
    "description": "Persistent-rotor finding holds if every 'present' segment has >= 1 persistent rotor and every 'absent' segment has none, at every setting",
    "expert": "cardiac electrophysiologist",
    "status": "provisional",
    "location": "worker/voltage/sensitivity.py (MIN_ROTORS_PRESENT, MAX_ROTORS_ABSENT)",
    "values": {
     "max_absent": 0,
     "min_present": 1
    }
   }
  ],
  "review_items": [
   {
    "topic": "unstable:whole_recording.singularity_frames_frac",
    "detail": "Varies from 0.021 to 0.6705 across the filter grid, exceeding the provisional stability rule.",
    "severity": "warn",
    "reviewer": "analysis"
   },
   {
    "topic": "unstable:whole_recording.persistent_rotors",
    "detail": "Varies from 0.0 to 13.0 across filter and tracker settings, so persistent-rotor count is not reportable.",
    "severity": "warn",
    "reviewer": "analysis"
   },
   {
    "topic": "unstable:whole_recording.persistent_rotor_count_max",
    "detail": "Varies from 0.0 to 2.0 across filter and tracker settings, so the maximum simultaneous count is not reportable.",
    "severity": "warn",
    "reviewer": "analysis"
   },
   {
    "topic": "unstable:persistent_rotor_tracks",
    "detail": "Varies from 0.0 to 13.0 across filter and tracker settings, so track count is not reportable.",
    "severity": "warn",
    "reviewer": "analysis"
   },
   {
    "topic": "Frame rate unavailable",
    "detail": "Inspector reports that no frame-rate source was available from upload/admission, accessible deposit metadata, publication text, or acquisition log, so time conversion for paced data needs review despite the analysis overview listing 1000.0 Hz.",
    "severity": "block",
    "reviewer": "data curator"
   },
   {
    "topic": "Accessible depositor documentation unavailable",
    "detail": "Figshare deposit documentation could not be read by the metadata tool, so preprocessing steps and protocol statements were not independently verified.",
    "severity": "warn",
    "reviewer": "data curator"
   },
   {
    "topic": "Tissue annotation/mask",
    "detail": "Recording metadata and path labeling conflict on atrium versus mouseventricle, and the analysis mask covers the full 51 x 51 frame based only on nonzero temporal standard deviation.",
    "severity": "warn",
    "reviewer": "imaging reviewer"
   },
   {
    "topic": "Physiology-reference limitations",
    "detail": "The only provisional reference rate is mouse spiral rotation at 14.0625 to 25.0 Hz from a different context, while this filename indicates paced recording.",
    "severity": "info",
    "reviewer": "physiology reviewer"
   },
   {
    "topic": "Baseline drift/bleaching",
    "detail": "Inspector reports slow baseline change nearly one beat amplitude, so detrending and baseline handling may materially affect amplitude-based and rotor-related measurements.",
    "severity": "warn",
    "reviewer": "signal-processing reviewer"
   },
   {
    "topic": "tracker sensitivity",
    "detail": "Strict/default/loose tracker settings returned 0/4/13 persistent rotors; treat as a tracking-sensitivity review item rather than a false-positive verdict by itself.",
    "severity": "warn",
    "reviewer": "analysis"
   }
  ],
  "reportable": [
   {
    "metric": "persistent rotor tracks",
    "segment": "all",
    "value": "0\u201313",
    "unit": "count",
    "status": "unstable, not reportable"
   },
   {
    "metric": "dominant freq (Hz)",
    "segment": "whole recording",
    "value": "9.25",
    "unit": "Hz",
    "status": "no cited range"
   },
   {
    "metric": "persistent rotors",
    "segment": "whole recording",
    "value": "0\u201313",
    "unit": "count",
    "status": "unstable, not reportable"
   },
   {
    "metric": "singularity frames fraction",
    "segment": "whole recording",
    "value": "0.021\u20130.67",
    "unit": "fraction of frames",
    "status": "unstable, not reportable"
   },
   {
    "metric": "persistent rotor count max",
    "segment": "whole recording",
    "value": "0\u20132",
    "unit": "count",
    "status": "unstable, not reportable"
   }
  ],
  "verdict": {
   "physiology_ok": null,
   "send_back": false,
   "notes": "Provisional review: the only stable metric is dominant_freq_hz at 9.25 Hz, but it has no applicable cited range for this paced mouse whole-heart recording; the mouse spiral-wave context from DOI 10.1371/journal.pcbi.1011660 gives \u224820 Hz and \u224818.75 Hz, corresponding at 1000 frames/s to 50 and 53 frames, but that is not a population range for this file. The rotor-related outputs are unstable and not reportable: singularity_frames_frac spans 0.021 to 0.6705, persistent_rotors spans 0.0 to 13.0, persistent_rotor_count_max spans 0.0 to 2.0, and persistent_rotor_tracks spans 0.0 to 13.0 across the tested settings. The persistent-rotor threshold variants are not applicable because there are no segment expectations; strict/default/loose trackers found 0, 4, and 13 persistent rotors, so tracking sensitivity needs review rather than serving as proof that the finding is false. Before reporting, review the inspector block on frame-rate provenance, unavailable depositor documentation, tissue annotation/mask, physiology-reference limitations, and baseline drift/bleaching; all ranges, the stability threshold, and the criteria are provisional."
  },
  "provenance": {
   "recording": {
    "id": "f84bc560-2a52-46d8-8ca3-e654c30d8fdf",
    "label": "Mouse Whole Heart Optical Mapping Data: Mouse Whole Heart.zip/Mouse Whole Heart/06062018 A/mouseventricle06062018 A_FLEC 1uM Paced",
    "source": "admission",
    "source_ref": "10.6084/m9.figshare.17158742.v1",
    "publication_ref": "10.1038/s41597-022-01253-1",
    "storage_path": "uploads/public/5a7107e9/Mouse_Whole_Heart.zip/Mouse_Whole_Heart/06062018_A/mouseventricle06062018_A_FLEC_1uM_Paced.mat",
    "format": "mat",
    "sha256": "1ab7a0072312341c56240fbd22c16132ce5908f5655c90c06c8677696b6f6195",
    "size_bytes": 24803475,
    "license": "CC0",
    "attribution": "Ming Lei",
    "rights_source": {
     "ref": "10.6084/m9.figshare.17158742.v1",
     "kind": "deposit_metadata",
     "admitted_by": "project lead",
     "license_as_stated": "CC0"
    },
    "frame_rate_hz": 1000.0,
    "frame_rate_source": {
     "by": "project lead",
     "ref": "10.1038/s41597-022-01253-1",
     "kind": "admission",
     "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
     "source": "paper_methods"
    },
    "pixel_size_um": 156.0,
    "pixel_size_source": {
     "by": "project lead",
     "ref": "10.1038/s41597-022-01253-1",
     "kind": "admission",
     "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
     "source": "paper_methods"
    },
    "frames": 5000,
    "height": 51,
    "width": 51,
    "inverted": true
   },
   "protocol": {
    "id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
    "name": "Mouse whole heart optical mapping (Luther lab)",
    "species": "mouse",
    "tissue": "whole_heart",
    "params_version": 3,
    "params_set_by": "developer (not a domain scientist)",
    "params_note": "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": {
    "id": "1d65814d-f982-424e-ae62-1ed747dc6cf7",
    "status": "done",
    "started_at": "2026-10-28T19:22:06.124087+00:00",
    "finished_at": "2026-10-28T19:25:54.130217+00:00",
    "code": {
     "dirty": false,
     "git_commit": "4533745bb9cdd7aab7940336430ca22779950c4f"
    },
    "workers": 4,
    "steps": [
     "load",
     "deposit_checks",
     "baseline_correct",
     "polarity",
     "spatial_filter(phase only)",
     "hilbert_phase",
     "phase_singularities",
     "track_and_pair",
     "beats_apd_cv",
     "sensitivity",
     "render"
    ],
    "protocol_params": {
     "params": {
      "link_px": 4.0,
      "max_gap": 5,
      "min_cycles": 1.0,
      "pad_frames": 500,
      "paired_frac": 0.5,
      "render_step": 4,
      "pair_dist_px": 3.0,
      "spatial_sigma": 1.0,
      "rotor_erode_px": 3,
      "baseline_frames": 901,
      "rotor_threshold": 0.9,
      "spatial_truncate": 4.0
     },
     "version": 3,
     "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674"
    },
    "baseline_rule": {
     "ok": true,
     "ratio": 128.714,
     "cycles": {
      "whole_recording": {
       "n_frames": 5000,
       "cycle_frames": 7,
       "pixels_agreeing_frac": 0.9762022806147744,
       "pixels_with_rhythm_frac": 1.0,
       "interval_quartiles_frames": [
        7.0,
        7.0,
        7.0
       ]
      }
     },
     "factor": 2.0,
     "reason": null,
     "source": "per-pixel dominant frequency (images)",
     "status": "provisional",
     "baseline_frames": 901,
     "slowest_segment": "whole_recording",
     "required_min_frames": 14,
     "slowest_cycle_frames": 7
    },
    "deposit_checks": {
     "flags": [],
     "status": "provisional",
     "measures": {
      "max": 29335.0,
      "min": 2659.0,
      "frames_used": 2000,
      "integer_frac": 1.0,
      "negative_frac": 0.0,
      "frames_with_nan": 0,
      "dv_lag1_autocorr_median": -0.45790942859000267,
      "neighbour_dv_corr_median": 0.24034260643672625
     },
     "processed_before_deposit": false
    },
    "pipeline_check": {
     "model": "openai:gpt-5.5",
     "proceed": true,
     "anomalies": [
      {
       "topic": "Frame rate unavailable",
       "severity": "warn",
       "effect_on_analysis": "The inspector could not independently recover a frame rate, which would block conversion of the paced dominant cycle to time. The recording_facts source, however, supplies 1000.0 Hz from admission/paper_methods, so the fixed analysis can proceed using that source; timing statements should cite that source."
      },
      {
       "topic": "Accessible depositor documentation unavailable",
       "severity": "warn",
       "effect_on_analysis": "Depositor README/notebook statements and documented preprocessing could not be verified by the inspector. Automated prior-processing checks did not flag smoothing or other pre-deposit processing, but absence of processing is not independently documented."
      },
      {
       "topic": "Tissue annotation/mask",
       "severity": "warn",
       "effect_on_analysis": "The mask covers the full 51 x 51 frame using nonzero temporal standard deviation only. If the frame contains background, the fixed pipeline would analyze it as tissue, affecting spatial, phase, and rotor measurements; the inconsistent atrium/ventricle/whole-heart labels also limit anatomical interpretation."
      },
      {
       "topic": "Baseline drift/bleaching",
       "severity": "warn",
       "effect_on_analysis": "The slow baseline changes by nearly one beat amplitude, so detrending and the fixed 901-frame baseline correction materially affect amplitude-based measurements; phase-based outputs may still be usable but remain dependent on baseline handling."
      },
      {
       "topic": "Baseline-window rule",
       "severity": "info",
       "effect_on_analysis": "The coded baseline rule reports ok: baseline_frames 901, factor 2.0, slowest_segment whole_recording, slowest_cycle_frames 7, required_min_frames 14, ratio 128.714. Per instruction this rule is reported only as informational and does not hold the run."
      }
     ],
     "rationale": "The protocol is broadly applicable because this is a mouse optical-mapping recording in the Luther-lab whole-heart reference dataset, and the recording_facts source provides the needed acquisition scale: 1000.0 Hz and 156.0 \u00b5m/pixel. The fixed version-3 parameters are frame-based and the coded baseline-window rule passes; the segment-level dominant cycle is 108.1 frames over the analysed window, giving baseline_over_cycle 8.33 under the 901-frame baseline. The run should nevertheless be treated as provisional because tissue labels are inconsistent, the full frame is treated as tissue, depositor documentation was not accessible for independent preprocessing verification, and the recording has substantial slow baseline drift/bleaching.",
     "mismatches": [
      {
       "field": "tissue",
       "detail": "The protocol is a mouse whole-heart optical-mapping protocol, but the available tissue annotations are internally inconsistent. This does not by itself make the fixed frame-based parameters wrong, but it limits tissue-specific interpretation and interacts with the full-frame mask warning.",
       "severity": "warn",
       "protocol_value": "whole_heart",
       "recording_value": "recording row identified as atrium by the inspector; path label contains 'mouseventricle' while the deposit label is Mouse Whole Heart"
      }
     ],
     "hold_reason": null,
     "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
     "methods_text": "Using provisional parameter set version 3 for protocol f65d786f-f194-4be2-88b8-10d3dd25d674, the fixed parameters are 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 5000 frames of 51 x 51 MAT data, with frame rate 1000.0 Hz from admission/paper_methods for 10.1038/s41597-022-01253-1 and pixel size 156.0 \u00b5m from the same source. The analysed window is frames 500 to 4500. The provisional segment definition is whole_recording, labelled whole recording, spanning frames 0 to 5000, defined at admission with no events detected or logged; the parameter set, segment definitions, and criteria are provisional.",
     "recording_id": "f84bc560-2a52-46d8-8ca3-e654c30d8fdf",
     "params_version": 3,
     "prompt_version": "pipeline-v2"
    }
   },
   "signature": {
    "id": "daa60525-79d0-40ac-80a8-d131bab1047a",
    "created_at": "2026-10-28T19:25:27.633986+00:00",
    "movie_path": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/movie.mp4",
    "frames": {
     "f0": 500,
     "f1": 4500,
     "maps": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/maps.npz",
     "dtype": "<f4",
     "phase": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/phase.npy",
     "shape": [
      4000,
      51,
      51
     ],
     "sha256": {
      "maps": "9de7029ac11a25eb89d2412d55ebad140d474628a9d5366bbdaa943c0c21c762",
      "phase": "de90341142805de8a8ad6adb8ff8165f5426d4efbba66bb9dc73eeca2e3f9ac4",
      "voltage": "f6efcc8ca66d76e006519c44f95784312999b2b60d95d1b75607cc63f1ca8994"
     },
     "voltage": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/voltage.npy",
     "map_keys": [
      "activation:whole_recording",
      "dominant_frequency:whole_recording",
      "dominant_frequency:window",
      "mask"
     ],
     "map_units": {
      "mask": "tissue mask, source otsu_mean_image",
      "dominant_frequency:window": "Hz",
      "activation:whole_recording": "ms",
      "dominant_frequency:whole_recording": "Hz"
     }
    },
    "filter_params": {
     "mask": "not NaN in frame 0 and nonzero temporal std",
     "render": {
      "step": 4,
      "palettes": {
       "phase": "twilight",
       "camera": "gray",
       "voltage": "gray"
      },
      "interpolation": "nearest"
     },
     "window": {
      "f0": 500,
      "f1": 4500,
      "segments": [
       {
        "name": "whole_recording",
        "label": "whole recording",
        "defined": [
         0,
         5000
        ],
        "analysed": [
         500,
         4500
        ],
        "citation": null,
        "defined_by": "admission (project lead); no comparison defined",
        "segment_id": "87f493f2-8b99-4c2a-90af-b95efbbdc6b6",
        "end_event_id": null,
        "start_event_id": null,
        "expected_persistent_rotors": null
       }
      ],
      "illumination": null,
      "frame_rate_hz": 1000.0,
      "frame_rate_source": {
       "by": "project lead",
       "ref": "10.1038/s41597-022-01253-1",
       "kind": "admission",
       "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
       "source": "paper_methods"
      },
      "segment_cycles_frames": {
       "whole_recording": 108
      }
     },
     "lowpass": null,
     "polarity": -1,
     "tracking": {
      "link_px": 4.0,
      "max_gap": 5,
      "min_cycles": 1.0,
      "min_frames": 108,
      "paired_frac": 0.5,
      "pair_dist_px": 3.0
     },
     "pad_frames": 500,
     "phase_method": "angle of scipy.signal.hilbert along time, on spatially filtered signal",
     "spatial_sigma": 1.0,
     "rotor_erode_px": 3,
     "spatial_method": "scipy.ndimage.gaussian_filter per frame, mode=reflect; NaN set to 0 before filtering, non-tissue zeroed after",
     "baseline_frames": 901,
     "baseline_method": "scipy.ndimage.uniform_filter1d, mode=reflect, subtracted per pixel",
     "polarity_method": "sign of median per-pixel skew of dV/dt on baseline-corrected signal",
     "rotor_threshold": 0.9,
     "spatial_truncate": 4.0,
     "spatial_applies_to": "phase/activation only; displayed voltage is baseline-corrected only"
    },
    "criteria_status": {
     "note": null,
     "rules": [
      {
       "id": "protocol_parameter_set",
       "expert": "optical mapping analyst",
       "status": "provisional",
       "values": {
        "set_by": "developer (not a domain scientist)",
        "protocol": "Mouse whole heart optical mapping (Luther lab)",
        "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
        "params_version": 3
       },
       "decision": null,
       "location": "worker/voltage/protocol_params.py (developer_defaults, set_params)",
       "reviewed": false,
       "reviewer": null,
       "description": "Each protocol's fixed, versioned analysis parameters (version 1 = developer defaults); no run or agent may deviate",
       "reviewed_at": null
      },
      {
       "id": "baseline_window_rule",
       "expert": "optical mapping analyst",
       "status": "provisional",
       "values": {
        "ok": true,
        "factor": 2.0,
        "source": "per-pixel dominant frequency (images)",
        "required_min_frames": 14,
        "slowest_cycle_frames": 7
       },
       "decision": null,
       "location": "worker/voltage/baseline_rule.py (FACTOR, evaluate)",
       "reviewed": false,
       "reviewer": null,
       "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",
       "reviewed_at": null
      },
      {
       "id": "filter_defaults",
       "expert": "optical mapping analyst (cardiac electrophysiology)",
       "status": "provisional",
       "values": {
        "lowpass": null,
        "spatial_sigma": 1.0,
        "baseline_frames": 901,
        "spatial_truncate": 4.0
       },
       "decision": null,
       "location": "worker/voltage/preprocess.py (Params)",
       "reviewed": false,
       "reviewer": null,
       "description": "Default baseline window (frames) and spatial Gaussian sigma/truncate for phase",
       "reviewed_at": null
      },
      {
       "id": "tissue_mask",
       "expert": "optical mapping analyst",
       "status": "provisional",
       "values": {
        "rule": "Otsu threshold 1.553e+04 on the mean image, class above with more temporal signal, largest connected component",
        "side": "above",
        "source": "otsu_mean_image",
        "coverage": 0.7754709727028066,
        "variable": null,
        "threshold": 15527.156127929688,
        "tissue_pixels": 2017
       },
       "decision": null,
       "location": "worker/voltage/io.py (tissue_mask_info, otsu_threshold, largest_component)",
       "reviewed": false,
       "reviewer": null,
       "description": "Tissue mask from, in order: (1) NaN in frame 0 when the recording has any NaN; (2) a mask or background-image variable shipped in the file whose shape matches the frame (binary as is, an intensity image thresholded with Otsu); (3) Otsu's threshold on the mean image, the class with more temporal signal as tissue, largest connected component kept; source, coverage and threshold recorded",
       "reviewed_at": null
      },
      {
       "id": "polarity",
       "expert": "optical mapping analyst / voltage dye chemist",
       "status": "provisional",
       "values": {
        "method": "median skew of dV/dt",
        "result": -1
       },
       "decision": null,
       "location": "worker/voltage/preprocess.py (polarity)",
       "reviewed": false,
       "reviewer": null,
       "description": "Dye polarity from sign of median per-pixel skew of dV/dt",
       "reviewed_at": null
      },
      {
       "id": "singularity_detection",
       "expert": "computational cardiac electrophysiologist (phase mapping)",
       "status": "provisional",
       "values": {
        "rotor_erode_px": 3,
        "rotor_threshold": 0.9
       },
       "decision": null,
       "location": "worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px)",
       "reviewed": false,
       "reviewer": null,
       "description": "Phase singularity = |winding| > threshold turns, >= erode px from tissue edge",
       "reviewed_at": null
      },
      {
       "id": "rotor_persistence",
       "expert": "computational cardiac electrophysiologist (phase mapping)",
       "status": "provisional",
       "values": {
        "link_px": 4.0,
        "max_gap": 5,
        "min_cycles": 1.0,
        "min_frames": 108
       },
       "decision": null,
       "location": "worker/voltage/rotors.py (TrackParams)",
       "reviewed": false,
       "reviewer": null,
       "description": "Track linking distance/gap and minimum lifetime for a persistent rotor",
       "reviewed_at": null
      },
      {
       "id": "chirality_pairing",
       "expert": "computational cardiac electrophysiologist (phase mapping)",
       "status": "provisional",
       "values": {
        "paired_frac": 0.5,
        "pair_dist_px": 3.0
       },
       "decision": null,
       "location": "worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac)",
       "reviewed": false,
       "reviewer": null,
       "description": "Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors",
       "reviewed_at": null
      },
      {
       "id": "sensitivity_grid",
       "expert": "optical mapping analyst",
       "status": "provisional",
       "values": {
        "sigmas": {
         "light": 0.5,
         "default": 1.0,
         "heavier": 2.0
        },
        "trackers": {
         "loose": [
          6.0,
          10
         ],
         "strict": [
          2.0,
          1
         ],
         "default": [
          4.0,
          5
         ]
        },
        "baselines": {
         "run": 901,
         "3x_cycle": 324,
         "6x_cycle": 648,
         "1.5x_cycle": 162
        }
       },
       "decision": null,
       "location": "worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels)",
       "reviewed": false,
       "reviewer": null,
       "description": "Filter levels tested: spatial sigma and baseline window values",
       "reviewed_at": null
      },
      {
       "id": "analysis_window",
       "expert": "cardiac electrophysiologist familiar with the dataset",
       "status": "provisional",
       "values": {
        "f0": 500,
        "f1": 4500
       },
       "decision": null,
       "location": "worker/voltage/runs.py (default_window)",
       "reviewed": false,
       "reviewer": null,
       "description": "Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it)",
       "reviewed_at": null
      },
      {
       "id": "prior_processing_flags",
       "expert": "imaging scientist (camera acquisition and noise)",
       "status": "provisional",
       "values": {
        "flags": [],
        "thresholds": {
         "int_frac": 0.5,
         "neg_frac": 0.01,
         "dv_autocorr": 0.5,
         "neighbour_corr": 0.8
        }
       },
       "decision": null,
       "location": "worker/voltage/inspect.py (prior_processing)",
       "reviewed": false,
       "reviewer": null,
       "description": "Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing)",
       "reviewed_at": null
      },
      {
       "id": "pipeline_check",
       "expert": "optical mapping analyst",
       "status": "provisional",
       "values": {
        "model": "openai:gpt-5.5",
        "proceed": true,
        "anomalies": [
         "Frame rate unavailable",
         "Accessible depositor documentation unavailable",
         "Tissue annotation/mask",
         "Baseline drift/bleaching",
         "Baseline-window rule"
        ],
        "mismatches": [
         "tissue"
        ]
       },
       "decision": null,
       "location": "worker/agents/pipeline.py (INSTRUCTIONS, validator)",
       "reviewed": false,
       "reviewer": null,
       "description": "The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameter",
       "reviewed_at": null
      },
      {
       "id": "physiology_reference_rates",
       "expert": "cardiac electrophysiologist per species",
       "status": "provisional",
       "values": {
        "ranges": [
         "mouse_spiral_rotation_hz"
        ],
        "tolerance_frac": 0.25,
        "segment_rhythm_rule": "expected persistent rotors 'present' -> spiral arrhythmia"
       },
       "decision": null,
       "location": "worker/voltage/physiology.py (RANGES, TOLERANCE_FRAC)",
       "reviewed": false,
       "reviewer": null,
       "description": "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",
       "reviewed_at": null
      },
      {
       "id": "stability_rule",
       "expert": "biostatistician + optical mapping analyst",
       "status": "provisional",
       "values": {
        "unstable": [
         "whole_recording.singularity_frames_frac",
         "whole_recording.persistent_rotors",
         "whole_recording.persistent_rotor_count_max",
         "persistent_rotor_tracks"
        ],
        "stable_frac": 0.25
       },
       "decision": null,
       "location": "worker/agents/critic.py (STABLE_FRAC, stability)",
       "reviewed": false,
       "reviewer": null,
       "description": "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'",
       "reviewed_at": null
      },
      {
       "id": "persistence_threshold_variants",
       "expert": "computational cardiac electrophysiologist (phase mapping)",
       "status": "provisional",
       "values": {
        "measured_cycle": 108,
        "paper_rotation": null
       },
       "decision": null,
       "location": "worker/agents/critic.py (persistence_variants)",
       "reviewed": false,
       "reviewer": null,
       "description": "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",
       "reviewed_at": null
      },
      {
       "id": "persistent_rotor_criterion",
       "expert": "cardiac electrophysiologist",
       "status": "provisional",
       "values": {
        "max_absent": 0,
        "min_present": 1
       },
       "decision": null,
       "location": "worker/voltage/sensitivity.py (MIN_ROTORS_PRESENT, MAX_ROTORS_ABSENT)",
       "reviewed": false,
       "reviewer": null,
       "description": "Persistent-rotor finding holds if every 'present' segment has >= 1 persistent rotor and every 'absent' segment has none, at every setting",
       "reviewed_at": null
      }
     ],
     "status": "provisional",
     "all_reviewed": false,
     "superseded_by_run": null
    }
   },
   "segments": [
    {
     "id": "87f493f2-8b99-4c2a-90af-b95efbbdc6b6",
     "position": 1,
     "name": "whole_recording",
     "label": "whole recording",
     "start_frame": 0,
     "end_frame": 5000,
     "expected_persistent_rotors": null,
     "definition": "whole recording; no events detected or logged at admission",
     "defined_by": "admission (project lead); no comparison defined",
     "citation": null,
     "evidence": {},
     "provisional": true
    }
   ],
   "events": []
  }
 },
 "provenance": {
  "recording": {
   "id": "f84bc560-2a52-46d8-8ca3-e654c30d8fdf",
   "label": "Mouse Whole Heart Optical Mapping Data: Mouse Whole Heart.zip/Mouse Whole Heart/06062018 A/mouseventricle06062018 A_FLEC 1uM Paced",
   "source": "admission",
   "source_ref": "10.6084/m9.figshare.17158742.v1",
   "publication_ref": "10.1038/s41597-022-01253-1",
   "storage_path": "uploads/public/5a7107e9/Mouse_Whole_Heart.zip/Mouse_Whole_Heart/06062018_A/mouseventricle06062018_A_FLEC_1uM_Paced.mat",
   "format": "mat",
   "sha256": "1ab7a0072312341c56240fbd22c16132ce5908f5655c90c06c8677696b6f6195",
   "size_bytes": 24803475,
   "license": "CC0",
   "attribution": "Ming Lei",
   "rights_source": {
    "ref": "10.6084/m9.figshare.17158742.v1",
    "kind": "deposit_metadata",
    "admitted_by": "project lead",
    "license_as_stated": "CC0"
   },
   "frame_rate_hz": 1000.0,
   "frame_rate_source": {
    "by": "project lead",
    "ref": "10.1038/s41597-022-01253-1",
    "kind": "admission",
    "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
    "source": "paper_methods"
   },
   "pixel_size_um": 156.0,
   "pixel_size_source": {
    "by": "project lead",
    "ref": "10.1038/s41597-022-01253-1",
    "kind": "admission",
    "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
    "source": "paper_methods"
   },
   "frames": 5000,
   "height": 51,
   "width": 51,
   "inverted": true
  },
  "protocol": {
   "id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
   "name": "Mouse whole heart optical mapping (Luther lab)",
   "species": "mouse",
   "tissue": "whole_heart",
   "params_version": 3,
   "params_set_by": "developer (not a domain scientist)",
   "params_note": "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": {
   "id": "1d65814d-f982-424e-ae62-1ed747dc6cf7",
   "status": "done",
   "started_at": "2026-10-28T19:22:06.124087+00:00",
   "finished_at": "2026-10-28T19:25:54.130217+00:00",
   "code": {
    "dirty": false,
    "git_commit": "4533745bb9cdd7aab7940336430ca22779950c4f"
   },
   "workers": 4,
   "steps": [
    "load",
    "deposit_checks",
    "baseline_correct",
    "polarity",
    "spatial_filter(phase only)",
    "hilbert_phase",
    "phase_singularities",
    "track_and_pair",
    "beats_apd_cv",
    "sensitivity",
    "render"
   ],
   "protocol_params": {
    "params": {
     "link_px": 4.0,
     "max_gap": 5,
     "min_cycles": 1.0,
     "pad_frames": 500,
     "paired_frac": 0.5,
     "render_step": 4,
     "pair_dist_px": 3.0,
     "spatial_sigma": 1.0,
     "rotor_erode_px": 3,
     "baseline_frames": 901,
     "rotor_threshold": 0.9,
     "spatial_truncate": 4.0
    },
    "version": 3,
    "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674"
   },
   "baseline_rule": {
    "ok": true,
    "ratio": 128.714,
    "cycles": {
     "whole_recording": {
      "n_frames": 5000,
      "cycle_frames": 7,
      "pixels_agreeing_frac": 0.9762022806147744,
      "pixels_with_rhythm_frac": 1.0,
      "interval_quartiles_frames": [
       7.0,
       7.0,
       7.0
      ]
     }
    },
    "factor": 2.0,
    "reason": null,
    "source": "per-pixel dominant frequency (images)",
    "status": "provisional",
    "baseline_frames": 901,
    "slowest_segment": "whole_recording",
    "required_min_frames": 14,
    "slowest_cycle_frames": 7
   },
   "deposit_checks": {
    "flags": [],
    "status": "provisional",
    "measures": {
     "max": 29335.0,
     "min": 2659.0,
     "frames_used": 2000,
     "integer_frac": 1.0,
     "negative_frac": 0.0,
     "frames_with_nan": 0,
     "dv_lag1_autocorr_median": -0.45790942859000267,
     "neighbour_dv_corr_median": 0.24034260643672625
    },
    "processed_before_deposit": false
   },
   "pipeline_check": {
    "model": "openai:gpt-5.5",
    "proceed": true,
    "anomalies": [
     {
      "topic": "Frame rate unavailable",
      "severity": "warn",
      "effect_on_analysis": "The inspector could not independently recover a frame rate, which would block conversion of the paced dominant cycle to time. The recording_facts source, however, supplies 1000.0 Hz from admission/paper_methods, so the fixed analysis can proceed using that source; timing statements should cite that source."
     },
     {
      "topic": "Accessible depositor documentation unavailable",
      "severity": "warn",
      "effect_on_analysis": "Depositor README/notebook statements and documented preprocessing could not be verified by the inspector. Automated prior-processing checks did not flag smoothing or other pre-deposit processing, but absence of processing is not independently documented."
     },
     {
      "topic": "Tissue annotation/mask",
      "severity": "warn",
      "effect_on_analysis": "The mask covers the full 51 x 51 frame using nonzero temporal standard deviation only. If the frame contains background, the fixed pipeline would analyze it as tissue, affecting spatial, phase, and rotor measurements; the inconsistent atrium/ventricle/whole-heart labels also limit anatomical interpretation."
     },
     {
      "topic": "Baseline drift/bleaching",
      "severity": "warn",
      "effect_on_analysis": "The slow baseline changes by nearly one beat amplitude, so detrending and the fixed 901-frame baseline correction materially affect amplitude-based measurements; phase-based outputs may still be usable but remain dependent on baseline handling."
     },
     {
      "topic": "Baseline-window rule",
      "severity": "info",
      "effect_on_analysis": "The coded baseline rule reports ok: baseline_frames 901, factor 2.0, slowest_segment whole_recording, slowest_cycle_frames 7, required_min_frames 14, ratio 128.714. Per instruction this rule is reported only as informational and does not hold the run."
     }
    ],
    "rationale": "The protocol is broadly applicable because this is a mouse optical-mapping recording in the Luther-lab whole-heart reference dataset, and the recording_facts source provides the needed acquisition scale: 1000.0 Hz and 156.0 \u00b5m/pixel. The fixed version-3 parameters are frame-based and the coded baseline-window rule passes; the segment-level dominant cycle is 108.1 frames over the analysed window, giving baseline_over_cycle 8.33 under the 901-frame baseline. The run should nevertheless be treated as provisional because tissue labels are inconsistent, the full frame is treated as tissue, depositor documentation was not accessible for independent preprocessing verification, and the recording has substantial slow baseline drift/bleaching.",
    "mismatches": [
     {
      "field": "tissue",
      "detail": "The protocol is a mouse whole-heart optical-mapping protocol, but the available tissue annotations are internally inconsistent. This does not by itself make the fixed frame-based parameters wrong, but it limits tissue-specific interpretation and interacts with the full-frame mask warning.",
      "severity": "warn",
      "protocol_value": "whole_heart",
      "recording_value": "recording row identified as atrium by the inspector; path label contains 'mouseventricle' while the deposit label is Mouse Whole Heart"
     }
    ],
    "hold_reason": null,
    "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
    "methods_text": "Using provisional parameter set version 3 for protocol f65d786f-f194-4be2-88b8-10d3dd25d674, the fixed parameters are 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 5000 frames of 51 x 51 MAT data, with frame rate 1000.0 Hz from admission/paper_methods for 10.1038/s41597-022-01253-1 and pixel size 156.0 \u00b5m from the same source. The analysed window is frames 500 to 4500. The provisional segment definition is whole_recording, labelled whole recording, spanning frames 0 to 5000, defined at admission with no events detected or logged; the parameter set, segment definitions, and criteria are provisional.",
    "recording_id": "f84bc560-2a52-46d8-8ca3-e654c30d8fdf",
    "params_version": 3,
    "prompt_version": "pipeline-v2"
   }
  },
  "signature": {
   "id": "daa60525-79d0-40ac-80a8-d131bab1047a",
   "created_at": "2026-10-28T19:25:27.633986+00:00",
   "movie_path": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/movie.mp4",
   "frames": {
    "f0": 500,
    "f1": 4500,
    "maps": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/maps.npz",
    "dtype": "<f4",
    "phase": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/phase.npy",
    "shape": [
     4000,
     51,
     51
    ],
    "sha256": {
     "maps": "9de7029ac11a25eb89d2412d55ebad140d474628a9d5366bbdaa943c0c21c762",
     "phase": "de90341142805de8a8ad6adb8ff8165f5426d4efbba66bb9dc73eeca2e3f9ac4",
     "voltage": "f6efcc8ca66d76e006519c44f95784312999b2b60d95d1b75607cc63f1ca8994"
    },
    "voltage": "runs/1d65814d-f982-424e-ae62-1ed747dc6cf7/frames/voltage.npy",
    "map_keys": [
     "activation:whole_recording",
     "dominant_frequency:whole_recording",
     "dominant_frequency:window",
     "mask"
    ],
    "map_units": {
     "mask": "tissue mask, source otsu_mean_image",
     "dominant_frequency:window": "Hz",
     "activation:whole_recording": "ms",
     "dominant_frequency:whole_recording": "Hz"
    }
   },
   "filter_params": {
    "mask": "not NaN in frame 0 and nonzero temporal std",
    "render": {
     "step": 4,
     "palettes": {
      "phase": "twilight",
      "camera": "gray",
      "voltage": "gray"
     },
     "interpolation": "nearest"
    },
    "window": {
     "f0": 500,
     "f1": 4500,
     "segments": [
      {
       "name": "whole_recording",
       "label": "whole recording",
       "defined": [
        0,
        5000
       ],
       "analysed": [
        500,
        4500
       ],
       "citation": null,
       "defined_by": "admission (project lead); no comparison defined",
       "segment_id": "87f493f2-8b99-4c2a-90af-b95efbbdc6b6",
       "end_event_id": null,
       "start_event_id": null,
       "expected_persistent_rotors": null
      }
     ],
     "illumination": null,
     "frame_rate_hz": 1000.0,
     "frame_rate_source": {
      "by": "project lead",
      "ref": "10.1038/s41597-022-01253-1",
      "kind": "admission",
      "quote": "Emission photons were imaged by Evolve Delta 512 \u00d7 512 pixel EMCCD cameras (1000 Hz sampling rate, 51 \u00d7 51 pixels, 156 \u00b5m/pixel).",
      "source": "paper_methods"
     },
     "segment_cycles_frames": {
      "whole_recording": 108
     }
    },
    "lowpass": null,
    "polarity": -1,
    "tracking": {
     "link_px": 4.0,
     "max_gap": 5,
     "min_cycles": 1.0,
     "min_frames": 108,
     "paired_frac": 0.5,
     "pair_dist_px": 3.0
    },
    "pad_frames": 500,
    "phase_method": "angle of scipy.signal.hilbert along time, on spatially filtered signal",
    "spatial_sigma": 1.0,
    "rotor_erode_px": 3,
    "spatial_method": "scipy.ndimage.gaussian_filter per frame, mode=reflect; NaN set to 0 before filtering, non-tissue zeroed after",
    "baseline_frames": 901,
    "baseline_method": "scipy.ndimage.uniform_filter1d, mode=reflect, subtracted per pixel",
    "polarity_method": "sign of median per-pixel skew of dV/dt on baseline-corrected signal",
    "rotor_threshold": 0.9,
    "spatial_truncate": 4.0,
    "spatial_applies_to": "phase/activation only; displayed voltage is baseline-corrected only"
   },
   "criteria_status": {
    "note": null,
    "rules": [
     {
      "id": "protocol_parameter_set",
      "expert": "optical mapping analyst",
      "status": "provisional",
      "values": {
       "set_by": "developer (not a domain scientist)",
       "protocol": "Mouse whole heart optical mapping (Luther lab)",
       "protocol_id": "f65d786f-f194-4be2-88b8-10d3dd25d674",
       "params_version": 3
      },
      "decision": null,
      "location": "worker/voltage/protocol_params.py (developer_defaults, set_params)",
      "reviewed": false,
      "reviewer": null,
      "description": "Each protocol's fixed, versioned analysis parameters (version 1 = developer defaults); no run or agent may deviate",
      "reviewed_at": null
     },
     {
      "id": "baseline_window_rule",
      "expert": "optical mapping analyst",
      "status": "provisional",
      "values": {
       "ok": true,
       "factor": 2.0,
       "source": "per-pixel dominant frequency (images)",
       "required_min_frames": 14,
       "slowest_cycle_frames": 7
      },
      "decision": null,
      "location": "worker/voltage/baseline_rule.py (FACTOR, evaluate)",
      "reviewed": false,
      "reviewer": null,
      "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",
      "reviewed_at": null
     },
     {
      "id": "filter_defaults",
      "expert": "optical mapping analyst (cardiac electrophysiology)",
      "status": "provisional",
      "values": {
       "lowpass": null,
       "spatial_sigma": 1.0,
       "baseline_frames": 901,
       "spatial_truncate": 4.0
      },
      "decision": null,
      "location": "worker/voltage/preprocess.py (Params)",
      "reviewed": false,
      "reviewer": null,
      "description": "Default baseline window (frames) and spatial Gaussian sigma/truncate for phase",
      "reviewed_at": null
     },
     {
      "id": "tissue_mask",
      "expert": "optical mapping analyst",
      "status": "provisional",
      "values": {
       "rule": "Otsu threshold 1.553e+04 on the mean image, class above with more temporal signal, largest connected component",
       "side": "above",
       "source": "otsu_mean_image",
       "coverage": 0.7754709727028066,
       "variable": null,
       "threshold": 15527.156127929688,
       "tissue_pixels": 2017
      },
      "decision": null,
      "location": "worker/voltage/io.py (tissue_mask_info, otsu_threshold, largest_component)",
      "reviewed": false,
      "reviewer": null,
      "description": "Tissue mask from, in order: (1) NaN in frame 0 when the recording has any NaN; (2) a mask or background-image variable shipped in the file whose shape matches the frame (binary as is, an intensity image thresholded with Otsu); (3) Otsu's threshold on the mean image, the class with more temporal signal as tissue, largest connected component kept; source, coverage and threshold recorded",
      "reviewed_at": null
     },
     {
      "id": "polarity",
      "expert": "optical mapping analyst / voltage dye chemist",
      "status": "provisional",
      "values": {
       "method": "median skew of dV/dt",
       "result": -1
      },
      "decision": null,
      "location": "worker/voltage/preprocess.py (polarity)",
      "reviewed": false,
      "reviewer": null,
      "description": "Dye polarity from sign of median per-pixel skew of dV/dt",
      "reviewed_at": null
     },
     {
      "id": "singularity_detection",
      "expert": "computational cardiac electrophysiologist (phase mapping)",
      "status": "provisional",
      "values": {
       "rotor_erode_px": 3,
       "rotor_threshold": 0.9
      },
      "decision": null,
      "location": "worker/voltage/preprocess.py (Params.rotor_threshold, rotor_erode_px)",
      "reviewed": false,
      "reviewer": null,
      "description": "Phase singularity = |winding| > threshold turns, >= erode px from tissue edge",
      "reviewed_at": null
     },
     {
      "id": "rotor_persistence",
      "expert": "computational cardiac electrophysiologist (phase mapping)",
      "status": "provisional",
      "values": {
       "link_px": 4.0,
       "max_gap": 5,
       "min_cycles": 1.0,
       "min_frames": 108
      },
      "decision": null,
      "location": "worker/voltage/rotors.py (TrackParams)",
      "reviewed": false,
      "reviewer": null,
      "description": "Track linking distance/gap and minimum lifetime for a persistent rotor",
      "reviewed_at": null
     },
     {
      "id": "chirality_pairing",
      "expert": "computational cardiac electrophysiologist (phase mapping)",
      "status": "provisional",
      "values": {
       "paired_frac": 0.5,
       "pair_dist_px": 3.0
      },
      "decision": null,
      "location": "worker/voltage/rotors.py (TrackParams.pair_dist_px, paired_frac)",
      "reviewed": false,
      "reviewer": null,
      "description": "Opposite-charge singularities within pair distance are a pair; tracks paired most of their life are excluded from rotors",
      "reviewed_at": null
     },
     {
      "id": "sensitivity_grid",
      "expert": "optical mapping analyst",
      "status": "provisional",
      "values": {
       "sigmas": {
        "light": 0.5,
        "default": 1.0,
        "heavier": 2.0
       },
       "trackers": {
        "loose": [
         6.0,
         10
        ],
        "strict": [
         2.0,
         1
        ],
        "default": [
         4.0,
         5
        ]
       },
       "baselines": {
        "run": 901,
        "3x_cycle": 324,
        "6x_cycle": 648,
        "1.5x_cycle": 162
       }
      },
      "decision": null,
      "location": "worker/voltage/sensitivity.py (SIGMAS, BASELINE_MULTIPLES, baseline_levels)",
      "reviewed": false,
      "reviewer": null,
      "description": "Filter levels tested: spatial sigma and baseline window values",
      "reviewed_at": null
     },
     {
      "id": "analysis_window",
      "expert": "cardiac electrophysiologist familiar with the dataset",
      "status": "provisional",
      "values": {
       "f0": 500,
       "f1": 4500
      },
      "decision": null,
      "location": "worker/voltage/runs.py (default_window)",
      "reviewed": false,
      "reviewer": null,
      "description": "Frames analysed: whole recording minus one filter pad at each end (unless the plan narrows it)",
      "reviewed_at": null
     },
     {
      "id": "prior_processing_flags",
      "expert": "imaging scientist (camera acquisition and noise)",
      "status": "provisional",
      "values": {
       "flags": [],
       "thresholds": {
        "int_frac": 0.5,
        "neg_frac": 0.01,
        "dv_autocorr": 0.5,
        "neighbour_corr": 0.8
       }
      },
      "decision": null,
      "location": "worker/voltage/inspect.py (prior_processing)",
      "reviewed": false,
      "reviewer": null,
      "description": "Thresholds for flagging depositor processing (normalization, masking, temporal/spatial smoothing)",
      "reviewed_at": null
     },
     {
      "id": "pipeline_check",
      "expert": "optical mapping analyst",
      "status": "provisional",
      "values": {
       "model": "openai:gpt-5.5",
       "proceed": true,
       "anomalies": [
        "Frame rate unavailable",
        "Accessible depositor documentation unavailable",
        "Tissue annotation/mask",
        "Baseline drift/bleaching",
        "Baseline-window rule"
       ],
       "mismatches": [
        "tissue"
       ]
      },
      "decision": null,
      "location": "worker/agents/pipeline.py (INSTRUCTIONS, validator)",
      "reviewed": false,
      "reviewer": null,
      "description": "The pipeline agent's hold/proceed decision from protocol mismatches and inspector anomalies; it chooses no parameter",
      "reviewed_at": null
     },
     {
      "id": "physiology_reference_rates",
      "expert": "cardiac electrophysiologist per species",
      "status": "provisional",
      "values": {
       "ranges": [
        "mouse_spiral_rotation_hz"
       ],
       "tolerance_frac": 0.25,
       "segment_rhythm_rule": "expected persistent rotors 'present' -> spiral arrhythmia"
      },
      "decision": null,
      "location": "worker/voltage/physiology.py (RANGES, TOLERANCE_FRAC)",
      "reviewed": false,
      "reviewer": null,
      "description": "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",
      "reviewed_at": null
     },
     {
      "id": "stability_rule",
      "expert": "biostatistician + optical mapping analyst",
      "status": "provisional",
      "values": {
       "unstable": [
        "whole_recording.singularity_frames_frac",
        "whole_recording.persistent_rotors",
        "whole_recording.persistent_rotor_count_max",
        "persistent_rotor_tracks"
       ],
       "stable_frac": 0.25
      },
      "decision": null,
      "location": "worker/agents/critic.py (STABLE_FRAC, stability)",
      "reviewed": false,
      "reviewer": null,
      "description": "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'",
      "reviewed_at": null
     },
     {
      "id": "persistence_threshold_variants",
      "expert": "computational cardiac electrophysiologist (phase mapping)",
      "status": "provisional",
      "values": {
       "measured_cycle": 108,
       "paper_rotation": null
      },
      "decision": null,
      "location": "worker/agents/critic.py (persistence_variants)",
      "reviewed": false,
      "reviewer": null,
      "description": "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",
      "reviewed_at": null
     },
     {
      "id": "persistent_rotor_criterion",
      "expert": "cardiac electrophysiologist",
      "status": "provisional",
      "values": {
       "max_absent": 0,
       "min_present": 1
      },
      "decision": null,
      "location": "worker/voltage/sensitivity.py (MIN_ROTORS_PRESENT, MAX_ROTORS_ABSENT)",
      "reviewed": false,
      "reviewer": null,
      "description": "Persistent-rotor finding holds if every 'present' segment has >= 1 persistent rotor and every 'absent' segment has none, at every setting",
      "reviewed_at": null
     }
    ],
    "status": "provisional",
    "all_reviewed": false,
    "superseded_by_run": null
   }
  },
  "segments": [
   {
    "id": "87f493f2-8b99-4c2a-90af-b95efbbdc6b6",
    "position": 1,
    "name": "whole_recording",
    "label": "whole recording",
    "start_frame": 0,
    "end_frame": 5000,
    "expected_persistent_rotors": null,
    "definition": "whole recording; no events detected or logged at admission",
    "defined_by": "admission (project lead); no comparison defined",
    "citation": null,
    "evidence": {},
    "provisional": true
   }
  ],
  "events": []
 }
}