Skip to content

Flesh out Gen/ee: WHIZARD mumuH card + Pythia8 (k4Gen) shower step - #2

Open
kjvbrt wants to merge 6 commits into
HEP-FCC:mainfrom
kjvbrt:feature/gen-ee
Open

Flesh out Gen/ee: WHIZARD mumuH card + Pythia8 (k4Gen) shower step#2
kjvbrt wants to merge 6 commits into
HEP-FCC:mainfrom
kjvbrt:feature/gen-ee

Conversation

@kjvbrt

@kjvbrt kjvbrt commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adapts the FCC-config golden card (wzp6_ee_mumuH_Hbb_ecm240.sin, winter2023) for e+e- -> mu mu H, keeping its physics but splitting out an explicit WHIZARD (LHE) -> Pythia8 (k4Gen Gaudi, H -> b b) two-step chain for students, instead of the golden card's internal legacy-PYTHIA6 shower.
  • Adds runnable mumuH.sin, mumuH_Hbb.cmd, pythia_mumuH.py alongside Gen/ee/README.md.
  • Fixes ISR/FSR double-counting and vertex-smearing double-application against WHIZARD's own settings.
  • Documents remaining open items (Higgs mass/width, fragmentation tune, Bose-Einstein correlations, long-lived particle stability) not yet ported from the golden card, in a new "Open TODOs" section.

Test plan

  • Run whizard mumuH.sin and confirm mumuH.lhe is produced
  • Run k4run pythia_mumuH.py and confirm mumuH_Hbb.root is produced with a sane MCParticles collection
  • Resolve the Open TODOs (Higgs mass/width, fragmentation tune, Bose-Einstein correlations, long-lived particle stability) before this leaves draft

kjvbrt added 5 commits August 19, 2026 14:28
Adapts the FCC-config golden card (winter2023 branch) for e+e- -> mu mu H,
stripping its internal legacy-PYTHIA6 shower/decay to keep the two-step
WHIZARD (LHE) -> Pythia8 (k4Gen Gaudi, H -> b b) chain explicit for
students, and adds the runnable mumuH.sin, mumuH_Hbb.cmd, and
pythia_mumuH.py files alongside the README.
mumuH_Hbb.cmd now bases its Beams:/PartonLevel settings on FCC-config's
actual LHE-reading card (p8_ee_default.cmd) instead of an unrelated
production card, turning off Pythia8's own ISR/FSR since WHIZARD already
applies it. Vertex/time smearing moves to the Gaudi GaussSmearVertex tool
in pythia_mumuH.py to avoid double-smearing against Pythia8's own
Beams:allowVertexSpread. Also documents the golden card's PYTHIA6 settings
(Higgs mass/width, fragmentation tune, Bose-Einstein correlations,
long-lived particle stability) that still need porting, as open TODOs.
Ran WHIZARD + Pythia8 (k4Gen) against the real Key4hep stack: WHIZARD
step works and gives a cross section matching the known
sigma(ee->ZH)*BR(Z->mumu) value, but the Pythia8 step crashes inside
Pythia8's own resonanceShowers/iBotCopyId machinery when decaying and
showering the bare Higgs resonance from the LHE file. Documents the
crash, backtrace, and ruled-out fixes as a blocking Open TODO.

Also recommends VSCodium over VSCode in the top-level README, and adds
Open TODOs for background-sample generation, a jupytext-based Jupyter
export, and a custom TextMate grammar for WHIZARD/Pythia8 syntax
highlighting.
The Step 2 (Pythia8) crash was caused by WHIZARD's ?keep_beams = true,
which FCC-config's own (unheeded) maintainer comment on a sibling card
already warns about. Fixed by no longer setting ?keep_beams at all in
mumuH.sin, relying on its default (false). Verified with a standalone,
zero-Gaudi Pythia8 reproducer and a full 1000-event k4run pipeline run.

Also corrects PartonLevel:FSR in mumuH_Hbb.cmd: it must stay on (Pythia8
default) since it's what showers the H -> b b decay products before
hadronization, not just a source of double-counted radiation as
previously assumed - verified by dumping the Pythia8 event record with
it on and off. PartonLevel:ISR stays off, confirmed correct the same
way. Also removes explicit defaults (?keep_beams, ?keep_remnants) from
mumuH.sin and documents mH, ISR/FSR, and the ISR-photon-visibility
caveat in Gen/ee/README.md.
A small fraction of events (~1 in a few thousand) hit an unrecoverable
Pythia8-level failure that retrying doesn't fix. Without raising Gaudi's
default per-algorithm ErrorMax = 1, a single such event aborts the entire
run - only shows up at scale (a 1000-event test never hits it), confirmed
by generating and processing 10,000 events. ErrorMax = 20 lets a handful
be skipped instead, verified with a clean 10,000/10,000-event run.
@kjvbrt
kjvbrt marked this pull request as ready for review August 21, 2026 11:45
For each PYTHIA6 setting the golden card had enabled, checked whether
Pythia8's own default already covers it rather than porting the tuned
numeric values (risky - the two codes don't always define equivalent-
sounding parameters identically). Most items needed no change: Bowler
fragmentation for b/c quarks is already Pythia8's default, and Higgs
mass/width already closely match. Bose-Einstein correlations were
checked and deliberately left off - they don't affect the mu mu recoil
mass and only marginally affect the H -> b b dijet mass, not worth the
added complexity here. The long-lived-particle setting went through a
wrong attempt (mapped to a proper-lifetime cutoff) before checking the
actual PYTHIA 6.4 manual, which shows MSTJ(22)=4 is a geometric
decay-vertex-position cutoff instead - Pythia8's default already
matches its practical outcome, confirmed on real generated events
(K_S0/Lambda decay behavior), so no setting is needed there either.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant