Run MadGraph5_aMC@NLO event generation for particle physics simulations via Magnus cloud. Triggers when the user wants to generate Monte Carlo events, simulate collider processes, or run MadGraph5. Supports Pythia8 parton shower and Delphes detector simulation.
This skill runs MadGraph5_aMC@NLO for Monte Carlo event generation using two Magnus blueprints executed in sequence:
madgraph-compile — imports the UFO model, defines processes, generates Feynman diagrams, computes matrix elements, and produces a compiled process directorymadgraph-launch — takes the compiled process directory and runs event generation with specified physics parameters, optional Pythia8 shower, and optional Delphes detector simulationBoth steps execute on the Magnus cloud (see magnus skill).
magnus run madgraph-compile -- \
--ufo path/to/MyModel_UFO \
--process "p p > t t~" \
--output path/to/pp_ttbar \
--definitions "l+ = e+ mu+
l- = e- mu-
vl = ve vm
vl~ = ve~ vm~"
Parameters:
| Parameter | Required | Description |
|---|---|---|
--ufo | No | Path to UFO model directory (for custom BSM models; mutually exclusive with --model) |
--model | No | MG5 built-in model name, e.g. sm, mssm (mutually exclusive with --ufo) |
--process | Yes | Process definition(s), one per line. First line becomes generate, rest become add process |
--output | Yes | Where to download the compiled process directory |
--definitions | No | Multiparticle definitions, one per line (without the define keyword) |
--definitions format: each line is label = particle1 particle2 .... Do NOT include the define keyword — the blueprint adds it automatically.
# CORRECT:
l+ = e+ mu+
# WRONG (will cause errors):
define l+ = e+ mu+
The UFO directory (if provided) is uploaded via FileSecret. When using --model, no file upload is needed — MG5 uses its built-in model. You must provide either --ufo or --model (defaults to sm if neither is given).
WARNING: If --output points to an existing directory, it will be deleted and replaced by the download.
Downloaded directory structure (example: --output tmp/pp_ttbar):
tmp/pp_ttbar/
├── Cards/
│ ├── param_card.dat
│ ├── run_card.dat
│ └── ...
├── SubProcesses/
├── Source/
├── bin/
└── ...
Result (magnus job result <job-id>):
success (bool)process_dir (str): path to compiled process directorymagnus run madgraph-launch -- \
--process path/to/pp_ttbar \
--commands "done
set nevents 1000
set ebeam1 7000
set ebeam2 7000
done" \
--output path/to/pp_ttbar
Parameters:
| Parameter | Required | Description |
|---|---|---|
--process | Yes | Path to compiled process directory (from Step 1) |
--commands | Yes | MG5 launch body — everything after launch <dir> (see state machine below) |
--output | Yes | Where to download the output directory (with Events/) |
--pdf | No | LHAPDF PDF set name to install before running (e.g. LUXlep-NNPDF31_nlo_as_0118_luxqed). Downloaded from CERN if not already present. |
The process directory is uploaded via FileSecret. On success, the full output directory (including Events/run_XX/) is downloaded to --output.
WARNING: If --output points to an existing directory (e.g. the same path used for compile), it will be deleted and replaced by the download. The downloaded directory includes the compiled process plus the generated events.
Downloaded directory structure (example: --output tmp/pp_ttbar):
tmp/pp_ttbar/
├── Cards/
├── Events/
│ └── run_01/
│ ├── unweighted_events.lhe.gz # always present
│ ├── run_01_tag_1_banner.txt
│ ├── tag_1_pythia8_events.hepmc.gz # if Pythia8
│ ├── tag_1_delphes_events.lhco.gz # if Delphes
│ └── tag_1_delphes_events.root # if Delphes
├── SubProcesses/
└── ...
Result (magnus job result <job-id>):
success (bool)output_dir (str): path to output directorycross_section (str): e.g. "0.1234 +- 0.005 pb"nevents (int)run_name (str): e.g. "run_01"param_card_warnings (list, if any): duplicate PDG entries in param_card.datThe --commands string is processed by MG5 as a sequential state machine. Understanding this is critical for correct event generation.
CRITICAL: --commands is ONLY the launch body. The madgraph-compile blueprint already handles import model, define, generate, add process, and output. NEVER include these commands in --commands — they will cause errors. The --commands string starts from the point after launch <dir> has been issued.
Lines before the first done:
shower=Pythia8 — enable Pythia8 parton showerdetector=Delphes — enable Delphes detector simulationdone — accept selections (or skip if none specified) and advanceLines between the first done and the second done:
CMS, ATLAS, or a full path)done — accept defaults and move to State 3When no shower or detector is selected, State 1's done skips directly to State 3 (parameter setting). State 2 does not appear.
Lines after the preceding done:
set nevents <N> — number of eventsset ebeam1 <GeV> / set ebeam2 <GeV> — beam energiesset param_card <BLOCK> <CODE> <VALUE> — model parametersset param_card MASS <PDG> <VALUE> — particle massesset param_card DECAY <PDG> <VALUE> — set decay width (in GeV)set param_card DECAY <PDG> Auto — auto-calculate decay width (requires UFO embedded in process dir)set use_syst False — disable systematics (avoids LHAPDF-related failures when Python LHAPDF is unavailable)set run_card pdlabel lhapdf — use LHAPDF PDF set (required when using --pdf)set run_card lhaid <ID> — LHAPDF set ID (e.g. 82400 for LUXlep-NNPDF31_nlo_as_0118_luxqed)set param_card MASS <PDG> scan:[v1,v2,v3,...] — mass scandone — start the rundone commands| Scenario | States visited | done count |
|---|---|---|
| No shower, no detector | 1 → 3 | 2 |
| Pythia8 and/or Delphes | 1 → 2 → 3 | 3 |
done before set commandsThe done that ends State 1 (or State 2) transitions into State 3. If you immediately write another done, MG5 starts the run without setting any parameters. Always place set commands before the final done:
done
set nevents 1000
set ebeam1 7000
set ebeam2 7000
done
NOT:
done
done
set nevents 1000 <-- TOO LATE, run already started
# Compile
magnus run madgraph-compile -- \
--ufo path/to/UFO \
--process "p p > t t~" \
--output tmp/pp_ttbar
# Launch
magnus run madgraph-launch -- \
--process tmp/pp_ttbar \
--commands "done
set nevents 1000
set ebeam1 7000
set ebeam2 7000
done" \
--output tmp/pp_ttbar
Output events: tmp/pp_ttbar/Events/run_01/unweighted_events.lhe.gz
magnus run madgraph-launch -- \
--process tmp/pp_ttbar \
--commands "shower=Pythia8
detector=Delphes
done
CMS
done
set nevents 1000
set ebeam1 7000
set ebeam2 7000
set param_card MASS 6 172.76
set param_card SMINPUTS 1 127.9
done" \
--output tmp/pp_ttbar
Output events:
Events/run_01/tag_1_pythia8_events.hepmc.gz (hadron-level)Events/run_01/tag_1_delphes_events.lhco.gz (reco-level)Events/run_01/tag_1_delphes_events.root (reco-level, ROOT)magnus run madgraph-compile -- \
--ufo path/to/ScalarModel_UFO \
--process "p p > t h0, t > b l+ vl, h0 > mu+ mu-
p p > t~ h0, t~ > b~ l- vl~, h0 > mu+ mu-" \
--output tmp/pp_tS \
--definitions "l+ = e+ mu+
l- = e- mu-
vl = ve vm
vl~ = ve~ vm~"
magnus run madgraph-launch -- \
--process tmp/pp_tS \
--commands "shower=Pythia8
detector=Delphes
done
CMS
done
set nevents 100
set ebeam1 7000
set ebeam2 7000
set param_card SMINPUTS 1 127.9
set param_card MASS 6 172.76
set param_card YQLU 2 3 0.001
set param_card MASS 50001 scan:[20,40,60,80,100,120,140,160]
set param_card DECAY 50001 Auto
done" \
--output tmp/pp_tS
# Compile (using SM model with lepton beams)
magnus run madgraph-compile -- \
--model sm \
--process "e+ u > e+ u" \
--output tmp/ep_u
# Launch with LUXlep PDF set
magnus run madgraph-launch -- \
--process tmp/ep_u \
--pdf LUXlep-NNPDF31_nlo_as_0118_luxqed \
--commands "done
set run_card pdlabel lhapdf
set run_card lhaid 82400
set nevents 1000
set ebeam1 7000
set ebeam2 7000
done" \
--output tmp/ep_u
The --pdf flag downloads the specified LHAPDF PDF set into the cloud container before MG5 runs. You must also set pdlabel and lhaid in --commands to tell MG5 to use it.
p p > t t~ # Simple
p p > t t~, t > b l+ vl, t~ > b~ l- vl~ # With decay chains
Use add process (second line onward in --process) for charge-conjugate states.
l+ = e+ mu+ ta+
l- = e- mu- ta-
vl = ve vm vt
vl~ = ve~ vm~ vt~
j = g u c d s u~ c~ d~ s~
set param_card MASS <pdg> <value> # Set mass
set param_card <BLOCK> <code> <value> # Set coupling
set param_card DECAY <pdg> <value> # Set width (GeV)
set param_card DECAY <pdg> Auto # Auto-calculate width
set param_card MASS <pdg> scan:[v1,v2,...] # Mass scan
Read the UFO model's particles.py and parameters.py to find the correct PDG codes and block/code values.
The launch blueprint checks param_card.dat for duplicate PDG entries in the MASS block and DECAY declarations. If found, the result includes param_card_warnings. This typically indicates duplicate external/dependent mass entries in the UFO model's parameters.py — fix the .fr model and regenerate UFO.