136):
137 """
138 Fragment for configuring a LHE generation step.
139
140 This starts from MadGraphBaseCfg and creates a MGC instance
141 that is later used to call the MadGraphUtils functions that steer
142 the event generation.
143
144 All arguments after * are keyword-only to avoid confusion
145 between MadGraphControl settings and CA configuration options.
146 Set prepare_lhe_for_shower=True when the same job should feed the
147 produced LHE file into a shower generator.
148
149 process_definition is required, the rest is optional.
150
151 If prepare_lhe_for_shower is True, the produced LHE file will be
152 symlinked to lhe_file (default: events.lhe)
153 for later use in the showering step.
154 """
155
156 from MadGraphControl.MGC import MGControl
158
159 if isinstance(pdf_setting, MadGraphPDFSets):
160 pdf_setting = get_pdf_set(pdf_setting)
161
162
163 ca, cfg = MadGraphBaseCfg(
164 flags,
165 safety=safety,
166 pdf_setting=pdf_setting,
167 devices=devices,
168 catch_errors=catch_errors,
169 lhe_version=lhe_version,
170 saveProcDir=saveProcDir,
171 keepJpegs=keepJpegs,
172 usePMGSettings=usePMGSettings,
173 )
174
175 run_card_settings = {} if settings is None else dict(settings)
176
177
178 run_card_settings["nevents"] = _get_nevents(flags, cfg["safety"])
179
180
181 mgc = MGControl(
182 process=process_definition,
183 plugin=plugin,
184 keepJpegs=cfg["keepJpegs"],
185 usePMGSettings=cfg["usePMGSettings"],
186 pdf_setting=cfg["pdf_setting"],
187 devices=cfg["devices"],
188 catch_errors=cfg["catch_errors"],
189 )
190
191
192
193
194
195 MadGraphUtils.my_MGC_instance = mgc
196
197
198 process_dir = mgc.process_dir
199 MadGraphUtils.modify_run_card(
200 process_dir=process_dir,
201 flags=flags,
202 settings=run_card_settings,
203 pdf_setting=cfg["pdf_setting"],
204 )
205
206
207 MadGraphUtils.generate(process_dir=process_dir, flags=flags, pdf_setting=cfg["pdf_setting"])
208 produced_output = MadGraphUtils.arrange_output(
209 process_dir=process_dir,
210 flags=flags,
211 lhe_version=cfg["lhe_version"],
212 saveProcDir=cfg["saveProcDir"],
213 pdf_setting=cfg["pdf_setting"],
214 )
215
216
217
218
219 if prepare_lhe_for_shower:
220 _prepare_lhe_for_shower(produced_output, lhe_file)
221
222
223
224
225 requested_output = flags.Output.TXTFileName
226 if requested_output and not os.path.exists(requested_output):
227 root, _ = os.path.splitext(requested_output)
228 candidates = [candidate for candidate in (produced_output, f"{root}.events", "events.events") if candidate]
229 _symlink_first_existing(requested_output, candidates, overwrite=True)
230
231 return ca