diff --git a/CHANGELOG.md b/CHANGELOG.md index c82d5b447f..c9f5770138 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,9 +18,11 @@ it in future. * New warm MS option TRY_2025 (Stellatryon v.2) added to the config and its field map +* Created genie_config folder for our XML configuration files. For now, only replacing Pythia6Decayer with Pythia8Decayer ### Changed * Only get evtNo in ShipStack if there are tracks. Prevents seg faults from accessing empty events at the end of the run. #1051 +* makeGenieEvents: automatically set GXMLPATH to the genie_config folder. Remove option --nudet since now GXMLPATH always needs to be set. * Make Ship::Generator base class for all the generators. Each generator can in principal take a list of files, although each will need to implement the method to do so. #1047 * Add file glob to run_simScript.py input files to allow for wildcards etc. Also, if nEvents is set to -1, run over everything. #1041 * Turn warning to debug in MuonBackGenerator to prevent overly verbose output. #1036 diff --git a/macro/makeGenieEvents.py b/macro/makeGenieEvents.py index ebcce2d955..b99fa9cda4 100644 --- a/macro/makeGenieEvents.py +++ b/macro/makeGenieEvents.py @@ -3,15 +3,14 @@ # SPDX-FileCopyrightText: Copyright CERN for the benefit of the SHiP Collaboration """Generate GENIE neutrino interaction events from flux histograms. -This “launcher” wraps `genie_utils` (gmkspl/gevgen/gntpc helpers) and adds: +This "launcher" wraps `genie_utils` (gmkspl/gevgen/gntpc helpers) and adds: - Argument parsing with sensible defaults and validation -- Optional *nudet* mode (disables charm/tau decays via GXMLPATH) - Automatic neutrino/antineutrino scaling based on flux hist sums - Structured logging and robust error reporting Typical use ----------- -$ python $FAIRSHIP/macro/makeGenieEvents sim \ +$ python $FAIRSHIP/macro/makeGenieEvents.py sim \ --seed 65539 \ --output ./work \ --filedir /eos/experiment/ship/data/Mbias/background-prod-2018 \ @@ -21,14 +20,13 @@ --emin 0.5 --emax 350 \ --xsec-file gxspl-FNALsmall.xml \ --flux-file pythia8_Geant4_1.0_withCharm_nu.root \ - --event-generator-list CC \ - --nudet + --event-generator-list CC Notes ----- - This tool *does not* modify your parent shell environment. -- `--nudet` sets `GXMLPATH` for the child process only (you can override path - with `--gxmlpath`). +- GXMLPATH is automatically set to $FAIRSHIP_ROOT/shipgen/genie_config by default. +- Use `--gxmlpath` to override the default GXMLPATH if needed. """ @@ -36,6 +34,7 @@ import argparse import logging +import os from collections.abc import Mapping, Sequence from pathlib import Path @@ -101,11 +100,15 @@ def _ensure_dir(path: Path) -> None: path.mkdir(parents=True, exist_ok=True) -def _build_env(nudet: bool, gxmlpath: Path | None) -> Mapping[str, str | None] | None: - """Build per-call env overrides (sets GXMLPATH only in nudet mode).""" - if not nudet: - return None - val = str(gxmlpath) if gxmlpath else "/eos/experiment/ship/user/aiuliano/GENIE_FNAL_nu_splines" +def _build_env(gxmlpath: Path | None) -> Mapping[str, str | None] | None: + """Build per-call env overrides (sets GXMLPATH).""" + fairship_root_path = os.getenv("FAIRSHIP_ROOT") or os.getenv("FAIRSHIP") + if not fairship_root_path: + raise OSError( + "FAIRSHIP_ROOT (or FAIRSHIP) environment variable is not set. " + "Please run inside the FairShip alienv environment." + ) + val = str(gxmlpath) if gxmlpath else fairship_root_path + "/shipgen/genie_config" return {"GXMLPATH": val} @@ -165,12 +168,9 @@ def make_events( out_dir = work_dir / f"genie-{pdg_name}_{N}_events" _ensure_dir(out_dir) - nudet_suffix = "_nudet" if env_vars and env_vars.get("GXMLPATH") else "" - filename = ( - f"run_{run}_{pdg_name}_{N}_events_{targetcode}_{emin}_{emax}_GeV_{process or 'ALL'}{nudet_suffix}.ghep.root" - ) + filename = f"run_{run}_{pdg_name}_{N}_events_{targetcode}_{emin}_{emax}_GeV_{process or 'ALL'}.ghep.root" ghep_path = out_dir / filename - gst_path = out_dir / f"genie-{filename}" + gst_path = out_dir / f"genie-{filename.replace('ghep.root', 'gst.root')}" logging.info(f"Generating {N} events for PDG {pdg_name} (run={run}) -> {ghep_path}") @@ -259,8 +259,7 @@ def _build_parser() -> argparse.ArgumentParser: default=None, help="GENIE generator list (e.g. CC, CCDIS, CCQE, CharmCCDIS, RES, CCRES, ...)", ) - ap.add_argument("--nudet", action="store_true", help="Disable charm & tau decays via GXMLPATH") - ap.add_argument("--gxmlpath", type=Path, default=None, help="Override GXMLPATH in --nudet mode") + ap.add_argument("--gxmlpath", type=Path, default=None, help="Override GXMLPATH") ap.add_argument( "-p", "--particles", @@ -315,7 +314,7 @@ def main(argv: Sequence[str] | None = None) -> int: return 0 # sim - env_vars = _build_env(nudet=bool(args.nudet), gxmlpath=args.gxmlpath) + env_vars = _build_env(gxmlpath=args.gxmlpath) targetcode = _target_code(args.target) splines = (args.splinedir / args.xsec_file).resolve() @@ -328,12 +327,7 @@ def main(argv: Sequence[str] | None = None) -> int: particles = _pdg_list(args.particles) nu_over_nubar = extract_nu_over_nubar(flux, particles) - logging.info( - f"Seed: {args.seed} | " - f"Target: {args.target} ({targetcode}) | " - f"Process: {args.evtype or 'ALL'} | " - f"nudet={bool(args.nudet)}" - ) + logging.info(f"Seed: {args.seed} | Target: {args.target} ({targetcode}) | Process: {args.evtype or 'ALL'}") make_events( run=int(args.run), nevents=int(args.nevents), diff --git a/pyproject.toml b/pyproject.toml index 4e7410c625..b9f535b825 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,4 +12,4 @@ ignore = [ [tool.codespell] -ignore-words-list = 'Millepede,Gaus,gaus,dYIn,te' +ignore-words-list = 'Millepede,Gaus,gaus,dYIn,te,KNO,kno' diff --git a/shipgen/genie_config/AGKY2019.xml b/shipgen/genie_config/AGKY2019.xml new file mode 100644 index 0000000000..90a761ba8f --- /dev/null +++ b/shipgen/genie_config/AGKY2019.xml @@ -0,0 +1,31 @@ + + + + + + + + + KNO2Pythia + + genie::AGKYLowW2019/Default + genie::Pythia8Hadro2019/Default + + + + diff --git a/shipgen/genie_config/AGKYLowW2019.xml b/shipgen/genie_config/AGKYLowW2019.xml new file mode 100644 index 0000000000..e1c9536d3c --- /dev/null +++ b/shipgen/genie_config/AGKYLowW2019.xml @@ -0,0 +1,187 @@ + + + + + + + + NonResBackground + + + 0.40 + -0.20 + 0.02 + 0.80 + 1.42 + 1.42 + 1.28 + 0.95 + + 0.40 + -0.20 + 0.02 + 0.80 + 1.42 + 1.42 + 1.28 + 0.95 + + + 0.021951447 + 0.041969985 + + + 7.93 + 5.22 + 5.22 + 7.93 + + 7.93 + 5.22 + 5.22 + 7.93 + + + 0.3133 + 0.6267 + 0.03 + 0.03 + 0.0 + 0.0 + + + true + 3.5 + + + true + true + + + + + true + genie::Pythia8Decayer2023/Default + + + + false + false + + + + true + genie::Pythia8Decayer2023/Default + false + false + + + diff --git a/shipgen/genie_config/DISHadronicSystemGenerator.xml b/shipgen/genie_config/DISHadronicSystemGenerator.xml new file mode 100644 index 0000000000..51de28438f --- /dev/null +++ b/shipgen/genie_config/DISHadronicSystemGenerator.xml @@ -0,0 +1,49 @@ + + + + + + + + NUCL + + genie::AGKY2019/Default + genie::UnstableParticleDecayer/BeforeHadronTransport + false + + + 0.342 + 2.300 + 0.0 + + + + + genie::AGCharmPythia8Hadro2023/Default + genie::UnstableParticleDecayer/BeforeHadronTransport + false + + + + diff --git a/shipgen/genie_config/Messenger.xml b/shipgen/genie_config/Messenger.xml new file mode 100644 index 0000000000..cb61f4a5b7 --- /dev/null +++ b/shipgen/genie_config/Messenger.xml @@ -0,0 +1,258 @@ + + + + + + + NOTICE + DEBUG + DEBUG + DEBUG + DEBUG + + WARN + + WARN + + INFO + WARN + WARN + WARN + WARN + INFO + INFO + INFO + DEBUG + NOTICE + WARN + WARN + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + WARN + WARN + NOTICE + WARN + NOTICE + INFO + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + WARN + WARN + NOTICE + DEBUG + DEBUG + NOTICE + NOTICE + NOTICE + INFO + NOTICE + WARN + WARN + + WARN + NOTICE + NOTICE + + NOTICE + WARN + NOTICE + WARN + NOTICE + INFO + INFO + WARN + INFO + WARN + NOTICE + NOTICE + NOTICE + WARN + NOTICE + WARN + NOTICE + INFO + INFO + WARN + NOTICE + WARN + INFO + INFO + INFO + WARN + WARN + WARN + WARN + WARN + NOTICE + NOTICE + WARN + WARN + NOTICE + NOTICE + WARN + WARN + WARN + WARN + WARN + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + WARN + WARN + WARN + INFO + NOTICE + NOTICE + NOTICE + WARN + WARN + NOTICE + NOTICE + NOTICE + WARN + NOTICE + INFO + NOTICE + WARN + NOTICE + WARN + INFO + NOTICE + INFO + INFO + NOTICE + INFO + INFO + INFO + INFO + NOTICE + NOTICE + INFO + WARN + WARN + WARN + WARN + WARN + WARN + WARN + NOTICE + WARN + NOTICE + NOTICE + NOTICE + WARN + WARN + INFO + WARN + WARN + INFO + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + WARN + NOTICE + WARN + NOTICE + WARN + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + WARN + NOTICE + WARN + NOTICE + NOTICE + NOTICE + NOTICE + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + ERROR + FATAL + + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + WARN + INFO + INFO + INFO + INFO + INFO + FATAL + FATAL + FATAL + + diff --git a/shipgen/genie_config/Messenger_inuke_verbose.xml b/shipgen/genie_config/Messenger_inuke_verbose.xml new file mode 100644 index 0000000000..356a117ee6 --- /dev/null +++ b/shipgen/genie_config/Messenger_inuke_verbose.xml @@ -0,0 +1,226 @@ + + + + + + + NOTICE + WARN + INFO + WARN + WARN + WARN + WARN + INFO + INFO + INFO + DEBUG + NOTICE + WARN + WARN + WARN + NOTICE + INFO + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + WARN + WARN + NOTICE + WARN + NOTICE + INFO + NOTICE + NOTICE + NOTICE + INFO + WARN + DEBUG + DEBUG + NOTICE + NOTICE + WARN + INFO + NOTICE + INFO + WARN + NOTICE + NOTICE + INFO + INFO + WARN + INFO + INFO + NOTICE + NOTICE + WARN + NOTICE + NOTICE + WARN + INFO + INFO + WARN + NOTICE + WARN + INFO + INFO + INFO + WARN + WARN + WARN + INFO + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + INFO + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + INFO + INFO + INFO + INFO + WARN + NOTICE + INFO + INFO + INFO + NOTICE + WARN + NOTICE + NOTICE + INFO + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + INFO + NOTICE + INFO + INFO + INFO + INFO + INFO + WARN + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + INFO + WARN + WARN + WARN + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + WARN + WARN + DEBUG + INFO + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + NOTICE + WARN + NOTICE + NOTICE + NOTICE + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + ERROR + + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + INFO + INFO + INFO + INFO + INFO + + diff --git a/shipgen/genie_config/Messenger_laconic.xml b/shipgen/genie_config/Messenger_laconic.xml new file mode 100644 index 0000000000..c5ebddc93f --- /dev/null +++ b/shipgen/genie_config/Messenger_laconic.xml @@ -0,0 +1,247 @@ + + + + + + WARN + WARN + WARN + WARN + WARN + + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + + WARN + WARN + WARN + + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + + diff --git a/shipgen/genie_config/Messenger_rambling.xml b/shipgen/genie_config/Messenger_rambling.xml new file mode 100644 index 0000000000..c212f2456c --- /dev/null +++ b/shipgen/genie_config/Messenger_rambling.xml @@ -0,0 +1,243 @@ + + + + + + + NOTICE + WARN + + WARN + INFO + WARN + WARN + INFO + INFO + INFO + INFO + INFO + DEBUG + NOTICE + WARN + WARN + WARN + NOTICE + INFO + INFO + INFO + INFO + INFO + INFO + INFO + INFO + WARN + WARN + NOTICE + WARN + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + DEBUG + DEBUG + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + NOTICE + + NOTICE + NOTICE + NOTICE + + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + WARN + INFO + INFO + INFO + NOTICE + NOTICE + WARN + NOTICE + NOTICE + NOTICE + INFO + INFO + WARN + NOTICE + WARN + INFO + INFO + INFO + NOTICE + WARN + WARN + INFO + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + WARN + NOTICE + INFO + INFO + INFO + INFO + NOTICE + WARN + NOTICE + INFO + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + INFO + NOTICE + INFO + INFO + INFO + INFO + INFO + INFO + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + INFO + WARN + WARN + WARN + WARN + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + WARN + WARN + DEBUG + INFO + INFO + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + INFO + INFO + INFO + NOTICE + WARN + NOTICE + NOTICE + NOTICE + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + WARN + ERROR + + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + NOTICE + INFO + NOTICE + INFO + INFO + INFO + INFO + INFO + INFO + INFO + + diff --git a/shipgen/genie_config/Messenger_whisper.xml b/shipgen/genie_config/Messenger_whisper.xml new file mode 100644 index 0000000000..7d9e295ed2 --- /dev/null +++ b/shipgen/genie_config/Messenger_whisper.xml @@ -0,0 +1,242 @@ + + + + + + + FATAL + FATAL + + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + + FATAL + FATAL + FATAL + + NOTICE + WARN + NOTICE + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + FATAL + + diff --git a/shipgen/genie_config/README.md b/shipgen/genie_config/README.md new file mode 100644 index 0000000000..0a122c7fc7 --- /dev/null +++ b/shipgen/genie_config/README.md @@ -0,0 +1,33 @@ +# Configuration files for GENIE simulations + +## Introduction + +Following ROOT's deprecation of TPythia6, these files replace the Pythia6Decayer +with Pythia8Decayer in GENIE. + +## Details + +For more information, see: + +- https://genie-mc.github.io/releases.html +- https://github.com/GENIE-MC/Generator/pull/430 + +To use these files, set the `GXMLPATH` environment variable to this folder before +launching the simulation. This is done automatically by `makeGenieEvents.py`. + +This folder mirrors the structure of the default GENIE configuration and currently +only contains the files needed to switch from Pythia6Decayer to Pythia8Decayer. + +## History + +- February 2026: Initial creation (Antonio Iuliano) + +## Notes on particle decays + +Particle decays were previously configured in `UserPhysicsOptions.xml`. They are +now provided in a "tune" folder. See for example: +https://github.com/SND-LHC/sndsw/blob/master/shipgen/genie_config/SNDGHE19_00b/CommonDecay.xml + +GENIE no longer decays tau and charmed hadrons by default (this was the default +in our old branch: https://github.com/ShipSoft/GENIE/blob/v2.12.6-ship2021/config/UserPhysicsOptions.xml), +so we no longer need to override these settings. diff --git a/shipgen/genie_config/UnstableParticleDecayer.xml b/shipgen/genie_config/UnstableParticleDecayer.xml new file mode 100644 index 0000000000..08237bab1f --- /dev/null +++ b/shipgen/genie_config/UnstableParticleDecayer.xml @@ -0,0 +1,34 @@ + + + + + + + + 2 + genie::Pythia8Decayer2023/BeforeHadronTransport + genie::BaryonResonanceDecayer/BeforeHadronTransport + + + + 2 + genie::Pythia8Decayer2023/AfterHadronTransport + genie::BaryonResonanceDecayer/AfterHadronTransport + + + + 3 + genie::Pythia8Decayer2023/AfterHadronTransport + genie::BaryonResonanceDecayer/AfterHadronTransport + genie::DarkSectorDecayer/Default + + + +