ATLAS Offline Software
Loading...
Searching...
No Matches
PFHLTConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.Enums import LHCPeriod
5from AthenaCommon.CFElements import parOR
6from eflowRec import PFOnlineMon
7from eflowRec.PFCfg import getPFTrackClusterMatchingTool
8from TrigEDMConfig.TriggerEDM import recordable
9
10
11#---------------------------------------------------------------------------------#
12# Tracking geometry & conditions
13def TrackingGeoCfg(inputFlags):
14 result = ComponentAccumulator()
15
16 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
17 result.merge(AtlasFieldCacheCondAlgCfg(inputFlags))
18
19 return result
20
21#---------------------------------------------------------------------------------#
22# Calo geometry & conditions
23def CaloGeoAndNoiseCfg(inputFlags):
24 result = ComponentAccumulator()
25 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
26 from TileGeoModel.TileGMConfig import TileGMCfg
27
28 result.merge(LArGMCfg(inputFlags))
29 result.merge(TileGMCfg(inputFlags))
30
31 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
32 # Schedule total noise cond alg
33 result.merge(CaloNoiseCondAlgCfg(inputFlags,"totalNoise"))
34
35 return result
36
37def PFTrackExtensionCfg(flags, tracktype, tracksin):
38 """ Get the track-to-calo extension after a preselection
39
40 Returns the component accumulator, the preselected track collection and the extension cache
41 """
42 result = ComponentAccumulator()
43 pretracks_name = f"HLTPFPreselTracks_{tracktype}"
44 cache_name = f"HLTPFTrackExtensionCache_{tracktype}"
45
46 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig import (
47 PFTrackSelectionToolCfg)
48 result.addEventAlgo(CompFactory.PFTrackPreselAlg(
49 f"HLTPFTrackPresel_{tracktype}",
50 InputTracks=tracksin,
51 OutputTracks=pretracks_name,
52 TrackSelTool=result.popToolsAndMerge(PFTrackSelectionToolCfg(flags))
53 ))
54
55
56 monTool_trackExtrap = PFOnlineMon.getMonTool_ParticleCaloExtensionTool(flags)
57 monTool_trackExtrap.HistPath = 'TrackCaloExtrapolation_general'
58
59 from TrackToCalo.TrackToCaloConfig import HLTPF_ParticleCaloExtensionToolCfg
60 result.addEventAlgo(CompFactory.Trk.PreselCaloExtensionBuilderAlg(
61 f"HLTPFTrackExtension_{tracktype}",
62 ParticleCaloExtensionTool=result.popToolsAndMerge(
63 HLTPF_ParticleCaloExtensionToolCfg(flags, MonTool=monTool_trackExtrap)),
64 InputTracks=pretracks_name,
65 OutputCache=cache_name,
66 ))
67
68 return result, pretracks_name, cache_name
69
70def MuonCaloTagCfg(flags, tracktype, tracksin, extcache, cellsin):
71 """ Create the muon calo tagging configuration
72
73 Return the component accumulator and the tracks with muons removed
74 """
75 from TrkConfig.AtlasExtrapolatorConfig import TrigPFlowExtrapolatorCfg
76 result = ComponentAccumulator()
77 extrapolator = result.popToolsAndMerge(TrigPFlowExtrapolatorCfg(flags))
78 output_tracks = f"PFMuonCaloTagTracks_{tracktype}"
79
80 from TrackToCalo.TrackToCaloConfig import (
81 HLTPF_ParticleCaloExtensionToolCfg,
82 HLTPF_ParticleCaloCellAssociationToolCfg)
83
84 caloext = result.popToolsAndMerge(HLTPF_ParticleCaloExtensionToolCfg(flags))
85 calocellassoc = result.popToolsAndMerge(HLTPF_ParticleCaloCellAssociationToolCfg(
86 flags,
87 ParticleCaloExtensionTool=caloext,
88 CaloCellContainer="",
89 ))
90
91 result.addEventAlgo(
92 CompFactory.PFTrackMuonCaloTaggingAlg(
93 f"PFTrackMuonCaloTaggingAlg_{tracktype}",
94 InputTracks = tracksin,
95 InputCaloExtension = extcache,
96 InputCells = cellsin,
97 OutputTracks = output_tracks,
98 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
99 MuonScoreTool = CompFactory.CaloMuonScoreTool(
100 CaloMuonEtaCut=3,
101 ParticleCaloCellAssociationTool = calocellassoc
102 ),
103 LooseTagTool=CompFactory.CaloMuonTag("LooseCaloMuonTag", TagMode="Loose"),
104 TightTagTool=CompFactory.CaloMuonTag("TightCaloMuonTag", TagMode="Tight"),
105 DepositInCaloTool=CompFactory.TrackDepositInCaloTool(
106 ExtrapolatorHandle=extrapolator,
107 ParticleCaloCellAssociationTool = calocellassoc,
108 ParticleCaloExtensionTool = caloext
109 )
110 ),
111 primary=True,
112 )
113 return result, output_tracks
114
115def MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin):
116 """ Create the muon iso tagging configuration
117
118 Return the component accumulator and the tracks with muons removed
119 """
120 result = ComponentAccumulator()
121 output_tracks = f"PFMuonIsoTagTracks_{tracktype}"
122
123 from TrackToCalo.TrackToCaloConfig import HLTPF_ParticleCaloExtensionToolCfg
124
125 result.addEventAlgo(
126 CompFactory.PFTrackMuonIsoTaggingAlg(
127 f"PFTrackMuonIsoTaggingalg_{tracktype}",
128 InputTracks = tracksin,
129 InputClusters = clustersin,
130 InputVertices = verticesin,
131 OutputTracks = output_tracks,
132 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
133 TrackIsoTool = CompFactory.xAOD.TrackIsolationTool(
134 TrackParticleLocation=tracksin,
135 VertexLocation="",
136 ),
137 CaloIsoTool = CompFactory.xAOD.CaloIsolationTool(
138 ParticleCaloExtensionTool=result.popToolsAndMerge(
139 HLTPF_ParticleCaloExtensionToolCfg(flags)),
140 InputCaloExtension=extcache,
141 ParticleCaloCellAssociationTool="",
142 saveOnlyRequestedCorrections=True,
143 )
144 ),
145 primary=True,
146 )
147 return result, output_tracks
148
149#---------------------------------------------------------------------------------#
150# PFlow track selection
151def HLTPFTrackSelectorCfg(inputFlags,tracktype,tracksin,verticesin,clustersin,cellsin=None):
152 result = ComponentAccumulator()
153
154 muon_mode = inputFlags.Trigger.FSHad.PFOMuonRemoval
155 if muon_mode == "None":
156 tracks = tracksin
157 extension_cache=""
158 else:
159 ext_acc, pretracks, extension_cache = PFTrackExtensionCfg(
160 inputFlags, tracktype, tracksin
161 )
162 result.merge(ext_acc)
163 if muon_mode == "Calo":
164 if cellsin is None:
165 raise ValueError("Cells must be provided for the 'Calo' muon mode!")
166 tag_acc, tracks = MuonCaloTagCfg(
167 inputFlags, tracktype, pretracks, extension_cache, cellsin
168 )
169 elif muon_mode == "Iso":
170 tag_acc, tracks = MuonIsoTagCfg(
171 inputFlags, tracktype, pretracks, verticesin, extension_cache, clustersin
172 )
173 else:
174 raise ValueError(f"Invalid muon removal mode '{muon_mode}'")
175 result.merge(tag_acc)
176
177 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig import (
178 PFTrackSelectionToolCfg)
179 from TrackToCalo.TrackToCaloConfig import HLTPF_ParticleCaloExtensionToolCfg
180
181
182 from eflowRec import PFOnlineMon
183 monTool_extrapolator = PFOnlineMon.getMonTool_eflowTrackCaloExtensionTool(inputFlags)
184 monTool_extrapolator.HistPath = 'TrackExtrapolator'
185
186 result.addEventAlgo(
187 CompFactory.PFTrackSelector(
188 f"PFTrackSelector_{tracktype}",
189 trackExtrapolatorTool = CompFactory.eflowTrackCaloExtensionTool(
190 "HLTPF_eflowTrkCaloExt",
191 TrackCaloExtensionTool=result.popToolsAndMerge(
192 HLTPF_ParticleCaloExtensionToolCfg(inputFlags)),
193 PFParticleCache = extension_cache,
194 MonTool_TrackCaloExtension = monTool_extrapolator
195 ),
196 trackSelectionTool = result.popToolsAndMerge(PFTrackSelectionToolCfg(inputFlags)),
197 electronsName="",
198 muonsName="",
199 tracksName=tracks,
200 VertexContainer=verticesin,
201 eflowRecTracksOutputName=f"eflowRecTracks_{tracktype}",
202 MonTool = PFOnlineMon.getMonTool_PFTrackSelector(inputFlags),
203 ),
204 primary=True,
205 )
206
207 return result
208
209#---------------------------------------------------------------------------------#
210# Legacy (non-unified) particle flow tool configuration.
211#
212# Offline reconstruction runs the unified tool chain exclusively (see
213# getOfflinePFAlgorithm in PFCfg.py). The HLT still runs the older combined
214# chain, in which one PFSubtractionTool performs both track-cluster matching and
215# charged shower subtraction, and cluster moments are calculated by
216# PFMomentCalculatorTool. The configuration of those two tools therefore lives
217# here, with the only client that still uses them, rather than in PFCfg.py.
218# It is removed once the HLT is ported to the unified chain.
219def getHLTPFCellLevelSubtractionTool(inputFlags,toolName):
220 PFCellLevelSubtractionToolFactory = CompFactory.PFSubtractionTool
221 PFCellLevelSubtractionTool = PFCellLevelSubtractionToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
222
223 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
224 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
225 PFCellLevelSubtractionTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss()
226 else:
227 PFCellEOverPTool = CompFactory.PFCellEOverPTool
228 PFCellLevelSubtractionTool.eflowCellEOverPTool = PFCellEOverPTool("PFCellEOverPTool", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
229 #this should always be false for any reference derived, except eflowCellEOverPTool_mc12_HLLHC.h or eflowCellEOverPTool_Run2_mc20_JetETMiss.h
230 PFCellLevelSubtractionTool.useLegacyEBinIndex=False
231
232 if(inputFlags.PF.EOverPMode):
233 PFCellLevelSubtractionTool.CalcEOverP = True
234 PFCellLevelSubtractionTool.nClusterMatchesToUse = -1
235 else:
236 PFCellLevelSubtractionTool.nClusterMatchesToUse = 1
237
238 if(inputFlags.PF.EOverPMode):
239 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,0.2,"EtaPhiSquareDistance","PlainEtaPhi","CalObjBldMatchingTool")
240 else:
241 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,1.64,"EtaPhiSquareSignificance","GeomCenterEtaPhi","CalObjBldMatchingTool")
242
243 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_02 = getPFTrackClusterMatchingTool(inputFlags,0.2,"EtaPhiSquareDistance","PlainEtaPhi","MatchingTool_Pull_02")
244
245 if inputFlags.PF.useMLEOverP:
246 PFEnergyPredictorTool = CompFactory.PFEnergyPredictorTool("PFCellLevelEnergyPredcictorTool",ModelPath = inputFlags.PF.EOverP_NN_Model)
247 PFCellLevelSubtractionTool.NNEnergyPredictorTool = PFEnergyPredictorTool
248 PFCellLevelSubtractionTool.addCPData = inputFlags.PF.addCPData
249
250 if inputFlags.PF.useTruthCheating:
251 if inputFlags.PF.useTrackClusterTruthMatching:
252 PFCellLevelSubtractionTool.CaloClusterReadDecorHandleKey_NLeadingTruthParticles = "CaloTopoClusters." + inputFlags.Calo.TopoCluster.CalibrationHitDecorationName
253 PFCellLevelSubtractionTool.useTrackClusterTruthMatching=True
254
255 if inputFlags.PF.useTruthForChargedShowerSubtraction:
256 PFCellLevelSubtractionTool.useTruthForChargedShowerSubtraction = True
257 PFCellLevelSubtractionTool.PFSimulateTruthShowerTool = CompFactory.PFSimulateTruthShowerTool("PFSimulateTruthShowerTool")
258
259 return PFCellLevelSubtractionTool
260
261
262def getHLTPFRecoverSplitShowersTool(inputFlags,toolName):
263 PFRecoverSplitShowersToolFactory = CompFactory.PFSubtractionTool
264 PFRecoverSplitShowersTool = PFRecoverSplitShowersToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
265
266 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
267 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
268 PFRecoverSplitShowersTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss("eflowCellEOverPTool_Run2_mc20_JetETMiss_Recover")
269 else:
270 PFCellEOverPTool = CompFactory.PFCellEOverPTool
271 PFRecoverSplitShowersTool.eflowCellEOverPTool = PFCellEOverPTool("PFCellEOverPTool_Recover", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
272 #this should always be false for any reference derived, except eflowCellEOverPTool_mc12_HLLHC.h or eflowCellEOverPTool_Run2_mc20_JetETMiss.h
273 PFRecoverSplitShowersTool.useLegacyEBinIndex=False
274
275 PFRecoverSplitShowersTool.RecoverSplitShowers = True
276
277 if inputFlags.PF.useMLEOverP:
278 PFEnergyPredictorTool = CompFactory.PFEnergyPredictorTool("PFRecoverSplitShowersEnergyPredcictorTool",ModelPath = inputFlags.PF.EOverP_NN_Model)
279 PFRecoverSplitShowersTool.NNEnergyPredictorTool = PFEnergyPredictorTool
280
281 return PFRecoverSplitShowersTool
282
283
285 result = ComponentAccumulator()
286
287 if inputFlags.PF.useClusterMoments:
288 MomentsNames = [
289 "FIRST_PHI"
290 ,"FIRST_ETA"
291 ,"SECOND_R"
292 ,"SECOND_LAMBDA"
293 ,"DELTA_PHI"
294 ,"DELTA_THETA"
295 ,"DELTA_ALPHA"
296 ,"CENTER_X"
297 ,"CENTER_Y"
298 ,"CENTER_Z"
299 ,"CENTER_MAG"
300 ,"CENTER_LAMBDA"
301 ,"LATERAL"
302 ,"LONGITUDINAL"
303 ,"FIRST_ENG_DENS"
304 ,"ENG_FRAC_EM"
305 ,"ENG_FRAC_MAX"
306 ,"ENG_FRAC_CORE"
307 ,"FIRST_ENG_DENS"
308 ,"SECOND_ENG_DENS"
309 ,"ISOLATION"
310 ,"EM_PROBABILITY"
311 ,"ENG_POS"
312 ,"ENG_BAD_CELLS"
313 ,"N_BAD_CELLS"
314 ,"BADLARQ_FRAC"
315 ,"AVG_LAR_Q"
316 ,"AVG_TILE_Q"
317 ,"SIGNIFICANCE"
318 ]
319 else:
320 MomentsNames = ["CENTER_MAG"]
321
322 if inputFlags.Trigger.Jet.PFlowUnifiedChain:
323 from eflowRec.PFCfg import getPFUnifiedMomentCalculatorTool
324 PFMomentCalculatorTool = result.popToolsAndMerge(
325 getPFUnifiedMomentCalculatorTool(inputFlags, MomentsNames))
326 result.setPrivateTools(PFMomentCalculatorTool)
327 return result
328
329 PFMomentCalculatorTool = CompFactory.PFMomentCalculatorTool("PFMomentCalculatorTool")
330
331 from CaloRec.CaloTopoClusterConfig import getTopoMoments
332 PFClusterMomentsMaker = result.popToolsAndMerge(getTopoMoments(inputFlags))
333 PFClusterMomentsMaker.MomentsNames = MomentsNames
334 PFMomentCalculatorTool.CaloClusterMomentsMaker = PFClusterMomentsMaker
335
336 PFClusterCollectionTool = CompFactory.PFClusterCollectionTool
337 PFMomentCalculatorTool.PFClusterCollectionTool = PFClusterCollectionTool("PFClusterCollectionTool")
338
339 if(inputFlags.PF.useCalibHitTruthClusterMoments):
340 PFMomentCalculatorTool.UseCalibHitTruth=True
341 from CaloRec.CaloTopoClusterConfig import getTopoCalibMoments
342 PFMomentCalculatorTool.CaloCalibClusterMomentsMaker2 = getTopoCalibMoments(inputFlags)
343
344 result.setPrivateTools(PFMomentCalculatorTool)
345 return result
346
347def PFCfg(inputFlags, tracktype="", clustersin=None, calclustersin=None, tracksin=None, verticesin=None, cellsin=None):
348
349 result=ComponentAccumulator()
350 seqname = f'HLTPFlow_{tracktype}'
351 result.addSequence(parOR(seqname))
352
353 # Set defaults for the inputs
354 if clustersin is None:
355 clustersin=inputFlags.eflowRec.RawClusterColl
356 if calclustersin is None:
357 calclustersin=inputFlags.eflowRec.CalClusterColl
358 if tracksin is None:
359 tracksin = inputFlags.eflowRec.TrackColl
360 if verticesin is None:
361 verticesin = inputFlags.eflowRec.VertexColl
362
363 result.merge(TrackingGeoCfg(inputFlags))
364 calogeocfg = CaloGeoAndNoiseCfg(inputFlags)
365 result.merge(calogeocfg)
366
367 selcfg = HLTPFTrackSelectorCfg(inputFlags, tracktype, tracksin, verticesin, clustersin, cellsin)
368 PFTrackSelector = selcfg.getPrimary()
369
370 # Add monitoring tool
371 monTool = PFOnlineMon.getMonTool_PFTrackSelector(inputFlags)
372 PFTrackSelector.MonTool = monTool
373
374 result.merge( selcfg, seqname )
375
376 #---------------------------------------------------------------------------------#
377 # PFlowAlgorithm -- subtraction steps
378
379
380 from eflowRec.PFCfg import getPFClusterSelectorTool
381
382 PFTrackClusterMatchingTool_1 = CompFactory.PFTrackClusterMatchingTool("CalObjBldMatchingTool")
383 monTool_matching = PFOnlineMon.getMonTool_PFTrackClusterMatching(inputFlags)
384 monTool_matching.HistPath = 'PFTrackClusterMatchingTool_1'
385 PFTrackClusterMatchingTool_1.MonTool_ClusterMatching = monTool_matching
386
387 # Trigger.Jet.PFlowUnifiedChain selects which chain the HLT runs: the older combined chain
388 # (default), or the unified matching/subtraction tools that offline uses.
389 if inputFlags.Trigger.Jet.PFlowUnifiedChain:
390 from eflowRec.PFCfg import (getPFUnifiedCellLevelMatchingTool,
391 getPFUnifiedCellLevelSubtractionOnlyTool,
392 getPFUnifiedRecoverSplitShowersMatchingTool,
393 getPFUnifiedRecoverSplitShowersSubtractionOnlyTool)
394
395 cellMatchingTool = getPFUnifiedCellLevelMatchingTool(
396 inputFlags,
397 "PFUnifiedCellLevelMatchingTool",
398 )
399 cellMatchingTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
400
401 recoverSplitShowersMatchingTool = getPFUnifiedRecoverSplitShowersMatchingTool(
402 inputFlags,
403 "PFUnifiedRecoverSplitShowersMatchingTool",
404 )
405 recoverSplitShowersMatchingTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
406
407 # the split-shower stages are run unconditionally, as in the combined chain
408 toolListArgs = dict(
409 useUnified = True,
410 UnifiedBaseTools = [
411 cellMatchingTool,
412 getPFUnifiedCellLevelSubtractionOnlyTool(inputFlags, "PFUnifiedCellLevelSubtractionOnlyTool"),
413 recoverSplitShowersMatchingTool,
414 getPFUnifiedRecoverSplitShowersSubtractionOnlyTool(inputFlags, "PFUnifiedRecoverSplitShowersSubtractionOnlyTool"),
415 result.popToolsAndMerge(getHLTPFMomentCalculatorTool(inputFlags)),
416 ],
417 )
418 else:
419 cellSubtractionTool = getHLTPFCellLevelSubtractionTool(
420 inputFlags,
421 "PFCellLevelSubtractionTool",
422 )
423 cellSubtractionTool.PFTrackClusterMatchingTool=PFTrackClusterMatchingTool_1
424
425 recoverSplitShowersTool = getHLTPFRecoverSplitShowersTool(
426 inputFlags,
427 "PFRecoverSplitShowersTool",
428 )
429 recoverSplitShowersTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
430
431 toolListArgs = dict(
432 SubtractionToolList = [
433 cellSubtractionTool,
434 recoverSplitShowersTool,
435 ],
436 BaseToolList = [
437 result.popToolsAndMerge(getHLTPFMomentCalculatorTool(inputFlags)),
438 ],
439 )
440
441 result.addEventAlgo(
442 CompFactory.PFAlgorithm(
443 f"PFAlgorithm_{tracktype}",
444 PFClusterSelectorTool = getPFClusterSelectorTool(
445 inputFlags,
446 clustersin,
447 calclustersin,
448 "PFClusterSelectorTool",
449 ),
450 MonTool = PFOnlineMon.getMonTool_PFAlgorithm(inputFlags),
451 eflowRecTracksInputName = PFTrackSelector.eflowRecTracksOutputName,
452 eflowRecClustersOutputName = f"eflowRecClusters_{tracktype}",
453 PFCaloClustersOutputName = f"PFCaloCluster_{tracktype}",
454 eflowCaloObjectsOutputName = f"eflowCaloObjects_{tracktype}",
455 **toolListArgs,
456 ),
457 seqname
458 )
459
460 #---------------------------------------------------------------------------------#
461 # PFO creators here
462
463 chargedPFOArgs = dict(
464 inputFlags=inputFlags,
465 nameSuffix=f"_{tracktype}",
466 chargedFlowElementOutputName=recordable(f"HLT_{tracktype}ChargedParticleFlowObjects"),
467 eflowCaloObjectContainerName=f"eflowCaloObjects_{tracktype}"
468 )
469 neutralPFOArgs = dict(
470 inputFlags=inputFlags,
471 nameSuffix=f"_{tracktype}",
472 neutralFlowElementOutputName=recordable(f"HLT_{tracktype}NeutralParticleFlowObjects"),
473 eflowCaloObjectContainerName=f"eflowCaloObjects_{tracktype}"
474 )
475 from eflowRec.PFCfg import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm
476 result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(**neutralPFOArgs), seqname)
477 result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(**chargedPFOArgs), seqname)
478
479
480 return result
481
482if __name__=="__main__":
483
484 from AthenaConfiguration.AllConfigFlags import initConfigFlags
485 cfgFlags = initConfigFlags()
486 #cfgFlags.Input.Files=["myESD.pool.root"]
487 cfgFlags.Input.Files=["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/RecExRecoTest/mc16_13TeV.361022.Pythia8EvtGen_A14NNPDF23LO_jetjet_JZ2W.recon.ESD.e3668_s3170_r10572_homeMade.pool.root"]
488 #
489 cfgFlags.addFlag("eflowRec.TrackColl","InDetTrackParticles")
490 cfgFlags.addFlag("eflowRec.VertexColl","PrimaryVertices")
491 cfgFlags.addFlag("eflowRec.RawClusterColl","CaloTopoClusters")
492 cfgFlags.addFlag("eflowRec.CalClusterColl","CaloCalTopoClustersNew")
493
494 #PF flags
495 cfgFlags.PF.addClusterMoments = False
496 cfgFlags.PF.useClusterMoments = False
497
498 #
499 # Try to get around TRT alignment folder problem in MC
500 cfgFlags.GeoModel.Align.Dynamic = False
501 #
502 cfgFlags.lock()
503
504 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
505 cfg=MainServicesCfg(cfgFlags)
506
507 from CaloRec.CaloTopoClusterConfig import CaloTopoClusterCfg
508 tccfg = CaloTopoClusterCfg(cfgFlags)
509 tcalg = tccfg.getPrimary()
510 tcalg.ClustersOutputName = "CaloCalTopoClustersNew"
511 cfg.merge(tccfg)
512 cfg.addEventAlgo(tcalg,sequenceName="AthAlgSeq")
513
514 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
515 cfg.merge(PoolReadCfg(cfgFlags))
516
517 cfg.merge(PFCfg(cfgFlags))
518
519 cfg.printConfig()# (summariseProps=True)
520
521 outputlist = [
522 "xAOD::CaloClusterContainer#CaloCalTopoClusters*",
523 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
524 "xAOD::PFOContainer#*ParticleFlowObjects",
525 "xAOD::PFOAuxContainer#*ParticleFlowObjectsAux."
526 ]
527 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg, outputStreamName
528 cfg.merge(OutputStreamCfg(cfgFlags,"xAOD",ItemList=outputlist))
529 from pprint import pprint
530 pprint( cfg.getEventAlgo(outputStreamName("xAOD")).ItemList )
531
532 histSvc = CompFactory.THistSvc(Output = ["EXPERT DATAFILE='expert-monitoring.root', OPT='RECREATE'"])
533 cfg.addService(histSvc)
534
535 cfg.getService("StoreGateSvc").Dump = True
536
537 cfg.run(10)
if(pathvar)
Class to store reference e/p mean and widths, as well as reference energy density radial profile fit ...
Inherits from IPFClusterCollectionTool and AthAlgTool.
Class to store reference e/p mean and widths, as well as reference energy density radial profile fit ...
Definition PFCfg.py:1
PFTrackExtensionCfg(flags, tracktype, tracksin)
MuonCaloTagCfg(flags, tracktype, tracksin, extcache, cellsin)
HLTPFTrackSelectorCfg(inputFlags, tracktype, tracksin, verticesin, clustersin, cellsin=None)
MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin)
getHLTPFCellLevelSubtractionTool(inputFlags, toolName)
TrackingGeoCfg(inputFlags)
getHLTPFMomentCalculatorTool(inputFlags)
CaloGeoAndNoiseCfg(inputFlags)
getHLTPFRecoverSplitShowersTool(inputFlags, toolName)
getMonTool_PFTrackClusterMatching(flags)
getMonTool_PFTrackSelector(flags)
getMonTool_eflowTrackCaloExtensionTool(flags)
Definition PFOnlineMon.py:3
getMonTool_PFAlgorithm(flags)
getMonTool_ParticleCaloExtensionTool(flags)