ATLAS Offline Software
HION5.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 # HION5.py
3 
4 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory import CompFactory
6 from AthenaConfiguration.Enums import MetadataCategory
7 from AthenaCommon.CFElements import seqAND
8 
10  """Configure the example skimming tool"""
11  acc = ComponentAccumulator()
12 
13  ExtraData = []
14  ExtraData += ['xAOD::MuonContainer/Muons']
15  ExtraData += ['xAOD::ElectronContainer/Electrons']
16  ExtraData += ['xAOD::PhotonContainer/Photons']
17  ExtraData += ['xAOD::TrackParticleContainer/InDetTrackParticles']
18 
19  acc.addSequence( seqAND("HION5Sequence") )
20  acc.getSequence("HION5Sequence").ExtraDataForDynamicConsumers = ExtraData
21  acc.getSequence("HION5Sequence").ProcessDynamicDataDependencies = True
22 
23  from DerivationFrameworkHI import ListTriggers
24 
25  triggers = ListTriggers.HION5SkimmingTriggers()
26 
27  req_electrons = 'count( Electrons.DFCommonElectronsLHLoose && ( Electrons.pt > 15*GeV ))>0'
28  req_muons = 'count( Muons.DFCommonMuonPassPreselection && (Muons.pt > 15*GeV) && ( abs(Muons.eta) < 2.7))>0'
29  req_photons = 'count( Photons.DFCommonPhotonsIsEMLoose && (Photons.pt > 30*GeV) ) > 0'
30  req_total = '(' + req_electrons + ' || ' + req_muons + ' || ' + req_photons + ')'
31 
32  expression = ' ( ' +' || '.join(triggers) + ' ) && ' + req_total
33 
34 
35  from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
36  tdt = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
37  acc.addPublicTool(CompFactory.DerivationFramework.xAODStringSkimmingTool(name = "HION5StringSkimmingTool",
38  expression = expression,
39  TrigDecisionTool=tdt),
40  primary = True)
41 
42  return acc
43 
44 def HION5Thinning(flags):
45  from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg,JetTrackParticleThinningCfg
46  acc = ComponentAccumulator()
47 
48  track_thinning_expression = "InDetTrackParticles.pt > 0.9*GeV"
49  TrackParticleThinningTool = acc.getPrimaryAndMerge(TrackParticleThinningCfg(
50  flags,
51  name = "PHYSTrackParticleThinningTool",
52  StreamName = "streamDAOD_HION5",
53  SelectionString = track_thinning_expression,
54  InDetTrackParticlesKey = "InDetTrackParticles"))
55 
56  AntiKt2HIJetsThinningTool = acc.getPrimaryAndMerge(JetTrackParticleThinningCfg(
57  flags,
58  name = "AntiKt2HIJetsThinningTool",
59  StreamName = "streamDAOD_HION5",
60  JetKey = "AntiKt2HIJets",
61  SelectionString = "AntiKt2HIJets.pt > 15*GeV",
62  InDetTrackParticlesKey = "InDetTrackParticles"))
63 
64  AntiKt4HIJetsThinningTool = acc.getPrimaryAndMerge(JetTrackParticleThinningCfg(
65  flags,
66  name = "AntiKt4HIJetsThinningTool",
67  StreamName = "streamDAOD_HION5",
68  JetKey = "AntiKt4HIJets",
69  SelectionString = "AntiKt4HIJets.pt > 15*GeV",
70  InDetTrackParticlesKey = "InDetTrackParticles"))
71 
72  acc.addPublicTool(TrackParticleThinningTool,primary = True)
73  acc.addPublicTool(AntiKt2HIJetsThinningTool)
74  acc.addPublicTool(AntiKt4HIJetsThinningTool)
75 
76  return acc
77 
78 def HION5KernelCfg(flags, name="HION5Kernel", **kwargs):
79  """Configure the derivation framework driving algorithm (kernel)
80  for HION5"""
81  acc = ComponentAccumulator()
82 
83  # Schedule extra jets collections
84  from JetRecConfig.StandardSmallRJets import AntiKt4PV0Track
85  from JetRecConfig.JetRecConfig import JetRecCfg
86 
87  jetList = [AntiKt4PV0Track]
88  for jd in jetList:
89  acc.merge(JetRecCfg(flags, jd))
90 
91  # Common augmentations
92  # cannot use PhysCommon sequence because
93  # - no triggers
94  # - no TauJets
95  # so we have to use a modified version here
96  from DerivationFrameworkMuons.MuonsCommonConfig import MuonsCommonCfg
97  from DerivationFrameworkEGamma.EGammaCommonConfig import EGammaCommonCfg
98 
99  acc.merge(MuonsCommonCfg(flags))
100  acc.merge(EGammaCommonCfg(flags))
101 
102  # jet cleaning
103  # standard way in PhysCommon is
104  # - calculate tau ID (needed for default jet OR)
105  # - decorate jets with overlap removal
106  # - do event cleaning
107  # but taus are missing in HI derivations so need to do differently
108 
109  # NO JVT criteria in HI data (see pp config for details)
110 
111  # Decorate if jet passes OR and save decoration DFCommonJets_passOR
112  # Use modified OR that does not check overlaps with taus
113  from AssociationUtils.AssociationUtilsConfig import OverlapRemovalToolCfg
114 
115  outputLabel = "DFCommonJets_passOR_HI"
116  bJetLabel = "" # default
117  tauLabel = "" # workaround for missing taus
118  tauKey = "" # workaround for missing taus
119  orTool = acc.popToolsAndMerge(
121  flags, outputLabel=outputLabel, bJetLabel=bJetLabel, doTaus=False
122  )
123  )
124  algOR = CompFactory.OverlapRemovalGenUseAlg(
125  "OverlapRemovalGenUseAlg",
126  OverlapLabel=outputLabel,
127  OverlapRemovalTool=orTool,
128  JetKey = 'AntiKt4HIJets',
129  TauKey=tauKey,
130  TauLabel=tauLabel,
131  BJetLabel=bJetLabel,
132  )
133  acc.addEventAlgo(algOR)
134 
135  # skimming
136  skimmingTool = acc.getPrimaryAndMerge(HION5SkimmingToolCfg(flags))
137 
138  # Thinning
139  thinningTool= acc.getPrimaryAndMerge(HION5Thinning(flags))
140 
141  # setup the kernel
142  acc.addEventAlgo(
143  CompFactory.DerivationFramework.DerivationKernel(
144  name,
145  SkimmingTools = [skimmingTool],
146  ThinningTools = [thinningTool],
147  AugmentationTools = [],
148  ))
149 
150  return acc
151 
152 def HION5Cfg(flags):
153  acc = ComponentAccumulator()
154 
155  from DerivationFrameworkEGamma.PhotonsCPDetailedContent import PhotonsCPDetailedContent
156  from DerivationFrameworkEGamma.ElectronsCPDetailedContent import ExtraElectronShowerShapes,ExtraElectronGSFVar
157 
158  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
159  HION5TriggerListsHelper = TriggerListsHelper(flags)
160 
161  acc.merge(HION5KernelCfg(flags, name="HION5Kernel", StreamName="StreamDAOD_HION5", TriggerListsHelper = HION5TriggerListsHelper,))
162 
163  # configure slimming
164  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
165  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
166  from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
167  from DerivationFrameworkHI import ListSlimming
168 
169  HION5SlimmingHelper = SlimmingHelper("HION5SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
170  HION5SlimmingHelper.AppendToDictionary = {'EventInfo':'xAOD::EventInfo','EventInfoAux':'xAOD::EventAuxInfo',
171  'TruthEvents':'xAOD::TruthEventContainer','TruthEventsAux':'xAOD::TruthEventAuxContainer',
172  'MET_Truth':'xAOD::MissingETContainer','MET_TruthAux':'xAOD::MissingETAuxContainer',
173  'TruthLHEParticles':'xAOD::TruthParticleContainer', 'TruthLHEParticlesAux':'xAOD::TruthParticleAuxContainer',
174  'TruthElectrons':'xAOD::TruthParticleContainer','TruthElectronsAux':'xAOD::TruthParticleAuxContainer',
175  'TruthMuons':'xAOD::TruthParticleContainer','TruthMuonsAux':'xAOD::TruthParticleAuxContainer',
176  'TruthPhotons':'xAOD::TruthParticleContainer','TruthPhotonsAux':'xAOD::TruthParticleAuxContainer',
177  'TruthTaus':'xAOD::TruthParticleContainer','TruthTausAux':'xAOD::TruthParticleAuxContainer',
178  'TruthNeutrinos':'xAOD::TruthParticleContainer','TruthNeutrinosAux':'xAOD::TruthParticleAuxContainer',
179  'TruthBSM':'xAOD::TruthParticleContainer','TruthBSMAux':'xAOD::TruthParticleAuxContainer',
180  'TruthBoson':'xAOD::TruthParticleContainer','TruthBosonAux':'xAOD::TruthParticleAuxContainer',
181  'TruthBottom':'xAOD::TruthParticleContainer','TruthBottomAux':'xAOD::TruthParticleAuxContainer',
182  'TruthTop':'xAOD::TruthParticleContainer','TruthTopAux':'xAOD::TruthParticleAuxContainer',
183  'TruthForwardProtons':'xAOD::TruthParticleContainer','TruthForwardProtonsAux':'xAOD::TruthParticleAuxContainer',
184  'BornLeptons':'xAOD::TruthParticleContainer','BornLeptonsAux':'xAOD::TruthParticleAuxContainer',
185  'TruthBosonsWithDecayParticles':'xAOD::TruthParticleContainer','TruthBosonsWithDecayParticlesAux':'xAOD::TruthParticleAuxContainer',
186  'TruthBosonsWithDecayVertices':'xAOD::TruthVertexContainer','TruthBosonsWithDecayVerticesAux':'xAOD::TruthVertexAuxContainer',
187  'TruthBSMWithDecayParticles':'xAOD::TruthParticleContainer','TruthBSMWithDecayParticlesAux':'xAOD::TruthParticleAuxContainer',
188  'TruthBSMWithDecayVertices':'xAOD::TruthVertexContainer','TruthBSMWithDecayVerticesAux':'xAOD::TruthVertexAuxContainer',
189  'AntiKt4TruthDressedWZJets':'xAOD::JetContainer','AntiKt4TruthDressedWZJetsAux':'xAOD::JetAuxContainer',
190  'AntiKt10TruthSoftDropBeta100Zcut10Jets':'xAOD::JetContainer','AntiKt10TruthSoftDropBeta100Zcut10JetsAux':'xAOD::JetAuxContainer',
191  'MET_Track1000':'xAOD::MissingETContainer', 'MET_Track1000Aux':'xAOD::MissingETAuxContainer',
192  'MET_Track2000':'xAOD::MissingETContainer', 'MET_Track2000Aux':'xAOD::MissingETAuxContainer',
193  'MET_Track3000':'xAOD::MissingETContainer', 'MET_Track3000Aux':'xAOD::MissingETAuxContainer',
194  'MET_Track4000':'xAOD::MissingETContainer', 'MET_Track4000Aux':'xAOD::MissingETAuxContainer',
195  'MET_Track5000':'xAOD::MissingETContainer', 'MET_Track5000Aux':'xAOD::MissingETAuxContainer',
196  }
197  # Build track MET with ptCut in MeV and HItight Tracks
198  from DerivationFrameworkHI.TrackMET_config import Cfg_METTrack
199  met_ptCutList = [1000,2000,3000,4000,5000]
200 
201  for ptCut in met_ptCutList:
202  acc.merge(Cfg_METTrack(flags, ptCut))
203 
204  AllVariables = []
205  AllVariables += ListSlimming.HION5AllVariables()
206  AllVariables += ListSlimming.HION5ExtraContainersTrigger()
207 
208  if flags.Input.isMC:
209  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddStandardTruthContentsCfg
210  acc.merge(AddStandardTruthContentsCfg(flags))
211  AllVariables += ListSlimming.HION5AllTruthVariables()
212 
213  HION5SlimmingHelper.SmartCollections = ListSlimming.HION5SmartCollections()
214  HION5SlimmingHelper.ExtraVariables = ListSlimming.HION5ExtraVariables()
215  HION5SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
216  HION5SlimmingHelper.ExtraVariables += ExtraElectronShowerShapes
217  HION5SlimmingHelper.ExtraVariables += ExtraElectronGSFVar
218  HION5SlimmingHelper.AllVariables = AllVariables
219 
220  # Add egamma trigger objects
221  HION5SlimmingHelper.IncludeEGammaTriggerContent = True
222  # Add muon trigger objects
223  HION5SlimmingHelper.IncludeMuonTriggerContent = True
224 
225  HION5ItemList = HION5SlimmingHelper.GetItemList()
226 
227  acc.merge(OutputStreamCfg(flags, "DAOD_HION5", ItemList=HION5ItemList, AcceptAlgs=["HION5Kernel"]))
228  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_HION5", AcceptAlgs=["HION5Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData]))
229 
230  return acc
AssociationUtilsConfig.OverlapRemovalToolCfg
def OverlapRemovalToolCfg(ConfigFlags, masterName='OverlapRemovalTool', inputLabel='selected', outputLabel='overlaps', bJetLabel='', maxElePtForBJetAwareOR=100. *1000, boostedLeptons=False, outputPassValue=False, linkOverlapObjects=False, doEleEleOR=False, doElectrons=True, doMuons=True, doJets=True, doTaus=True, doPhotons=True, doFatJets=False, **kwargs)
Definition: AssociationUtilsConfig.py:5
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.MCTruthCommonConfig.AddStandardTruthContentsCfg
def AddStandardTruthContentsCfg(flags, decorationDressing='dressedPhoton', includeTausInDressingPhotonRemoval=False, prefix='')
Definition: MCTruthCommonConfig.py:168
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:16
python.InDetToolsConfig.TrackParticleThinningCfg
def TrackParticleThinningCfg(flags, name, **kwargs)
Definition: InDetToolsConfig.py:516
python.EGammaCommonConfig.EGammaCommonCfg
def EGammaCommonCfg(ConfigFlags)
Definition: EGammaCommonConfig.py:15
python.HION5.HION5KernelCfg
def HION5KernelCfg(flags, name="HION5Kernel", **kwargs)
Definition: HION5.py:78
python.CFElements.seqAND
def seqAND(name, subs=[])
Definition: CFElements.py:25
python.TrackMET_config.Cfg_METTrack
def Cfg_METTrack(configFlags, ptCut)
Definition: TrackMET_config.py:7
python.JetRecConfig.JetRecCfg
def JetRecCfg(flags, jetdef, returnConfiguredDef=False)
Top level functions returning ComponentAccumulator out of JetDefinition.
Definition: JetRecConfig.py:36
python.MuonsCommonConfig.MuonsCommonCfg
def MuonsCommonCfg(flags, suff="")
Definition: MuonsCommonConfig.py:13
python.HION5.HION5SkimmingToolCfg
def HION5SkimmingToolCfg(flags)
Definition: HION5.py:9
python.HION5.HION5Cfg
def HION5Cfg(flags)
Definition: HION5.py:152
python.InDetToolsConfig.JetTrackParticleThinningCfg
def JetTrackParticleThinningCfg(flags, name, **kwargs)
Definition: InDetToolsConfig.py:632
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.TriggerInterface.TrigDecisionToolCfg
def TrigDecisionToolCfg(flags)
Definition: TriggerInterface.py:14
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
SlimmingHelper
Definition: SlimmingHelper.py:1
python.HION5.HION5Thinning
def HION5Thinning(flags)
Definition: HION5.py:44