2from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
3from AthenaConfiguration.ComponentFactory
import CompFactory
4from AthenaCommon.CFElements
import parOR
5from eflowRec
import PFOnlineMon
11 result = ComponentAccumulator()
13 from MagFieldServices.MagFieldServicesConfig
import AtlasFieldCacheCondAlgCfg
14 result.merge(AtlasFieldCacheCondAlgCfg(inputFlags))
21 result = ComponentAccumulator()
22 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
23 from TileGeoModel.TileGMConfig
import TileGMCfg
25 result.merge(LArGMCfg(inputFlags))
26 result.merge(TileGMCfg(inputFlags))
28 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
30 result.merge(CaloNoiseCondAlgCfg(inputFlags,
"totalNoise"))
35 """ Get the track-to-calo extension after a preselection
37 Returns the component accumulator, the preselected track collection and the extension cache
39 result = ComponentAccumulator()
40 pretracks_name = f
"HLTPFPreselTracks_{tracktype}"
41 cache_name = f
"HLTPFTrackExtensionCache_{tracktype}"
43 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
44 PFTrackSelectionToolCfg)
45 result.addEventAlgo(CompFactory.PFTrackPreselAlg(
46 f
"HLTPFTrackPresel_{tracktype}",
48 OutputTracks=pretracks_name,
49 TrackSelTool=result.popToolsAndMerge(PFTrackSelectionToolCfg(flags))
54 monTool_trackExtrap.HistPath =
'TrackCaloExtrapolation_general'
56 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
57 result.addEventAlgo(CompFactory.Trk.PreselCaloExtensionBuilderAlg(
58 f
"HLTPFTrackExtension_{tracktype}",
59 ParticleCaloExtensionTool=result.popToolsAndMerge(
60 HLTPF_ParticleCaloExtensionToolCfg(flags, MonTool=monTool_trackExtrap)),
61 InputTracks=pretracks_name,
62 OutputCache=cache_name,
65 return result, pretracks_name, cache_name
68 """ Create the muon calo tagging configuration
70 Return the component accumulator and the tracks with muons removed
72 from TrkConfig.AtlasExtrapolatorConfig
import TrigPFlowExtrapolatorCfg
73 result = ComponentAccumulator()
74 extrapolator = result.popToolsAndMerge(TrigPFlowExtrapolatorCfg(flags))
75 output_tracks = f
"PFMuonCaloTagTracks_{tracktype}"
77 from TrackToCalo.TrackToCaloConfig
import (
78 HLTPF_ParticleCaloExtensionToolCfg,
79 HLTPF_ParticleCaloCellAssociationToolCfg)
81 caloext = result.popToolsAndMerge(HLTPF_ParticleCaloExtensionToolCfg(flags))
82 calocellassoc = result.popToolsAndMerge(HLTPF_ParticleCaloCellAssociationToolCfg(
84 ParticleCaloExtensionTool=caloext,
89 CompFactory.PFTrackMuonCaloTaggingAlg(
90 f
"PFTrackMuonCaloTaggingAlg_{tracktype}",
91 InputTracks = tracksin,
92 InputCaloExtension = extcache,
94 OutputTracks = output_tracks,
95 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
96 MuonScoreTool = CompFactory.CaloMuonScoreTool(
98 ParticleCaloCellAssociationTool = calocellassoc
100 LooseTagTool=CompFactory.CaloMuonTag(
"LooseCaloMuonTag", TagMode=
"Loose"),
101 TightTagTool=CompFactory.CaloMuonTag(
"TightCaloMuonTag", TagMode=
"Tight"),
102 DepositInCaloTool=CompFactory.TrackDepositInCaloTool(
103 ExtrapolatorHandle=extrapolator,
104 ParticleCaloCellAssociationTool = calocellassoc,
105 ParticleCaloExtensionTool = caloext
110 return result, output_tracks
112def MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin):
113 """ Create the muon iso tagging configuration
115 Return the component accumulator and the tracks with muons removed
117 result = ComponentAccumulator()
118 output_tracks = f
"PFMuonIsoTagTracks_{tracktype}"
120 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
123 CompFactory.PFTrackMuonIsoTaggingAlg(
124 f
"PFTrackMuonIsoTaggingalg_{tracktype}",
125 InputTracks = tracksin,
126 InputClusters = clustersin,
127 InputVertices = verticesin,
128 OutputTracks = output_tracks,
129 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
130 TrackIsoTool = CompFactory.xAOD.TrackIsolationTool(
131 TrackParticleLocation=tracksin,
134 CaloIsoTool = CompFactory.xAOD.CaloIsolationTool(
135 ParticleCaloExtensionTool=result.popToolsAndMerge(
136 HLTPF_ParticleCaloExtensionToolCfg(flags)),
137 InputCaloExtension=extcache,
138 ParticleCaloCellAssociationTool=
"",
139 saveOnlyRequestedCorrections=
True,
144 return result, output_tracks
149 result = ComponentAccumulator()
151 muon_mode = inputFlags.Trigger.FSHad.PFOMuonRemoval
152 if muon_mode ==
"None":
157 inputFlags, tracktype, tracksin
159 result.merge(ext_acc)
160 if muon_mode ==
"Calo":
162 raise ValueError(
"Cells must be provided for the 'Calo' muon mode!")
164 inputFlags, tracktype, pretracks, extension_cache, cellsin
166 elif muon_mode ==
"Iso":
168 inputFlags, tracktype, pretracks, verticesin, extension_cache, clustersin
171 raise ValueError(f
"Invalid muon removal mode '{muon_mode}'")
172 result.merge(tag_acc)
174 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
175 PFTrackSelectionToolCfg)
176 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
179 from eflowRec
import PFOnlineMon
181 monTool_extrapolator.HistPath =
'TrackExtrapolator'
184 CompFactory.PFTrackSelector(
185 f
"PFTrackSelector_{tracktype}",
186 trackExtrapolatorTool = CompFactory.eflowTrackCaloExtensionTool(
187 "HLTPF_eflowTrkCaloExt",
188 TrackCaloExtensionTool=result.popToolsAndMerge(
189 HLTPF_ParticleCaloExtensionToolCfg(inputFlags)),
190 PFParticleCache = extension_cache,
191 MonTool_TrackCaloExtension = monTool_extrapolator
193 trackSelectionTool = result.popToolsAndMerge(PFTrackSelectionToolCfg(inputFlags)),
197 VertexContainer=verticesin,
198 eflowRecTracksOutputName=f
"eflowRecTracks_{tracktype}",
207 result = ComponentAccumulator()
208 from eflowRec.PFCfg
import getPFMomentCalculatorTool
210 if inputFlags.PF.useClusterMoments:
243 MomentsNames = [
"CENTER_MAG"]
244 PFMomentCalculatorTool = result.popToolsAndMerge(getPFMomentCalculatorTool(inputFlags,MomentsNames))
245 result.setPrivateTools(PFMomentCalculatorTool)
248def PFCfg(inputFlags, tracktype="", clustersin=None, calclustersin=None, tracksin=None, verticesin=None, cellsin=None):
250 result=ComponentAccumulator()
251 seqname = f
'HLTPFlow_{tracktype}'
252 result.addSequence(parOR(seqname))
255 if clustersin
is None:
256 clustersin=inputFlags.eflowRec.RawClusterColl
257 if calclustersin
is None:
258 calclustersin=inputFlags.eflowRec.CalClusterColl
260 tracksin = inputFlags.eflowRec.TrackColl
261 if verticesin
is None:
262 verticesin = inputFlags.eflowRec.VertexColl
266 result.merge(calogeocfg)
269 PFTrackSelector = selcfg.getPrimary()
273 PFTrackSelector.MonTool = monTool
275 result.merge( selcfg, seqname )
281 from eflowRec.PFCfg
import getPFClusterSelectorTool
282 from eflowRec.PFCfg
import getPFCellLevelSubtractionTool,getPFRecoverSplitShowersTool
284 PFTrackClusterMatchingTool_1 = CompFactory.PFTrackClusterMatchingTool(
"CalObjBldMatchingTool")
286 monTool_matching.HistPath =
'PFTrackClusterMatchingTool_1'
287 PFTrackClusterMatchingTool_1.MonTool_ClusterMatching = monTool_matching
289 cellSubtractionTool = getPFCellLevelSubtractionTool(
291 "PFCellLevelSubtractionTool",
293 cellSubtractionTool.PFTrackClusterMatchingTool=PFTrackClusterMatchingTool_1
295 recoverSplitShowersTool = getPFRecoverSplitShowersTool(
297 "PFRecoverSplitShowersTool",
299 recoverSplitShowersTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
302 CompFactory.PFAlgorithm(
303 f
"PFAlgorithm_{tracktype}",
304 PFClusterSelectorTool = getPFClusterSelectorTool(
308 "PFClusterSelectorTool",
310 SubtractionToolList = [
312 recoverSplitShowersTool,
318 eflowRecTracksInputName = PFTrackSelector.eflowRecTracksOutputName,
319 eflowRecClustersOutputName = f
"eflowRecClusters_{tracktype}",
320 PFCaloClustersOutputName = f
"PFCaloCluster_{tracktype}",
321 eflowCaloObjectsOutputName = f
"eflowCaloObjects_{tracktype}",
329 chargedPFOArgs = dict(
330 inputFlags=inputFlags,
331 nameSuffix=f
"_{tracktype}",
332 chargedFlowElementOutputName=f
"HLT_{tracktype}ChargedParticleFlowObjects",
333 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
335 neutralPFOArgs = dict(
336 inputFlags=inputFlags,
337 nameSuffix=f
"_{tracktype}",
338 neutralFlowElementOutputName=f
"HLT_{tracktype}NeutralParticleFlowObjects",
339 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
341 from eflowRec.PFCfg
import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm
342 result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(**neutralPFOArgs), seqname)
343 result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(**chargedPFOArgs), seqname)
348if __name__==
"__main__":
350 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
351 cfgFlags = initConfigFlags()
353 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"]
355 cfgFlags.addFlag(
"eflowRec.TrackColl",
"InDetTrackParticles")
356 cfgFlags.addFlag(
"eflowRec.VertexColl",
"PrimaryVertices")
357 cfgFlags.addFlag(
"eflowRec.RawClusterColl",
"CaloTopoClusters")
358 cfgFlags.addFlag(
"eflowRec.CalClusterColl",
"CaloCalTopoClustersNew")
361 cfgFlags.PF.addClusterMoments =
False
362 cfgFlags.PF.useClusterMoments =
False
366 cfgFlags.GeoModel.Align.Dynamic =
False
370 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
371 cfg=MainServicesCfg(cfgFlags)
373 from CaloRec.CaloTopoClusterConfig
import CaloTopoClusterCfg
374 tccfg = CaloTopoClusterCfg(cfgFlags)
375 tcalg = tccfg.getPrimary()
376 tcalg.ClustersOutputName =
"CaloCalTopoClustersNew"
378 cfg.addEventAlgo(tcalg,sequenceName=
"AthAlgSeq")
380 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
381 cfg.merge(PoolReadCfg(cfgFlags))
383 cfg.merge(
PFCfg(cfgFlags))
388 "xAOD::CaloClusterContainer#CaloCalTopoClusters*",
389 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
390 "xAOD::PFOContainer#*ParticleFlowObjects",
391 "xAOD::PFOAuxContainer#*ParticleFlowObjectsAux."
393 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg, outputStreamName
394 cfg.merge(OutputStreamCfg(cfgFlags,
"xAOD",ItemList=outputlist))
395 from pprint
import pprint
396 pprint( cfg.getEventAlgo(outputStreamName(
"xAOD")).ItemList )
398 histSvc = CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='expert-monitoring.root', OPT='RECREATE'"])
399 cfg.addService(histSvc)
401 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)