ATLAS Offline Software
Loading...
Searching...
No Matches
scheduler.py
Go to the documentation of this file.
1# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2
3from .. import Logging
4from functools import partial
5from . import generators
6from . import postprocessors
7from . import preprocessors
8
9
10
11logger = Logging.logging.getLogger("PowhegControl")
12
13
14class Scheduler(object):
15 """! Schedule algorithms in appropriate order.
16
17 @author James Robinson <james.robinson@cern.ch>
18 """
19
20
21 powheg_LHE_output = "pwgevents.lhe"
22
23
24 ordered_preprocessors = ["directory cleaner", "reweighter"]
25
26
27 ordered_event_generators = ["singlecore", "multicore", "merge output", "output validation"]
28
29
30 ordered_postprocessors = [
31 "quark colour fixer",
32 "PHOTOS",
33 "reweighter", "NNLO reweighter",
34 "LHE ubexcess_correct weight updater",
35 "LHE file nominal weight updater",
36 "mu2tau",
37 "mu2e",
38 "e2tau",
39 "e2mu",
40 "gg4l_emu2all",
41 "gg4l_munue2all",
42 "MadSpin",
43 "integration grid tester",
44 "cross section calculator",
45 "LHE file cleaner",
46 "output file renamer",
47 "output tarball preparer",
48 "integration gridpack creator",
49 "directory cleaner",
50 ]
51
52
53 preprocessor_fn_dict = {
54 "directory cleaner": preprocessors.directory_cleaner,
55 "reweighter": preprocessors.reweighter
56 }
57
58
59 generator_fn_dict = {
60 "merge output": partial(generators.merge_output, powheg_LHE_output=powheg_LHE_output),
61 "multicore": generators.multicore,
62 "output validator": partial(generators.output_validator, powheg_LHE_output=powheg_LHE_output),
63 "singlecore": generators.singlecore
64 }
65
66
67 postprocessor_fn_dict = {
68 "cross section calculator": partial(postprocessors.cross_section_calculator, powheg_LHE_output=powheg_LHE_output),
69 "directory cleaner": postprocessors.directory_cleaner,
70 "integration gridpack creator": postprocessors.integration_gridpack_creator,
71 "integration grid tester": postprocessors.integration_grid_tester,
72 "MadSpin": partial(postprocessors.MadSpin, powheg_LHE_output=powheg_LHE_output),
73 "NNLO reweighter": partial(postprocessors.NNLO_reweighter, powheg_LHE_output=powheg_LHE_output),
74 "output file renamer": partial(postprocessors.output_file_renamer, powheg_LHE_output=powheg_LHE_output),
75 "output tarball preparer": postprocessors.output_tarball_preparer,
76 "PHOTOS": partial(postprocessors.PHOTOS, powheg_LHE_output=powheg_LHE_output),
77 "reweighter": partial(postprocessors.reweighter, powheg_LHE_output=powheg_LHE_output),
78 "quark colour fixer": partial(postprocessors.quark_colour_fixer, powheg_LHE_output=powheg_LHE_output),
79 "mu2tau": partial(postprocessors.mu2tau, powheg_LHE_output=powheg_LHE_output),
80 "mu2e": partial(postprocessors.mu2e, powheg_LHE_output=powheg_LHE_output),
81 "e2tau": partial(postprocessors.e2tau, powheg_LHE_output=powheg_LHE_output),
82 "e2mu": partial(postprocessors.e2mu, powheg_LHE_output=powheg_LHE_output),
83 "gg4l_emu2all": partial(postprocessors.gg4l_emu2all, powheg_LHE_output=powheg_LHE_output),
84 "gg4l_munue2all": partial(postprocessors.gg4l_munue2all, powheg_LHE_output=powheg_LHE_output),
85 "LHE file cleaner": partial(postprocessors.lhe_cleaner, powheg_LHE_output=powheg_LHE_output),
86 "LHE file nominal weight updater": partial(postprocessors.lhe_nominal_weight_updater, powheg_LHE_output=powheg_LHE_output),
87 "LHE ubexcess_correct weight updater": partial(postprocessors.lhe_ubexcess_correct_reweighter, powheg_LHE_output=powheg_LHE_output),
88 }
89
90 def __init__(self):
91 """! Constructor."""
92
93 self.sequence = {"preprocessors": {}, "generators": {}, "postprocessors": {}}
94
95 # Add universal components
96 self.add("output validator")
97 self.add("integration grid tester")
98 self.add("LHE file cleaner")
99
100 def add(self, name, *args):
101 """! Add a component to the sequence.
102
103 @param name name of component to add.
104 @param args arguments to pass to this component when it runs.
105 """
106 if name in self.ordered_preprocessors:
107 if name not in self.sequence["preprocessors"].keys():
108 self.sequence["preprocessors"][name] = args
109
110 if name in self.ordered_event_generators:
111 if name not in self.sequence["generators"].keys():
112 self.sequence["generators"][name] = args
113
114 if name in self.ordered_postprocessors:
115 if name not in self.sequence["postprocessors"].keys():
116 self.sequence["postprocessors"][name] = args
117
119 """! Print the sequence to the logger."""
120 logger.info("Scheduling the following PowhegControl sequence:")
121 logger.info("|---+ Preprocessing:")
122 for name in sorted(self.sequence["preprocessors"].keys(), key=lambda x: self.ordered_preprocessors.index(x)):
123 logger.info(" |--- {}".format(name))
124 logger.info("|---+ Event generation:")
125 for name in sorted(self.sequence["generators"].keys(), key=lambda x: self.ordered_event_generators.index(x)):
126 logger.info(" |--- {}".format(name))
127 logger.info("|---+ Postprocessing:")
128 for name in sorted(self.sequence["postprocessors"].keys(), key=lambda x: self.ordered_postprocessors.index(x)):
129 logger.info(" |--- {}".format(name))
130
132 """! Run all preprocessors in order."""
133 for name in filter(lambda x: x in self.sequence["preprocessors"].keys(), self.ordered_preprocessors):
134 self.preprocessor_fn_dict[name](*self.sequence["preprocessors"][name])
135
136 def run_generators(self):
137 """! Run all event generators in order."""
138 for name in filter(lambda x: x in self.sequence["generators"].keys(), self.ordered_event_generators):
139 self.generator_fn_dict[name](*self.sequence["generators"][name])
140
142 """! Run all postprocessors in order."""
143 for name in filter(lambda x: x in self.sequence["postprocessors"].keys(), self.ordered_postprocessors):
144 self.postprocessor_fn_dict[name](*self.sequence["postprocessors"][name])
Schedule algorithms in appropriate order.
Definition scheduler.py:14
print_structure(self)
Print the sequence to the logger.
Definition scheduler.py:118
dict postprocessor_fn_dict
Map postprocessing names to functions.
Definition scheduler.py:67
dict sequence
Sequence of functions to run.
Definition scheduler.py:93
run_generators(self)
Run all event generators in order.
Definition scheduler.py:136
run_preprocessors(self)
Run all preprocessors in order.
Definition scheduler.py:131
add(self, name, *args)
Add a component to the sequence.
Definition scheduler.py:100
dict preprocessor_fn_dict
Map preprocessing names to functions.
Definition scheduler.py:53
dict generator_fn_dict
Map event generation names to functions.
Definition scheduler.py:59
run_postprocessors(self)
Run all postprocessors in order.
Definition scheduler.py:141
list ordered_event_generators
Event generation evaluation order.
Definition scheduler.py:27
list ordered_postprocessors
Postprocessing evaluation order.
Definition scheduler.py:30
list ordered_preprocessors
Preprocessing evaluation order.
Definition scheduler.py:24
Definition index.py:1