2from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
3from AthenaConfiguration.ComponentFactory
import CompFactory
4from AthenaCommon.CFElements
import parOR
5from eflowRec
import PFOnlineMon
6from TrigEDMConfig.TriggerEDM
import recordable
12 result = ComponentAccumulator()
14 from MagFieldServices.MagFieldServicesConfig
import AtlasFieldCacheCondAlgCfg
15 result.merge(AtlasFieldCacheCondAlgCfg(inputFlags))
22 result = ComponentAccumulator()
23 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
24 from TileGeoModel.TileGMConfig
import TileGMCfg
26 result.merge(LArGMCfg(inputFlags))
27 result.merge(TileGMCfg(inputFlags))
29 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
31 result.merge(CaloNoiseCondAlgCfg(inputFlags,
"totalNoise"))
36 """ Get the track-to-calo extension after a preselection
38 Returns the component accumulator, the preselected track collection and the extension cache
40 result = ComponentAccumulator()
41 pretracks_name = f
"HLTPFPreselTracks_{tracktype}"
42 cache_name = f
"HLTPFTrackExtensionCache_{tracktype}"
44 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
45 PFTrackSelectionToolCfg)
46 result.addEventAlgo(CompFactory.PFTrackPreselAlg(
47 f
"HLTPFTrackPresel_{tracktype}",
49 OutputTracks=pretracks_name,
50 TrackSelTool=result.popToolsAndMerge(PFTrackSelectionToolCfg(flags))
55 monTool_trackExtrap.HistPath =
'TrackCaloExtrapolation_general'
57 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
58 result.addEventAlgo(CompFactory.Trk.PreselCaloExtensionBuilderAlg(
59 f
"HLTPFTrackExtension_{tracktype}",
60 ParticleCaloExtensionTool=result.popToolsAndMerge(
61 HLTPF_ParticleCaloExtensionToolCfg(flags, MonTool=monTool_trackExtrap)),
62 InputTracks=pretracks_name,
63 OutputCache=cache_name,
66 return result, pretracks_name, cache_name
69 """ Create the muon calo tagging configuration
71 Return the component accumulator and the tracks with muons removed
73 from TrkConfig.AtlasExtrapolatorConfig
import TrigPFlowExtrapolatorCfg
74 result = ComponentAccumulator()
75 extrapolator = result.popToolsAndMerge(TrigPFlowExtrapolatorCfg(flags))
76 output_tracks = f
"PFMuonCaloTagTracks_{tracktype}"
78 from TrackToCalo.TrackToCaloConfig
import (
79 HLTPF_ParticleCaloExtensionToolCfg,
80 HLTPF_ParticleCaloCellAssociationToolCfg)
82 caloext = result.popToolsAndMerge(HLTPF_ParticleCaloExtensionToolCfg(flags))
83 calocellassoc = result.popToolsAndMerge(HLTPF_ParticleCaloCellAssociationToolCfg(
85 ParticleCaloExtensionTool=caloext,
90 CompFactory.PFTrackMuonCaloTaggingAlg(
91 f
"PFTrackMuonCaloTaggingAlg_{tracktype}",
92 InputTracks = tracksin,
93 InputCaloExtension = extcache,
95 OutputTracks = output_tracks,
96 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
97 MuonScoreTool = CompFactory.CaloMuonScoreTool(
99 ParticleCaloCellAssociationTool = calocellassoc
101 LooseTagTool=CompFactory.CaloMuonTag(
"LooseCaloMuonTag", TagMode=
"Loose"),
102 TightTagTool=CompFactory.CaloMuonTag(
"TightCaloMuonTag", TagMode=
"Tight"),
103 DepositInCaloTool=CompFactory.TrackDepositInCaloTool(
104 ExtrapolatorHandle=extrapolator,
105 ParticleCaloCellAssociationTool = calocellassoc,
106 ParticleCaloExtensionTool = caloext
111 return result, output_tracks
113def MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin):
114 """ Create the muon iso tagging configuration
116 Return the component accumulator and the tracks with muons removed
118 result = ComponentAccumulator()
119 output_tracks = f
"PFMuonIsoTagTracks_{tracktype}"
121 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
124 CompFactory.PFTrackMuonIsoTaggingAlg(
125 f
"PFTrackMuonIsoTaggingalg_{tracktype}",
126 InputTracks = tracksin,
127 InputClusters = clustersin,
128 InputVertices = verticesin,
129 OutputTracks = output_tracks,
130 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
131 TrackIsoTool = CompFactory.xAOD.TrackIsolationTool(
132 TrackParticleLocation=tracksin,
135 CaloIsoTool = CompFactory.xAOD.CaloIsolationTool(
136 ParticleCaloExtensionTool=result.popToolsAndMerge(
137 HLTPF_ParticleCaloExtensionToolCfg(flags)),
138 InputCaloExtension=extcache,
139 ParticleCaloCellAssociationTool=
"",
140 saveOnlyRequestedCorrections=
True,
145 return result, output_tracks
150 result = ComponentAccumulator()
152 muon_mode = inputFlags.Trigger.FSHad.PFOMuonRemoval
153 if muon_mode ==
"None":
158 inputFlags, tracktype, tracksin
160 result.merge(ext_acc)
161 if muon_mode ==
"Calo":
163 raise ValueError(
"Cells must be provided for the 'Calo' muon mode!")
165 inputFlags, tracktype, pretracks, extension_cache, cellsin
167 elif muon_mode ==
"Iso":
169 inputFlags, tracktype, pretracks, verticesin, extension_cache, clustersin
172 raise ValueError(f
"Invalid muon removal mode '{muon_mode}'")
173 result.merge(tag_acc)
175 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
176 PFTrackSelectionToolCfg)
177 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
180 from eflowRec
import PFOnlineMon
182 monTool_extrapolator.HistPath =
'TrackExtrapolator'
185 CompFactory.PFTrackSelector(
186 f
"PFTrackSelector_{tracktype}",
187 trackExtrapolatorTool = CompFactory.eflowTrackCaloExtensionTool(
188 "HLTPF_eflowTrkCaloExt",
189 TrackCaloExtensionTool=result.popToolsAndMerge(
190 HLTPF_ParticleCaloExtensionToolCfg(inputFlags)),
191 PFParticleCache = extension_cache,
192 MonTool_TrackCaloExtension = monTool_extrapolator
194 trackSelectionTool = result.popToolsAndMerge(PFTrackSelectionToolCfg(inputFlags)),
198 VertexContainer=verticesin,
199 eflowRecTracksOutputName=f
"eflowRecTracks_{tracktype}",
208 result = ComponentAccumulator()
209 from eflowRec.PFCfg
import getPFMomentCalculatorTool
211 if inputFlags.PF.useClusterMoments:
244 MomentsNames = [
"CENTER_MAG"]
245 PFMomentCalculatorTool = result.popToolsAndMerge(getPFMomentCalculatorTool(inputFlags,MomentsNames))
246 result.setPrivateTools(PFMomentCalculatorTool)
249def PFCfg(inputFlags, tracktype="", clustersin=None, calclustersin=None, tracksin=None, verticesin=None, cellsin=None):
251 result=ComponentAccumulator()
252 seqname = f
'HLTPFlow_{tracktype}'
253 result.addSequence(parOR(seqname))
256 if clustersin
is None:
257 clustersin=inputFlags.eflowRec.RawClusterColl
258 if calclustersin
is None:
259 calclustersin=inputFlags.eflowRec.CalClusterColl
261 tracksin = inputFlags.eflowRec.TrackColl
262 if verticesin
is None:
263 verticesin = inputFlags.eflowRec.VertexColl
267 result.merge(calogeocfg)
270 PFTrackSelector = selcfg.getPrimary()
274 PFTrackSelector.MonTool = monTool
276 result.merge( selcfg, seqname )
282 from eflowRec.PFCfg
import getPFClusterSelectorTool
283 from eflowRec.PFCfg
import getPFCellLevelSubtractionTool,getPFRecoverSplitShowersTool
285 PFTrackClusterMatchingTool_1 = CompFactory.PFTrackClusterMatchingTool(
"CalObjBldMatchingTool")
287 monTool_matching.HistPath =
'PFTrackClusterMatchingTool_1'
288 PFTrackClusterMatchingTool_1.MonTool_ClusterMatching = monTool_matching
290 cellSubtractionTool = getPFCellLevelSubtractionTool(
292 "PFCellLevelSubtractionTool",
294 cellSubtractionTool.PFTrackClusterMatchingTool=PFTrackClusterMatchingTool_1
296 recoverSplitShowersTool = getPFRecoverSplitShowersTool(
298 "PFRecoverSplitShowersTool",
300 recoverSplitShowersTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
303 CompFactory.PFAlgorithm(
304 f
"PFAlgorithm_{tracktype}",
305 PFClusterSelectorTool = getPFClusterSelectorTool(
309 "PFClusterSelectorTool",
311 SubtractionToolList = [
313 recoverSplitShowersTool,
319 eflowRecTracksInputName = PFTrackSelector.eflowRecTracksOutputName,
320 eflowRecClustersOutputName = f
"eflowRecClusters_{tracktype}",
321 PFCaloClustersOutputName = f
"PFCaloCluster_{tracktype}",
322 eflowCaloObjectsOutputName = f
"eflowCaloObjects_{tracktype}",
330 chargedPFOArgs = dict(
331 inputFlags=inputFlags,
332 nameSuffix=f
"_{tracktype}",
333 chargedFlowElementOutputName=recordable(f
"HLT_{tracktype}ChargedParticleFlowObjects"),
334 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
336 neutralPFOArgs = dict(
337 inputFlags=inputFlags,
338 nameSuffix=f
"_{tracktype}",
339 neutralFlowElementOutputName=recordable(f
"HLT_{tracktype}NeutralParticleFlowObjects"),
340 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
342 from eflowRec.PFCfg
import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm
343 result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(**neutralPFOArgs), seqname)
344 result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(**chargedPFOArgs), seqname)
349if __name__==
"__main__":
351 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
352 cfgFlags = initConfigFlags()
354 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"]
356 cfgFlags.addFlag(
"eflowRec.TrackColl",
"InDetTrackParticles")
357 cfgFlags.addFlag(
"eflowRec.VertexColl",
"PrimaryVertices")
358 cfgFlags.addFlag(
"eflowRec.RawClusterColl",
"CaloTopoClusters")
359 cfgFlags.addFlag(
"eflowRec.CalClusterColl",
"CaloCalTopoClustersNew")
362 cfgFlags.PF.addClusterMoments =
False
363 cfgFlags.PF.useClusterMoments =
False
367 cfgFlags.GeoModel.Align.Dynamic =
False
371 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
372 cfg=MainServicesCfg(cfgFlags)
374 from CaloRec.CaloTopoClusterConfig
import CaloTopoClusterCfg
375 tccfg = CaloTopoClusterCfg(cfgFlags)
376 tcalg = tccfg.getPrimary()
377 tcalg.ClustersOutputName =
"CaloCalTopoClustersNew"
379 cfg.addEventAlgo(tcalg,sequenceName=
"AthAlgSeq")
381 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
382 cfg.merge(PoolReadCfg(cfgFlags))
384 cfg.merge(
PFCfg(cfgFlags))
389 "xAOD::CaloClusterContainer#CaloCalTopoClusters*",
390 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
391 "xAOD::PFOContainer#*ParticleFlowObjects",
392 "xAOD::PFOAuxContainer#*ParticleFlowObjectsAux."
394 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg, outputStreamName
395 cfg.merge(OutputStreamCfg(cfgFlags,
"xAOD",ItemList=outputlist))
396 from pprint
import pprint
397 pprint( cfg.getEventAlgo(outputStreamName(
"xAOD")).ItemList )
399 histSvc = CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='expert-monitoring.root', OPT='RECREATE'"])
400 cfg.addService(histSvc)
402 cfg.getService(
"StoreGateSvc").Dump =
True
CaloGeoAndNoiseCfg(inputFlags)
MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin)
getHLTPFMomentCalculatorTool(inputFlags)
TrackingGeoCfg(inputFlags)
MuonCaloTagCfg(flags, tracktype, tracksin, extcache, cellsin)
HLTPFTrackSelectorCfg(inputFlags, tracktype, tracksin, verticesin, clustersin, cellsin=None)
PFTrackExtensionCfg(flags, tracktype, tracksin)
getMonTool_PFAlgorithm(flags)
getMonTool_ParticleCaloExtensionTool(flags)
getMonTool_PFTrackClusterMatching(flags)
getMonTool_PFTrackSelector(flags)
getMonTool_eflowTrackCaloExtensionTool(flags)