ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
PowhegControl
python
processes
powheg
VV_pol.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3
import
os
4
from
...
import
Logging
5
from
..powheg_RES
import
PowhegRES
6
7
8
logger = Logging.logging.getLogger(
"PowhegControl"
)
9
10
11
class
VV_pol
(
PowhegRES
):
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
34
self.
reweight_for_MiNNLO
=
True
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
(
"whichphsp"
, 2)
106
self.
add_keyword
(
"qcdonly"
, 0)
107
self.
add_keyword
(
"qedonly"
, 0)
108
self.
add_keyword
(
"numberofquarks"
, 4)
109
self.
add_keyword
(
"alphas_from_pdf"
, 1)
110
self.
add_keyword
(
"scheme"
, 1)
111
self.
add_keyword
(
"runningscale"
, 0)
112
self.
add_keyword
(
"improvedrclrunning"
)
113
self.
add_keyword
(
"useOSmass-mu"
)
114
self.
add_keyword
(
"mllcut"
)
115
self.
add_keyword
(
"mllmax"
,
"1d10"
)
116
self.
add_keyword
(
"ewsimplecuts"
)
117
self.
add_keyword
(
"ncall1"
, 1000000)
118
self.
add_keyword
(
"itmx1"
, 1)
119
self.
add_keyword
(
"fakevirt"
, 0)
120
self.
add_keyword
(
"ncall2"
, 1000000)
121
self.
add_keyword
(
"itmx2"
, 1)
122
self.
add_keyword
(
"foldcsi"
, 1)
123
self.
add_keyword
(
"foldy"
, 1)
124
self.
add_keyword
(
"foldphi"
, 1)
125
self.
add_keyword
(
"use-old-grid"
)
126
self.
add_keyword
(
"testplots"
)
127
self.
add_keyword
(
"nubound"
, 500000)
128
self.
add_keyword
(
"xupbound"
, 2)
129
self.
add_keyword
(
"use-old-ubound"
)
130
self.
add_keyword
(
"icsimax"
, 1)
131
self.
add_keyword
(
"iymax"
, 1)
132
self.
add_keyword
(
"ubexcess_correct"
)
133
self.
add_keyword
(
"storeinfo_rwgt"
)
134
self.
add_keyword
(
"rwl_group_events"
, 1)
135
self.
add_keyword
(
"rwl_file"
)
136
self.
add_keyword
(
"rwl_add"
)
137
self.
add_keyword
(
"rwl_format_rwgt"
)
138
self.
add_keyword
(
"Zmass"
)
139
self.
add_keyword
(
"Zwidth"
)
140
self.
add_keyword
(
"Wmass"
)
141
self.
add_keyword
(
"Wwidth"
)
142
self.
add_keyword
(
"Tmass"
)
143
self.
add_keyword
(
"Twidth"
)
144
self.
add_keyword
(
"Hmass"
)
145
self.
add_keyword
(
"Hwidth"
)
146
self.
add_keyword
(
"Mumass"
, 0)
147
self.
add_keyword
(
"Elmass"
, 0)
148
self.
add_keyword
(
"Taumass"
, 0)
149
self.
add_keyword
(
"gmu"
)
150
self.
add_keyword
(
"CKM_Vud"
,1)
151
self.
add_keyword
(
"CKM_Vus"
,0)
152
self.
add_keyword
(
"CKM_Vub"
,0)
153
self.
add_keyword
(
"CKM_Vcd"
,0)
154
self.
add_keyword
(
"CKM_Vcs"
,1)
155
self.
add_keyword
(
"CKM_Vcb"
,0)
156
self.
add_keyword
(
"CKM_Vtd"
,0)
157
self.
add_keyword
(
"CKM_Vts"
,0)
158
self.
add_keyword
(
"CKM_Vtb"
,1)
159
self.
add_keyword
(
"nondiagCKM"
)
160
self.
add_keyword
(
"bornzerodamp"
)
161
self.
add_keyword
(
"bornsuppfact"
)
162
self.
add_keyword
(
"bornsuppfact-pt"
)
163
self.
add_keyword
(
"bornonly"
)
164
self.
add_keyword
(
"allrad"
)
165
self.
add_keyword
(
"check_bad_st1"
)
166
self.
add_keyword
(
"check_bad_st2"
)
167
self.
add_keyword
(
"manyseeds"
)
168
self.
add_keyword
(
"parallelstage"
)
169
self.
add_keyword
(
"maxseeds"
)
170
self.
add_keyword
(
"xgriditeration"
)
171
172
def
validate_process
(self):
173
"""! Validate the various process keywords."""
174
self.
expose
()
# convenience call to simplify syntax
175
self.
check_decay_mode
(self.
VVprocess
, self.
allowed_VVprocess
)
176
# Enable appropriate decay mode
177
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
# adjust the one used as a proxy for process
178
179
if
"w+ w-"
in
self.
VVprocess
:
180
list(self.
parameters_by_keyword
(
"procVV"
))[0].value = 1
181
if
"e+ ve mu- vm~"
in
self.
VVprocess
:
182
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
183
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
184
elif
"mu+ vm e- ve~"
in
self.
VVprocess
:
185
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
186
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
187
elif
"tau+ vt e- ve~"
in
self.
VVprocess
:
188
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
189
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
190
elif
"e+ ve tau- vt~"
in
self.
VVprocess
:
191
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
192
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
193
elif
"tau+ vt mu- vm~"
in
self.
VVprocess
:
194
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
195
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
196
elif
"mu+ vm tau- vt~"
in
self.
VVprocess
:
197
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
198
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
199
elif
"e+ ve e- ve~"
in
self.
VVprocess
:
200
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
201
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
202
elif
"mu+ vm mu- vm~"
in
self.
VVprocess
:
203
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
204
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
205
elif
"tau+ vt tau- vt~"
in
self.
VVprocess
:
206
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
207
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
208
209
elif
"z z"
in
self.
VVprocess
:
210
list(self.
parameters_by_keyword
(
"procVV"
))[0].value = 2
211
list(self.
parameters_by_keyword
(
"numberofquarks"
))[0].value = 5
212
if
"e+ ve mu+ mu-"
in
self.
VVprocess
:
213
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
214
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
215
elif
"e+ e- tau+ tau-"
in
self.
VVprocess
:
216
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
217
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
218
elif
"mu+ mu- e+ e-"
in
self.
VVprocess
:
219
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
220
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
221
elif
"mu+ mu- tau+ tau-"
in
self.
VVprocess
:
222
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
223
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
224
elif
"tau+ tau- e+ e-"
in
self.
VVprocess
:
225
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
226
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
227
elif
"tau+ tau- mu+ mu-"
in
self.
VVprocess
:
228
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
229
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
230
231
elif
"w+ z"
in
self.
VVprocess
:
232
list(self.
parameters_by_keyword
(
"idvecbos"
))[0].value = 24
233
list(self.
parameters_by_keyword
(
"procVV"
))[0].value = 3
234
if
"e+ ve mu+ mu-"
in
self.
VVprocess
:
235
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
236
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
237
elif
"e+ ve tau+ tau-"
in
self.
VVprocess
:
238
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
239
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
240
elif
"mu+ vm e+ e-"
in
self.
VVprocess
:
241
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
242
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
243
elif
"mu+ vm tau+ tau-"
in
self.
VVprocess
:
244
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
245
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
246
elif
"tau+ vt e+ e-"
in
self.
VVprocess
:
247
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
248
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
249
elif
"tau+ vt mu+ mu-"
in
self.
VVprocess
:
250
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
251
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
252
253
elif
"w- z"
in
self.
VVprocess
:
254
list(self.
parameters_by_keyword
(
"idvecbos"
))[0].value = -24
255
list(self.
parameters_by_keyword
(
"procVV"
))[0].value = 3
256
if
"e- ve~ mu+ mu-"
in
self.
VVprocess
:
257
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
258
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
259
elif
"e- ve~ tau+ tau-"
in
self.
VVprocess
:
260
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 1
261
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
262
elif
"mu- vm~ e+ e-"
in
self.
VVprocess
:
263
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
264
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
265
elif
"mu- vm~ tau+ tau-"
in
self.
VVprocess
:
266
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 2
267
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 3
268
elif
"tau- vt~ e+ e-"
in
self.
VVprocess
:
269
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
270
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 1
271
elif
"tau- vt~ mu+ mu-"
in
self.
VVprocess
:
272
list(self.
parameters_by_keyword
(
"decayV1"
))[0].value = 3
273
list(self.
parameters_by_keyword
(
"decayV2"
))[0].value = 2
274
275
def
validate_polarization
(self):
276
"""! Validate the various polarization keywords."""
277
self.
expose
()
# convenience call to simplify syntax
278
self.
check_decay_mode
(self.
polarization
, self.
allowed_polarization
)
279
# Enable appropriate decay mode
280
list(self.
parameters_by_keyword
(
"pol1"
))[0].value = 4
# adjust the one used as a proxy for polarization
281
list(self.
parameters_by_keyword
(
"pol2"
))[0].value = 4
282
283
if
"unpol-unpol"
not
in
self.
polarization
:
284
list(self.
parameters_by_keyword
(
"dpa"
))[0].value = 1
285
list(self.
parameters_by_keyword
(
"qcdonly"
))[0].value = 1
286
if
"transv-"
in
self.
polarization
:
287
list(self.
parameters_by_keyword
(
"pol1"
))[0].value = 3
288
elif
"longit-"
in
self.
polarization
:
289
list(self.
parameters_by_keyword
(
"pol1"
))[0].value = 0
290
elif
"left-"
in
self.
polarization
:
291
list(self.
parameters_by_keyword
(
"pol1"
))[0].value = -1
292
elif
"right-"
in
self.
polarization
:
293
list(self.
parameters_by_keyword
(
"pol1"
))[0].value = 1
294
if
"-transv"
in
self.
polarization
:
295
list(self.
parameters_by_keyword
(
"pol2"
))[0].value = 3
296
elif
"-longit"
in
self.
polarization
:
297
list(self.
parameters_by_keyword
(
"pol2"
))[0].value = 0
298
elif
"-left"
in
self.
polarization
:
299
list(self.
parameters_by_keyword
(
"pol2"
))[0].value = -1
300
elif
"-right"
in
self.
polarization
:
301
list(self.
parameters_by_keyword
(
"pol2"
))[0].value = 1
302
python.processes.configurable.Configurable.add_keyword
add_keyword(self, keyword, value=None, name=None, frozen=None, hidden=None, description=None, **kwargs)
Register configurable parameter that is exposed to the user.
Definition
configurable.py:21
python.processes.configurable.Configurable.expose
expose(self)
Add all names to the interface of this object.
Definition
configurable.py:46
python.processes.configurable.Configurable.parameters_by_keyword
parameters_by_keyword(self, keyword)
Retrieve all parameters that use a given keyword.
Definition
configurable.py:57
python.processes.powheg.VV_pol.VV_pol
Default Powheg configuration for W-boson pair production plus one jet using MiNNLOPS.
Definition
VV_pol.py:11
python.processes.powheg.VV_pol.VV_pol.allowed_polarization
list allowed_polarization
Definition
VV_pol.py:65
python.processes.powheg.VV_pol.VV_pol.validate_polarization
validate_polarization(self)
Validate the various polarization keywords.
Definition
VV_pol.py:275
python.processes.powheg.VV_pol.VV_pol.allowed_VVprocess
list allowed_VVprocess
List of allowed decay modes.
Definition
VV_pol.py:37
python.processes.powheg.VV_pol.VV_pol.reweight_for_MiNNLO
bool reweight_for_MiNNLO
Definition
VV_pol.py:34
python.processes.powheg.VV_pol.VV_pol.polarization
polarization
Definition
VV_pol.py:278
python.processes.powheg.VV_pol.VV_pol.VVprocess
VVprocess
Definition
VV_pol.py:175
python.processes.powheg.VV_pol.VV_pol.__init__
__init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition
VV_pol.py:19
python.processes.powheg.VV_pol.VV_pol.validate_process
validate_process(self)
Validate the various process keywords.
Definition
VV_pol.py:172
python.processes.powheg_RES.PowhegRES
Base class for PowhegBox RES processes.
Definition
powheg_RES.py:7
python.processes.powheg_base.PowhegBase.validation_functions
list validation_functions
List of validation functions to run before preparing runcard.
Definition
powheg_base.py:127
python.processes.powheg_base.PowhegBase.check_decay_mode
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.
Definition
powheg_base.py:231
python.processes.powheg_base.PowhegBase.default_scales
default_scales(self)
Default scale variations for this process.
Definition
powheg_base.py:194
Generated on
for ATLAS Offline Software by
1.17.0