Reproducibility protocol
SET-ANUBIS ships a deterministic reproducibility suite intended to accompany the software release and the CPC program description. The suite is deliberately smaller than a publication-scale Monte Carlo campaign: it verifies that the scientific software path produces the expected model, decay, card-generation and selection results from version-controlled inputs.
R1–R5 structure
The reproducibility/ directory contains five independent scenarios:
ID |
Scientific component |
Reproduced result |
External executable |
|---|---|---|---|
R1 |
Core/model interface |
HNL UFO content and parameter update |
none |
R2 |
Branching-ratio layer |
partial widths, total width and branching fractions |
none |
R3 |
Pythia preparation |
deterministic |
Pythia is not run |
R4 |
MadGraph preparation |
process, run, parameter, shower and MadSpin cards |
MadGraph/Docker are not run |
R5 |
Selection |
HepMC conversion, cutflow and JSON/HTML trace |
no generator is run |
Every scenario follows the same directory contract:
R<N>_<name>/
├── README.md
├── input/
├── expected_output/
├── output/
└── run.py
input/ and expected_output/ are version controlled. output/ is
created locally and ignored by Git. Canonical scientific resources that already
belong to the Python package are referenced from the scenario configuration
rather than copied a second time.
Running the suite
R5 reads the packaged HepMC2 sample, so install the selection extra:
python -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev,selection]"
python reproducibility/run_reproducibility.py
The default run writes into each scenario’s output/ directory. For CI or an
archival execution, collect all outputs below one root:
python reproducibility/run_reproducibility.py \
--output-root reproducibility_outputs
A successful run writes VALIDATED markers and an aggregate
reproducibility_results.json. The generated summary.json for each
scenario is compared recursively against expected_output/summary.json;
floating-point values use a relative and absolute tolerance of 1e-12.
Generated text cards are represented by SHA-256 digests.
A single scenario can also be run directly:
python reproducibility/R3_pythia_cmnd/run.py
python reproducibility/run_reproducibility.py --scenario R5
Selection input and outputs
R5 begins with the compact, seven-event HepMC2 gzip file distributed under
SetAnubis.examples.Selection.InputFiles. It rebuilds the flat event
dataframe, runs the standard geometry-aware selection and produces:
events_from_hepmc.csv.gz;selection_trace.json;selection_trace.html;summary.json.
The seven events reproduce the observed cutflow outcomes in the compact sample:
failures after LLPDecay, InCavern, NotInATLAS, Geometry,
Tracker and MET, followed by one event that reaches Final.
Continuous integration
The dedicated Reproducibility GitHub Actions workflow runs R1–R5 on every
push and pull request to main or develop. Its status check should be
required by the repository ruleset. The release workflow repeats the suite before
building or publishing distribution artifacts and uploads the generated evidence
as a GitHub Actions artifact.
Scientific scope
The suite validates deterministic software behaviour; it does not claim to reproduce the complete event campaign of a physics publication. A full campaign also requires the archived generator versions, container image digests, random seeds, process definitions, cards, scan grids and larger event samples.
For a CPC submission, retain the R1–R5 output directory together with the exact SET-ANUBIS tag, the Python environment description, the wheel/sdist checksums and any external-tool provenance needed by the publication-scale analysis.