{
  "project": "Wastewater Watch",
  "simulator": "bsm2-python BSM1 open loop, temperature effects enabled, explicit 1-minute step",
  "data": "28 custom simulated scenarios; not real plants or official IWA weather files",
  "scenario_counts": {
    "calibration": 8,
    "nominal": 4,
    "rain": 4,
    "storm": 4,
    "train": 8
  },
  "discarded_initial_hours": 96,
  "simulation_days": 14,
  "horizons_hours": [
    6,
    24
  ],
  "origin_spacing_hours": 3,
  "noise_fraction": 0.02,
  "seeds": 5,
  "seed_interpretation": "Training-subset/model seeds on one fixed simulator dataset, not independent plant replications",
  "alert_threshold_mgN_L": 4.0,
  "alert_note": "Illustrative NH4 threshold; not a regulatory limit. Labels concern target-time exceedance, not onset events or independent alarms.",
  "interval": "Nominal 80% simultaneous two-output prediction bands per scenario/horizon using maximum error over all origins; 8 independent calibration scenarios, rank 8 of 8. Exchangeability assumed; no guarantee under rain/storm shifts.",
  "forecast": "Current sensor readings plus past 6-hour trend only. Future measured controls are never given. The hybrid recursively updates predicted states with current controls held fixed. NOx is combined oxidized nitrogen, not speciated nitrate.",
  "limitations": [
    "Custom 14-day scenarios discard 4 days; no equilibrium/standard BSM benchmark certification",
    "Common initialized reactor states, constant simplified effective mixing volume",
    "Apparent net rates are not identified nitrifier maximum growth parameters",
    "Calibration uses noise-free simulator targets; field calibration needs validated reference sensors",
    "Synthetic cases share simulator architecture and source composition statistics; external plant validity is unknown"
  ],
  "runtime_seconds": 179.08,
  "versions": {
    "bsm2-python": "0.0.16",
    "numpy": "2.5.4",
    "scipy": "1.18.1",
    "pandas": "3.1.1",
    "scikit-learn": "1.9.1"
  },
  "python": "3.12.11",
  "data_sha256": "495cd917172ed76447159377d79127bf51ddaefd18045a4719c6846a2fb389f4",
  "source_sha256": "b38b41bbc08826341f04eb39680612eb52b2df3429d4e2c3afb5f17e81fc2800",
  "runs": [
    {
      "seed": 0,
      "training_ids": [
        "S00",
        "S01",
        "S02",
        "S03",
        "S04",
        "S05",
        "S06",
        "S07"
      ],
      "calibration_ids": [
        "S08",
        "S09",
        "S10",
        "S11",
        "S12",
        "S13",
        "S14",
        "S15"
      ]
    },
    {
      "seed": 1,
      "training_ids": [
        "S00",
        "S01",
        "S02",
        "S03",
        "S04",
        "S05",
        "S06",
        "S07"
      ],
      "calibration_ids": [
        "S08",
        "S09",
        "S10",
        "S11",
        "S12",
        "S13",
        "S14",
        "S15"
      ]
    },
    {
      "seed": 2,
      "training_ids": [
        "S00",
        "S01",
        "S02",
        "S03",
        "S04",
        "S05",
        "S06",
        "S07"
      ],
      "calibration_ids": [
        "S08",
        "S09",
        "S10",
        "S11",
        "S12",
        "S13",
        "S14",
        "S15"
      ]
    },
    {
      "seed": 3,
      "training_ids": [
        "S00",
        "S01",
        "S02",
        "S03",
        "S04",
        "S05",
        "S06",
        "S07"
      ],
      "calibration_ids": [
        "S08",
        "S09",
        "S10",
        "S11",
        "S12",
        "S13",
        "S14",
        "S15"
      ]
    },
    {
      "seed": 4,
      "training_ids": [
        "S00",
        "S01",
        "S02",
        "S03",
        "S04",
        "S05",
        "S06",
        "S07"
      ],
      "calibration_ids": [
        "S08",
        "S09",
        "S10",
        "S11",
        "S12",
        "S13",
        "S14",
        "S15"
      ]
    }
  ]
}