2 from AthenaConfiguration.AthConfigFlags
import AthConfigFlags
3 from AthenaConfiguration.Enums
import HIMode
4 from AthenaConfiguration.Enums
import ProductionStep
10 "Muon",
"CombinedMuon",
14 "TrackCellAssociation",
15 "PFlow",
"Jet",
"BTagging",
28 """Return an AthConfigFlags object with required flags"""
29 flags = AthConfigFlags()
37 flags.addFlag(
"Reco.EnableTracking",
38 lambda prevFlags: prevFlags.Detector.EnableID
or
39 prevFlags.Detector.EnableITk)
41 flags.addFlag(
"Reco.EnableHGTDExtension",
42 lambda prevFlags: prevFlags.Reco.EnableTracking
and
43 prevFlags.Detector.EnableHGTD)
45 flags.addFlag(
"Reco.EnableEgamma",
46 lambda prevFlags: prevFlags.Detector.EnableCalo)
49 flags.addFlag(
"Reco.EnableCaloExtension",
lambda prevFlags: (
51 prevFlags.Reco.EnablePFlow
52 or prevFlags.Reco.EnableTau
53 or prevFlags.Reco.EnableCombinedMuon
55 and prevFlags.Detector.EnableCalo
56 and prevFlags.Reco.EnableTracking))
58 flags.addFlag(
"Reco.EnableCombinedMuon",
59 lambda prevFlags: prevFlags.Detector.EnableMuon
and
60 prevFlags.Reco.EnableTracking)
62 flags.addFlag(
"Reco.EnableTrackOverlay",
lambda prevFlags:
False)
64 flags.addFlag(
"Reco.EnablePFlow",
lambda prevFlags: (
65 prevFlags.Reco.EnableTracking
66 and prevFlags.Detector.EnableCalo
67 and prevFlags.Tracking.doVertexFinding))
69 flags.addFlag(
"Reco.EnableIsolation",
lambda prevFlags: (
70 prevFlags.Tracking.doVertexFinding
71 and (prevFlags.Reco.EnableCombinedMuon
72 or prevFlags.Reco.EnableEgamma)))
74 flags.addFlag(
"Reco.EnableJet",
lambda prevFlags: (
75 prevFlags.Detector.EnableCalo
76 and prevFlags.Reco.EnableTracking
77 and prevFlags.Reco.EnableEgamma
78 and prevFlags.Reco.EnableCombinedMuon
79 and prevFlags.Reco.EnablePFlow
80 and prevFlags.Reco.HIMode
is not HIMode.HI)
or
81 prevFlags.Common.ProductionStep
is ProductionStep.Derivation)
84 flags.addFlag(
"Reco.EnableTau",
lambda prevFlags: prevFlags.Reco.EnableJet)
86 flags.addFlag(
"Reco.EnableBTagging",
87 lambda prevFlags: prevFlags.Reco.EnableJet
or
88 (prevFlags.Reco.EnableHI
and prevFlags.HeavyIon.doJet))
90 flags.addFlag(
"Reco.EnableMet",
lambda prevFlags: (
91 prevFlags.Reco.EnableJet
92 and prevFlags.Reco.EnableTau))
96 flags.addFlag(
"Reco.EnableGlobalFELinking",
97 lambda prevFlags: prevFlags.Reco.EnableJet
and
98 prevFlags.Reco.EnableTau
and prevFlags.Reco.EnablePFlow
and
99 prevFlags.Reco.EnableEgamma
and
100 prevFlags.Reco.EnableCombinedMuon)
102 flags.addFlag(
"Reco.EnableTrackCellAssociation",
103 lambda prevFlags: prevFlags.Detector.EnableCalo
and
104 prevFlags.Reco.EnableTracking)
106 flags.addFlag(
"Reco.EnableCaloRinger",
107 lambda prevFlags: prevFlags.Reco.EnableEgamma
and
108 not prevFlags.Reco.EnableHI)
113 flags.addFlag(
"Reco.EnableTrigger",
114 lambda prevFlags: prevFlags.Trigger.EDMVersion > 0)
117 flags.addFlag(
"Reco.EnableHI",
118 lambda prevFlags: prevFlags.Reco.HIMode
is not HIMode.pp)
120 flags.addFlag(
"Reco.HIMode", _hiModeChoice, type=HIMode)
124 flags.addFlag(
"Reco.EnableBeamSpotDecoration",
125 lambda prevFlags:
not prevFlags.Common.isOnline)
128 flags.addFlag(
"Reco.EnableZDC",_recoZDC)
131 flags.addFlag(
"Reco.EnablePostProcessing",
True)
132 flags.addFlag(
"Reco.PostProcessing.ThinNegativeClusters",
133 lambda prevFlags: prevFlags.Reco.EnablePostProcessing
and
134 prevFlags.Detector.EnableCalo
and
135 prevFlags.Output.doWriteAOD
and
136 prevFlags.Calo.Thin.NegativeEnergyCaloClusters
and
137 not prevFlags.Reco.EnableHI)
139 flags.addFlag(
"Reco.PostProcessing.TRTAloneThinning",
140 lambda prevFlags: prevFlags.Reco.EnablePostProcessing
and
141 prevFlags.Reco.EnableTracking
and
142 prevFlags.Output.doWriteAOD)
143 flags.addFlag(
"Reco.PostProcessing.GeantTruthThinning",
144 lambda prevFlags: prevFlags.Reco.EnablePostProcessing
and
145 prevFlags.Input.isMC
and
146 prevFlags.Output.doWriteAOD)
147 flags.addFlag(
"Reco.PostProcessing.InDetForwardTrackParticleThinning",
148 lambda prevFlags: prevFlags.Reco.EnablePostProcessing
and
149 prevFlags.Reco.EnableTracking
and
150 prevFlags.Reco.EnableCombinedMuon
and
151 prevFlags.Output.doWriteAOD)
157 from AthenaCommon.Logging
import logging
158 log = logging.getLogger(
'RecoSteering')
161 flags._loadDynaFlags(
'Detector')
162 flags._loadDynaFlags(
'Reco')
166 format_common = f
'%-{item_len}s'
169 for d
in _all_domains:
170 domain_len =
max(domain_len, len(d) + 2)
173 for d
in _all_domains:
174 if flags.hasFlag(f
'Detector.Enable{d}'):
175 name = f
'Detector.Enable{d}'
176 elif flags.hasFlag(f
'Reco.Enable{d}'):
177 name = f
'Reco.Enable{d}'
179 raise RuntimeError(f
'Unknown reconstruction domain {d}')
181 if flags[name]
is not False:
186 format_header = f
'%{domain_len}s ' + format_common
187 format = f
'%{domain_len}s : ' + format_common
188 data = [_all_domains, enabled]
189 data =
list(map(list, zip(*data)))
192 log.info(format_header, *([
'',
'Enbl.']))
195 log.info(format, *row)
199 if hasattr(runArgs,
"runNumber")
and not flags.Input.isMC
and runArgs.runNumber
not in flags.Input.RunNumbers:
200 flags.Input.RunNumbers = [runArgs.runNumber]
201 flags.Input.OverrideRunNumber =
True
203 if hasattr(runArgs,
"projectName"):
204 flags.Input.projectName = runArgs.projectName
219 if prevFlags.Input.isMC:
220 return prevFlags.Detector.EnableZDC
222 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
223 from libpyeformat_helper
import SubDetector, DetectorMask
224 maskbits=
GetFileMD(prevFlags.Input.Files).
get(
"detectorMask",[0x0])
226 detMask=DetectorMask(maskbits & 0xFFFFFFFFFFFFFFFF, maskbits >> 64)
227 return detMask.is_set(SubDetector.FORWARD_ZDC)
233 if (
"_hip" in prevFlags.Input.ProjectName):
235 elif (
"_hi" in prevFlags.Input.ProjectName):
236 if (prevFlags.Input.TriggerStream ==
"physics_UPC"):