ATLAS Offline Software
Loading...
Searching...
No Matches
VV_pol.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaCommon import Logging
4from ..powheg_RES import PowhegRES
5
6
7logger = Logging.logging.getLogger("PowhegControl")
8
9
11 """! Default Powheg configuration for W-boson pair production plus one jet using MiNNLOPS.
12
13 Create a configurable object with all applicable Powheg options.
14
15 @author Aonan Wang <aonan.wang@cern.ch>
16 """
17
18 def __init__(self, base_directory, **kwargs):
19 """! Constructor: all process options are set here.
20
21 @param base_directory: path to PowhegBox code.
22 @param kwargs dictionary of arguments from Generate_tf.
23 """
24 super(VV_pol, self).__init__(base_directory, "VV_pol", **kwargs)
25
26 # Add parameter validation functions
27 self.validation_functions.append("validate_process")
28 self.validation_functions.append("validate_polarization")
29
30 # Add flag for the MiNNLO reweight
32
33
34 self.allowed_VVprocess = ["w+ w- > e+ ve mu- vm~",
35 "w+ w- > mu+ vm e- ve~",
36 "w+ w- > tau+ vt e- ve~",
37 "w+ w- > e+ ve tau- vt~",
38 "w+ w- > tau+ vt mu- vm~",
39 "w+ w- > mu+ vm tau- vt~",
40 "w+ w- > e+ ve e- ve~",
41 "w+ w- > mu+ vm mu- vm~",
42 "w+ w- > tau+ vt tau- vt~",
43 "w+ z > e+ ve mu+ mu-",
44 "w+ z > e+ ve tau+ tau-",
45 "w+ z > mu+ vm e+ e-",
46 "w+ z > mu+ vm tau+ tau-",
47 "w+ z > tau+ vt e+ e-",
48 "w+ z > tau+ vt mu+ mu-",
49 "w- z > e- ve~ mu+ mu-",
50 "w- z > e- ve~ tau+ tau-",
51 "w- z > mu- vm~ e+ e-",
52 "w- z > mu- vm~ tau+ tau-",
53 "w- z > tau- vt~ e+ e-",
54 "w- z > tau- vt~ mu+ mu-",
55 "z z > e+ e- mu+ mu-",
56 "z z > e+ e- tau+ tau-",
57 "z z > mu+ mu- e+ e-",
58 "z z > mu+ mu- tau+ tau-",
59 "z z > tau+ tau- e+ e-",
60 "z z > tau+ tau- mu+ mu-",
61 ]
62 self.allowed_polarization = ["unpol-unpol",
63 "unpol-transv",
64 "transv-unpol",
65 "unpol-longit",
66 "longit-unpol",
67 "longit-longit",
68 "transv-transv",
69 "longit-transv",
70 "transv-longit",
71 "unpol-left",
72 "left-unpol",
73 "longit-left",
74 "left-longit",
75 "transv-left",
76 "left-transv",
77 "unpol-right",
78 "right-unpol",
79 "longit-right",
80 "right-longit",
81 "transv-right",
82 "right-transv",
83 "right-left",
84 "left-right",
85 "left-left",
86 "right-right",
87 ]
88 # Add all keywords for this process, overriding defaults if required
89 self.add_keyword("ih1")
90 self.add_keyword("ih2")
91 self.add_keyword("lhans1", self.default_PDFs)
92 self.add_keyword("lhans2", self.default_PDFs)
93 self.add_keyword("renscfact", self.default_scales[1])
94 self.add_keyword("facscfact", self.default_scales[0])
95 self.add_keyword("procVV")
96 self.add_keyword("idvecbos")
97 self.add_keyword("decayV1", "w+ w- > e+ ve mu- vm~", name="VVprocess", hidden=False)
98 self.add_keyword("decayV2")
99 self.add_keyword("dpa", 1)
100 self.add_keyword("pol1", 4, name="polarization")
101 self.add_keyword("pol2", 4)
102 self.add_keyword("NP_POWER")
103 self.add_keyword("SUM_AMP")
104 self.add_keyword("CHBD6")
105 self.add_keyword("CHWD6")
106 self.add_keyword("CHWBD6")
107 self.add_keyword("CWD6")
108 self.add_keyword("CHBtilD6")
109 self.add_keyword("CHWtilD6")
110 self.add_keyword("CHWBtilD6")
111 self.add_keyword("CWtilD6")
112 self.add_keyword("CWWWL2")
113 self.add_keyword("CWL2")
114 self.add_keyword("CBL2")
115 self.add_keyword("CPWWWL2")
116 self.add_keyword("CPWL2")
117 self.add_keyword("whichphsp", 2)
118 self.add_keyword("qcdonly", 0)
119 self.add_keyword("qedonly", 0)
120 self.add_keyword("numberofquarks", 4)
121 self.add_keyword("alphas_from_pdf", 1)
122 self.add_keyword("scheme", 1)
123 self.add_keyword("runningscale", 0)
124 self.add_keyword("improvedrclrunning")
125 self.add_keyword("useOSmass-mu")
126 self.add_keyword("mllcut")
127 self.add_keyword("mllmax", "1d10")
128 self.add_keyword("ewsimplecuts")
129 self.add_keyword("ncall1", 1000000)
130 self.add_keyword("itmx1", 1)
131 self.add_keyword("fakevirt", 0)
132 self.add_keyword("ncall2", 1000000)
133 self.add_keyword("itmx2", 1)
134 self.add_keyword("foldcsi", 1)
135 self.add_keyword("foldy", 1)
136 self.add_keyword("foldphi", 1)
137 self.add_keyword("use-old-grid")
138 self.add_keyword("testplots")
139 self.add_keyword("nubound", 500000)
140 self.add_keyword("xupbound", 2)
141 self.add_keyword("use-old-ubound")
142 self.add_keyword("icsimax", 1)
143 self.add_keyword("iymax", 1)
144 self.add_keyword("ubexcess_correct")
145 self.add_keyword("storeinfo_rwgt")
146 self.add_keyword("rwl_group_events", 1)
147 self.add_keyword("rwl_file")
148 self.add_keyword("rwl_add")
149 self.add_keyword("rwl_format_rwgt")
150 self.add_keyword("Zmass")
151 self.add_keyword("Zwidth")
152 self.add_keyword("Wmass")
153 self.add_keyword("Wwidth")
154 self.add_keyword("Tmass")
155 self.add_keyword("Twidth")
156 self.add_keyword("Hmass")
157 self.add_keyword("Hwidth")
158 self.add_keyword("Mumass", 0)
159 self.add_keyword("Elmass", 0)
160 self.add_keyword("Taumass", 0)
161 self.add_keyword("gmu")
162 self.add_keyword("CKM_Vud",1)
163 self.add_keyword("CKM_Vus",0)
164 self.add_keyword("CKM_Vub",0)
165 self.add_keyword("CKM_Vcd",0)
166 self.add_keyword("CKM_Vcs",1)
167 self.add_keyword("CKM_Vcb",0)
168 self.add_keyword("CKM_Vtd",0)
169 self.add_keyword("CKM_Vts",0)
170 self.add_keyword("CKM_Vtb",1)
171 self.add_keyword("nondiagCKM")
172 self.add_keyword("bornzerodamp")
173 self.add_keyword("bornsuppfact")
174 self.add_keyword("bornsuppfact-pt")
175 self.add_keyword("bornonly")
176 self.add_keyword("allrad")
177 self.add_keyword("check_bad_st1")
178 self.add_keyword("check_bad_st2")
179 self.add_keyword("manyseeds")
180 self.add_keyword("parallelstage")
181 self.add_keyword("maxseeds")
182 self.add_keyword("xgriditeration")
183
185 """! Validate the various process keywords."""
186 self.expose() # convenience call to simplify syntax
188 # Enable appropriate decay mode
189 list(self.parameters_by_keyword("decayV1"))[0].value = 1 # adjust the one used as a proxy for process
190
191 if "w+ w-" in self.VVprocess:
192 list(self.parameters_by_keyword("procVV"))[0].value = 1
193 if "e+ ve mu- vm~" in self.VVprocess:
194 list(self.parameters_by_keyword("decayV1"))[0].value = 1
195 list(self.parameters_by_keyword("decayV2"))[0].value = 2
196 elif "mu+ vm e- ve~" in self.VVprocess:
197 list(self.parameters_by_keyword("decayV1"))[0].value = 2
198 list(self.parameters_by_keyword("decayV2"))[0].value = 1
199 elif "tau+ vt e- ve~" in self.VVprocess:
200 list(self.parameters_by_keyword("decayV1"))[0].value = 3
201 list(self.parameters_by_keyword("decayV2"))[0].value = 1
202 elif "e+ ve tau- vt~" in self.VVprocess:
203 list(self.parameters_by_keyword("decayV1"))[0].value = 1
204 list(self.parameters_by_keyword("decayV2"))[0].value = 3
205 elif "tau+ vt mu- vm~" in self.VVprocess:
206 list(self.parameters_by_keyword("decayV1"))[0].value = 3
207 list(self.parameters_by_keyword("decayV2"))[0].value = 2
208 elif "mu+ vm tau- vt~" in self.VVprocess:
209 list(self.parameters_by_keyword("decayV1"))[0].value = 2
210 list(self.parameters_by_keyword("decayV2"))[0].value = 3
211 elif "e+ ve e- ve~" in self.VVprocess:
212 list(self.parameters_by_keyword("decayV1"))[0].value = 1
213 list(self.parameters_by_keyword("decayV2"))[0].value = 1
214 elif "mu+ vm mu- vm~" in self.VVprocess:
215 list(self.parameters_by_keyword("decayV1"))[0].value = 2
216 list(self.parameters_by_keyword("decayV2"))[0].value = 2
217 elif "tau+ vt tau- vt~" in self.VVprocess:
218 list(self.parameters_by_keyword("decayV1"))[0].value = 3
219 list(self.parameters_by_keyword("decayV2"))[0].value = 3
220
221 elif "z z" in self.VVprocess:
222 list(self.parameters_by_keyword("procVV"))[0].value = 2
223 list(self.parameters_by_keyword("numberofquarks"))[0].value = 5
224 if "e+ ve mu+ mu-" in self.VVprocess:
225 list(self.parameters_by_keyword("decayV1"))[0].value = 1
226 list(self.parameters_by_keyword("decayV2"))[0].value = 2
227 elif "e+ e- tau+ tau-" in self.VVprocess:
228 list(self.parameters_by_keyword("decayV1"))[0].value = 1
229 list(self.parameters_by_keyword("decayV2"))[0].value = 3
230 elif "mu+ mu- e+ e-" in self.VVprocess:
231 list(self.parameters_by_keyword("decayV1"))[0].value = 2
232 list(self.parameters_by_keyword("decayV2"))[0].value = 1
233 elif "mu+ mu- tau+ tau-" in self.VVprocess:
234 list(self.parameters_by_keyword("decayV1"))[0].value = 2
235 list(self.parameters_by_keyword("decayV2"))[0].value = 3
236 elif "tau+ tau- e+ e-" in self.VVprocess:
237 list(self.parameters_by_keyword("decayV1"))[0].value = 3
238 list(self.parameters_by_keyword("decayV2"))[0].value = 1
239 elif "tau+ tau- mu+ mu-" in self.VVprocess:
240 list(self.parameters_by_keyword("decayV1"))[0].value = 3
241 list(self.parameters_by_keyword("decayV2"))[0].value = 2
242
243 elif "w+ z" in self.VVprocess:
244 list(self.parameters_by_keyword("idvecbos"))[0].value = 24
245 list(self.parameters_by_keyword("procVV"))[0].value = 3
246 if "e+ ve mu+ mu-" in self.VVprocess:
247 list(self.parameters_by_keyword("decayV1"))[0].value = 1
248 list(self.parameters_by_keyword("decayV2"))[0].value = 2
249 elif "e+ ve tau+ tau-" in self.VVprocess:
250 list(self.parameters_by_keyword("decayV1"))[0].value = 1
251 list(self.parameters_by_keyword("decayV2"))[0].value = 3
252 elif "mu+ vm e+ e-" in self.VVprocess:
253 list(self.parameters_by_keyword("decayV1"))[0].value = 2
254 list(self.parameters_by_keyword("decayV2"))[0].value = 1
255 elif "mu+ vm tau+ tau-" in self.VVprocess:
256 list(self.parameters_by_keyword("decayV1"))[0].value = 2
257 list(self.parameters_by_keyword("decayV2"))[0].value = 3
258 elif "tau+ vt e+ e-" in self.VVprocess:
259 list(self.parameters_by_keyword("decayV1"))[0].value = 3
260 list(self.parameters_by_keyword("decayV2"))[0].value = 1
261 elif "tau+ vt mu+ mu-" in self.VVprocess:
262 list(self.parameters_by_keyword("decayV1"))[0].value = 3
263 list(self.parameters_by_keyword("decayV2"))[0].value = 2
264
265 elif "w- z" in self.VVprocess:
266 list(self.parameters_by_keyword("idvecbos"))[0].value = -24
267 list(self.parameters_by_keyword("procVV"))[0].value = 3
268 if "e- ve~ mu+ mu-" in self.VVprocess:
269 list(self.parameters_by_keyword("decayV1"))[0].value = 1
270 list(self.parameters_by_keyword("decayV2"))[0].value = 2
271 elif "e- ve~ tau+ tau-" in self.VVprocess:
272 list(self.parameters_by_keyword("decayV1"))[0].value = 1
273 list(self.parameters_by_keyword("decayV2"))[0].value = 3
274 elif "mu- vm~ e+ e-" in self.VVprocess:
275 list(self.parameters_by_keyword("decayV1"))[0].value = 2
276 list(self.parameters_by_keyword("decayV2"))[0].value = 1
277 elif "mu- vm~ tau+ tau-" in self.VVprocess:
278 list(self.parameters_by_keyword("decayV1"))[0].value = 2
279 list(self.parameters_by_keyword("decayV2"))[0].value = 3
280 elif "tau- vt~ e+ e-" in self.VVprocess:
281 list(self.parameters_by_keyword("decayV1"))[0].value = 3
282 list(self.parameters_by_keyword("decayV2"))[0].value = 1
283 elif "tau- vt~ mu+ mu-" in self.VVprocess:
284 list(self.parameters_by_keyword("decayV1"))[0].value = 3
285 list(self.parameters_by_keyword("decayV2"))[0].value = 2
286
288 """! Validate the various polarization keywords."""
289 self.expose() # convenience call to simplify syntax
291 # Enable appropriate decay mode
292 list(self.parameters_by_keyword("pol1"))[0].value = 4 # adjust the one used as a proxy for polarization
293 list(self.parameters_by_keyword("pol2"))[0].value = 4
294
295 if "unpol-unpol" not in self.polarization:
296 list(self.parameters_by_keyword("dpa"))[0].value = 1
297 list(self.parameters_by_keyword("qcdonly"))[0].value = 1
298 if "transv-" in self.polarization:
299 list(self.parameters_by_keyword("pol1"))[0].value = 3
300 elif "longit-" in self.polarization:
301 list(self.parameters_by_keyword("pol1"))[0].value = 0
302 elif "left-" in self.polarization:
303 list(self.parameters_by_keyword("pol1"))[0].value = -1
304 elif "right-" in self.polarization:
305 list(self.parameters_by_keyword("pol1"))[0].value = 1
306 if "-transv" in self.polarization:
307 list(self.parameters_by_keyword("pol2"))[0].value = 3
308 elif "-longit" in self.polarization:
309 list(self.parameters_by_keyword("pol2"))[0].value = 0
310 elif "-left" in self.polarization:
311 list(self.parameters_by_keyword("pol2"))[0].value = -1
312 elif "-right" in self.polarization:
313 list(self.parameters_by_keyword("pol2"))[0].value = 1
314
add_keyword(self, keyword, value=None, name=None, frozen=None, hidden=None, description=None, **kwargs)
Register configurable parameter that is exposed to the user.
expose(self)
Add all names to the interface of this object.
parameters_by_keyword(self, keyword)
Retrieve all parameters that use a given keyword.
Default Powheg configuration for W-boson pair production plus one jet using MiNNLOPS.
Definition VV_pol.py:10
validate_polarization(self)
Validate the various polarization keywords.
Definition VV_pol.py:287
list allowed_VVprocess
List of allowed decay modes.
Definition VV_pol.py:34
__init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition VV_pol.py:18
validate_process(self)
Validate the various process keywords.
Definition VV_pol.py:184
Base class for PowhegBox RES processes.
Definition powheg_RES.py:7
list validation_functions
List of validation functions to run before preparing runcard.
check_decay_mode(self, decay_mode, allowed_decay_modes=None)
Check whether a decay mode is allowed an raise an exception if it is not.
default_scales(self)
Default scale variations for this process.