{
  "schema_version": "0.1",
  "run_id": "20261012T190848550861Z-exp-002-floor",
  "pillar": "I · Sensor",
  "command": "xenia live floor --mode full --seed 20261012 --experiment-id EXP-002",
  "parameters": {
    "mode": "full",
    "seed": 20261012,
    "seed_strategy": "base seed + trial index - 1; one independent seeded frame per trial",
    "snr_grid": [
      5.0,
      8.0,
      10.0,
      12.0,
      15.0,
      20.0,
      30.0,
      40.0
    ],
    "drift_grid_hz_s": [
      -4.0,
      -3.0,
      -2.0,
      -1.0,
      0.0,
      1.0,
      2.0,
      3.0,
      4.0
    ],
    "trials_per_cell": 5,
    "signals_per_trial": 72,
    "generator": {
      "package": "setigen",
      "distribution": "chi2",
      "noise_mean": 1.0,
      "intensity_calibration": "Frame.get_intensity(snr) = snr * noise_std / sqrt(tchans)",
      "frequency_profile": "Gaussian",
      "time_profile": "constant",
      "path": "linear constant drift",
      "path_sampling": "integration starts; Doppler smearing averages across each integration",
      "signal_width_hz": 5.587935447692871,
      "frequency_slot_stride_channels": 1600,
      "frequency_slot_spacing_hz": 4470.348358154297,
      "f_subsamples": 4,
      "smearing_subsamples": 64,
      "temporary_metadata": {
        "source_name": "XENIA-SYNTHETIC",
        "telescope_id": 0,
        "machine_id": 0,
        "source_coordinates_deg": [
          0.0,
          0.0
        ]
      }
    },
    "frame": {
      "frequency_channels": 131072,
      "time_channels": 16,
      "frequency_resolution_hz": 2.7939677238464355,
      "time_resolution_seconds": 18.253611008,
      "frame_center_frequency_mhz": 5999.816895928234,
      "frame_fch1_mhz": 6000.0,
      "mjd": 60000.0
    },
    "detector": {
      "package": "turbo-seti",
      "minimum_snr": 5.0,
      "max_abs_drift_hz_s": 4.0,
      "n_coarse_chan": 1,
      "n_partitions": 1,
      "precision": 1
    },
    "recovery_match": {
      "frequency_reference": "turboSETI uncorrected frequency, accepted when it lies within three fine channels of the injected path",
      "matching_version": 2,
      "matching_rule": "v2 accepts a hit whose uncorrected frequency lies within three fine channels of the injected path from start_frequency_mhz across the frame, and whose drift is within three turboSETI drift-resolution bins of the injected physical drift; one hit recovers at most one injection. turboSETI 2.3.2 writes the same channel for corrected and uncorrected frequency.",
      "frequency_tolerance_hz": 8.381903171539307,
      "drift_tolerance_hz_s": 0.030612767223120126,
      "one_detector_hit_can_recover_at_most_one_injection": true
    },
    "ci_run_url": null,
    "temporary_filterbanks_and_detector_tables": "removed after each trial",
    "runtime_versions": {
      "python": "3.15.0",
      "setigen": "2.7.0",
      "astropy": "8.0.1",
      "numpy": "2.5.4",
      "turbo-seti": "2.3.2",
      "blimpy": "2.1.4",
      "h5py": "3.16.0"
    }
  },
  "inputs": [],
  "outputs": [
    {
      "path": "runs/20261012T190848550861Z-exp-002-floor/recovery_grid.json",
      "sha256": "77f84624867ed5e1a2bf9e1e2409270284254f090162ee9b25474a8e4804a234",
      "size_bytes": 273572,
      "media_type": null
    },
    {
      "path": "runs/20261012T190848550861Z-exp-002-floor/sweep.csv",
      "sha256": "54a99746a0e208541ccf6ec8dd72c8fd4e5e4fab9f90504fd62b984a2a8ab343",
      "size_bytes": 2352,
      "media_type": null
    },
    {
      "path": "runs/20261012T190848550861Z-exp-002-floor/manifest.json",
      "sha256": null,
      "size_bytes": null,
      "media_type": null
    }
  ],
  "git_sha": "e9db4be",
  "package_version": "0.1.0",
  "started_at": "2026-10-12T19:08:48.550861Z",
  "finished_at": "2026-10-12T19:08:56.993088Z",
  "outcome": "recovery_grid_completed",
  "notes": [
    "Synthetic setigen calibration; not telescope observations.",
    "Trials use deterministic seeds and one-to-one frequency/drift hit matching.",
    "sweep.csv is row-major; recovered_seeds is encoded as a compact JSON array.",
    "turboSETI 2.3.2 raised its known NumPy-array formatting TypeError during final candidate-count logging after writing parseable .dat hit rows; those rows were retained and validated.",
    "turboSETI 2.3.2 raised its known NumPy-array formatting TypeError during final candidate-count logging after writing parseable .dat hit rows; those rows were retained and validated.",
    "turboSETI 2.3.2 raised its known NumPy-array formatting TypeError during final candidate-count logging after writing parseable .dat hit rows; those rows were retained and validated.",
    "turboSETI 2.3.2 raised its known NumPy-array formatting TypeError during final candidate-count logging after writing parseable .dat hit rows; those rows were retained and validated.",
    "turboSETI 2.3.2 raised its known NumPy-array formatting TypeError during final candidate-count logging after writing parseable .dat hit rows; those rows were retained and validated."
  ],
  "experiment_id": "EXP-002",
  "demo": false,
  "mission_control": {
    "kind": "detection_floor",
    "experiment": "EXP-002",
    "snr_grid": [
      5.0,
      8.0,
      10.0,
      12.0,
      15.0,
      20.0,
      30.0,
      40.0
    ],
    "drift_grid": [
      -4.0,
      -3.0,
      -2.0,
      -1.0,
      0.0,
      1.0,
      2.0,
      3.0,
      4.0
    ],
    "trials_per_cell": 5,
    "recovered_fraction": [
      [
        0.0,
        0.0,
        0.0,
        0.0,
        0.4,
        0.0,
        0.0,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.0,
        0.2,
        1.0,
        0.0,
        0.0,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.0,
        0.2,
        1.0,
        0.6,
        0.0,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.0,
        0.6,
        1.0,
        0.8,
        0.0,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.0,
        0.6,
        1.0,
        0.8,
        0.0,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.8,
        0.8,
        1.0,
        1.0,
        0.2,
        0.0,
        0.0
      ],
      [
        0.0,
        0.0,
        0.6,
        0.8,
        1.0,
        0.6,
        0.2,
        0.2,
        0.0
      ],
      [
        0.0,
        0.0,
        0.2,
        0.4,
        1.0,
        0.4,
        0.4,
        0.2,
        0.0
      ]
    ],
    "ci_run_url": null
  }
}
