4from GeneratorConfig.Sequences
import EvgenSequence, EvgenSequenceFactory
9from MadGraphControl.MadGraphPDFSettings
import MadGraphPDFSets, get_pdf_set
37 if (produced_output
and produced_output.endswith(
".gz")
38 and not produced_output.endswith((
".tar.gz",
".tgz"))):
39 compressed_lhe_file = (
40 lhe_file
if lhe_file.endswith(
".gz")
else f
"{lhe_file}.gz"
43 compressed_lhe_file, [produced_output], overwrite=
True):
46 "Could not prepare compressed LHE file for showering. "
47 f
"Expected: {produced_output}"
52 if produced_output.endswith(
".tar.gz"):
53 root = produced_output[:-7]
54 elif produced_output.endswith(
".tgz"):
55 root = produced_output[:-4]
57 root, _ = os.path.splitext(produced_output)
58 primary_output = f
"{root}.events"
62 candidates = [candidate
63 for candidate
in (primary_output,
64 "tmp_LHE_events.events",
71 "Could not prepare LHE file for showering. "
72 f
"Expected one of: {', '.join(candidates)}"
78 Helper function to symlink the first existing file in candidates to link_name.
80 if os.path.exists(link_name)
and not overwrite:
83 for candidate
in candidates:
84 if not candidate
or not os.path.exists(candidate):
86 if os.path.abspath(candidate) == os.path.abspath(link_name):
88 if os.path.lexists(link_name):
90 os.symlink(os.path.abspath(candidate), link_name)
97 """Base MadGraph CA fragment. It returns a CA object
98 that contains the generator metadata and registers
99 default values for steering the MGC object
100 (to be created by the top-level config)."""
101 from MadGraphControl.MGC
import (
102 MADGRAPH_CATCH_ERRORS,
111 "pdf_setting": MADGRAPH_PDFSETTING,
112 "devices": MADGRAPH_DEVICES,
113 "catch_errors": MADGRAPH_CATCH_ERRORS,
115 "saveProcDir":
False,
117 "usePMGSettings":
False,
122 cfg = {**defaults, **{k: v
for k, v
in kwargs.items()
if v
is not None}}
125 ca = ComponentAccumulator(EvgenSequenceFactory(EvgenSequence.Generator))
127 GeneratorInfoSvcCfg(flags, Generators=[
"MadGraph"]),
128 sequenceName=EvgenSequence.Generator.value,
139 run_card_settings=None,
140 param_card_settings=None,
149 prepare_lhe_for_shower=False,
150 lhe_file="events.lhe",
153 Fragment for configuring a LHE generation step.
155 This starts from MadGraphBaseCfg and creates a MGC instance
156 that is later used to call the MadGraphUtils functions that steer
157 the event generation.
159 All arguments after * are keyword-only to avoid confusion
160 between MadGraphControl settings and CA configuration options.
161 Set prepare_lhe_for_shower=True when the same job should feed the
162 produced LHE file into a shower generator.
164 process_definition is required, the rest is optional.
166 run_card_settings maps run_card.dat settings to their requested values.
167 param_card_settings maps param_card.dat settings to dictionaries of
168 parameter indices and values.
170 If prepare_lhe_for_shower is True, the produced LHE file will be
171 symlinked to lhe_file (default: events.lhe)
172 for later use in the showering step.
175 from MadGraphControl.MGC
import MGControl
178 if isinstance(pdf_setting, MadGraphPDFSets):
179 pdf_setting = get_pdf_set(pdf_setting)
185 pdf_setting=pdf_setting,
187 catch_errors=catch_errors,
188 lhe_version=lhe_version,
189 saveProcDir=saveProcDir,
191 usePMGSettings=usePMGSettings,
194 run_card_settings = {}
if run_card_settings
is None else dict(run_card_settings)
195 param_card_settings = {}
if param_card_settings
is None else dict(param_card_settings)
199 run_card_settings[
"nevents"] =
_get_nevents(flags, cfg[
"safety"])
203 process=process_definition,
205 keepJpegs=cfg[
"keepJpegs"],
206 usePMGSettings=cfg[
"usePMGSettings"],
207 pdf_setting=cfg[
"pdf_setting"],
208 devices=cfg[
"devices"],
209 catch_errors=cfg[
"catch_errors"],
216 MadGraphUtils.my_MGC_instance = mgc
219 process_dir = mgc.process_dir
222 mgc.runCardDict.update(run_card_settings)
225 mgc.paramCard.modify_paramCardDict(
226 params=param_card_settings
230 MadGraphUtils.generate(process_dir=process_dir, flags=flags, pdf_setting=cfg[
"pdf_setting"])
231 produced_output = MadGraphUtils.arrange_output(
232 process_dir=process_dir,
234 lhe_version=cfg[
"lhe_version"],
235 saveProcDir=cfg[
"saveProcDir"],
236 pdf_setting=cfg[
"pdf_setting"],
242 if prepare_lhe_for_shower:
248 requested_output = flags.Output.TXTFileName
249 if requested_output
and not os.path.exists(requested_output):
250 root, _ = os.path.splitext(requested_output)
251 candidates = [candidate
for candidate
in (produced_output, f
"{root}.events",
"events.events")
if candidate]
MadGraphCfg(flags, process_definition, *, safety=None, run_card_settings=None, param_card_settings=None, pdf_setting=None, devices=None, catch_errors=None, lhe_version=None, saveProcDir=None, plugin=None, keepJpegs=None, usePMGSettings=None, prepare_lhe_for_shower=False, lhe_file="events.lhe")