ATLAS Offline Software
Loading...
Searching...
No Matches
L1CALOCore.py
Go to the documentation of this file.
1#!/usr/bin/env python
2# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3#====================================================================
4# L1CALOCore.py
5# Define the list of containers for the L1Calo derivations
6#====================================================================
7
8from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
9from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
10from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
11from AthenaCommon.Constants import INFO
12from AthenaConfiguration.ComponentFactory import CompFactory
13from AthenaConfiguration.Enums import Format, MetadataCategory
14
15#
16def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
17 """
18 Core fragment for L1CALO derivations
19 """
20 from AthenaCommon.Logging import logging
21 log = logging.getLogger('L1CALO')
22 log.info('Called L1CaloCore config for derivation %s',deriv)
23
24 streamNameStem = "DAOD_" + deriv
25 streamName = "Stream" + streamNameStem
26
27 acc = ComponentAccumulator()
28
29 # the derivation can also be run on pool files e.g. MC - need to switch off many decoders etc..
30 # Note: static content not allowed when running on pool
31 isNotPool = flags.Input.Format is not Format.POOL
32
33 fillSuperCells=False
34
35 # has the L1Calo simulation been configured by job flags
36 isL1CaloSim = flags.Trigger.L1.doeFex and flags.Trigger.L1.dojFex and flags.Trigger.L1.dogFex
37
38 # decode the legacy L1Calo information - required because flags.Trigger.doLVL1 is False
39 if isNotPool:
40 from TrigT1CaloByteStream.LVL1CaloRun2ByteStreamConfig import LVL1CaloRun2ReadBSCfg
41 acc.merge(LVL1CaloRun2ReadBSCfg(flags))
42
43 # set up thinning tools
44 thinningTools = []
45
46 # set up legacy trigger tower thinning for L1CALO1
47 if 'L1CALO1' in deriv and isNotPool:
48 from TrigT1CaloCalibTools.L1CaloCalibToolsConfig import LegacyTriggerTowerThinningCfg
49 LegacyTowerThinningTool = acc.getPrimaryAndMerge(LegacyTriggerTowerThinningCfg(
50 flags,
51 name = "L1CALOCaloThinningTool",
52 StreamName = streamName,
53 TriggerTowerLocation = "xAODTriggerTowers",
54 MinCaloCellET = 0.8,
55 MinADC = 36,
56 UseRandom = True,
57 MinRandom = 0.01 ) )
58 thinningTools.append(LegacyTowerThinningTool)
59
60 # set up decorators
61 # Legacy Trigger Tower decorator
62 if isNotPool:
63 from TrigT1CaloCalibTools.L1CaloCalibToolsConfig import LegacyTriggerTowerDecoratorCfg
64 acc.merge(LegacyTriggerTowerDecoratorCfg(flags, name = 'L1CaloTriggerTowerDecorator'))
65
66 # setup skimming tool example (AOD data only)
67 skimmingTools = []
68 if not isNotPool and not flags.Input.isMC:
69 # example trigger skimming tool as with JETM10.py
70 skimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(name = "L1CALOSkimmingTool1",
71 TriggerListOR = ["HLT_noalg_L1XE.*"] )
72 acc.addPublicTool(skimmingTool, primary = True)
73 skimmingTools.append(skimmingTool)
74
75 #
76 augmentationTools = []
77
78 # Set up the derivation kernel
79 DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
80 acc.addEventAlgo(DerivationKernel(
81 name = "DFL1CALO_KERN",
82 AugmentationTools = augmentationTools,
83 ThinningTools = thinningTools,
84 SkimmingTools = skimmingTools,
85 RunSkimmingFirst = not isNotPool,
86 doChronoStat=(flags.Concurrency.NumThreads <= 1),
87 OutputLevel = INFO))
88
89 # Phase 1 setup
90 # emulate/decorate the input towers
91 # first need to decode LATOME readout
92 if isNotPool:
93 from L1CaloFEXSim.L1CaloFEXSimCfg import ReadSCellFromByteStreamCfg
94 acc.merge(ReadSCellFromByteStreamCfg(flags))
95
96 # Emulate jFEX input towers
97 emulatedDataTowersKey = "L1_jFexEmulatedTowers"
98 if flags.Trigger.L1.dojFex and isNotPool:
99 from L1CaloFEXAlgos.FexEmulatedTowersConfig import jFexEmulatedTowersCfg
100 acc.merge(jFexEmulatedTowersCfg(flags, writeKey=emulatedDataTowersKey))
101
102 # Decorate any jFEX data towers
103 extraJfexInfo = False # for decorating with SCell inputs to the towers
104 if flags.Trigger.L1.dojFex and isNotPool:
105 from L1CaloFEXAlgos.L1CaloFEXAlgosConfig import L1CalojFEXDecoratorCfg
106 acc.merge(L1CalojFEXDecoratorCfg(flags, ExtraInfo=extraJfexInfo))
107
108 # Decorate the emulated jFEX towers
109 if flags.Trigger.L1.dojFex and isNotPool:
110 from L1CaloFEXAlgos.L1CaloFEXAlgosConfig import L1CalojFEXDecoratorCfg
111 acc.merge(L1CalojFEXDecoratorCfg(flags,name='jFexTower2SCellEmulatedDecorator',jTowersReadKey=emulatedDataTowersKey,ExtraInfo=extraJfexInfo))
112
113 # determine if enough samples to build SC_ET
114 nsamples=-1
115 if not flags.Input.isMC:
116 from LArConditionsCommon.LArRunFormat import getLArDTInfoForRun
117 runinfo = getLArDTInfoForRun(flags.Input.RunNumbers[0], connstring="COOLONL_LAR/CONDBR2")
118 #
119 for i in range(0,len(runinfo.streamTypes())):
120 log.info("LAr DT runinfo index: %s type: %s nsamples: %s", i, runinfo.streamTypes()[i], runinfo.streamLengths()[i])
121 if "ADC" in runinfo.streamTypes()[i]:
122 nsamples=runinfo.streamLengths()[i]
123
124 # Create SC_ET if sufficient samples in data or it is MC
125 if nsamples==6:
126 # first built the Supercells from the ADC
127 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBSCCfg
128 acc.merge(LArElecCalibDBSCCfg(flags, condObjs=["DAC2uA", "HVScaleCorr", "MphysOverMcal", "OFC", "Pedestal", "Ramp", "uA2MeV"]))
129 larLATOMEBuilderAlg=CompFactory.LArLATOMEBuilderAlg("LArLATOMEBuilderAlg2")
130 # for standard runs with baseline corrections
131 baselineCorr = True # need to find a run with no baseline corrections and the correct settings to see what to expect
132 larLATOMEBuilderAlg.isADCBas = True if baselineCorr else False
133 larLATOMEBuilderAlg.LArDigitKey = "SC_ADC_BAS" if baselineCorr else 'SC'
134 # output
135 larLATOMEBuilderAlg.LArRawSCKey = "SC_RECO2"
136 acc.addEventAlgo(larLATOMEBuilderAlg)
137
138 # create SCell_ET without timing applied
139 from LArCellRec.LArRAWtoSuperCellConfig import LArRAWtoSuperCellCfg
140 acc.merge(LArRAWtoSuperCellCfg(flags, name="LArRAWRecotoSuperCell2", mask=True, doReco=True, SCIn="SC_RECO2", SCellContainerOut="SCell_ET") )
141 # build jFEX towers from SC_ET
142 acc.merge(jFexEmulatedTowersCfg(flags, name="jFexEmulatedTowerMakerNoId", SCin="SCell_ET", writeKey="L1_jFexEmulatedNoIdTowers",
143 OfflineCaloCell="AllCalo"))
144 elif flags.Input.isMC:
145 # the TriggerTowerDecoration for tile not useable for MC, but we can decorate for LAr
146 # if we do not run the simulation on MC the SCells are written so nothing to do here
147 if isL1CaloSim:
148 # read SCell (default is without timing applied)
149 # Need geometry and conditions for the SCell converter from POOL
150 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
151 acc.merge(LArGMCfg(flags))
152 # build jFEX towers with extra decoration
153 from L1CaloFEXAlgos.FexEmulatedTowersConfig import jFexEmulatedTowersCfg
154 acc.merge(jFexEmulatedTowersCfg(flags, name="jFexEmulatedTowerMakerNoId", SCin="SCell", writeKey="L1_jFexEmulatedNoIdTowers",
155 OfflineCaloCell="AllCalo"))
156
157 # Emulate eFEX input towers
158 if flags.Trigger.L1.doeFex and isNotPool:
159 from L1CaloFEXAlgos.FexEmulatedTowersConfig import eFexEmulatedTowersCfg
160 eFexEmulatedTool = eFexEmulatedTowersCfg(flags,'L1_eFexEmulatedTowers')
161 acc.merge(eFexEmulatedTool)
162
163
164 # Re-simulate from LATOME (for both data and POOL files with SCells)
165 from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
166 if isNotPool:
167 acc.merge(L1CaloFEXSimCfg(flags, simulateAltTau=True))
168 elif isL1CaloSim:
169 SCellType = flags.Trigger.L1.L1CaloSuperCellContainerName
170 if SCellType in flags.Input.Collections:
171 acc.merge(L1CaloFEXSimCfg(flags, simulateAltTau=True))
172 # Need to deal with database for MC productions where L1Calo DB was not in global tag
173 if flags.Input.isMC:
174 from Campaigns.Utils import Campaign
175 log.info("MC Campaign",flags.Input.MCCampaign)
176 if flags.Input.MCCampaign != Campaign.MC23e:
177 if flags.Trigger.L1.doeFex:
178 from IOVDbSvc.IOVDbSvcConfig import addOverride
179 acc.merge(addOverride(flags, '/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts', 'EfexNoiseCuts-RUN3-MCDEFAULT-TEST-00'))
180 acc.merge(addOverride(flags, '/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib', 'EfexEnergyCalib-RUN3-MCDEFAULT-TEST-00'))
181 if flags.Trigger.L1.dojFex:
182 from IOVDbSvc.IOVDbSvcConfig import addOverride
183 acc.merge(addOverride(flags, '/TRIGGER/L1Calo/V1/Calibration/JfexSystemSettings', 'JfexSystemSettings-RUN3-MCDEFAULT-TEST'))
184 acc.merge(addOverride(flags, '/TRIGGER/L1Calo/V1/Calibration/JfexModuleSettings', 'JfexModuleSettings-RUN3-MCDEFAULT-TEST'))
185 acc.merge(addOverride(flags, '/TRIGGER/L1Calo/V1/Calibration/JfexNoiseCuts', 'JfexNoiseCuts-RUN3-MCDEFAULT-TEST'))
186
187 # decorate the eFEX TOBs
188 if flags.Trigger.L1.doeFex and isNotPool:
189 # Temporary fix to ensure the L1 TOBs are decoded by the Trigger
190 from TrigDecisionTool.TrigDecisionToolConfig import getRun3NavigationContainerFromInput
191 ExtraInputs = [('xAOD::TrigCompositeContainer', 'StoreGateSvc+'+getRun3NavigationContainerFromInput(flags))]
192 acc.addEventAlgo( CompFactory.LVL1.eFexTOBDecorator('eFexTOBDecorator',
193 eFexEMRoIContainer = 'L1_eEMRoI',
194 eFexTauRoIContainer = 'L1_eTauRoI',
195 ExtraInputs=ExtraInputs) )
196 acc.addEventAlgo( CompFactory.LVL1.eFexTOBDecorator('eFexTOBDecoratorSim',
197 eFexEMRoIContainer = 'L1_eEMRoISim',
198 eFexTauRoIContainer = 'L1_eTauRoIAltSim',
199 ExtraInputs=[]) )
200
201 if fillSuperCells:
202 acc.addEventAlgo( CompFactory.LVL1.eFexTOBSuperCellDecorator('eFexTOBSuperCellDecoratorSim',
203 eFexEMRoIContainer = 'L1_eEMRoISim',
204 eFexTauRoIContainer = 'L1_eTauxRoISim') )
205
206 # set up the slimming helper
207 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
208
209 L1CaloSlimmingHelper = SlimmingHelper("L1CaloSlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
210
211 AllVariables = []
212 StaticContent = []
213 SmartCollections = []
214 ExtraVariables = []
215
216 L1CaloSlimmingHelper.IncludeTriggerNavigation = True # Trigger info is actually stored only when running on data...
217 L1CaloSlimmingHelper.IncludeAdditionalTriggerContent = False # precludes EGamma/Jet TriggerContent
218
219 L1CaloSlimmingHelper.IncludeEGammaTriggerContent = True
220 L1CaloSlimmingHelper.IncludeJetTriggerContent = True
221 L1CaloSlimmingHelper.IncludeBJetTriggerContent = True
222 L1CaloSlimmingHelper.IncludeTauTriggerContent = True # does not select any Run3 HLT collections - added below
223 IncludeEtMissTriggerContent = True # very useful to have MET trigger info
224
225 # Container selection based on share/L1CALO versions
226 # Note: if the container is in the on-the-fly list (ContainersOnTheFly.py) then we do not have to add it to the dictionary
227 # We can do smart slimming if the container is in the smart list (FullListOfSmartContainers.py)
228
229 # if we do not run the simulation on MC, write SCells
230 if flags.Input.isMC and not isL1CaloSim:
231 L1CaloSlimmingHelper.AppendToDictionary.update({"SCell":"CaloCellContainer"})
232 AllVariables += ["SCell"]
233
234 # some gymnastics for HLT from RAWD
235 if isNotPool and L1CaloSlimmingHelper.IncludeEGammaTriggerContent:
236 # replicate adding EGammaTriggerContent
237 # switch the eGamma Trigger off for RAW data - smart slimming not required
238 L1CaloSlimmingHelper.IncludeEGammaTriggerContent = False
239 ElToKeep = ['ptcone20', 'ptvarcone20', 'ptcone30', 'ptvarcone30', 'trk_d0','cl_eta2','cl_phi2', 'deltaEta1PearDistortion']
240 ElVars = '.'.join(ElToKeep)
241 StaticContent += ["xAOD::ElectronContainer#HLT_egamma_Electrons"]
242 StaticContent += ["xAOD::ElectronAuxContainer#HLT_egamma_ElectronsAux."+ElVars]
243 StaticContent += ["xAOD::ElectronContainer#HLT_egamma_Electrons_GSF"]
244 StaticContent += ["xAOD::ElectronAuxContainer#HLT_egamma_Electrons_GSFAux."+ElVars]
245 # non-slimmed
246 L1CaloSlimmingHelper.AppendToDictionary.update({"HLT_CaloEMClusters_Electron":"xAOD::CaloClusterContainer",
247 "HLT_CaloEMClusters_ElectronAux":"xAOD::CaloClusterAuxContainer"})
248 AllVariables += ["HLT_CaloEMClusters_Electron"]
249 L1CaloSlimmingHelper.AppendToDictionary.update({"HLT_IDTrack_Electron_IDTrig":"xAOD::TrackParticleContainer",
250 "HLT_IDTrack_Electron_IDTrigAux":"xAOD::TrackParticleAuxContainer"})
251 AllVariables += ["HLT_IDTrack_Electron_IDTrig"]
252 L1CaloSlimmingHelper.AppendToDictionary.update({"HLT_IDTrack_Electron_GSF":"xAOD::TrackParticleContainer",
253 "HLT_IDTrack_Electron_GSFAux":"xAOD::TrackParticleAuxContainer"})
254 AllVariables += ["HLT_IDTrack_Electron_GSF"]
255
256 if isNotPool and L1CaloSlimmingHelper.IncludeJetTriggerContent:
257 # replicate adding JetTriggerContent - easier because this is genuine smart slimming
258 # Update the dictionary with the containers that will be smart slimmed
259 L1CaloSlimmingHelper.AppendToDictionary.update ({"HLT_AntiKt4EMTopoJets_nojcalib":"xAOD::JetContainer",
260 "HLT_AntiKt4EMTopoJets_nojcalibAux":"xAOD::JetAuxContainer",
261 "HLT_AntiKt4EMTopoJets_nojcalib_ftf":"xAOD::JetContainer",
262 "HLT_AntiKt4EMTopoJets_nojcalib_ftfAux":"xAOD::JetAuxContainer",
263 "HLT_AntiKt4EMTopoJets_subjesIS":"xAOD::JetContainer",
264 "HLT_AntiKt4EMTopoJets_subjesISAux":"xAOD::ShallowAuxContainer",
265 "HLT_AntiKt4EMPFlowJets_nojcalib_ftf":"xAOD::JetContainer",
266 "HLT_AntiKt4EMPFlowJets_nojcalib_ftfAux":"xAOD::JetAuxContainer",
267 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf":"xAOD::JetContainer",
268 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftfAux":"xAOD::ShallowAuxContainer",
269 "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftf":"xAOD::JetContainer",
270 "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftfAux":"xAOD::ShallowAuxContainer",
271 "HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftf":"xAOD::JetContainer",
272 "HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftfAux":"xAOD::JetAuxContainer",
273 "HLT_IDVertex_FS":"xAOD::VertexContainer",
274 "HLT_IDVertex_FSAux":"xAOD::VertexAuxContainer",
275 "HLT_TCEventInfo_jet":"xAOD::TrigCompositeContainer",
276 "HLT_TCEventInfo_jetAux":"xAOD::TrigCompositeAuxContainer",
277 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTagging": "xAOD::BTaggingContainer",
278 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTaggingAux": "xAOD::BTaggingAuxContainer",
279 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJets": "xAOD::JetContainer",
280 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJetsAux": "xAOD::JetAuxContainer"})
281
282 AllVariables += ["HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTagging", "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJets"]
283
284 if L1CaloSlimmingHelper.IncludeTauTriggerContent:
285 L1CaloSlimmingHelper.AppendToDictionary.update ({"HLT_TrigTauRecMerged_MVA":"xAOD::TauJetContainer",
286 "HLT_TrigTauRecMerged_MVAAux":"xAOD::TauJetAuxContainer",
287 "HLT_TrigTauRecMerged_LLP":"xAOD::TauJetContainer",
288 "HLT_TrigTauRecMerged_LLPAux":"xAOD::TauJetAuxContainer",
289 "HLT_TrigTauRecMerged_LRT":"xAOD::TauJetContainer",
290 "HLT_TrigTauRecMerged_LRTAux":"xAOD::TauJetAuxContainer",
291 "HLT_TrigTauRecMerged_CaloMVAOnly":"xAOD::TauJetContainer",
292 "HLT_TrigTauRecMerged_CaloMVAOnlyAux":"xAOD::TauJetAuxContainer"})
293 AllVariables += ["HLT_TrigTauRecMerged_MVA", "HLT_TrigTauRecMerged_LLP", "HLT_TrigTauRecMerged_LRT", "HLT_TrigTauRecMerged_CaloMVAOnly"]
294
295 if IncludeEtMissTriggerContent:
296 L1CaloSlimmingHelper.AppendToDictionary.update ({"HLT_MET_tcpufit":"xAOD::TrigMissingETContainer",
297 "HLT_MET_tcpufitAux":"xAOD::TrigMissingETAuxContainer",
298 "HLT_MET_cell":"xAOD::TrigMissingETContainer",
299 "HLT_MET_cellAux":"xAOD::TrigMissingETAuxContainer", # not present
300 "HLT_MET_trkmht":"xAOD::TrigMissingETContainer",
301 "HLT_MET_trkmhtAux":"xAOD::TrigMissingETAuxContainer",
302 "HLT_MET_cvfpufit":"xAOD::TrigMissingETContainer",
303 "HLT_MET_cvfpufitAux":"xAOD::TrigMissingETAuxContainer",
304 "HLT_MET_pfopufit":"xAOD::TrigMissingETContainer",
305 "HLT_MET_pfopufitAux":"xAOD::TrigMissingETAuxContainer",
306 "HLT_MET_mhtpufit_em":"xAOD::TrigMissingETContainer",
307 "HLT_MET_mhtpufit_emAux":"xAOD::TrigMissingETAuxContainer",
308 "HLT_MET_mhtpufit_pf":"xAOD::TrigMissingETContainer",
309 "HLT_MET_mhtpufit_pfAux":"xAOD::TrigMissingETAuxContainer",
310 "HLT_MET_pfsum":"xAOD::TrigMissingETContainer",
311 "HLT_MET_pfsumAux":"xAOD::TrigMissingETAuxContainer",
312 "HLT_MET_pfsum_vssk":"xAOD::TrigMissingETContainer",
313 "HLT_MET_pfsum_vsskAux":"xAOD::TrigMissingETAuxContainer",
314 "HLT_MET_pfsum_cssk":"xAOD::TrigMissingETContainer",
315 "HLT_MET_pfsum_csskAux":"xAOD::TrigMissingETAuxContainer",
316 "HLT_MET_nn":"xAOD::TrigMissingETContainer",
317 "HLT_MET_nnAux":"xAOD::TrigMissingETAuxContainer"})
318
319 AllVariables += ["HLT_MET_tcpufit","HLT_MET_cell","HLT_MET_trkmht","HLT_MET_cvfpufit","HLT_MET_pfopufit","HLT_MET_mhtpufit_em","HLT_MET_mhtpufit_pf","HLT_MET_pfsum","HLT_MET_pfsum_vssk","HLT_MET_pfsum_cssk","HLT_MET_nn"]
320
321 # Generic event info
322 L1CaloSlimmingHelper.AppendToDictionary.update({"EventInfo":"xAOD::EventInfo","EventInfoAux":"xAOD::EventAuxInfo"})
323
324 # We keep all of EventInfo rather than smart slim
325 AllVariables += ["EventInfo","Kt4EMPFlowEventShape"]
326
327 # Physics Objects
328 # Those for which there is smart slimming but not in the on the fly list
329 L1CaloSlimmingHelper.AppendToDictionary.update (
330 {"Muons":"xAOD::MuonContainer", "MuonsAux":"xAOD::MuonAuxContainer",
331 "Photons":"xAOD::PhotonContainer", "PhotonsAux":"xAOD::PhotonAuxContainer",
332 "TauJets":"xAOD::TauJetContainer", "TauJetsAux":"xAOD::TauJetAuxContainer"}
333 )
334 AllVariables += ["AntiKt4EMPFlowJets","AntiKt10LCTopoJets","Muons","Photons"]
335 AllVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"]
336 # TauJets require smart slimming in order not to cause issues
337 SmartCollections += ["TauJets"]
338
339 # Use unslimmed electrons in order to use Likelihood qualities
340 L1CaloSlimmingHelper.AppendToDictionary.update (
341 {"Electrons":"xAOD::ElectronContainer", "ElectronsAux":"xAOD::ElectronAuxContainer"} )
342 AllVariables += ["Electrons"]
343
344 L1CaloSlimmingHelper.AppendToDictionary.update (
345 {"ForwardElectrons":"xAOD::ElectronContainer", "ForwardElectronsAux":"xAOD::ElectronAuxContainer"} )
346 AllVariables += ["ForwardElectrons"]
347
348 # Missing ET - unslimmed container
349 AllVariables += ["METAssoc_AntiKt4EMPFlow"]
350
351 # using MET slimming as per share/L1CALOX.py
352 if isNotPool:
353 StaticContent += ["xAOD::MissingETContainer#MET_Reference_AntiKt4EMPFlow"]
354 StaticContent += ["xAOD::MissingETAuxContainer#MET_Reference_AntiKt4EMPFlowAux.-ConstitObjectLinks.-ConstitObjectWeights"]
355
356 StaticContent += ["xAOD::MissingETContainer#MET_Core_AntiKt4EMPFlow"]
357 StaticContent += ["xAOD::MissingETAuxContainer#MET_Core_AntiKt4EMPFlowAux.name.mpx.mpy.sumet.source"]
358
359 StaticContent += ["xAOD::MissingETContainer#MET_Track"]
360 StaticContent += ["xAOD::MissingETAuxContainer#MET_TrackAux.name.mpx.mpy"]
361 else:
362 AllVariables += ["MET_Reference_AntiKt4EMPFlow"]
363 AllVariables += ["MET_Core_AntiKt4EMPFlow"]
364 L1CaloSlimmingHelper.AppendToDictionary.update (
365 {"MET_Track":"xAOD::MissingETContainer", "MET_TrackAux":"xAOD::MissingETAuxContainer"} )
366 AllVariables += ["MET_Track"]
367
368 # Primary vertices
369 if isNotPool:
370 StaticContent += ["xAOD::VertexContainer#PrimaryVertices"]
371 StaticContent += ["xAOD::VertexAuxContainer#PrimaryVerticesAux.-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"]
372 else:
373 L1CaloSlimmingHelper.AppendToDictionary.update(
374 {"PrimaryVertices":"xAOD::VertexContainer","PrimaryVerticesAux":"xAOD::VertexAuxContainer"}
375 )
376 AllVariables += ["PrimaryVertices"]
377
378
379 # Egamma CP additions
380 L1CaloSlimmingHelper.AppendToDictionary.update (
381 {"egammaTopoSeededClusters":"xAOD::CaloClusterContainer","egammaTopoSeededClustersAux":"xAOD::CaloClusterAuxContainer"}
382 )
383 AllVariables += ["egammaTopoSeededClusters"]
384
385 # GSF vertices and tracks
386 if isNotPool:
387 StaticContent += ["xAOD::VertexContainer#GSFConversionVertices"]
388 # we have to disable vxTrackAtVertex branch since it is not xAOD compatible
389 StaticContent += ["xAOD::VertexAuxContainer#GSFConversionVerticesAux.-vxTrackAtVertex"]
390 #
391 trackParticleAuxExclusions="-caloExtension.-cellAssociation.-clusterAssociation.-trackParameterCovarianceMatrices.-parameterX.-parameterY.-parameterZ.-parameterPX.-parameterPY.-parameterPZ.-parameterPosition"
392 StaticContent += ["xAOD::TrackParticleContainer#GSFTrackParticles"]
393 StaticContent += ["xAOD::TrackParticleAuxContainer#GSFTrackParticlesAux."+trackParticleAuxExclusions]
394 else:
395 L1CaloSlimmingHelper.AppendToDictionary.update (
396 {"GSFConversionVertices":"xAOD::VertexContainer",
397 "GSFConversionVerticesAux":"xAOD::VertexAuxContainer",
398 "GSFTrackParticles":"xAOD::TrackParticleContainer",
399 "GSFTrackParticlesAux":"xAOD::TrackParticleAuxContainer"}
400 )
401 AllVariables += ["GSFConversionVertices","GSFTrackParticles"]
402
403 L1CaloSlimmingHelper.AppendToDictionary.update (
404 {"egammaClusters":"xAOD::CaloClusterContainer",
405 "egammaClustersAux":"xAOD::CaloClusterAuxContainer",
406 "TauPi0Clusters":"xAOD::CaloClusterContainer",
407 "TauPi0ClustersAux":"xAOD::CaloClusterAuxContainer",
408 "CaloCalTopoClusters":"xAOD::CaloClusterContainer",
409 "CaloCalTopoClustersAux":"xAOD::CaloClusterAuxContainer",
410 "MuonSegments":"xAOD::MuonSegmentContainer",
411 "MuonSegmentsAux":"xAOD::MuonSegmentAuxContainer"}
412 )
413 AllVariables += ["egammaClusters","TauPi0Clusters","CaloCalTopoClusters","MuonSegments"]
414
415 # Add b-tagging information directly using ExtraVariables - as done for PHYSLITE
416 ExtraVariables += [
417 'BTagging_AntiKt4EMPFlow.DL1dv01_pu.DL1dv01_pc.DL1dv01_pb.GN2v00_pu.GN2v00_pc.GN2v00_pb'
418 ]
419
420 # L1Calo information
421 # Legacy RoI Containers
422 L1CaloSlimmingHelper.AppendToDictionary.update (
423 {"LVL1EmTauRoIs":"xAOD::EmTauRoIContainer",
424 "LVL1EmTauRoIsAux":"xAOD::EmTauRoIAuxContainer",
425 "LVL1EnergySumRoI":"xAOD::EnergySumRoI",
426 "LVL1EnergySumRoIAux":"xAOD::EnergySumRoIAuxInfo",
427 "LVL1JetEtRoI":"xAOD::JetEtRoI",
428 "LVL1JetEtRoIAux":"xAOD::JetEtRoIAuxInfo",
429 "LVL1JetRoIs":"xAOD::JetRoIContainer",
430 "LVL1JetRoIsAux":"xAOD::JetRoIAuxContainer",
431 "LVL1MuonRoIs":"xAOD::MuonRoIContainer",
432 "LVL1MuonRoIsAux":"xAOD::MuonRoIAuxContainer"}
433 )
434 AllVariables += [ "LVL1EmTauRoIs","LVL1EnergySumRoI","LVL1JetEtRoI","LVL1JetRoIs","LVL1MuonRoIs"]
435
436 # Legacy sub-systems
437 L1CaloSlimmingHelper.AppendToDictionary.update (
438 {"JEMTobRoIsRoIB":"xAOD::JEMTobRoIContainer",
439 "JEMTobRoIsRoIBAux":"xAOD::JEMTobRoIAuxContainer",
440 "JEMTobRoIs":"xAOD::JEMTobRoIContainer",
441 "JEMTobRoIsAux":"xAOD::JEMTobRoIAuxContainer",
442 "JEMEtSums":"xAOD::JEMEtSumsContainer",
443 "JEMEtSumsAux":"xAOD::JEMEtSumsAuxContainer"}
444 )
445 AllVariables += ["JEMTobRoIsRoIB",
446 "JEMTobRoIs",
447 "JEMEtSums"]
448
449 L1CaloSlimmingHelper.AppendToDictionary.update (
450 {"CMXCPHits":"xAOD::CMXCPHitsContainer",
451 "CMXCPHitsAux":"xAOD::CMXCPHitsAuxContainer",
452 "CMXCPTobs":"xAOD::CMXCPTobContainer",
453 "CMXCPTobsAux":"xAOD::CMXCPTobAuxContainer",
454 "CMXEtSums":"xAOD::CMXEtSumsContainer",
455 "CMXEtSumsAux":"xAOD::CMXEtSumsAuxContainer",
456 "CMXJetHits":"xAOD::CMXJetHitsContainer",
457 "CMXJetHitsAux":"xAOD::CMXJetHitsAuxContainer",
458 "CMXJetTobs":"xAOD::CMXJetTobContainer",
459 "CMXJetTobsAux":"xAOD::CMXJetTobAuxContainer",
460 "CMXRoIs":"xAOD::CMXRoIContainer",
461 "CMXRoIsAux":"xAOD::CMXRoIAuxContainer"}
462 )
463 AllVariables += ["CMXCPHits",
464 "CMXCPTobs",
465 "CMXEtSums",
466 "CMXJetHits",
467 "CMXJetTobs",
468 "CMXRoIs"]
469
470
471 L1CaloSlimmingHelper.AppendToDictionary.update (
472 {"CPMTobRoIs":"xAOD::CPMTobRoIContainer",
473 "CPMTobRoIsAux":"xAOD::CPMTobRoIAuxContainer",
474 "CPMTobRoIsRoIB":"xAOD::CPMTobRoIContainer",
475 "CPMTobRoIsRoIBAux":"xAOD::CPMTobRoIAuxContainer",
476 "CPMTowers":"xAOD::CPMTowerContainer",
477 "CPMTowersAux":"xAOD::CPMTowerAuxContainer",
478 "CPMTowersOverlap":"xAOD::CPMTowerContainer",
479 "CPMTowersOverlapAux":"xAOD::CPMTowerAuxContainer",
480 "RODHeaders":"xAOD::RODHeaderContainer",
481 "RODHeadersAux":"xAOD::RODHeaderAuxContainer",
482 "xAODTriggerTowers":"xAOD::TriggerTowerContainer",
483 "xAODTriggerTowersAux":"xAOD::TriggerTowerAuxContainer",
484 "JetElements":"xAOD::JetElementContainer",
485 "JetElementsAux":"xAOD::JetElementAuxContainer",
486 "JetElementsOverlap":"xAOD::JetElementContainer",
487 "JetElementsOverlapAux":"xAOD::JetElementAuxContainer",
488 "L1TopoRawData":"xAOD::L1TopoRawDataContainer",
489 "L1TopoRawDataAux":"xAOD::L1TopoRawDataAuxContainer",
490 "L1_Phase1L1TopoRAWData":"xAOD::L1TopoRawDataContainer",
491 "L1_Phase1L1TopoRAWDataAux":"xAOD::L1TopoRawDataAuxContainer"}
492 )
493 AllVariables += ["CPMTobRoIs",
494 "CPMTobRoIsRoIB",
495 "CPMTowers",
496 "CPMTowersOverlap",
497 "RODHeaders",
498 "xAODTriggerTowers",
499 "JetElements",
500 "JetElementsOverlap",
501 "L1TopoRawData",
502 "L1_Phase1L1TopoRAWData"]
503
504
505 # Phase 1
506 # TOBs from HLT
507 L1CaloSlimmingHelper,AllVariables = addEfexTOBs(L1CaloSlimmingHelper, AllVariables)
508 L1CaloSlimmingHelper,AllVariables = addJfexTOBs(L1CaloSlimmingHelper, AllVariables)
509 L1CaloSlimmingHelper,AllVariables = addGfexTOBs(L1CaloSlimmingHelper, AllVariables)
510
511 # re-simulated
512 L1CaloSlimmingHelper,AllVariables = addEfexTOBs(L1CaloSlimmingHelper, AllVariables, "Sim")
513 L1CaloSlimmingHelper,AllVariables = addJfexTOBs(L1CaloSlimmingHelper, AllVariables, "Sim")
514 L1CaloSlimmingHelper,AllVariables = addGfexTOBs(L1CaloSlimmingHelper, AllVariables, "Sim")
515
516
517 # FEX input data towers
518 L1CaloSlimmingHelper.AppendToDictionary.update (
519 {"L1_eFexDataTowers":"xAOD::eFexTowerContainer",
520 "L1_eFexDataTowersAux":"xAOD::eFexTowerAuxContainer",
521 "L1_jFexDataTowers":"xAOD::jFexTowerContainer",
522 "L1_jFexDataTowersAux":"xAOD::jFexTowerAuxContainer",
523 "L1_gFexDataTowers":"xAOD::gFexTowerContainer",
524 "L1_gFexDataTowersAux":"xAOD::gFexTowerAuxContainer"}
525 )
526 AllVariables += ["L1_eFexDataTowers","L1_jFexDataTowers","L1_gFexDataTowers"]
527
528 # Emulated eFEX input tower data from LATOME
529 L1CaloSlimmingHelper.AppendToDictionary.update (
530 {"L1_eFexEmulatedTowers":"xAOD::eFexTowerContainer",
531 "L1_eFexEmulatedTowersAux":"xAOD::eFexTowerAuxContainer"}
532 )
533 AllVariables += ["L1_eFexEmulatedTowers"]
534
535 # Emulated jFEX input tower data from LATOME
536 L1CaloSlimmingHelper.AppendToDictionary.update (
537 {"L1_jFexEmulatedTowers":"xAOD::jFexTowerContainer",
538 "L1_jFexEmulatedTowersAux":"xAOD::jFexTowerAuxContainer"}
539 )
540 AllVariables += ["L1_jFexEmulatedTowers"]
541
542 # jTowers built from SC_ET aka "NoId"
543 L1CaloSlimmingHelper.AppendToDictionary.update (
544 {"L1_jFexEmulatedNoIdTowers":"xAOD::jFexTowerContainer",
545 "L1_jFexEmulatedNoIdTowersAux":"xAOD::jFexTowerAuxContainer"}
546 )
547 AllVariables += ["L1_jFexEmulatedNoIdTowers"]
548
549 # For MC, add emulated gFEX input towers
550 if flags.Input.isMC:
551 L1CaloSlimmingHelper.AppendToDictionary.update (
552 {"L1_gFexEmulatedTowers":"xAOD::gFexTowerContainer",
553 "L1_gFexEmulatedTowersAux":"xAOD::gFexTowerAuxContainer"}
554 )
555 AllVariables += [ "L1_gFexEmulatedTowers" ]
556
557 # In case MC has no jets, b-tagging or MET, schedule reconstruction
558 if flags.Input.isMC:
559 from JetRecConfig.StandardSmallRJets import AntiKt4EMPFlow
560 from JetRecConfig.StandardLargeRJets import AntiKt10LCTopo_noVR, AntiKt10UFOCSSKSoftDrop_trigger
561 jets_to_schedule = [jet for jet in (AntiKt4EMPFlow, AntiKt10LCTopo_noVR, AntiKt10UFOCSSKSoftDrop_trigger)
562 if jet.fullname() not in flags.Input.Collections]
563
564 if jets_to_schedule:
565 from JetRecConfig.JetRecConfig import JetRecCfg
566 for container in jets_to_schedule:
567 acc.merge(JetRecCfg(flags, container))
568
569 jet_collections = set([_.fullname().replace('Jets','') for _ in jets_to_schedule])
570 btag_jet_collections = set(['AntiKt4EMPFlow'])
571 met_jet_collections = set(['AntiKt4EMPFlow'])
572
573 if jet_collections & btag_jet_collections:
574 log.info('Scheduling b-tagging of rebuilt jets')
575 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
576 acc.merge(BeamSpotCondAlgCfg(flags))
577 from BTagging.BTagConfig import BTagRecoSplitCfg
578 #
579 for container in jet_collections & btag_jet_collections:
580 acc.merge(BTagRecoSplitCfg(flags, [container]))
581
582 # MET
583 if jet_collections & met_jet_collections:
584 log.info('Scheduling rebuild of standard MET')
585 from METReconstruction.METAssociatorCfg import METAssociatorCfg
586 from METUtilities.METMakerConfig import getMETMakerAlg
587 for container in jet_collections & met_jet_collections:
588 if container == 'AntiKt4EMPFlow':
589 # build links between FlowElements and electrons, photons, muons and taus
590 log.info('Scheduling FlowElement linking')
591 from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg
592 acc.merge(PFGlobalFlowElementLinkingCfg(flags))
593 acc.merge(METAssociatorCfg(flags, container))
594 acc.addEventAlgo(getMETMakerAlg(container))
595 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
596 acc.merge(CaloNoiseCondAlgCfg(flags)) # Prereq for Calo MET
597 from METReconstruction.METCalo_Cfg import METCalo_Cfg
598 acc.merge(METCalo_Cfg(flags))
599
600
601 # Truth collections
602 if flags.Input.isMC:
603 from DerivationFrameworkMCTruth.MCTruthCommonConfig import PreJetMCTruthAugmentationsCfg
604 from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTruthCollectionNavigationDecorationsCfg,AddBornLeptonCollectionCfg
605 from DerivationFrameworkMCTruth.MCTruthCommonConfig import PostJetMCTruthAugmentationsCfg
606
607 acc.merge(PreJetMCTruthAugmentationsCfg(flags,decorationDressing = 'dressedPhoton'))
608 #
609 from JetRecConfig.StandardSmallRJets import AntiKt4Truth,AntiKt4TruthWZ,AntiKt4TruthDressedWZ,AntiKtVRTruthCharged
610 from JetRecConfig.StandardLargeRJets import AntiKt10TruthTrimmed,AntiKt10TruthSoftDrop
611 from JetRecConfig.JetRecConfig import JetRecCfg
612 jetList = [AntiKt4Truth,AntiKt4TruthWZ,AntiKt4TruthDressedWZ,AntiKtVRTruthCharged,
613 AntiKt10TruthTrimmed,AntiKt10TruthSoftDrop]
614
615 for jd in jetList:
616 if jd.fullname() not in flags.Input.Collections:
617 acc.merge(JetRecCfg(flags,jd))
618
619 if ( "xAOD::MissingETContainer#MET_Truth") not in flags.Input.TypedCollections:
620 from METReconstruction.METTruth_Cfg import METTruth_Cfg
621 acc.merge(METTruth_Cfg(flags))
622
623 acc.merge(PostJetMCTruthAugmentationsCfg(flags, decorationDressing = 'dressedPhoton'))
624 acc.addEventAlgo(CompFactory.DerivationFramework.LockDecorations(name ="L1CALOTruthContentsLockDecoration", Decorations = ['TruthParticles.dressedPhoton']))
625 acc.merge(AddTruthCollectionNavigationDecorationsCfg(flags, ["TruthElectrons", "TruthMuons", "TruthPhotons", "TruthTaus", "TruthNeutrinos"]))
626 # Special collection for Born leptons
627 acc.merge(AddBornLeptonCollectionCfg(flags))
628
629 AllVariables += [
630 "TruthElectrons",
631 "TruthMuons",
632 "TruthPhotons",
633 "TruthTaus",
634 "TruthNeutrinos",
635 "BornLeptons",
636 "MET_Truth",
637 "AntiKt4TruthJets",
638 "AntiKt4TruthWZJets",
639 "AntiKt10TruthTrimmedPtFrac5SmallR20Jets",
640 "AntiKt10TruthSoftDropBeta100Zcut10Jets",
641 "InTimeAntiKt4TruthJets",
642 "OutOfTimeAntiKt4TruthJets",
643 ]
644
645 L1CaloSlimmingHelper.AllVariables = AllVariables
646 L1CaloSlimmingHelper.StaticContent = StaticContent
647 L1CaloSlimmingHelper.SmartCollections = SmartCollections
648 L1CaloSlimmingHelper.ExtraVariables = ExtraVariables
649
650 # Output stream
651 L1CaloItemList = L1CaloSlimmingHelper.GetItemList()
652 acc.merge(OutputStreamCfg(flags, streamNameStem, ItemList=L1CaloItemList, AcceptAlgs=["DFL1CALO_KERN"]))
653 acc.merge(SetupMetaDataForStreamCfg(flags, streamNameStem, AcceptAlgs=["DFL1CALO_KERN"], createMetadata=[MetadataCategory.CutFlowMetaData,MetadataCategory.TriggerMenuMetaData]))
654
655 return acc
656
657
658def addEfexTOBs(slimminghelper, allVariables, postFix = ""):
659 """
660 add the list of eFEX containers for given postFix string
661 """
662 slimminghelper.AppendToDictionary.update (
663 {"L1_eEMRoI"+postFix : "xAOD::eFexEMRoIContainer",
664 "L1_eEMRoI"+postFix+"Aux" : "xAOD::eFexEMRoIAuxContainer",
665 "L1_eTauRoI"+postFix : "xAOD::eFexTauRoIContainer",
666 "L1_eTauRoI"+postFix+"Aux" : "xAOD::eFexTauRoIAuxContainer",
667 "L1_eTauRoIAlt"+postFix : "xAOD::eFexTauRoIContainer",
668 "L1_eTauRoIAlt"+postFix+"Aux" : "xAOD::eFexTauRoIAuxContainer",
669 "L1_cTauRoI"+postFix : "xAOD::eFexTauRoIContainer",
670 "L1_cTauRoI"+postFix+"Aux" : "xAOD::eFexTauRoIAuxContainer",
671 "L1_eEMxRoI"+postFix : "xAOD::eFexEMRoIContainer",
672 "L1_eEMxRoI"+postFix+"Aux" : "xAOD::eFexEMRoIAuxContainer",
673 "L1_eTauxRoI"+postFix : "xAOD::eFexTauRoIContainer",
674 "L1_eTauxRoI"+postFix+"Aux" : "xAOD::eFexTauRoIAuxContainer",
675 "L1_eTauxRoIAlt"+postFix : "xAOD::eFexTauRoIContainer",
676 "L1_eTauxRoIAlt"+postFix+"Aux" : "xAOD::eFexTauRoIAuxContainer"} )
677
678 allVariables += ["L1_eEMRoI" + postFix,
679 "L1_eTauRoI" + postFix,
680 "L1_eTauRoIAlt" + postFix,
681 "L1_cTauRoI" + postFix,
682 "L1_eEMxRoI" + postFix,
683 "L1_eTauxRoI" + postFix,
684 "L1_eTauxRoIAlt" + postFix]
685
686 return slimminghelper, allVariables
687
688
689def addJfexTOBs(slimminghelper, allVariables, postFix = ""):
690 """
691 add the list of jFEX containers for given postFix string
692 """
693 slimminghelper.AppendToDictionary.update (
694 {"L1_jFexMETRoI"+postFix : "xAOD::jFexMETRoIContainer",
695 "L1_jFexMETRoI"+postFix+"Aux" : "xAOD::jFexMETRoIAuxContainer",
696 "L1_jFexTauRoI"+postFix : "xAOD::jFexTauRoIContainer",
697 "L1_jFexTauRoI"+postFix+"Aux" : "xAOD::jFexTauRoIAuxContainer",
698 "L1_jFexFwdElRoI"+postFix : "xAOD::jFexFwdElRoIContainer",
699 "L1_jFexFwdElRoI"+postFix+"Aux" : "xAOD::jFexFwdElRoIAuxContainer",
700 "L1_jFexSRJetRoI"+postFix : "xAOD::jFexSRJetRoIContainer",
701 "L1_jFexSRJetRoI"+postFix+"Aux" : "xAOD::jFexSRJetRoIAuxContainer",
702 "L1_jFexLRJetRoI"+postFix : "xAOD::jFexLRJetRoIContainer",
703 "L1_jFexLRJetRoI"+postFix+"Aux" : "xAOD::jFexLRJetRoIAuxContainer",
704 "L1_jFexSumETRoI"+postFix : "xAOD::jFexSumETRoIContainer",
705 "L1_jFexSumETRoI"+postFix+"Aux" : "xAOD::jFexSumETRoIAuxContainer",
706 "L1_jFexMETxRoI"+postFix : "xAOD::jFexMETRoIContainer",
707 "L1_jFexMETxRoI"+postFix+"Aux" : "xAOD::jFexMETRoIAuxContainer",
708 "L1_jFexTauxRoI"+postFix : "xAOD::jFexTauRoIContainer",
709 "L1_jFexTauxRoI"+postFix+"Aux" : "xAOD::jFexTauRoIAuxContainer",
710 "L1_jFexFwdElxRoI"+postFix : "xAOD::jFexFwdElRoIContainer",
711 "L1_jFexFwdElxRoI"+postFix+"Aux" : "xAOD::jFexFwdElRoIAuxContainer",
712 "L1_jFexSRJetxRoI"+postFix : "xAOD::jFexSRJetRoIContainer",
713 "L1_jFexSRJetxRoI"+postFix+"Aux" : "xAOD::jFexSRJetRoIAuxContainer",
714 "L1_jFexLRJetxRoI"+postFix : "xAOD::jFexLRJetRoIContainer",
715 "L1_jFexLRJetxRoI"+postFix+"Aux" : "xAOD::jFexLRJetRoIAuxContainer",
716 "L1_jFexSumETxRoI"+postFix : "xAOD::jFexSumETRoIContainer",
717 "L1_jFexSumETxRoI"+postFix+"Aux" : "xAOD::jFexSumETRoIAuxContainer"})
718
719 allVariables += ["L1_jFexMETRoI" + postFix,
720 "L1_jFexTauRoI" + postFix,
721 "L1_jFexFwdElRoI" + postFix,
722 "L1_jFexSRJetRoI" + postFix,
723 "L1_jFexLRJetRoI" + postFix,
724 "L1_jFexSumETRoI" + postFix,
725 "L1_jFexMETxRoI" + postFix,
726 "L1_jFexTauxRoI" + postFix,
727 "L1_jFexFwdElxRoI" + postFix,
728 "L1_jFexSRJetxRoI" + postFix,
729 "L1_jFexLRJetxRoI" + postFix,
730 "L1_jFexSumETxRoI" + postFix]
731
732 return slimminghelper, allVariables
733
734
735def addGfexTOBs(slimminghelper, allVariables, postFix = ""):
736 """
737 add the list of gFEX containers for given postFix string
738 """
739 slimminghelper.AppendToDictionary.update (
740 {"L1_gFexRhoRoI"+postFix : "xAOD::gFexJetRoIContainer",
741 "L1_gFexRhoRoI"+postFix+"Aux" : "xAOD::gFexJetRoIAuxContainer",
742 "L1_gFexSRJetRoI"+postFix : "xAOD::gFexJetRoIContainer",
743 "L1_gFexSRJetRoI"+postFix+"Aux" : "xAOD::gFexJetRoIAuxContainer",
744 "L1_gScalarEJwoj"+postFix : "xAOD::gFexGlobalRoIContainer",
745 "L1_gScalarEJwoj"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
746 "L1_gEspresso"+postFix : "xAOD::gFexGlobalRoIContainer",
747 "L1_gEspresso"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
748 "L1_gRistretto"+postFix : "xAOD::gFexGlobalRoIContainer",
749 "L1_gRistretto"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
750 "L1_gScalarEJwojOutOfTime"+postFix : "xAOD::gFexGlobalRoIContainer",
751 "L1_gScalarEJwojOutOfTime"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
752 "L1_gFexLRJetRoI"+postFix : "xAOD::gFexJetRoIContainer",
753 "L1_gFexLRJetRoI"+postFix+"Aux" : "xAOD::gFexJetRoIAuxContainer",
754 "L1_gMETComponentsJwoj"+postFix : "xAOD::gFexGlobalRoIContainer",
755 "L1_gMETComponentsJwoj"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
756 "L1_gMHTComponentsJwoj"+postFix : "xAOD::gFexGlobalRoIContainer",
757 "L1_gMHTComponentsJwoj"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
758 "L1_gMSTComponentsJwoj"+postFix : "xAOD::gFexGlobalRoIContainer",
759 "L1_gMSTComponentsJwoj"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer",
760 "L1_gMETComponentsNoiseCut"+postFix : "xAOD::gFexGlobalRoIContainer",
761 "L1_gMETComponentsNoiseCut"+postFix+"Aux" : "xAOD::gFexGlobalRoIAuxContainer"})
762
763 allVariables += ["L1_gFexRhoRoI" + postFix,
764 "L1_gFexSRJetRoI" + postFix,
765 "L1_gScalarEJwoj" + postFix,
766 "L1_gFexLRJetRoI" + postFix,
767 "L1_gMETComponentsJwoj" + postFix,
768 "L1_gMHTComponentsJwoj" + postFix,
769 "L1_gMSTComponentsJwoj" + postFix,
770 "L1_gMETComponentsNoiseCut" + postFix,
771 "L1_gEspresso" + postFix,
772 "L1_gRistretto" + postFix,
773 "L1_gScalarEJwojOutOfTime" + postFix]
774
775 return slimminghelper, allVariables
STL class.
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:312
addEfexTOBs(slimminghelper, allVariables, postFix="")
addJfexTOBs(slimminghelper, allVariables, postFix="")
L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs)
Definition L1CALOCore.py:16
addGfexTOBs(slimminghelper, allVariables, postFix="")