85):
86 """Fragment for configuring a standalone (LHE-only) generation step.
87
88 This creates starts from MadGraphBaseCfg and creates a MGC instance
89 that is later used to call the MadGraphUtil functions that steer
90 the event generation.
91
92 All arguments after * are keyword-only to avoid confusion
93 between MadGraphControl settings and CA configuration options.
94
95 process_definition is required, the rest is optional.
96 """
97
98 from MadGraphControl.MGC import MGControl
100
101 if isinstance(pdf_setting, MadGraphPDFSets):
102 pdf_setting = get_pdf_set(pdf_setting)
103
104 ca, cfg = MadGraphBaseCfg(
105 flags,
106 safety=safety,
107 pdf_setting=pdf_setting,
108 devices=devices,
109 catch_errors=catch_errors,
110 lhe_version=lhe_version,
111 saveProcDir=saveProcDir,
112 keepJpegs=keepJpegs,
113 usePMGSettings=usePMGSettings,
114 )
115
116 run_card_settings = {} if settings is None else dict(settings)
117
118
119 run_card_settings["nevents"] = _get_nevents(flags, cfg["safety"])
120
121
122 mgc = MGControl(
123 process=process_definition,
124 plugin=plugin,
125 keepJpegs=cfg["keepJpegs"],
126 usePMGSettings=cfg["usePMGSettings"],
127 pdf_setting=cfg["pdf_setting"],
128 devices=cfg["devices"],
129 catch_errors=cfg["catch_errors"],
130 )
131
132
133
134
135
136 MadGraphUtils.my_MGC_instance = mgc
137
138
139 process_dir = mgc.process_dir
140 MadGraphUtils.modify_run_card(
141 process_dir=process_dir,
142 flags=flags,
143 settings=run_card_settings,
144 pdf_setting=cfg["pdf_setting"],
145 )
146
147
148 MadGraphUtils.generate(process_dir=process_dir, flags=flags, pdf_setting=cfg["pdf_setting"])
149 produced_output = MadGraphUtils.arrange_output(
150 process_dir=process_dir,
151 flags=flags,
152 lhe_version=cfg["lhe_version"],
153 saveProcDir=cfg["saveProcDir"],
154 pdf_setting=cfg["pdf_setting"],
155 )
156
157
158
159 requested_output = flags.Output.TXTFileName
160 if requested_output and not os.path.exists(requested_output):
161 if os.path.lexists(requested_output):
162 os.remove(requested_output)
163 candidates = []
164 if produced_output:
165 candidates.append(produced_output)
166 root, _ = os.path.splitext(requested_output)
167 candidates.extend([f"{root}.events", "events.events"])
168 for candidate in candidates:
169 if candidate and os.path.exists(candidate) and candidate != requested_output:
170 os.symlink(os.path.abspath(candidate), requested_output)
171 break
172
173 return ca