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 not flags.Overlay.DataOverlay 
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"):