36 lines
1.5 KiB
Python
36 lines
1.5 KiB
Python
"""One acquisition producer selection shared by supervisor and launcher."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
from python_app.models.run_config_schema import RadarModel
|
|
|
|
|
|
def acquisition_command(project_root: Path, config_path: Path) -> list[str]:
|
|
"""Select replay first, then the configured model's acquisition producer."""
|
|
payload = json.loads(config_path.read_text(encoding="utf-8"))
|
|
radar = payload.get("radar", {}) if isinstance(payload, dict) else {}
|
|
radar = radar if isinstance(radar, dict) else {}
|
|
replay = radar.get("replay", {})
|
|
dataset = replay.get("dataset_dir") if isinstance(replay, dict) else None
|
|
defaults = RadarModel()
|
|
model = radar.get("model")
|
|
if model is None and isinstance(payload, dict):
|
|
model = defaults.model
|
|
driver_mode = radar.get("driver_mode")
|
|
if driver_mode is None:
|
|
driver_mode = defaults.driver_mode
|
|
if model in ("librevna", "librevna_multi") and driver_mode == "mock":
|
|
model = "librevna_multi"
|
|
module = "replay_raw_producer" if isinstance(dataset, str) and dataset.strip() else {
|
|
"librevna_multi": "matrix_raw_producer",
|
|
"kamil_adc": "kamil_adc_raw_producer",
|
|
}.get(model if isinstance(model, str) else "")
|
|
command = [sys.executable, "-m", f"python_app.scripts.{module}"] if module else [
|
|
str(project_root / "build/bin/sweep_orchestrator"),
|
|
]
|
|
return [*command, "--config", str(config_path)]
|