ATLAS Offline Software
Functions | Variables
python.algorithms.postprocessors.reweighter Namespace Reference

Functions

def default_weight_exists_already (powheg_LHE_output)
 Returns True if the LHE file contains a weight called "nominal". More...
 
def reweighter (process, weight_groups, powheg_LHE_output)
 Add a series of additional weights to an LHE file. More...
 
def add_single_weight (process, weight, idx_weight, n_total, use_XML)
 Add a single additional weight to an LHE file. More...
 
def rename_LHE_output (powheg_LHE_output)
 
def repair_comment_lines (lheFile, pattern)
 

Variables

 logger = Logging.logging.getLogger("PowhegControl")
 Get handle to Athena logging. More...
 
 WeightTuple = collections.namedtuple("WeightTuple", ["parameter_settings", "keywords", "ID", "name", "combine", "group", "parallel_xml_compatible"])
 Tuple to contain arbitrary grouped weights. More...
 

Function Documentation

◆ add_single_weight()

def python.algorithms.postprocessors.reweighter.add_single_weight (   process,
  weight,
  idx_weight,
  n_total,
  use_XML 
)

Add a single additional weight to an LHE file.

Parameters
processPowhegBox process.
weightTuple with details of the weight to be added.
idx_weightWhich number this weight is.
n_totalTotal number of weights being added.
use_XMLWhether to use XML or old-style reweighting.

Definition at line 222 of file postprocessors/reweighter.py.

222 def add_single_weight(process, weight, idx_weight, n_total, use_XML):
223  """! Add a single additional weight to an LHE file.
224 
225  @param process PowhegBox process.
226  @param weight Tuple with details of the weight to be added.
227  @param idx_weight Which number this weight is.
228  @param n_total Total number of weights being added.
229  @param use_XML Whether to use XML or old-style reweighting.
230  """
231  @timed("weight variation {}/{}".format(idx_weight, n_total))
232  def __timed_inner_fn():
233  logger.info("... weight name is: {}".format(weight.name))
234  logger.info("... weight index ID is: {}".format(weight.ID))
235  shutil.copy("powheg_nominal.input", "powheg.input")
236 
237  # Make appropriate runcard changes
238  if use_XML:
239  FileParser("powheg.input").text_replace("rwl_file .*", "rwl_file 'reweighting_input.xml'")
240  FileParser("powheg.input").text_replace("rwl_add .*", "rwl_add 1")
241  FileParser("powheg.input").text_replace("clobberlhe .*", "clobberlhe 1")
242  FileParser("powheg.input").text_replace("pdfreweight .*", "pdfreweight 0")
243  else:
244  # As the nominal process has already been run, turn on compute_rwgt
245  FileParser("powheg.input").text_replace("compute_rwgt 0", "compute_rwgt 1")
246  # Ensure that manyseeds/parallelstage are turned off, as these cause the reweighting to crash
247  FileParser("powheg.input").text_replace("manyseeds .*", "manyseeds 0")
248  FileParser("powheg.input").text_replace("parallelstage .*", "parallelstage -1")
249 
250  # Apply weight settings
251  for (parameter, value) in weight.parameter_settings:
252  try:
253  for keyword in weight.keywords[parameter]:
254  FileParser("powheg.input").text_replace("^{} .*".format(keyword), "{} {}".format(keyword, value))
255  logger.info("... setting {} to {}".format(parameter, value))
256  except KeyError:
257  logger.warning("Parameter '{}' not recognised. Cannot reweight!".format(parameter))
258 
259  if use_XML:
260  # Create XML reweighting file
261  with open("reweighting_input.xml", "w") as f_rwgt:
262  f_rwgt.write("<initrwgt>\n")
263  f_rwgt.write("<weightgroup name='{}' combine='{}'>\n".format(weight.group, weight.combine))
264  f_rwgt.write("<weight id='{}'> </weight>\n".format(weight.ID))
265  f_rwgt.write("</weightgroup>\n")
266  f_rwgt.write("</initrwgt>")
267  else:
268  # Change reweighting metadata in runcard
269  FileParser("powheg.input").text_replace("lhrwgt_descr .*", "lhrwgt_descr '{}'".format(weight.name))
270  FileParser("powheg.input").text_replace("lhrwgt_id .*", "lhrwgt_id '{}'".format(weight.ID))
271  FileParser("powheg.input").text_replace("lhrwgt_group_combine .*", "lhrwgt_group_combine '{}'".format(weight.combine))
272  FileParser("powheg.input").text_replace("lhrwgt_group_name .*", "lhrwgt_group_name '{}'".format(weight.group))
273 
274  # Run the process until termination
275  if list(process.parameters_by_name("manyseeds"))[0].value == 1:
276  if process.powheg_version == "RES":
277  multicore_untimed(process)
278  else:
279  FileParser("powheg.input").text_replace("manyseeds .*", "manyseeds 0")
280  FileParser("powheg.input").text_replace("parallelstage .*", "parallelstage -1")
281  singlecore_untimed(process)
282  else:
283  singlecore_untimed(process)
284 
285  # Run single weight variation
286  __timed_inner_fn()
287 
288 

◆ default_weight_exists_already()

def python.algorithms.postprocessors.reweighter.default_weight_exists_already (   powheg_LHE_output)

Returns True if the LHE file contains a weight called "nominal".

The weight must be present before the beginning of the first <event> block, otherwise the function returns False.

Parameters
powheg_LHE_outputName of LHE file produced by PowhegBox.

Definition at line 18 of file postprocessors/reweighter.py.

18 def default_weight_exists_already(powheg_LHE_output):
19  """! Returns True if the LHE file contains a weight called "nominal".
20 
21  The weight must be present before the beginning of the first <event> block,
22  otherwise the function returns False.
23 
24  @param powheg_LHE_output Name of LHE file produced by PowhegBox.
25  """
26  search_string = "<weight id='0' >default</weight>"
27  with open(powheg_LHE_output, 'r') as lhe_file:
28  for line in lhe_file:
29  if search_string in line:
30  return True
31  if '<event>' in line:
32  # Important to break the loop here with a return, otherwise the
33  # entire (often very large) file is scanned!
34  return False
35 
36 
37 @timed("reweighting")

◆ rename_LHE_output()

def python.algorithms.postprocessors.reweighter.rename_LHE_output (   powheg_LHE_output)

Definition at line 289 of file postprocessors/reweighter.py.

289 def rename_LHE_output(powheg_LHE_output):
290  reweighted_events_file_name = powheg_LHE_output.replace(".lhe", "-rwgt.lhe")
291  try:
292  shutil.move(reweighted_events_file_name, powheg_LHE_output)
293  except IOError:
294  raise IOError("Reweighted LHE file '{filename}' could not be found. Probably POWHEG-BOX crashed during reweighting.".format(filename=reweighted_events_file_name))
295 
296 

◆ repair_comment_lines()

def python.algorithms.postprocessors.reweighter.repair_comment_lines (   lheFile,
  pattern 
)

Definition at line 297 of file postprocessors/reweighter.py.

297 def repair_comment_lines(lheFile, pattern):
298  if pattern is None:
299  return
300  if not os.path.isfile("{}.before_reweighting".format(lheFile)):
301  logger.error("Impossible to find file {}.before_reweighting".format(lheFile))
302  raise IOError
303 
304  # create backup file
305  shutil.move(lheFile, "{}.text_replace_backup".format(lheFile))
306 
307  n_found = 0
308  n_events = 0
309  with open("{}.text_replace_backup".format(lheFile), "rb") as f_input:
310  line_in = f_input.readline()
311  while line_in:
312  if re.search("^"+pattern.lstrip(), line_in.decode().lstrip()):
313  n_found += 1
314  elif re.search("^</event>", line_in.decode().lstrip()):
315  n_events += 1
316  line_in = f_input.readline()
317 
318  n_found_noWeights = 0
319  n_events_noWeights = 0
320  with open("{}.before_reweighting".format(lheFile), "rb") as f_input:
321  line_in = f_input.readline()
322  while line_in:
323  if re.search("^"+pattern.lstrip(), line_in.decode().lstrip()):
324  n_found_noWeights += 1
325  elif re.search("^</event>", line_in.decode().lstrip()):
326  n_events_noWeights += 1
327  line_in = f_input.readline()
328 
329  # in case anything turns bad, will give up fixing
330  impossible_to_fix = False
331 
332  # initialise counters to 0
333  n_replaced = 0
334  n_added_back = 0
335  with open(lheFile, "w") as f_output:
336  # first strategy: loop over the file with weights, and replace the relevant lines from the files without weights
337  if n_found == n_found_noWeights:
338  # loop in parallel on the lhe file with weights that we want to fix, and on the lhe file without weights from which we'll take the correct comment lines
339  with open("{}.text_replace_backup".format(lheFile), "rb") as f_input, open("{}.before_reweighting".format(lheFile), "rb") as f_input_noWeights:
340  line_in = f_input.readline()
341  line_in_noWeights = f_input_noWeights.readline()
342  while line_in: # loop on the lines of the output file with weights
343  if re.search("^"+pattern.lstrip(), line_in.decode().lstrip()): # found pattern, this line may need to be replaced (ignoring leading whitespaces)
344  processed = False
345  while line_in_noWeights: # loop on the next lines in the other files
346  if re.search("^"+pattern, line_in_noWeights.decode().lstrip()): # found pattern, using this line as replacement (ignoring leading whitespaces)
347  if (line_in.decode().rstrip().lstrip() != line_in_noWeights.decode().rstrip().lstrip()):
348  f_output.write(line_in_noWeights.decode())
349  n_replaced += 1
350  else:
351  f_output.write(line_in.decode())
352  line_in_noWeights = f_input_noWeights.readline()
353  processed = True
354  break # end loop over the other file for the moment
355  else: # pattern not found in the other file, go to next line
356  line_in_noWeights = f_input_noWeights.readline() # keep trying
357  if processed: # if this line has been processed, no need to do the next line
358  line_in = f_input.readline() # next line in output file
359  else : # line hasn't been processed, it means the other file doesn't have enough appropriate lines
360  impossible_to_fix = True
361  break # end loop over patterns, giving up fixing
362  if impossible_to_fix: # it's pointless to continue
363  break
364  # no pattern not found, we keep the line as-is and go to the next
365  f_output.write(line_in.decode())
366  line_in = f_input.readline()
367 
368  # this is a cross-check - both file should have the same number of comment lines
369  while line_in_noWeights: # finish processing the other file - we shouldn't find any more lines with pattern
370  if re.search("^"+pattern, line_in_noWeights.decode()): # found pattern, something is wrong
371  impossible_to_fix = True
372  break
373  if impossible_to_fix: # it's pointless to continue
374  break
375  line_in_noWeights = f_input_noWeights.readline()
376  # alternative strategy: loop over file without weights, and add the comments from it just before the end of event
377  elif n_found == 0 and n_found_noWeights == n_events_noWeights and n_events == n_events_noWeights:
378  # loop in parallel on the lhe file with weights that we want to fix, and on the lhe file without weights from which we'll take the correct comment lines
379  with open("{}.text_replace_backup".format(lheFile), "rb") as f_input, open("{}.before_reweighting".format(lheFile), "rb") as f_input_noWeights:
380  line_in = f_input.readline()
381  line_in_noWeights = f_input_noWeights.readline()
382  while line_in_noWeights:
383  if re.search("^"+pattern, line_in_noWeights.decode().lstrip()):
384  while line_in:
385  if re.search("^</event>", line_in.decode().lstrip()):
386  f_output.write(line_in_noWeights.decode())
387  f_output.write(line_in.decode())
388  n_added_back += 1
389  line_in = f_input.readline()
390  break
391  else:
392  f_output.write(line_in.decode())
393  line_in = f_input.readline()
394  line_in_noWeights = f_input_noWeights.readline()
395  while line_in:
396  f_output.write(line_in.decode())
397  line_in = f_input.readline()
398 
399  # processing of files ended, now handling the outcome
400  if n_found == 0 and n_found_noWeights == 0: # no line found with this pattern in the file to be fixed
401  shutil.move("{}.text_replace_backup".format(lheFile), lheFile)
402  logger.info("No line with pattern '{}' was found in lhe file before or after reweighting, so need to fix it".format(pattern))
403  elif impossible_to_fix: # we couldn't fix it, so we get the backup copy back, and remove the problematic lines
404  shutil.move("{}.text_replace_backup".format(lheFile), lheFile)
405  logger.info("Impossible to fix the possibly buggy comment lines with pattern {} in {} using the corresponding lines from {}.before_reweighting".format(pattern, lheFile, lheFile))
406  logger.info("Keeping those lines as they are in '{}".format(lheFile))
407  else:
408  os.remove("{}.text_replace_backup".format(lheFile))
409  if n_replaced != 0:
410  logger.info("{} line(s) starting with '{}' replaced in {} using the corresponding line(s) from {}.before_reweighting".format(n_replaced, pattern, lheFile, lheFile))
411  elif n_found != 0 and n_replaced == 0:
412  logger.info("No line starting with '{}' was replaced in {} ({} were found) since none seems buggy".format(pattern, lheFile, n_found))
413  elif n_added_back !=0:
414  logger.info("{} line(s) starting with '{}' added back in {} using the corresponding line(s) from {}.before_reweighting".format(n_added_back, pattern, lheFile, lheFile))

◆ reweighter()

def python.algorithms.postprocessors.reweighter.reweighter (   process,
  weight_groups,
  powheg_LHE_output 
)

Add a series of additional weights to an LHE file.

Parameters
processPowhegBox process.
weight_groupsOrderedDict containing groups of weights to add.
powheg_LHE_outputName of LHE file produced by PowhegBox.

Definition at line 38 of file postprocessors/reweighter.py.

38 def reweighter(process, weight_groups, powheg_LHE_output):
39  """! Add a series of additional weights to an LHE file.
40 
41  @param process PowhegBox process.
42  @param weight_groups OrderedDict containing groups of weights to add.
43  @param powheg_LHE_output Name of LHE file produced by PowhegBox.
44  """
45  logger.info("Starting to run PowhegControl PDF and QCD scale reweighter")
46 
47  weight_list = []
48 
49 
50  non_weight_attributes = ["parameter_names", "combination_method", "keywords"]
51 
52 
53  xml_kwds = {"renscfact": "renscfact", "facscfact": "facscfact", "lhans1": "lhapdf", "lhans2": "lhapdf"}
54 
55  # Initial values for scale, PDF and other weight groups
56  _idx_scale_start, _idx_PDF_start, _idx_other_start = 1001, 2001, 3001
57 
58  if not process.use_XML_reweighting:
59  logger.warning("... XML-style reweighting is not enabled for this process. Will use old (multiple-pass) method.")
60 
61  # Construct ordered list of weights
62  for group_name, weight_group in weight_groups.items():
63  logger.info("Preparing weight group: {:<19} with {} weights".format(group_name, len(weight_group) - len(non_weight_attributes)))
64 
65  # Name -> keyword dictionary is different if this is an XML reweighting
66  is_parallel_xml_compatible = process.use_XML_reweighting and all([k in xml_kwds.keys() for _kw_set in weight_group["keywords"] for k in _kw_set])
67  if is_parallel_xml_compatible:
68  _keywords = [list(set([xml_kwds[k] for k in _kw_set])) for _kw_set in weight_group["keywords"]]
69  else:
70  if process.use_XML_reweighting:
71  logger.warning("... this weight group is incompatible with XML-style reweighting. Will use old (multiple-pass) method.")
72  _keywords = weight_group["keywords"]
73  keyword_dict = dict((n, k) for n, k in zip(weight_group["parameter_names"], _keywords))
74 
75  # Common arguments for all weights
76  tuple_kwargs = {"keywords": keyword_dict, "combine": weight_group["combination_method"], "group": group_name, "parallel_xml_compatible": is_parallel_xml_compatible}
77 
78  # Nominal variation: ID=0
79  if group_name == "nominal" and not default_weight_exists_already(powheg_LHE_output):
80  weight_list.append(WeightTuple(parameter_settings=weight_group["nominal"], ID=0, name="nominal", **tuple_kwargs))
81 
82  # Scale variations: ID=1001+
83  elif group_name == "scale_variation":
84  for idx, name in enumerate([k for k in weight_group.keys() if k not in non_weight_attributes], start=_idx_scale_start):
85  weight_list.append(WeightTuple(parameter_settings=weight_group[name], ID=idx, name=name, **tuple_kwargs))
86  _idx_scale_start = idx + 1
87 
88  # PDF variations: ID=2001+
89  elif group_name == "PDF_variation":
90  for idx, name in enumerate([k for k in weight_group.keys() if k not in non_weight_attributes], start=_idx_PDF_start):
91  weight_list.append(WeightTuple(parameter_settings=weight_group[name], ID=idx, name=name, **tuple_kwargs))
92  _idx_PDF_start = idx + 1
93 
94  # Other variations: ID=3001+
95  else:
96  for idx, name in enumerate([k for k in weight_group.keys() if k not in non_weight_attributes], start=_idx_other_start):
97  weight_list.append(WeightTuple(parameter_settings=weight_group[name], ID=idx, name=name, **tuple_kwargs))
98  _idx_other_start = idx + 1
99 
100  # Make backup of generation statistics
101  if os.path.isfile("pwgcounters.dat"):
102  shutil.copy("pwgcounters.dat", "pwgcounters.dat.bak")
103 
104  # ... the Powheg input card
105  try:
106  shutil.copy("powheg.input", "powheg.input.before_reweighting")
107  except IOError:
108  raise IOError("Powheg input card ('powheg.input') cannot be found at the start of reweighting. In a normal setup, PowhegControl generates this input card. Its absence is probably a sign of problems --- please investigate or contact the PowhegControl experts.")
109 
110  # ... and also backup unweighted events
111  try:
112  shutil.copy(powheg_LHE_output, "{}.before_reweighting".format(powheg_LHE_output))
113  except IOError:
114  raise IOError("Nominal LHE file could not be found. Probably POWHEG-BOX crashed during event generation.")
115 
116  # Do XML-reweighting
117  if process.use_XML_reweighting:
118  # Add nominal weight if not already present
119  if not default_weight_exists_already(powheg_LHE_output) and not any([weight.group == "nominal" for weight in weight_list]):
120  weight_list = [WeightTuple(ID=0, name="nominal", group="nominal", parallel_xml_compatible=True, parameter_settings=[], keywords=None, combine=None)] + weight_list
121 
122  FileParser("powheg.input").text_replace("pdfreweight .*", "pdfreweight 0")
123  # Construct xml output
124  xml_lines, serial_xml_weight_list, current_weightgroup = [], [], None
125  for weight in weight_list:
126  # Group elements
127  if weight.parallel_xml_compatible and weight.group != current_weightgroup:
128  xml_lines.append("</weightgroup>")
129  current_weightgroup = weight.group
130  xml_lines.append("<weightgroup name='{}' combine='{}'>".format(weight.group, weight.combine))
131  # Weight elements
132  if weight.parallel_xml_compatible:
133  keyword_pairs_str = " ".join(["{}={}".format(k, v) for p, v in weight.parameter_settings for k in weight.keywords[p]])
134  xml_lines.append("<weight id='{}'> {} </weight>".format(weight.ID, keyword_pairs_str))
135  else:
136  serial_xml_weight_list.append(weight)
137  xml_lines.append(xml_lines.pop(0)) # move the closing tag to the end
138  n_parallel_xml_weights = len(weight_list) - len(serial_xml_weight_list)
139 
140  # First iterate over the simultaneous XML weights
141  if n_parallel_xml_weights > 0:
142  # Write xml output
143  with open("reweighting_input.xml", "w") as f_rwgt:
144  f_rwgt.write("<initrwgt>\n")
145  [f_rwgt.write("{}\n".format(xml_line)) for xml_line in xml_lines]
146  f_rwgt.write("</initrwgt>")
147 
148  # Add reweighting lines to runcard
149  # TODO: add check that the file contains these keywords, otherwise raise an error about
150  # what is probably a faulty process interface!
151  FileParser("powheg.input").text_replace("rwl_file .*", "rwl_file 'reweighting_input.xml'")
152  FileParser("powheg.input").text_replace("rwl_add .*", "rwl_add 1")
153  FileParser("powheg.input").text_replace("clobberlhe .*", "clobberlhe 1")
154 
155  logger.info("Preparing simultaneous calculation of {} additional weights for generated events.".format(n_parallel_xml_weights))
156 
157  # Allow RES processes to do their reweighting with manyseeds enabled, or they will look for the wrong files
158  if list(process.parameters_by_name("manyseeds"))[0].value == 1:
159  if process.powheg_version == "RES":
160  os.system('cp reweighting_input.xml backup_of_reweighting_input.xml')
161  os.system('cp powheg.input powheg.input.for_reweighting')
162  multicore_untimed(process)
163  else:
164  FileParser("powheg.input").text_replace("manyseeds .*", "manyseeds 0")
165  FileParser("powheg.input").text_replace("parallelstage .*", "parallelstage -1")
166  os.system('cp reweighting_input.xml backup_of_reweighting_input.xml')
167  os.system('cp powheg.input powheg.input.for_reweighting')
168  singlecore_untimed(process)
169  else:
170  os.system('cp reweighting_input.xml backup_of_reweighting_input.xml')
171  os.system('cp powheg.input powheg.input.for_reweighting')
172  singlecore_untimed(process)
173 
174  # Move the reweighted file back
175  rename_LHE_output(powheg_LHE_output)
176 
177  # Iterate over any variations which require non-simultaneous reweighting
178  if len(serial_xml_weight_list) > 0:
179  logger.info("Preparing individual calculation of {} additional weights for generated events.".format(len(serial_xml_weight_list)))
180  shutil.move("reweighting_input.xml", "reweighting_input.nominal")
181  for idx_weight, weight in enumerate(serial_xml_weight_list, start=1):
182  add_single_weight(process, weight, idx_weight, len(serial_xml_weight_list), use_XML=True)
183  rename_LHE_output(powheg_LHE_output)
184  shutil.move("reweighting_input.nominal", "reweighting_input.xml")
185 
186  # Do non-XML-reweighting
187  else:
188  # Iterate over any variations which require old-style reweighting
189  logger.info("Preparing individual calculation of {} additional weights for generated events.".format(len(weight_list)))
190  for idx_weight, weight in enumerate(weight_list, start=1):
191  add_single_weight(process, weight, idx_weight, len(weight_list), use_XML=False)
192  rename_LHE_output(powheg_LHE_output)
193 
194  if process.use_XML_reweighting:
195  comment_patterns = ["#pdf", "#rwgt", "#new weight", "#matching", " #Random" ]
196  if process.remove_oldStyle_rwt_comments:
197 
198  logger.info("Removing comment lines from lhe file - these lines can be added back using the 'remove_oldStyle_rwt_comments=False' argument in generate()")
199  # Remove comment lines, which may cause a crash in Pythia
200  for pattern in comment_patterns:
201  removed = FileParser(powheg_LHE_output).text_remove("^"+pattern)
202  logger.info("{} line(s) starting with '{}' were removed from {}".format(removed, pattern, powheg_LHE_output))
203  else:
204  logger.info("Fixing comment lines from lhe file - these lines can be simply removed using the 'remove_oldStyle_rwt_comments=True' argument in generate()")
205  for pattern in comment_patterns: # no whitespace needed in patterns here
206  repair_comment_lines(powheg_LHE_output, pattern) # the last pattern starts with a space
207 
208  replacelist = []
209  # Rename all weights
210  for weight in weight_list:
211  replacelist += [[".* id='{}' .*".format(weight.ID), "<weight id='{weight_id}'>{weight_name}</weight>".format(weight_id=weight.ID, weight_name=weight.name), 1]]
212 
213  # Correct LHE version identification; otherwise Pythia will treat all files as v1
214  replacelist += [['LesHouchesEvents version="1.0"', 'LesHouchesEvents version="3.0"', 1]]
215  FileParser(powheg_LHE_output).text_replace_multi(replacelist)
216 
217  # Restore generation statistics and initial runcard
218  shutil.move("powheg_nominal.input", "powheg.input")
219  if os.path.isfile("pwgcounters.dat.bak"):
220  shutil.move("pwgcounters.dat.bak", "pwgcounters.dat")
221 

Variable Documentation

◆ logger

python.algorithms.postprocessors.reweighter.logger = Logging.logging.getLogger("PowhegControl")

Get handle to Athena logging.

Definition at line 13 of file postprocessors/reweighter.py.

◆ WeightTuple

python.algorithms.postprocessors.reweighter.WeightTuple = collections.namedtuple("WeightTuple", ["parameter_settings", "keywords", "ID", "name", "combine", "group", "parallel_xml_compatible"])

Tuple to contain arbitrary grouped weights.

Definition at line 16 of file postprocessors/reweighter.py.

python.decorators.timed.timed
def timed(name)
Decorator to output function execution time.
Definition: timed.py:12
python.algorithms.postprocessors.reweighter.repair_comment_lines
def repair_comment_lines(lheFile, pattern)
Definition: postprocessors/reweighter.py:297
vtune_athena.format
format
Definition: vtune_athena.py:14
python.algorithms.postprocessors.reweighter.add_single_weight
def add_single_weight(process, weight, idx_weight, n_total, use_XML)
Add a single additional weight to an LHE file.
Definition: postprocessors/reweighter.py:222
python.algorithms.generators.multicore.multicore_untimed
def multicore_untimed(process)
Run multiple Powheg processes, each in its own thread.
Definition: multicore.py:139
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
python.algorithms.postprocessors.reweighter.WeightTuple
WeightTuple
Tuple to contain arbitrary grouped weights.
Definition: postprocessors/reweighter.py:16
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.algorithms.postprocessors.reweighter.rename_LHE_output
def rename_LHE_output(powheg_LHE_output)
Definition: postprocessors/reweighter.py:289
python.algorithms.postprocessors.reweighter.reweighter
def reweighter(process, weight_groups, powheg_LHE_output)
Add a series of additional weights to an LHE file.
Definition: postprocessors/reweighter.py:38
Trk::open
@ open
Definition: BinningType.h:40
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:64
python.algorithms.postprocessors.reweighter.default_weight_exists_already
def default_weight_exists_already(powheg_LHE_output)
Returns True if the LHE file contains a weight called "nominal".
Definition: postprocessors/reweighter.py:18
python.algorithms.generators.singlecore.singlecore_untimed
def singlecore_untimed(process)
Run a single Powheg process in its own thread.
Definition: singlecore.py:19