ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
PileupReweighting
python
AutoconfigurePRW.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
from
Campaigns.Utils
import
Campaign, getMCCampaign
3
from
AnalysisAlgorithmsConfig.ConfigAccumulator
import
DataType
4
5
6
def
getYearsForCampaign
(campaign):
7
if
campaign
in
[Campaign.MC16a, Campaign.MC20a]:
8
return
[2015, 2016]
9
elif
campaign
in
[Campaign.MC16d, Campaign.MC20d]:
10
return
[2017]
11
elif
campaign
in
[Campaign.MC16e, Campaign.MC20e]:
12
return
[2018]
13
elif
campaign
in
[Campaign.MC21a, Campaign.MC23a]:
14
return
[2022]
15
elif
campaign
in
[Campaign.MC23c, Campaign.MC23d]:
16
return
[2023]
17
elif
campaign
in
[Campaign.MC23e]:
18
return
[2024]
19
elif
campaign
in
[Campaign.MC23g]:
20
return
[2025, 2026]
21
else
:
22
raise
ValueError(f
'Unsupported campaign {campaign}'
)
23
24
25
def
getLumicalcDict
():
26
GRLDict={}
27
29
GRLDict[
'GRL2026'
] = [
'GoodRunsLists/data26_13p6TeV/20261006/ilumicalc_histograms_None_516294-520882_OflLumi-Run3-010.root'
]
30
31
# 2025
32
GRLDict[
'GRL2025'
] = [
'GoodRunsLists/data25_13p6TeV/20260129/ilumicalc_histograms_None_497924-509849_OflLumi-Run3-006.root'
]
33
34
# 2024
35
GRLDict[
'GRL2024'
] = [
'GoodRunsLists/data24_13p6TeV/20260127/ilumicalc_histograms_None_473235-486706_OflLumi-Run3-008.root'
]
36
37
# 2023
38
GRLDict[
'GRL2023'
] = [
'GoodRunsLists/data23_13p6TeV/20250321/ilumicalc_histograms_None_451587-456749_OflLumi-Run3-004.root'
]
39
GRLDict[
'GRL2023_ignoreTRIG_JETCTPIN'
] = [
'GoodRunsLists/data23_13p6TeV/20250321/ilumicalc_histograms_None_451587-456749_OflLumi-Run3-004_ignoreTRIGJETCTPIN.root'
]
40
41
# 2022
42
GRLDict[
'GRL2022'
] = [
'GoodRunsLists/data22_13p6TeV/20250321/ilumicalc_histograms_None_431810-440613_OflLumi-Run3-004.root'
]
43
GRLDict[
'GRL2022_ignore_TRIGLAR'
] = [
'GoodRunsLists/data22_13p6TeV/20250321/ilumicalc_histograms_None_430536-440613_OflLumi-Run3-004_ignore_TRIGLAR.root'
]
44
45
47
GRLDict[
'GRL2018_Triggerno17e33prim'
] = [
'GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root'
]
48
GRLDict[
'GRL2018_BjetHLT'
] = [
'GoodRunsLists/data18_13TeV/20200426/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010-2.root'
]
49
50
# 2017
51
GRLDict[
'GRL2017_Triggerno17e33prim'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.lumicalc.OflLumi-13TeV-010.root'
]
52
GRLDict[
'GRL2017_BjetHLT_Normal2017'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_BjetHLT_Normal2017.lumicalc.OflLumi-13TeV-010.root'
]
53
GRLDict[
'GRL2017_JetHLT_Normal2017'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_JetHLT_Normal2017.lumicalc.OflLumi-13TeV-010.root'
]
54
55
# 2016
56
GRLDict[
'GRL2016'
] = [
'GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root'
]
57
GRLDict[
'GRL2016_ignore_TOROID_STATUS'
] = [
'GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_ignore_TOROID_STATUS_297730-311481_OflLumi-13TeV-009.root'
]
58
GRLDict[
'GRL2016_BjetHLT'
] = [
'GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_BjetHLT_297730-311481_OflLumi-13TeV-009.root'
]
59
GRLDict[
'GRL2016_BjetHLT_Tight'
] = [
'GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_BjetHLT_Tight_297730-311481_OflLumi-13TeV-009.root'
]
60
61
# 2015
62
GRLDict[
'GRL2015'
] = [
'GoodRunsLists/data15_13TeV/20170619/PHYS_StandardGRL_All_Good_25ns_276262-284484_OflLumi-13TeV-008.root'
]
63
64
return
GRLDict
65
66
67
def
getActualMuDict
():
68
GRLDict={}
69
71
GRLDict[
'GRL2026'
] = [
'GoodRunsLists/data26_13p6TeV/20261006/purw.actualMu_data26_13p6TeV_DetStatus-v143-pro56-01.root'
]
72
73
# 2025
74
GRLDict[
'GRL2025'
] = [
'GoodRunsLists/data25_13p6TeV/20260129/purw.actualMu.root'
]
75
76
# 2024
77
GRLDict[
'GRL2024'
] = [
'GoodRunsLists/data24_13p6TeV/20260127/purw.actualMu.root'
]
78
79
# 2023
80
GRLDict[
'GRL2023'
] = [
'GoodRunsLists/data23_13p6TeV/20250321/purw.actualMu.root'
]
81
GRLDict[
'GRL2023_ignoreTRIG_JETCTPIN'
] = [
'GoodRunsLists/data23_13p6TeV/20250321/purw.actualMu.ignoreTRIGJETCTPIN.root'
]
82
83
# 2022
84
GRLDict[
'GRL2022'
] = [
'GoodRunsLists/data22_13p6TeV/20250321/purw.actualMu.root'
]
85
GRLDict[
'GRL2022_ignore_TRIGLAR'
] = [
'GoodRunsLists/data22_13p6TeV/20250321/purw.actualMu.ignore_TRIGLAR.root'
]
86
87
89
GRLDict[
'GRL2018_Triggerno17e33prim'
] = [
'GoodRunsLists/data18_13TeV/20190318/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root'
]
90
GRLDict[
'GRL2018_BjetHLT'
] = [
'GoodRunsLists/data18_13TeV/20200426/purw.actualMu.root'
]
91
92
# 2017
93
GRLDict[
'GRL2017_Triggerno17e33prim'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root'
]
94
GRLDict[
'GRL2017_BjetHLT_Normal2017'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_BjetHLT_Normal2017.actualMu.OflLumi-13TeV-010.root'
]
95
GRLDict[
'GRL2017_JetHLT_Normal2017'
] = [
'GoodRunsLists/data17_13TeV/20180619/physics_25ns_JetHLT_Normal2017.actualMu.OflLumi-13TeV-010.root'
]
96
97
# 2016
98
GRLDict[
'GRL2016'
] = []
99
GRLDict[
'GRL2016_ignore_TOROID_STATUS'
] = []
100
GRLDict[
'GRL2016_BjetHLT'
] = []
101
GRLDict[
'GRL2016_BjetHLT_Tight'
] = []
102
103
# 2015
104
GRLDict[
'GRL2015'
] = []
105
106
return
GRLDict
107
108
109
def
getLumicalcFiles
(campaign, GRLSuffixDict={}):
110
""" Returns the list of lumicalc files for a given campaign """
111
lumicalcDict =
getLumicalcDict
()
112
data_years =
getYearsForCampaign
(campaign)
113
114
file_list = []
115
for
data_year
in
data_years:
116
GRLKey =
'GRL'
+ str(data_year)
117
if
data_year
in
GRLSuffixDict:
118
GRLKey = GRLKey +
'_'
+ GRLSuffixDict[data_year]
119
elif
data_year
in
[2017, 2018]:
120
GRLKey = GRLKey +
'_Triggerno17e33prim'
121
file_list.extend(lumicalcDict[GRLKey])
122
return
file_list
123
124
125
def
actualMuFiles
(campaign, GRLSuffixDict={}):
126
actualMuDict =
getActualMuDict
()
127
data_years =
getYearsForCampaign
(campaign)
128
129
file_list = []
130
for
data_year
in
data_years:
131
GRLKey =
'GRL'
+ str(data_year)
132
if
data_year
in
GRLSuffixDict:
133
GRLKey = GRLKey +
'_'
+ GRLSuffixDict[data_year]
134
elif
data_year
in
[2017, 2018]:
135
GRLKey = GRLKey +
'_Triggerno17e33prim'
136
file_list.extend(actualMuDict[GRLKey])
137
138
if
campaign
in
[Campaign.MC23g]:
139
assert(len(file_list) == 2)
140
elif
campaign
in
[Campaign.MC16d, Campaign.MC20d, Campaign.MC16e, Campaign.MC20e, Campaign.MC21a, Campaign.MC23a, Campaign.MC23c, Campaign.MC23d, Campaign.MC23e]:
141
assert(len(file_list) == 1)
142
else
:
143
assert(len(file_list) == 0)
144
145
return
file_list
146
147
148
def
defaultConfigFiles
(campaign):
149
list = []
150
151
if
campaign
in
[Campaign.MC20a]:
152
list.append(
153
'PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root'
154
)
155
elif
campaign
in
[Campaign.MC20d]:
156
list.append(
157
'PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root'
158
)
159
elif
campaign
in
[Campaign.MC20e]:
160
list.append(
161
'PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root'
162
)
163
elif
campaign
in
[Campaign.MC21a]:
164
list.append(
165
'PileupReweighting/mc21_common/mc21a.410000.physlite.prw.v1.root'
166
)
167
elif
campaign
in
[Campaign.MC23a]:
168
list.append(
169
'PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root'
170
)
171
elif
campaign
in
[Campaign.MC23c]:
172
list.append(
173
'PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root'
174
)
175
elif
campaign
in
[Campaign.MC23d]:
176
list.append(
177
'PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root'
178
)
179
elif
campaign
in
[Campaign.MC23e]:
180
list.append(
181
'PileupReweighting/mc23_common/mc23e.470000.physlite.prw.v1.root'
182
)
183
elif
campaign
in
[Campaign.MC23g]:
184
list.append(
185
'PileupReweighting/mc23_common/mc23g.495000.physlite.prw.v1.root'
186
)
187
else
:
188
raise
ValueError(f
'Unsupported campaign {campaign}'
)
189
190
assert(len(list) == 1)
191
192
return
list
193
194
195
def
getConfigurationFiles
(campaign=None, dsid=None, data_type=None, files=None, useDefaultConfig=False, GRLSuffixDict={}):
196
# Attempt auto-configuration
197
default_directory =
'dev/PileupReweighting/share'
198
configuration_files = []
199
200
if
files
is
not
None
and
(campaign
is
None
or
dsid
is
None
or
data_type
is
None
):
201
if
campaign
is
None
:
202
campaign = getMCCampaign(files)
203
204
if
dsid
is
None
or
data_type
is
None
:
205
from
AthenaConfiguration.AutoConfigFlags
import
GetFileMD
206
metadata = GetFileMD(files)
207
if
dsid
is
None
:
208
dsid = str(metadata.get(
'mc_channel_number'
, 0))
209
if
data_type
is
None
:
210
simulation_flavour = GetFileMD(files).
get
(
'Simulator'
,
''
)
211
if
not
simulation_flavour:
212
simulation_flavour = GetFileMD(files).
get
(
'SimulationFlavour'
,
''
)
213
data_type = DataType.FullSim
if
(
not
simulation_flavour
or
'FullG4'
in
simulation_flavour)
else
DataType.FastSim
214
215
# data_type as in pileup analysis sequence: either 'data' or ('fullsim' or 'af3')
216
if
data_type
is
DataType.Data:
217
raise
ValueError(
'Data is not supported'
)
218
219
if
data_type
is
DataType.FullSim:
220
simulation_type =
'FS'
221
elif
data_type
is
DataType.FastSim:
222
simulation_type =
'AF3'
223
else
:
224
raise
ValueError(f
'Invalid data_type {data_type}'
)
225
226
configuration_files =
actualMuFiles
(campaign, GRLSuffixDict)
227
if
useDefaultConfig:
228
configuration_files +=
defaultConfigFiles
(campaign)
229
return
configuration_files
230
231
config = f
'{default_directory}/DSID{dsid[:3]}xxx/pileup_{campaign.value}_dsid{dsid}_{simulation_type}.root'
232
from
PathResolver
import
PathResolver
233
if
not
PathResolver.FindCalibFile
(config):
234
return
[]
235
else
:
236
configuration_files.append(config)
237
return
configuration_files
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition
PathResolver.h:63
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition
hcg.cxx:132
python.AutoconfigurePRW.getConfigurationFiles
getConfigurationFiles(campaign=None, dsid=None, data_type=None, files=None, useDefaultConfig=False, GRLSuffixDict={})
Definition
AutoconfigurePRW.py:195
python.AutoconfigurePRW.getLumicalcFiles
getLumicalcFiles(campaign, GRLSuffixDict={})
Definition
AutoconfigurePRW.py:109
python.AutoconfigurePRW.getLumicalcDict
getLumicalcDict()
Definition
AutoconfigurePRW.py:25
python.AutoconfigurePRW.defaultConfigFiles
defaultConfigFiles(campaign)
Definition
AutoconfigurePRW.py:148
python.AutoconfigurePRW.getActualMuDict
getActualMuDict()
Definition
AutoconfigurePRW.py:67
python.AutoconfigurePRW.actualMuFiles
actualMuFiles(campaign, GRLSuffixDict={})
Definition
AutoconfigurePRW.py:125
python.AutoconfigurePRW.getYearsForCampaign
getYearsForCampaign(campaign)
Definition
AutoconfigurePRW.py:6
Generated on
for ATLAS Offline Software by
1.17.0