ATLAS Offline Software
SlimmingHelper.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 
36 
37 from DerivationFrameworkCore.CompulsoryContent import CompulsoryContent, CompulsoryTriggerNavigation, CompulsoryDynamicContent
38 from DerivationFrameworkCore.ContentHandler import ContentHandler
39 from DerivationFrameworkCore.ContainersOnTheFly import ContainersOnTheFly
40 from DerivationFrameworkCore.FullListOfSmartContainers import FullListOfSmartContainers
41 from AthenaConfiguration.Enums import LHCPeriod
42 import PyUtils.Logging as L
43 msg = L.logging.getLogger('DerivationFramework__SlimmingHelper')
44 msg.setLevel(L.logging.INFO)
45 
46 # This list base class allows the slimming helper to be locked after calling BuildFinalItemList
48  def __init__(self,data=[]):
49  list.__init__(self,data)
50  self.__dict__["_locked"] = False
51  def append(self,name):
52  if self._locked is True:
53  msg.error("Attempting to Modify SlimmingHelper after BuildFinalItemList has Been Called")
54  raise RuntimeError("Late Modification to SlimmingHelper do not modify after calling BuildFinalItemList")
55  else:
56  return list.append(self, name)
57  def __setattr__(self,name,value):
58  if self._locked is True:
59  msg.error("Attempting to Modify SlimmingHelper after BuildFinalItemList has Been Called")
60  raise RuntimeError("Late Modification to SlimmingHelper do not modify after calling BuildFinalItemList")
61  else:
62  self.__dict__[name] = value
63  def lock(self):
64  self.__dict__["_locked"] = True
65 
66 # Builds the "NamesAndTypes" map needed to set up the item list
67 def buildNamesAndTypes(*args):
68  namesAndTypes = {}
69  if len(args)==0:
70  from DerivationFrameworkCore.StaticNamesAndTypes import StaticNamesAndTypes
71  namesAndTypes = StaticNamesAndTypes
72  else:
73  for item in args[0]:
74  item = item.split('#')
75  namesAndTypes[item[1].strip('.')] = item[0]
76  return namesAndTypes
77 
79  def __init__(self, inputName, flags, **kwargs):
80  self.__dict__["_locked"] = False
81  self.name = inputName
82  self.FinalItemList = lockable_list() # The final item list that will be appended to the output stream
83  self.StaticContent = lockable_list() # Content added explicitly via old-style content lists
84  self.ExtraVariables = lockable_list() # Content added by users via variable names (dictionary type:[item1,item,..,N])
85  # Smart slimming (only variables needed for CP + kinematics)
87  self.AllVariables = lockable_list() # Containers for which all branches should be kept
89  self.flags = flags
103  self.IncludeFullTriggerEDMLevel = "" # Specify an AllowedOutputFormat from TriggerEDM.py
105  # Choice of whether user provided a typed container list or not (CA vs non-CA)
106  if "NamesAndTypes" in kwargs.keys(): self.NamesAndTypes = buildNamesAndTypes(kwargs["NamesAndTypes"])
107  else: self.NamesAndTypes = buildNamesAndTypes()
108  self.theHandler = ContentHandler(self.name+"Handler",self.NamesAndTypes)
109 
110  # This hack prevents any members from being modified after lock is set to true, this happens in AppendContentToStream
111  def __setattr__(self,name,value):
112  if self._locked is True:
113  msg.error("Attempting to Modify SlimmingHelper "+self.name+" After AppendContentToStream has Been Called")
114  raise RuntimeError("Late Modification to SlimmingHelper, do not modifiy after calling AppendContentToStream")
115  elif type(value)==list:
116  self.__dict__[name] = lockable_list(value)
117  else:
118  self.__dict__[name] = value
119 
120  # Function to check the configuration of the Smart Slimming List
121  def CheckList(self,masterList):
122  conflicted_items=[]
123  for item in CompulsoryContent:
124  if item.endswith("#*"):
125  compare_str=item[:-2].replace("xAOD::","")
126  for m_item in masterList:
127  if m_item.startswith(compare_str) and m_item.replace("Aux.","") not in CompulsoryDynamicContent:
128  conflicted_items.append(m_item)
129  if len(conflicted_items)!=0:
130  msg.error("Slimming list contains " +str(conflicted_items)+" which are already included in compulsory content: please remove these items from slimming list")
131  raise RuntimeError("Conflict in Slimming List and Compulsory Content")
132 
133 
134  # Loops over final ItemList and appends each item to the stream
135  # Used for jobs not set up in the component accumulator
136  def AppendContentToStream(self,Stream):
137  # Check if the SlimmingHelper is locked.
138  # If it is, just loop over the items and append.
139  # If not, build the item list and then append.
140  if self._locked is False:
141  self.BuildFinalItemList()
142  for item in self.FinalItemList:
143  Stream.AddItem(item)
144 
145  # Returns the final item list. Used for component accumulator jobs
146  def GetItemList(self):
147  # Check if the SlimmingHelper is locked.
148  # If it is, just return the item list.
149  # If not, build the item list and then return it.
150  if self._locked is False:
151  self.BuildFinalItemList()
152  return(self.FinalItemList)
153 
155  # Master item list: all items that must be passed to the ContentHandler for processing
156  # This will now be filled
157  masterItemList = []
158  # All variables list: where all variables are requested, no variable lists are needed
159  # This list ensures that variables are not added individually in such cases
160  allVariablesList = []
161  self.AllVariables += CompulsoryDynamicContent
162  # Add all-variable collections
163  if len(self.AllVariables)>0:
164  for item in self.AllVariables: masterItemList.extend(self.GetWholeContentItems(item))
165  for item in masterItemList:
166  if "Aux." in item:
167  allVariablesList.append(item)
168 
169  # Trigger objects: add them by hand to the smart collection list (to keep the previous interface)
170  triggerContent = False
171 
172  if (self.IncludeAdditionalTriggerContent is True):
173  triggerContent = True
174 
175  if (self.IncludeMuonTriggerContent is True):
176  triggerContent = True
177  self.SmartCollections.append("HLT_xAOD__MuonContainer_MuonEFInfo")
178 
179  if (self.IncludeEGammaTriggerContent is True):
180  triggerContent = True
181  self.SmartCollections.append("HLT_xAOD__PhotonContainer_egamma_Photons")
182 
183  if (self.IncludeJetTriggerContent is True):
184  triggerContent = True
185  self.SmartCollections.append("HLT_xAOD__JetContainer_a4tcemsubjesFS")
186  self.SmartCollections.append("HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf") # Run 3 jet collections
187  from DerivationFrameworkCore.JetTriggerFixContent import JetTriggerFixContent
188  for item in JetTriggerFixContent:
189  self.FinalItemList.append(item)
190 
191  if (self.IncludeTrackingTriggerContent is True):
192  triggerContent = True
193  self.SmartCollections.append("HLT_IDVertex_FS")
194  self.SmartCollections.append("HLT_IDTrack_FS_FTF")
195 
196  if (self.IncludeEtMissTriggerContent is True):
197  triggerContent = True
198  self.SmartCollections.append("HLT_xAOD__TrigMissingETContainer_TrigEFMissingET")
199  from DerivationFrameworkCore.EtMissTriggerFixContent import EtMissTriggerFixContent
200  for item in EtMissTriggerFixContent:
201  self.FinalItemList.append(item)
202  if (self.IncludeDiTauTriggerContent is True):
203  triggerContent = True
204  self.SmartCollections.append("HLT_DiTauJets")
205 
206  if (self.IncludeTauTriggerContent is True):
207  triggerContent = True
208  if self.flags.Trigger.EDMVersion == 2:
209  self.SmartCollections.append("HLT_xAOD__TauJetContainer_TrigTauRecMerged")
210  elif self.flags.Trigger.EDMVersion == 3:
211  self.SmartCollections.append("HLT_TrigTauRecMerged_MVA")
212 
213  if (self.IncludeBJetTriggerContent is True):
214  triggerContent = True
215  self.SmartCollections.append("HLT_xAOD__BTaggingContainer_HLTBjetFex")
216 
217  if (self.IncludeBJetTriggerByYearContent is True):
218  triggerContent = True
219  self.SmartCollections.append("HLT_BJetTriggerByYearContent")
220 
221  if (self.IncludeBPhysTriggerContent is True):
222  triggerContent = True
223  self.SmartCollections.append("HLT_xAOD__TrigBphysContainer_EFBMuMuFex")
224 
225  if (self.IncludeMinBiasTriggerContent is True):
226  triggerContent = True
227  self.SmartCollections.append("HLT_xAOD__TrigVertexCountsContainer_vertexcounts")
228 
229  if (self.IncludeFullTriggerEDMLevel):
230  triggerContent = True
231  self.SmartCollections.append("HLT_FULL_EDM")
232 
233  # Smart items
234  if len(self.SmartCollections)>0:
235  for collection in self.SmartCollections:
236  masterItemList.extend(self.GetSmartItems(collection))
237 
238  # Run some basic tests to prevent clashes with CompulsoryContent content
239  self.CheckList(masterItemList)
240 
241  # Add extra variables
242  if len(self.ExtraVariables)>0:
243  for item in self.ExtraVariables:
244  masterItemList.extend(self.GetExtraItems(item))
245 
246  #Add on-the-fly containers to the dictionary
247  for _cont,_type in ContainersOnTheFly(self.flags):
248  if _cont not in self.AppendToDictionary:
249  self.AppendToDictionary[_cont]=_type
250 
251  # Process the master list...
252 
253  # Main containers (this is a simple list of lines, one per container X collection)
254  mainEntries = []
255  # Aux items (this is a dictionary: collection name and list of aux variables)
256  auxEntries = {}
257  self.theHandler.AppendToDictionary = self.AppendToDictionary
258  mainEntries,auxEntries = self.theHandler.GetContent(masterItemList,allVariablesList)
259 
260  # Add processed items to the stream
261  excludedAuxData = "-clusterAssociation.-PseudoJet"
262  excludedAuxEntries= [entry.strip("-") for entry in excludedAuxData.split(".")]
263  for item in mainEntries:
264  self.FinalItemList.append(item)
265  for item in auxEntries.keys():
266  theDictionary = self.NamesAndTypes.copy()
267  theDictionary.update (self.AppendToDictionary)
268  if item in theDictionary.keys():
269  if (theDictionary[item]=='xAOD::JetAuxContainer'):
270  entry = "xAOD::JetAuxContainer#"+item+"."
271  elif (theDictionary[item]=='xAOD::ShallowAuxContainer'):
272  entry = "xAOD::ShallowAuxContainer#"+item+"."
273  elif (theDictionary[item]=='xAOD::MissingETAuxAssociationMap'):
274  entry = "xAOD::MissingETAuxAssociationMap#"+item+"."
275  elif (theDictionary[item]=='xAOD::JetTrigAuxContainer'):
276  entry = "xAOD::JetTrigAuxContainer#"+item+"."
277  elif ("AuxInfo" in theDictionary[item]):
278  entry = "xAOD::AuxInfoBase!#"+item+"."
279  else:
280  entry = "xAOD::AuxContainerBase!#"+item+"."
281  for element in auxEntries[item]:
282  #Skip anything that shouldn't be written out to a DAOD for tracks or jets
283  if ('xAOD::TrackParticleContainer' in theDictionary[item]) and (element in excludedAuxEntries): continue
284  if ('xAOD::JetAuxContainer' in theDictionary[item]) and (element in excludedAuxEntries): continue
285  length = len(auxEntries[item])
286  if (element==(auxEntries[item])[length-1]):
287  entry += element
288  else:
289  entry += element+"."
290  if ('xAOD::TrackParticleContainer' in theDictionary[item] and auxEntries[item]==""):
291  entry+=excludedAuxData
292  if ('xAOD::JetAuxContainer' in theDictionary[item] and auxEntries[item]=="" and self.CheckDoubleTrigAuxInstruction(item)):
293  entry+=excludedAuxData
294  self.FinalItemList.append(entry)
295 
296  # Add compulsory items not covered by smart slimming (so no expansion)
297  for item in CompulsoryContent:
298  self.FinalItemList.append(item)
299 
300  # non xAOD collections for MinBias
301  if (self.IncludeMinBiasTriggerContent is True):
302  from DerivationFrameworkCore.MinBiasTrigger_nonxAOD_Content import MinBiasTrigger_nonxAOD_Content
303  for item in MinBiasTrigger_nonxAOD_Content:
304  self.FinalItemList.append(item)
305 
306  if (triggerContent and self.IncludeTriggerNavigation):
307  # Run2
308  for item in CompulsoryTriggerNavigation:
309  self.FinalItemList.append(item)
310  # Run3
311  from TrigDecisionTool.TrigDecisionToolHelpers import possible_keys
312  for item in possible_keys:
313  if item == "HLTNav_Summary": # This is not a compact navigation summary collection, unlike the others in this list
314  continue
315  self.FinalItemList.append('xAOD::TrigCompositeContainer#'+item)
316  self.FinalItemList.append('xAOD::TrigCompositeAuxContainer#'+item+'Aux.')
317 
318  # Add non-xAOD and on-the-fly content (not covered by smart slimming so no expansion)
319  badItemsWildcards = []
320  badItemsXAOD = []
321  for item in self.StaticContent:
322  if (self.ValidateStaticContent(item)=="OK"):
323  self.FinalItemList.append(item)
324  if (self.ValidateStaticContent(item)=="WILDCARD"):
325  badItemsWildcards.append(item)
326  if (self.ValidateStaticContent(item)=="XAOD"):
327  badItemsXAOD.append(item)
328  if (len(badItemsWildcards)>0):
329  msg.error("These static items contain wildcards: not permitted")
330  print (badItemsWildcards)
331  raise RuntimeError("Static content list contains wildcards")
332  if (len(badItemsXAOD)>0):
333  msg.error("These static items are xAOD collections: not permitted")
334  print (badItemsXAOD)
335  raise RuntimeError("Static content list contains xAOD collections")
336  #Prevent any more modifications As they will be completely ignored, and hard to debug
337  self.FinalItemList.lock()
338  self.StaticContent.lock()
339  self.ExtraVariables.lock()
340  self.SmartCollections.lock()
341  self.AllVariables.lock()
342  self._locked=True
343 
344 
346 
347 # Get full content (e.g. whole aux store) for this container
348  def GetWholeContentItems(self,collection):
349  items = [collection,collection+"Aux."]
350  return items
351 
352  # Get all branches associated with all tools needed for this container
353  def GetSmartItems(self,collectionName):
354  # Look up what is needed for this container type
355  items = []
356  if collectionName not in FullListOfSmartContainers(self.flags):
357  raise RuntimeError("Smart slimming container "+collectionName+" does not exist or does not have a smart slimming list")
358  if collectionName=="EventInfo":
359  from DerivationFrameworkCore.EventInfoContent import EventInfoContent
360  items.extend(EventInfoContent)
361  elif collectionName=="Electrons":
362  from DerivationFrameworkEGamma.ElectronsCPContent import ElectronsCPContent
363  items.extend(ElectronsCPContent)
364  elif collectionName=="LRTElectrons":
365  from DerivationFrameworkEGamma.LargeD0ElectronsCPContent import LargeD0ElectronsCPContent
366  items.extend(LargeD0ElectronsCPContent)
367  elif collectionName=="Photons":
368  from DerivationFrameworkEGamma.PhotonsCPContent import PhotonsCPContent
369  items.extend(PhotonsCPContent)
370  elif collectionName=="Muons":
371  if not self.flags:
372  raise RuntimeError("We're in the era of component accumulator. Please setup your job with CA if you want to have muons")
373  from DerivationFrameworkMuons.MuonsCommonConfig import MuonCPContentCfg
374  items.extend(MuonCPContentCfg(self.flags))
375  elif collectionName=="MuonsLRT":
376  if not self.flags:
377  raise RuntimeError("We're in the era of component accumulator. Please setup your job with CA if you want to have muons")
378  from DerivationFrameworkMuons.MuonsCommonConfig import MuonCPContentLRTCfg
379  items.extend(MuonCPContentLRTCfg(self.flags))
380  elif collectionName=="TauJets":
381  from DerivationFrameworkTau.TauJetsCPContent import TauJetsCPContent
382  items.extend(TauJetsCPContent)
383  elif collectionName=="DiTauJets":
384  from DerivationFrameworkTau.DiTauJetsCPContent import DiTauJetsCPContent
385  items.extend(DiTauJetsCPContent)
386  elif collectionName=="DiTauJetsLowPt":
387  from DerivationFrameworkTau.DiTauJetsCPContent import DiTauJetsLowPtCPContent
388  items.extend(DiTauJetsLowPtCPContent)
389  elif collectionName=="TauJets_MuonRM":
390  from DerivationFrameworkTau.TauJets_LepRMCPContent import TauJets_MuonRMCPContent
391  if "TauJets_MuonRM" not in self.AppendToDictionary:
392  self.AppendToDictionary["TauJets_MuonRM"] = 'xAOD::TauJetContainer'
393  self.AppendToDictionary["TauJets_MuonRMAux"] = 'xAOD::TauJetAuxContainer'
394  self.AppendToDictionary["TauTracks_MuonRM"] = 'xAOD::TauTrackContainer'
395  self.AppendToDictionary["TauTracks_MuonRMAux"] = 'xAOD::TauTrackAuxContainer'
396  self.AppendToDictionary["TauSecondaryVertices_MuonRM"] = 'xAOD::VertexContainer'
397  self.AppendToDictionary["TauSecondaryVertices_MuonRMAux"] = 'xAOD::VertexAuxContainer'
398  self.AppendToDictionary["TauNeutralParticleFlowObjects_MuonRM"] = 'xAOD::PFOContainer'
399  self.AppendToDictionary["TauNeutralParticleFlowObjects_MuonRMAux"] = 'xAOD::PFOAuxContainer'
400  items.extend(TauJets_MuonRMCPContent)
401  elif collectionName=="TauJets_EleRM":
402  from DerivationFrameworkTau.TauJets_LepRMCPContent import TauJets_EleRMCPContent
403  items.extend(TauJets_EleRMCPContent)
404  elif collectionName=="MET_Baseline_AntiKt4EMTopo":
405  from DerivationFrameworkJetEtMiss.MET_Baseline_AntiKt4EMTopoCPContent import MET_Baseline_AntiKt4EMTopoCPContent
406  items.extend(MET_Baseline_AntiKt4EMTopoCPContent)
407  elif collectionName=="MET_Baseline_AntiKt4EMPFlow":
408  from DerivationFrameworkJetEtMiss.MET_Baseline_AntiKt4EMPFlowCPContent import MET_Baseline_AntiKt4EMPFlowCPContent
409  items.extend(MET_Baseline_AntiKt4EMPFlowCPContent)
410  elif collectionName=="AntiKt2TruthJets":
411  from DerivationFrameworkJetEtMiss.AntiKt2TruthJetsCPContent import AntiKt2TruthJetsCPContent
412  items.extend(AntiKt2TruthJetsCPContent)
413  elif collectionName=="AntiKt4TruthJets":
414  from DerivationFrameworkJetEtMiss.AntiKt4TruthJetsCPContent import AntiKt4TruthJetsCPContent
415  items.extend(AntiKt4TruthJetsCPContent)
416  elif collectionName=="AntiKt4TruthWZJets":
417  from DerivationFrameworkJetEtMiss.AntiKt4TruthWZJetsCPContent import AntiKt4TruthWZJetsCPContent
418  items.extend(AntiKt4TruthWZJetsCPContent)
419  elif collectionName=="AntiKt4TruthDressedWZJets":
420  from DerivationFrameworkJetEtMiss.AntiKt4TruthDressedWZJetsCPContent import AntiKt4TruthDressedWZJetsCPContent
421  items.extend(AntiKt4TruthDressedWZJetsCPContent)
422  elif collectionName=="AntiKt2LCTopoJets":
423  from DerivationFrameworkJetEtMiss.AntiKt2LCTopoJetsCPContent import AntiKt2LCTopoJetsCPContent
424  items.extend(AntiKt2LCTopoJetsCPContent)
425  elif collectionName=="AntiKt4LCTopoJets":
426  from DerivationFrameworkJetEtMiss.AntiKt4LCTopoJetsCPContent import AntiKt4LCTopoJetsCPContent
427  items.extend(AntiKt4LCTopoJetsCPContent)
428  elif collectionName=="AntiKt4EMTopoJets":
429  from DerivationFrameworkJetEtMiss.AntiKt4EMTopoJetsCPContent import AntiKt4EMTopoJetsCPContent
430  items.extend(AntiKt4EMTopoJetsCPContent)
431  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingStandardContent
432  items.extend(BTaggingStandardContent(self.flags, "AntiKt4EMTopoJets"))
433  elif collectionName=="AntiKt4EMTopoLowPtJets":
434  from DerivationFrameworkJetEtMiss.AntiKt4EMTopoLowPtJetsCPContent import AntiKt4EMTopoLowPtJetsCPContent
435  items.extend(AntiKt4EMTopoLowPtJetsCPContent)
436  elif collectionName=="AntiKt4EMTopoNoPtCutJets":
437  from DerivationFrameworkJetEtMiss.AntiKt4EMTopoNoPtCutJetsCPContent import AntiKt4EMTopoNoPtCutJetsCPContent
438  items.extend(AntiKt4EMTopoNoPtCutJetsCPContent)
439  elif collectionName=="AntiKt4EMPFlowJets":
440  from DerivationFrameworkJetEtMiss.AntiKt4EMPFlowJetsCPContent import AntiKt4EMPFlowJetsCPContent
441  items.extend(AntiKt4EMPFlowJetsCPContent)
442  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingStandardContent
443  items.extend(BTaggingStandardContent(self.flags, "AntiKt4EMPFlowJets"))
444  elif collectionName=="AntiKt4EMPFlowJets_FTAG_expert":
445  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingExpertContent
446  items.extend(BTaggingExpertContent(self.flags, "AntiKt4EMPFlowJets"))
447  elif collectionName=="AntiKt4EMPFlowLowPtJets":
448  from DerivationFrameworkJetEtMiss.AntiKt4EMPFlowLowPtJetsCPContent import AntiKt4EMPFlowLowPtJetsCPContent
449  items.extend(AntiKt4EMPFlowLowPtJetsCPContent)
450  elif collectionName=="AntiKt4EMPFlowByVertexJets":
451  from DerivationFrameworkJetEtMiss.AntiKt4EMPFlowByVertexJetsCPContent import AntiKt4EMPFlowByVertexJetsCPContent
452  items.extend(AntiKt4EMPFlowByVertexJetsCPContent)
453  elif collectionName=="AntiKt4UFOCSSKJets":
454  from DerivationFrameworkJetEtMiss.AntiKt4UFOCSSKJetsCPContent import AntiKt4UFOCSSKJetsCPContent
455  items.extend(AntiKt4UFOCSSKJetsCPContent)
456  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingStandardContent
457  items.extend(BTaggingStandardContent(self.flags, "AntiKt4UFOCSSKJets"))
458  elif collectionName=="AntiKt4UFOCSSKJets_FTAG_expert":
459  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingExpertContent
460  items.extend(BTaggingExpertContent(self.flags, "AntiKt4UFOCSSKJets"))
461  elif collectionName=="AntiKt4UFOCSSKLowPtJets":
462  from DerivationFrameworkJetEtMiss.AntiKt4UFOCSSKLowPtJetsCPContent import AntiKt4UFOCSSKLowPtJetsCPContent
463  items.extend(AntiKt4UFOCSSKLowPtJetsCPContent)
464  elif collectionName=="AntiKt10TruthJets":
465  from DerivationFrameworkJetEtMiss.AntiKt10TruthJetsCPContent import AntiKt10TruthJetsCPContent
466  items.extend(AntiKt10TruthJetsCPContent)
467  elif collectionName=="AntiKt10TruthWZJets":
468  from DerivationFrameworkJetEtMiss.AntiKt10TruthWZJetsCPContent import AntiKt10TruthWZJetsCPContent
469  items.extend(AntiKt10TruthWZJetsCPContent)
470  elif collectionName=="AntiKt10LCTopoJets":
471  from DerivationFrameworkJetEtMiss.AntiKt10LCTopoJetsCPContent import AntiKt10LCTopoJetsCPContent
472  items.extend(AntiKt10LCTopoJetsCPContent)
473  elif collectionName=="AntiKt10TrackCaloClusterJets":
474  from DerivationFrameworkJetEtMiss.AntiKt10TrackCaloClusterJetsCPContent import AntiKt10TrackCaloClusterJetsCPContent
475  items.extend(AntiKt10TrackCaloClusterJetsCPContent)
476  elif collectionName=="AntiKt10UFOCSSKJets":
477  from DerivationFrameworkJetEtMiss.AntiKt10UFOCSSKJetsCPContent import AntiKt10UFOCSSKJetsCPContent
478  items.extend(AntiKt10UFOCSSKJetsCPContent)
479  elif collectionName=="AntiKt10UFOCHSJets":
480  from DerivationFrameworkJetEtMiss.AntiKt10UFOCHSJetsCPContent import AntiKt10UFOCHSJetsCPContent
481  items.extend(AntiKt10UFOCHSJetsCPContent)
482  elif collectionName=="AntiKt10TruthTrimmedPtFrac5SmallR20Jets":
483  from DerivationFrameworkJetEtMiss.AntiKt10TruthTrimmedPtFrac5SmallR20JetsCPContent import AntiKt10TruthTrimmedPtFrac5SmallR20JetsCPContent
484  items.extend(AntiKt10TruthTrimmedPtFrac5SmallR20JetsCPContent)
485  elif collectionName=="AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets":
486  from DerivationFrameworkJetEtMiss.AntiKt10LCTopoTrimmedPtFrac5SmallR20JetsCPContent import AntiKt10LCTopoTrimmedPtFrac5SmallR20JetsCPContent
487  items.extend(AntiKt10LCTopoTrimmedPtFrac5SmallR20JetsCPContent)
488  elif collectionName=="AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20Jets":
489  from DerivationFrameworkJetEtMiss.AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20JetsCPContent import AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20JetsCPContent
490  if "AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20Jets" not in self.AppendToDictionary:
491  self.AppendToDictionary["AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20Jets"]='xAOD::JetContainer'
492  self.AppendToDictionary["AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20JetsAux"]='xAOD::JetAuxContainer'
493  items.extend(AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20JetsCPContent)
494  elif collectionName=="AntiKt10TruthSoftDropBeta100Zcut10Jets":
495  from DerivationFrameworkJetEtMiss.AntiKt10TruthSoftDropBeta100Zcut10JetsCPContent import AntiKt10TruthSoftDropBeta100Zcut10JetsCPContent
496  items.extend(AntiKt10TruthSoftDropBeta100Zcut10JetsCPContent)
497  elif collectionName=="AntiKt10TruthDressedWZSoftDropBeta100Zcut10Jets":
498  from DerivationFrameworkJetEtMiss.AntiKt10TruthDressedWZSoftDropBeta100Zcut10JetsCPContent import AntiKt10TruthDressedWZSoftDropBeta100Zcut10JetsCPContent
499  items.extend(AntiKt10TruthDressedWZSoftDropBeta100Zcut10JetsCPContent)
500  elif collectionName=="AntiKt10UFOCHSSoftDropBeta100Zcut10Jets":
501  from DerivationFrameworkJetEtMiss.AntiKt10UFOCHSSoftDropBeta100Zcut10JetsCPContent import AntiKt10UFOCHSSoftDropBeta100Zcut10JetsCPContent
502  items.extend(AntiKt10UFOCHSSoftDropBeta100Zcut10JetsCPContent)
503  elif collectionName=="AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets":
504  from DerivationFrameworkJetEtMiss.AntiKt10UFOCSSKSoftDropBeta100Zcut10JetsCPContent import AntiKt10UFOCSSKSoftDropBeta100Zcut10JetsCPContent
505  items.extend(AntiKt10UFOCSSKSoftDropBeta100Zcut10JetsCPContent)
506  from DerivationFrameworkFlavourTag.BTaggingContent import BTaggingLargeRContent
507  items.extend(BTaggingLargeRContent(self.flags, "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"))
508  elif collectionName=="AntiKtVR30Rmax4Rmin02PV0TrackJets":
509  from DerivationFrameworkJetEtMiss.AntiKtVR30Rmax4Rmin02PV0TrackJetsCPContent import AntiKtVR30Rmax4Rmin02PV0TrackJetsCPContent
510  items.extend(AntiKtVR30Rmax4Rmin02PV0TrackJetsCPContent)
511  elif collectionName=="InDetTrackParticles":
512  from DerivationFrameworkInDet.InDetTrackParticlesCPContent import InDetTrackParticlesCPContent
513  items.extend(InDetTrackParticlesCPContent)
514  if self.flags.GeoModel.Run >= LHCPeriod.Run4:
515  from DerivationFrameworkInDet.InDetTrackParticlesCPContentRun4 import InDetTrackParticlesCPContentRun4
516  items.extend(InDetTrackParticlesCPContentRun4)
517  elif collectionName=="InDetPseudoTrackParticles":
518  from DerivationFrameworkInDet.InDetPseudoTrackParticlesCPContent import InDetPseudoTrackParticlesCPContent
519  items.extend(InDetPseudoTrackParticlesCPContent)
520  elif collectionName=="InDetReplacedWithPseudoTrackParticles":
521  from DerivationFrameworkInDet.InDetReplacedWithPseudoTrackParticlesCPContent import InDetReplacedWithPseudoTrackParticlesCPContent
522  items.extend(InDetReplacedWithPseudoTrackParticlesCPContent)
523  elif collectionName=="InDetReplacedWithPseudoFromBTrackParticles":
524  from DerivationFrameworkInDet.InDetReplacedWithPseudoFromBTrackParticlesCPContent import InDetReplacedWithPseudoFromBTrackParticlesCPContent
525  items.extend(InDetReplacedWithPseudoFromBTrackParticlesCPContent)
526  elif collectionName=="InDetReplacedWithPseudoNotFromBTrackParticles":
527  from DerivationFrameworkInDet.InDetReplacedWithPseudoNotFromBTrackParticlesCPContent import InDetReplacedWithPseudoNotFromBTrackParticlesCPContent
528  items.extend(InDetReplacedWithPseudoNotFromBTrackParticlesCPContent)
529  elif collectionName=="InDetPlusPseudoTrackParticles":
530  from DerivationFrameworkInDet.InDetPlusPseudoTrackParticlesCPContent import InDetPlusPseudoTrackParticlesCPContent
531  items.extend(InDetPlusPseudoTrackParticlesCPContent)
532  elif collectionName=="InDetPlusPseudoFromBTrackParticles":
533  from DerivationFrameworkInDet.InDetPlusPseudoFromBTrackParticlesCPContent import InDetPlusPseudoFromBTrackParticlesCPContent
534  items.extend(InDetPlusPseudoFromBTrackParticlesCPContent)
535  elif collectionName=="InDetPlusPseudoNotFromBTrackParticles":
536  from DerivationFrameworkInDet.InDetPlusPseudoNotFromBTrackParticlesCPContent import InDetPlusPseudoNotFromBTrackParticlesCPContent
537  items.extend(InDetPlusPseudoNotFromBTrackParticlesCPContent)
538  elif collectionName=="InDetNoFakesTrackParticles":
539  from DerivationFrameworkInDet.InDetNoFakesTrackParticlesCPContent import InDetNoFakesTrackParticlesCPContent
540  items.extend(InDetNoFakesTrackParticlesCPContent)
541  elif collectionName=="InDetNoFakesFromBTrackParticles":
542  from DerivationFrameworkInDet.InDetNoFakesFromBTrackParticlesCPContent import InDetNoFakesFromBTrackParticlesCPContent
543  items.extend(InDetNoFakesFromBTrackParticlesCPContent)
544  elif collectionName=="InDetNoFakesNotFromBTrackParticles":
545  from DerivationFrameworkInDet.InDetNoFakesNotFromBTrackParticlesCPContent import InDetNoFakesNotFromBTrackParticlesCPContent
546  items.extend(InDetNoFakesNotFromBTrackParticlesCPContent)
547  elif collectionName=="InDetSiSPSeededTracksParticles":
548  from DerivationFrameworkInDet.InDetSiSPSeededTracksParticlesCPContent import InDetSiSPSeededTracksParticlesCPContent
549  items.extend(InDetSiSPSeededTracksParticlesCPContent)
550  elif collectionName=="InDetLargeD0TrackParticles":
551  from DerivationFrameworkInDet.InDetLargeD0TrackParticlesCPContent import InDetLargeD0TrackParticlesCPContent
552  items.extend(InDetLargeD0TrackParticlesCPContent)
553  elif collectionName=="PrimaryVertices":
554  from DerivationFrameworkInDet.PrimaryVerticesCPContent import PrimaryVerticesCPContent
555  items.extend(PrimaryVerticesCPContent)
556  if self.flags.GeoModel.Run >= LHCPeriod.Run4:
557  from DerivationFrameworkInDet.PrimaryVerticesCPContentRun4 import PrimaryVerticesCPContentRun4
558  items.extend(PrimaryVerticesCPContentRun4)
559  elif self.IncludeAdditionalTriggerContent is True:
560  from DerivationFrameworkCore.AdditionalTriggerContent import AdditionalTriggerContent
561  items.extend(AdditionalTriggerContent)
562  elif collectionName=="HLT_xAOD__MuonContainer_MuonEFInfo":
563  from DerivationFrameworkMuons.MuonTriggerContent import MuonTriggerContent
564  items.extend(MuonTriggerContent)
565  elif collectionName=="HLT_xAOD__PhotonContainer_egamma_Photons":
566  from DerivationFrameworkCore.EGammaTriggerContent import EGammaTriggerContent
567  items.extend(EGammaTriggerContent)
568  elif collectionName=="HLT_xAOD__JetContainer_a4tcemsubjesFS":
569  from DerivationFrameworkCore.JetTriggerContent import JetTriggerContent
570  items.extend(JetTriggerContent)
571  elif collectionName=="HLT_IDVertex_FS":
572  from DerivationFrameworkCore.TrackingTriggerContent import TrackingTriggerContent
573  items.extend(TrackingTriggerContent)
574  elif collectionName=="HLT_IDTrack_FS_FTF":
575  from DerivationFrameworkCore.TrackingTriggerContent import TrackingTriggerContent
576  items.extend(TrackingTriggerContent)
577  elif collectionName=="HLT_xAOD__TrigMissingETContainer_TrigEFMissingET":
578  from DerivationFrameworkCore.EtMissTriggerContent import EtMissTriggerContent
579  items.extend(EtMissTriggerContent)
580  elif collectionName=="HLT_xAOD__TauJetContainer_TrigTauRecMerged":
581  from DerivationFrameworkCore.TauTriggerContent import TauTriggerContentRun2
582  items.extend(TauTriggerContentRun2)
583  elif collectionName=="HLT_TrigTauRecMerged_MVA":
584  from DerivationFrameworkCore.TauTriggerContent import TauTriggerContentRun3
585  items.extend(TauTriggerContentRun3)
586  elif collectionName=="HLT_DiTauJets":
587  from DerivationFrameworkCore.DiTauTriggerContent import DiTauTriggerContent
588  items.extend(DiTauTriggerContent)
589  elif collectionName=="HLT_xAOD__BTaggingContainer_HLTBjetFex":
590  from DerivationFrameworkFlavourTag.BJetTriggerContent import BJetTriggerContent
591  items.extend(BJetTriggerContent)
592  elif collectionName=="HLT_xAOD__TrigBphysContainer_EFBMuMuFex":
593  from DerivationFrameworkCore.BPhysTriggerContent import BPhysTriggerContent
594  items.extend(BPhysTriggerContent)
595  elif collectionName=="HLT_xAOD__TrigVertexCountsContainer_vertexcounts":
596  from DerivationFrameworkCore.MinBiasTriggerContent import MinBiasTriggerContent
597  items.extend(MinBiasTriggerContent)
598  elif collectionName=="HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf":
599  from DerivationFrameworkCore.JetTriggerContentRun3 import JetTriggerContentRun3
600  from DerivationFrameworkCore.JetTriggerContentRun3TLA import JetTriggerContentRun3TLA
602  items.extend(JetTriggerContentRun3)
603  else:
604  items.extend(JetTriggerContentRun3TLA)
605  elif collectionName=="HLT_BJetTriggerByYearContent":
606  from DerivationFrameworkTrigger.BJetTriggerByYearContent import getBJetTriggerContent
607  items.extend(getBJetTriggerContent(self.flags))
608  elif collectionName=="HLT_FULL_EDM":
609  from DerivationFrameworkTrigger.TrigSlimmingHelper import addTrigEDMSetToOutput
610  items.extend(addTrigEDMSetToOutput(self.flags, self, edmSet=self.IncludeFullTriggerEDMLevel))
611 
612  else:
613  raise RuntimeError("Smart slimming container "+collectionName+" does not exist or does not have a smart slimming list")
614  return items
615 
616  # Kinematics content only
617  def GetKinematicsItems(self,collectionName):
618  # Content lines in the same style as is produced by the PrintStats
619  kinematicsLine = collectionName+"Aux."+"pt.eta.phi.m"
620  items = [collectionName,kinematicsLine]
621  return items
622 
623  # Extra content, listed via container
624  def GetExtraItems(self,userInput):
625  # Build up a content list in the same style as is produced by the PrintStats
626  splitup = userInput.split(".")
627  auxContainerName = splitup[0]+"Aux"
628  items = []
629  items.append(splitup[0])
630  auxLine = ""
631  length = len(splitup)
632  for string in splitup:
633  if string==splitup[0]:
634  auxLine = auxContainerName+"."
635  continue
636  if string==splitup[length-1]:
637  auxLine = auxLine+string
638  else:
639  auxLine = auxLine+string+"."
640  items.append(auxLine)
641  return items
642 
643  # Check that static content is legit
644  def ValidateStaticContent(self,item):
645  # No wildcards
646  if ("*" in item):
647  return "WILDCARD"
648  # No xAOD containers
649  sep = item.split("#")
650  if ("xAOD::" in item and sep[1] in self.NamesAndTypes.keys()):
651  return "XAOD"
652  return "OK"
653 
654  # Required to prevent:
655  # Mixing up negative and positive Aux selections is not supported: xAOD::JetAuxContainer#HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJetsAux. : {'-clusterAssociation.-PseudoJet', 'phi.eta.pt.m'}
656  # Where the negative rule comes from the above excludedAuxData loop, and the positive rule comes from the IncludeFullTriggerEDMLevel flag and "HLT_FULL_EDM" smart-collection.
657  # Results in all content being stored for this container (will write all attributes. Original selection was: {'', 'phi.m.eta.pt'}) which is OK as it does not have either of the above
658  # decorations which are not possible to include at the DAOD level. Current decorations: viewIndex, btaggingLink, JVFCorr, Jvt, SumPtTrkPt500
660  if self.IncludeFullTriggerEDMLevel and 'HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJetsAux' in aux:
661  return False
662  return True
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:310
python.BTaggingContent.BTaggingStandardContent
def BTaggingStandardContent(flags, jetcol)
Definition: BTaggingContent.py:79
SlimmingHelper.SlimmingHelper.FinalItemList
FinalItemList
Definition: SlimmingHelper.py:82
SlimmingHelper.SlimmingHelper.theHandler
theHandler
Definition: SlimmingHelper.py:108
SlimmingHelper.SlimmingHelper.GetItemList
def GetItemList(self)
Definition: SlimmingHelper.py:146
SlimmingHelper.lockable_list.__init__
def __init__(self, data=[])
Definition: SlimmingHelper.py:48
SlimmingHelper.SlimmingHelper.IncludeMinBiasTriggerContent
IncludeMinBiasTriggerContent
Definition: SlimmingHelper.py:102
SlimmingHelper.SlimmingHelper.IncludeAdditionalTriggerContent
IncludeAdditionalTriggerContent
Definition: SlimmingHelper.py:91
SlimmingHelper.SlimmingHelper.flags
flags
Definition: SlimmingHelper.py:89
SlimmingHelper.SlimmingHelper.StaticContent
StaticContent
Definition: SlimmingHelper.py:83
SlimmingHelper.SlimmingHelper.AppendToDictionary
AppendToDictionary
Definition: SlimmingHelper.py:88
SlimmingHelper.SlimmingHelper.IncludeTrackingTriggerContent
IncludeTrackingTriggerContent
Definition: SlimmingHelper.py:95
SlimmingHelper.lockable_list.append
def append(self, name)
Definition: SlimmingHelper.py:51
SlimmingHelper.SlimmingHelper.ValidateStaticContent
def ValidateStaticContent(self, item)
Definition: SlimmingHelper.py:644
python.MuonsCommonConfig.MuonCPContentCfg
def MuonCPContentCfg(flags)
Definition: MuonsCommonConfig.py:201
SlimmingHelper.SlimmingHelper.NamesAndTypes
NamesAndTypes
Definition: SlimmingHelper.py:106
SlimmingHelper.lockable_list.__setattr__
def __setattr__(self, name, value)
Definition: SlimmingHelper.py:57
FullListOfSmartContainers
Definition: FullListOfSmartContainers.py:1
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
SlimmingHelper.SlimmingHelper.GetWholeContentItems
def GetWholeContentItems(self, collection)
Definition: SlimmingHelper.py:348
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
SlimmingHelper.SlimmingHelper.IncludeBJetTriggerByYearContent
IncludeBJetTriggerByYearContent
Definition: SlimmingHelper.py:100
SlimmingHelper.SlimmingHelper.GetKinematicsItems
def GetKinematicsItems(self, collectionName)
Definition: SlimmingHelper.py:617
ContainersOnTheFly
Definition: ContainersOnTheFly.py:1
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
SlimmingHelper.SlimmingHelper.IncludeEGammaTriggerContent
IncludeEGammaTriggerContent
Definition: SlimmingHelper.py:93
python.BTaggingContent.BTaggingExpertContent
def BTaggingExpertContent(flags, jetcol)
Definition: BTaggingContent.py:125
SlimmingHelper.SlimmingHelper
Definition: SlimmingHelper.py:78
SlimmingHelper.SlimmingHelper.__setattr__
def __setattr__(self, name, value)
Definition: SlimmingHelper.py:111
SlimmingHelper.SlimmingHelper.IncludeDiTauTriggerContent
IncludeDiTauTriggerContent
Definition: SlimmingHelper.py:97
python.BTaggingContent.BTaggingLargeRContent
def BTaggingLargeRContent(flags, jetcol)
Definition: BTaggingContent.py:57
SlimmingHelper.SlimmingHelper.SmartCollections
SmartCollections
Definition: SlimmingHelper.py:86
SlimmingHelper.SlimmingHelper.CheckList
def CheckList(self, masterList)
Definition: SlimmingHelper.py:121
BJetTriggerByYearContent.getBJetTriggerContent
def getBJetTriggerContent(flags)
Definition: BJetTriggerByYearContent.py:8
TrigSlimmingHelper.addTrigEDMSetToOutput
def addTrigEDMSetToOutput(flags, SlimmingHelper helper, str edmSet, int edmVersion=None)
Definition: TrigSlimmingHelper.py:9
SlimmingHelper.buildNamesAndTypes
def buildNamesAndTypes(*args)
Definition: SlimmingHelper.py:67
SlimmingHelper.SlimmingHelper.IncludeBJetTriggerContent
IncludeBJetTriggerContent
Definition: SlimmingHelper.py:99
SlimmingHelper.SlimmingHelper.ExtraVariables
ExtraVariables
Definition: SlimmingHelper.py:84
SlimmingHelper.SlimmingHelper.IncludeEtMissTriggerContent
IncludeEtMissTriggerContent
Definition: SlimmingHelper.py:98
SlimmingHelper.SlimmingHelper.AllVariables
AllVariables
Definition: SlimmingHelper.py:87
SlimmingHelper.SlimmingHelper.IncludeFullTriggerEDMLevel
IncludeFullTriggerEDMLevel
Definition: SlimmingHelper.py:103
SlimmingHelper.SlimmingHelper.AppendContentToStream
def AppendContentToStream(self, Stream)
Definition: SlimmingHelper.py:136
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
SlimmingHelper.SlimmingHelper.GetSmartItems
def GetSmartItems(self, collectionName)
Definition: SlimmingHelper.py:353
SlimmingHelper.SlimmingHelper.CheckDoubleTrigAuxInstruction
def CheckDoubleTrigAuxInstruction(self, aux)
Definition: SlimmingHelper.py:659
SlimmingHelper.SlimmingHelper.IncludeMuonTriggerContent
IncludeMuonTriggerContent
Definition: SlimmingHelper.py:92
SlimmingHelper.SlimmingHelper.__init__
def __init__(self, inputName, flags, **kwargs)
Definition: SlimmingHelper.py:79
ContentHandler
Definition: ContentHandler.py:1
SlimmingHelper.SlimmingHelper.GetExtraItems
def GetExtraItems(self, userInput)
Definition: SlimmingHelper.py:624
SlimmingHelper.lockable_list.lock
def lock(self)
Definition: SlimmingHelper.py:63
SlimmingHelper.SlimmingHelper.IncludeJetTriggerContent
IncludeJetTriggerContent
Definition: SlimmingHelper.py:94
SlimmingHelper.SlimmingHelper.IncludeBPhysTriggerContent
IncludeBPhysTriggerContent
Definition: SlimmingHelper.py:101
SlimmingHelper.SlimmingHelper.IncludeTriggerNavigation
IncludeTriggerNavigation
Definition: SlimmingHelper.py:90
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
python.MuonsCommonConfig.MuonCPContentLRTCfg
def MuonCPContentLRTCfg(flags)
Definition: MuonsCommonConfig.py:225
SlimmingHelper.SlimmingHelper.OverrideJetTriggerContentWithTLAContent
OverrideJetTriggerContentWithTLAContent
Definition: SlimmingHelper.py:104
calibdata.copy
bool copy
Definition: calibdata.py:26
SlimmingHelper.SlimmingHelper.BuildFinalItemList
def BuildFinalItemList(self)
Definition: SlimmingHelper.py:154
SlimmingHelper.SlimmingHelper._locked
_locked
Definition: SlimmingHelper.py:342
SlimmingHelper.SlimmingHelper.name
name
Definition: SlimmingHelper.py:81
SlimmingHelper.SlimmingHelper.IncludeTauTriggerContent
IncludeTauTriggerContent
Definition: SlimmingHelper.py:96
SlimmingHelper.lockable_list
Definition: SlimmingHelper.py:47