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