120def _handle_input_files(generators, flags):
121 """Helper for handling input files"""
122 from GeneratorConfig.GenConfigHelpers import gens_lhef
123 is_lhe_input = gens_lhef(generators)
124
125
126 events_file_map = {
127 "Alpgen": "alpgen.unw_events",
128 "Protos": "protos.events",
129 "ProtosLHEF": "protoslhef.events",
130 "BeamHaloGenerator": "beamhalogen.events",
131 "HepMCAscii": "events.hepmc",
132 "ReadMcAscii": "events.hepmc",
133 }
134 eventsFile = None
135 for gen_name, out_file in events_file_map.items():
136 if gen_name in generators:
137 eventsFile = out_file
138 break
139 if eventsFile is None:
140 if is_lhe_input:
141 eventsFile = "events.lhe"
142 else:
143 raise RuntimeError(f"Unknown type of ME generator: {generators}")
144
145 genInputFiles = [f.strip() for f in flags.Generator.inputGeneratorFile.split(",") if f.strip()]
146 if not genInputFiles:
147 raise RuntimeError("Generator.inputGeneratorFile is empty while input handling is requested")
148
149 def _input_root(path, keep_suffix_after_underscore=False):
150 fname = os.path.basename(path)
151 if any(ext in fname for ext in (".tar.", ".tgz", ".gz")):
152 return re.split(r"\.tar\.|\.tgz|\.gz", fname, maxsplit=1)[0]
153 parts = fname.split("._", 1)
154 if keep_suffix_after_underscore and len(parts) > 1:
155 return parts[0] +
"._" + parts[1].
split(
".", 1)[0]
156 return parts[0]
157
158
159 if len(genInputFiles) == 1:
160 inputroot = _input_root(genInputFiles[0], keep_suffix_after_underscore=False)
161 if inputroot.endswith(".events"):
162 inputroot = inputroot[:-7]
163 realEventsFile = _find_unique_file(f"*{inputroot}.*ev*ts")
164 _mk_symlink(realEventsFile, eventsFile)
165 if is_lhe_input:
166 return _count_lhe_events(eventsFile)
167 return None
168
169 allFiles = []
170 for file in genInputFiles:
171
172
173 inputroot = _input_root(file, keep_suffix_after_underscore=True)
174 evgenLog.info("inputroot = %s", inputroot)
175 realEventsFile = _find_unique_file(f"*{inputroot}.*ev*ts")
176
177 with open(realEventsFile, "r") as f:
178 first_line = f.readline()
179 if "LesHouche" not in first_line:
180 raise RuntimeError(f"{realEventsFile} is NOT a LesHouche file")
181 allFiles.append(realEventsFile)
182 _merge_lhe_files(allFiles, eventsFile)
183
184 return _count_lhe_events(eventsFile)
185
186
std::vector< std::string > split(const std::string &s, const std::string &t=":")