ATLAS Offline Software
Loading...
Searching...
No Matches
Tools/Campaigns/python/Utils.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.Enums import FlagEnum
3class Campaign(FlagEnum):
4 Unknown = ''
5 MC16a = 'mc16a'
6 MC16d = 'mc16d'
7 MC16e = 'mc16e'
8 MC20a = 'mc20a'
9 MC20d = 'mc20d'
10 MC20e = 'mc20e'
11 MC21a = 'mc21a'
12 MC23a = 'mc23a'
13 MC23c = 'mc23c'
14 MC23d = 'mc23d'
15 MC23e = 'mc23e'
16 MC23g = 'mc23g'
17 PhaseII = 'phaseII'
18
19 def __lt__(self, other):
20 if not isinstance(other, Campaign):
21 return NotImplemented
22 return self.value < other.value
23
24 def __le__(self, other):
25 if not isinstance(other, Campaign):
26 return NotImplemented
27 return self.value <= other.value
28
29# Campaign run numbers (only latest campaigns that do not have metadata present)
30campaign_runs = {
31 284500: Campaign.MC20a,
32 300000: Campaign.MC20d,
33 310000: Campaign.MC20e,
34 410000: Campaign.MC21a,
35}
36
37# Function to get the campaign
38def getMCCampaign(files):
39 # Auto-configure from file
40 from AthenaConfiguration.AutoConfigFlags import GetFileMD
41 metadata = GetFileMD(files)
42 mc_campaign = Campaign(metadata.get('mc_campaign', ''))
43 project_name = metadata.get('project_name', '')
44 run_numbers = metadata.get('runNumbers', [])
45
46 if mc_campaign is not Campaign.Unknown:
47 return mc_campaign
48
49 if run_numbers:
50 mc_campaign = campaign_runs.get(run_numbers[0], Campaign.Unknown)
51
52 # MC-equivalent projects for data
53 if 'data25' in project_name:
54 return Campaign.MC23g
55 elif 'data24' in project_name:
56 return Campaign.MC23e
57 elif 'data23' in project_name:
58 return Campaign.MC23c
59 elif 'data22' in project_name:
60 return Campaign.MC21a
61 elif 'data18' in project_name:
62 return Campaign.MC20e
63 elif 'data17' in project_name:
64 return Campaign.MC20d
65 elif 'data16' in project_name or 'data15' in project_name:
66 return Campaign.MC20a
67
68 return mc_campaign
69
70# Get data year corresponding to MC campaign
71def getDataYear(flags):
72 if flags.Input.isMC:
73 campaign = getMCCampaign(flags.Input.Files)
74 dataYear = {
75 Campaign.MC20a: 2016, # prefer over 2015
76 Campaign.MC20d: 2017,
77 Campaign.MC20e: 2018,
78 Campaign.MC21a: 2022,
79 Campaign.MC23a: 2022,
80 Campaign.MC23c: 2023,
81 Campaign.MC23d: 2023,
82 Campaign.MC23e: 2024,
83 Campaign.MC23g: 2025,
84 Campaign.PhaseII: 2030,
85 }[campaign]
86 else:
87 dataYear = flags.Input.DataYear
88 return dataYear