"""Generate deterministic multi-sensor data for DOFA pipeline validation.""" from pathlib import Path import numpy as np import yaml ROOT = Path(__file__).resolve().parents[1] def make_images(count, channels, size, seed): rng = np.random.default_rng(seed) y, x = np.mgrid[0:size, 0:size].astype(np.float32) / max(size - 1, 1) images = np.empty((count, channels, size, size), dtype=np.float32) for sample in range(count): for channel in range(channels): phase = rng.uniform(0, 2 * np.pi) pattern = 0.45 + 0.25 * np.sin((channel + 1) * np.pi * x + phase) pattern += 0.2 * np.cos((sample % 4 + 1) * np.pi * y - phase) pattern += rng.normal(0, 0.02, (size, size)) images[sample, channel] = np.clip(pattern, 0, 1) return images def main(): with (ROOT / "conf" / "config.yaml").open(encoding="utf-8") as handle: config = yaml.safe_load(handle) data = config["data"] root = ROOT / data["root"] root.mkdir(parents=True, exist_ok=True) for index, (name, modality) in enumerate(data["modalities"].items()): if modality.get("wavelength_mode") == "synthetic_uniform": wavelengths = modality["wavelength_start"] + np.arange( modality["channels"], dtype=np.float32 ) * modality["wavelength_step"] else: wavelengths = np.asarray(modality["wavelengths"], dtype=np.float32) if wavelengths.shape != (modality["channels"],): raise ValueError( f"{name} has {modality['channels']} channels but " f"{wavelengths.size} wavelengths" ) for split, count in ( ("train", data["train_samples_per_modality"]), ("test", data["test_samples_per_modality"]), ): images = make_images( count, modality["channels"], data["image_size"], config["seed"] + index * 10 + (split == "test"), ) output = root / f"{split}_{name}.npz" np.savez_compressed( output, images=images, wavelengths=wavelengths, modality=np.asarray(name), data_source=np.asarray("synthetic"), protocol=np.asarray(data["protocol"]), data_range=np.asarray(data["data_range"], dtype=np.float32), wavelength_mode=np.asarray(modality.get("wavelength_mode", "configured")), ) print( f"generated={output.relative_to(ROOT)} shape={images.shape} " f"modality={name} channels={modality['channels']} data_source=synthetic" ) if __name__ == "__main__": main()