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