Skip to content

Reproducibility

gwmock writes one versioned JSON provenance record per generated batch as *.metadata.json.

Schema

Each record is validated at write time and uses schema version 1.0.0. Consumers must reject unknown major versions.

{
    "schema_version": "1.0.0",
    "gwmock_version": "x.y.z",
    "subpackage_versions": {
        "gwmock_signal": "x.y.z",
        "gwmock_noise": "x.y.z",
        "gwmock_pop": "x.y.z"
    },
    "config": {},
    "config_sha256": "...",
    "seed": 42,
    "segment_seeds": [123456789, 987654321],
    "population": {
        "backend": "module:Class",
        "source_type": "bbh",
        "n_events": 128,
        "parameter_names": [],
        "metadata": {}
    },
    "signal": {
        "backend": "module:Class",
        "waveform_model": "IMRPhenomXPHM",
        "detector_network": ["ET1_SARD", "ET2_SARD", "ET3_SARD"],
        "metadata": {}
    },
    "noise": {
        "backend": "module:Class",
        "psd": "ET_10_full_cryo_psd",
        "metadata": {}
    },
    "outputs": [
        {
            "kind": "signal",
            "path": "output/signal/E-ET1_SARD_STRAIN_BBH-1577491218-1024.gwf",
            "channels": ["ET1_SARD:STRAIN"],
            "t0": 1577491218,
            "duration": 1024,
            "sha256": "..."
        }
    ],
    "host": {
        "platform": "...",
        "python": "3.12.x",
        "cpu": "...",
        "git_sha": "..."
    }
}

config stores the resolved configuration snapshot for that run. segment_seeds stores the deterministic per-segment seeds that gwmock derives locally. Adapter-backed noise now consumes one shared gwmock_noise.open_stream(...) iterator per run, so the top-level seed is recorded once and noise continuation no longer appears as one derived seed per batch. The subpackage metadata objects are preserved as JSON objects without gwmock rewriting their internal structure.

For the config shape that feeds this record, see Orchestration and Protocol Contracts.

Reproducing a run

For deterministic reproduction, pin gwmock, gwmock-signal, gwmock-noise, and gwmock-pop to the same versions used originally, then rerun the same config file. The seed is stored in the config itself:

gwmock simulate config.yaml

In batch reproduction workflows, pass the generated *.metadata.json files directly to gwmock simulate. Each metadata file carries the exact config snapshot and per-segment seeds needed to reproduce that batch independently:

# Reproduce specific batches from their metadata files
gwmock simulate metadata/orchestration-0.metadata.json metadata/orchestration-1.metadata.json

# Or reproduce everything from a metadata directory
gwmock simulate metadata/