Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 9 additions & 22 deletions macro/makeGenieEvents.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

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

Expand All @@ -22,20 +21,19 @@
--xsec-file gxspl-FNALsmall.xml \
--flux-file pythia8_Geant4_1.0_withCharm_nu.root \
--event-generator-list CC \
--nudet

Notes
-----
- This tool *does not* modify your parent shell environment.
- `--nudet` sets `GXMLPATH` for the child process only (you can override path
with `--gxmlpath`).
- you can override path with `--gxmlpath`.

"""

from __future__ import annotations

import argparse
import logging
import os
from collections.abc import Mapping, Sequence
from pathlib import Path

Expand Down Expand Up @@ -101,11 +99,9 @@ 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)."""
val = str(gxmlpath) if gxmlpath else os.getenv("FAIRSHIP_ROOT") + "/shipgen/genie_config"
return {"GXMLPATH": val}


Expand Down Expand Up @@ -165,10 +161,7 @@ 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}"

Expand Down Expand Up @@ -259,8 +252,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",
Expand Down Expand Up @@ -315,7 +307,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()
Expand All @@ -328,12 +320,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),
Expand Down
31 changes: 31 additions & 0 deletions shipgen/genie_config/AGKY2019.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
Configuration for the AGKY2019 HadronizationModelI

Algorithm Configurable Parameters:
......................................................................................................
Name Type Opt Comment Default
......................................................................................................
KNO-Hadronizer alg No
PYTHIA-Hadronizer alg No
TransMethod int Yes 0: KNO only 2
1: PYTHIA only
2: linear transition from KNO->PYTHIA in
[Wmin,Wmax] invariant mass window
KNO2PYTHIA-Wmin double No relevant only for method=2 CommonParam[KNO2Pythia]
KNO2PYTHIA-Wmax double No relevant only for method=2 CommonParam[KNO2Pythia]
-->

<alg_conf>

<param_set name="Default">

<param type="string" name="CommonParam"> KNO2Pythia </param>

<param type="alg" name="KNO-Hadronizer"> genie::AGKYLowW2019/Default </param>
<param type="alg" name="PYTHIA-Hadronizer"> genie::Pythia8Hadro2019/Default </param>

</param_set>

</alg_conf>
187 changes: 187 additions & 0 deletions shipgen/genie_config/AGKYLowW2019.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
Configuration for the AGKYLowW2019 HadronizationModelI

Algorithm Configurable Parameters:
.......................................................................................................................
Name Type Opt Comment Default
.......................................................................................................................
KNO-Alpha-vp double No a for vp in <mult> = a + blnW^2 KNO-Alpha-vp
KNO-Alpha-vn double Yes a for vn KNO-Alpha-vn
KNO-Alpha-vbp double No a for vbp KNO-Alpha-vbp
KNO-Alpha-vbn double No a for vbn KNO-Alpha-vbn
KNO-Beta-vp double No b for vp KNO-Alpha-vp
KNO-Beta-vn double No b for vn KNO-Alpha-vn
KNO-Beta-vbp double No b for vbp KNO-Alpha-vbp
KNO-Beta-vbn double No b for vbn KNO-Alpha-vbn
KNO-EM-Alpha-vp double No a for vp in <mult> = a + blnW^2 KNO-EM-Alpha-vp
KNO-EM-Alpha-vn double Yes a for vn KNO-EM-Alpha-vn
KNO-EM-Alpha-vbp double No a for vbp KNO-EM-Alpha-vbp
KNO-EM-Alpha-vbn double No a for vbn KNO-EM-Alpha-vbn
KNO-EM-Beta-vp double No b for vp KNO-EM-Alpha-vp
KNO-EM-Beta-vn double No b for vn KNO-EM-Alpha-vn
KNO-EM-Beta-vbp double No b for vbp KNO-EM-Alpha-vbp
KNO-EM-Beta-vbn double No b for vbn KNO-EM-Alpha-vbn
KNO-Alpha-Hyperon double No a in Pstrange = a+blnW^2 KNO-Alpha-Hyperon
KNO-Beta-Hyperon double No b in Pstrange = a+blnW^2 KNO-Beta-Hyperon
KNO-LevyC-vp double No Levy function param c for vp KNO-LevyC-vp
KNO-LevyC-vn double No Levy function param c for vn KNO-LevyC-vn
KNO-LevyC-vbp double No Levy function param c for vbp KNO-LevyC-vbp
KNO-LevyC-vbn double No Levy function param c for vbn KNO-LevyC-vbn
KNO-EM-LevyC-vp double No Levy function param c for vp KNO-EM-LevyC-vp
KNO-EM-LevyC-vn double No Levy function param c for vn KNO-EM-LevyC-vn
KNO-EM-LevyC-vbp double No Levy function param c for vbp KNO-EM-LevyC-vbp
KNO-EM-LevyC-vbn double No Levy function param c for vbn KNO-EM-LevyC-vbn
ForceNeugenMultLimit bool Yes force neugen upper multiplicity limit (10) false
Wcut double No W cut in DIS/RES join scheme CommonParam[NonResBackground]
DIS-HMultWgt-vp-CC-m2 double No scaling factor, vp CC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vp-CC-m3 double No scaling factor, vp CC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vp-NC-m2 double No scaling factor, vp NC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vp-NC-m3 double No scaling factor, vp NC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vp-EM-m2 double No scaling factor, vp EM, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vp-EM-m3 double No scaling factor, vp EM, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vn-CC-m2 double No scaling factor, vn CC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vn-CC-m3 double No scaling factor, vn CC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vn-NC-m2 double No scaling factor, vn NC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vn-NC-m3 double No scaling factor, vn NC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vn-EM-m2 double No scaling factor, vn EM, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vn-EM-m3 double No scaling factor, vn EM, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-CC-m2 double No scaling factor, vbp CC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-CC-m3 double No scaling factor, vbp CC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-NC-m2 double No scaling factor, vbp NC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-NC-m3 double No scaling factor, vbp NC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-EM-m2 double No scaling factor, vbp EM, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbp-EM-m3 double No scaling factor, vbp EM, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-CC-m2 double No scaling factor, vbn CC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-CC-m3 double No scaling factor, vbn CC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-NC-m2 double No scaling factor, vbn NC, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-NC-m3 double No scaling factor, vbn NC, multiplicity=3 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-EM-m2 double No scaling factor, vbn EM, multiplicity=2 CommonParam[NonResBackground]
DIS-HMultWgt-vbn-EM-m3 double No scaling factor, vbn EM, multiplicity=3 CommonParam[NonResBackground]
KNO-ProbPi0Pi0 double No probability for pi0 pair KNO-ProbPi0Pi0
KNO-ProbPiplusPiminus double No probability for pi+pi- pair KNO-ProbPiplusPiminus
KNO-ProbKplusKminus double No probability for K+K- pair KNO-ProbKplusKminus
KNO-ProbK0K0bar double No probability for K0 K0bar pair KNO-ProbK0K0bar
KNO-ProbPi0Eta double No probability for Pi0 Eta pair KNO-ProbPi0Eta
KNO-ProbEtaEta double No Probability for Eta Eta pair KNO-ProbEtaEta
ForceDecays bool Yes force decays of unstable particles false
Decayer alg Dep decayer to be used if decayes are forced
ForceMinMultiplicity bool Yes force a minimum multiplicity of 2 true
GenerateWeighted bool Yes generate weighted events false
KNO-UseBaryonPdfs-xFpT2 bool Yes use a baryon pT^2, xF parameterization KNO-UseBaryonPdfs-xFpT2
KNO-UseIsotropic2BodyDec bool Yes use isotropic, non-reweighted 2-body decays KNO-UseIsotropic2BodyDec
for compatibility with neuugen/daikon
KNO-PhaseSpDec-Reweight bool Yes reweight decays to to reproduce exp pT2 KNO-PhaseSpDec-Reweight
KNO-PhaseSpDec-ReweightParm double Yes parameter controlling the reweight function KNO-PhaseSpDec-ReweightParm
-->

<alg_conf>
<param_set name="Default">

<param type="string" name="CommonParam"> NonResBackground </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Parameters controlling the average charged hadron multiplicities in the AGKY/KNO model
(paramerers a,b entering in the empirical expression: <n> = a + b * lnW^2 )
See Nucl.Instrum.Meth.A614:87-104,2010 and Eur.Phys.J.C63:1-10,2009.
-->
<param type="double" name="KNO-Alpha-vp"> 0.40 </param>
<param type="double" name="KNO-Alpha-vn"> -0.20 </param>
<param type="double" name="KNO-Alpha-vbp"> 0.02 </param>
<param type="double" name="KNO-Alpha-vbn"> 0.80 </param>
<param type="double" name="KNO-Beta-vp"> 1.42 </param>
<param type="double" name="KNO-Beta-vn"> 1.42 </param>
<param type="double" name="KNO-Beta-vbp"> 1.28 </param>
<param type="double" name="KNO-Beta-vbn"> 0.95 </param>

<param type="double" name="KNO-EM-Alpha-vp"> 0.40 </param>
<param type="double" name="KNO-EM-Alpha-vn"> -0.20 </param>
<param type="double" name="KNO-EM-Alpha-vbp"> 0.02 </param>
<param type="double" name="KNO-EM-Alpha-vbn"> 0.80 </param>
<param type="double" name="KNO-EM-Beta-vp"> 1.42 </param>
<param type="double" name="KNO-EM-Beta-vn"> 1.42 </param>
<param type="double" name="KNO-EM-Beta-vbp"> 1.28 </param>
<param type="double" name="KNO-EM-Beta-vbn"> 0.95 </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Parameters controlling the probability of producing a strange baryon via associated production.
(paramerers a,b entering in the empirical expression: P_{hyperon} = a + b * lnW^2 )
Determined from a fit to \Lambda production data.
See Nucl.Instrum.Meth.A614:87-104,2010 and Eur.Phys.J.C63:1-10,2009.
-->
<param type="double" name="KNO-Alpha-Hyperon"> 0.021951447 </param>
<param type="double" name="KNO-Beta-Hyperon"> 0.041969985 </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Levy function (KNO parameterization) parameter c at kno(z) = 2*exp(-c)*pow(c,cz+1)/Gamma(cz+1)
v+p : 7.93 +/- 0.34 source: Tingjun's fit
v+n : 5.22 +/- 0.15 source: Tingjun's fit
vbar+p : same as vn
vbar+n : same as vp
-->
<param type="double" name="KNO-LevyC-vp"> 7.93 </param>
<param type="double" name="KNO-LevyC-vn"> 5.22 </param>
<param type="double" name="KNO-LevyC-vbp"> 5.22 </param>
<param type="double" name="KNO-LevyC-vbn"> 7.93 </param>

<param type="double" name="KNO-EM-LevyC-vp"> 7.93 </param>
<param type="double" name="KNO-EM-LevyC-vn"> 5.22 </param>
<param type="double" name="KNO-EM-LevyC-vbp"> 5.22 </param>
<param type="double" name="KNO-EM-LevyC-vbn"> 7.93 </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AGKY/KNO hadronization model probabilities for producing hadron pairs.
See Nucl.Instrum.Meth.A614:87-104,2010 and Eur.Phys.J.C63:1-10,2009.
Values below are modified values following strange hadron production tuning (see gDocDB-890-v1).
Previous values were P(pi0 pi0) = 0.30, P(pi+ pi-) = 0.60, P(K+ K-) = 0.05, P(K0 \barK0) = 0.05.
-->
<param type="double" name="KNO-ProbPi0Pi0"> 0.3133 </param>
<param type="double" name="KNO-ProbPiplusPiminus"> 0.6267 </param>
<param type="double" name="KNO-ProbKplusKminus"> 0.03 </param>
<param type="double" name="KNO-ProbK0K0bar"> 0.03 </param>
<param type="double" name="KNO-ProbPi0Eta"> 0.0 </param>
<param type="double" name="KNO-ProbEtaEta"> 0.0 </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Parameters controlling whether to reweight the KNO phase space decay reweighting and the actual
reweighting function.
See: A.B.Clegg, A.Donnachie, A Description of Jet Structure by pT-limited Phase Space.
-->
<param type="bool" name="KNO-PhaseSpDec-Reweight"> true </param>
<param type="double" name="KNO-PhaseSpDec-ReweightParm"> 3.5 </param>

<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Parameters controlling whether to use the baryon xF and pT2 pdfs in the KNO hadronization.
The option to use isotropic, non-reweighted 2-body phase space decays is used for compatibility
with neugen/daikon.
-->
<param type="bool" name="KNO-UseBaryonPdfs-xFpT2"> true </param>
<param type="bool" name="KNO-UseIsotropic2BodyDec"> true </param>

</param_set>

<param_set name="Default-Decaying">
<param type="bool" name="ForceDecays"> true </param>
<param type="alg" name="Decayer"> genie::Pythia8Decayer2023/Default </param>
</param_set>

<param_set name="Old">
<param type="bool" name="KNO-UseBaryonPdfs-xFpT2"> false </param>
<param type="bool" name="KNO-PhaseSpDec-Reweight"> false </param>
</param_set>

<param_set name="Old-Decaying">
<param type="bool" name="ForceDecays"> true </param>
<param type="alg" name="Decayer"> genie::Pythia8Decayer2023/Default </param>
<param type="bool" name="KNO-UseBaryonPdfs-xFpT2"> false </param>
<param type="bool" name="KNO-PhaseSpDec-Reweight"> false </param>
</param_set>

</alg_conf>
Loading