143def _handle_input_files(generators, flags):
144 """Helper for handling input files"""
145 from GeneratorConfig.GenConfigHelpers import gens_lhef
146 is_lhe_input = gens_lhef(generators)
147
148
149 events_file_map = {
150 "Alpgen": "alpgen.unw_events",
151 "Protos": "protos.events",
152 "ProtosLHEF": "protoslhef.events",
153 "BeamHaloGenerator": "beamhalogen.events",
154 "HepMCAscii": "events.hepmc",
155 "ReadMcAscii": "events.hepmc",
156 }
157 eventsFile = None
158 for gen_name, out_file in events_file_map.items():
159 if gen_name in generators:
160 eventsFile = out_file
161 break
162 if eventsFile is None:
163 if is_lhe_input:
164 eventsFile = "events.lhe.gz" if flags.Generator.avoidExtracting else "events.lhe"
165 else:
166 raise RuntimeError(f"Unknown type of ME generator: {generators}")
167
168 genInputFiles = [f.strip() for f in flags.Generator.inputGeneratorFile.split(",") if f.strip()]
169 if not genInputFiles:
170 raise RuntimeError("Generator.inputGeneratorFile is empty while input handling is requested")
171
172 def _input_root(path, keep_suffix_after_underscore=False):
173 fname = os.path.basename(path)
174 if any(ext in fname for ext in (".tar.", ".tgz", ".gz")):
175 fname = re.split(r"\.tar\.|\.tgz|\.gz", fname, maxsplit=1)[0]
176 if fname.endswith(".events"):
177 fname = fname[:-7]
178 parts = fname.split("._", 1)
179 if keep_suffix_after_underscore and len(parts) > 1:
180 return parts[0] +
"._" + parts[1].
split(
".", 1)[0]
181 return parts[0]
182
183
184 if len(genInputFiles) == 1:
185 inputroot = _input_root(genInputFiles[0], keep_suffix_after_underscore=False)
186 realEventsFile = _find_unique_file(f"*{inputroot}.*ev*ts")
187 if is_lhe_input:
188
189 _prepare_lhe_file(realEventsFile, eventsFile)
190 return _count_lhe_events(eventsFile)
191 _mk_symlink(realEventsFile, eventsFile)
192 return None
193
194 allFiles = []
195 for file in genInputFiles:
196
197
198 inputroot = _input_root(file, keep_suffix_after_underscore=True)
199 evgenLog.info("inputroot = %s", inputroot)
200 realEventsFile = _find_unique_file(f"*{inputroot}.*ev*ts")
201
202 with open(realEventsFile, "r") as f:
203 first_line = f.readline()
204 if "LesHouches" not in first_line:
205 raise RuntimeError(f"{realEventsFile} is NOT a LesHouches file")
206 allFiles.append(realEventsFile)
207 _merge_lhe_files(allFiles, eventsFile)
208
209 return _count_lhe_events(eventsFile)
210
211
std::vector< std::string > split(const std::string &s, const std::string &t=":")