2 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
3 from AthenaConfiguration.ComponentFactory
import CompFactory
4 from AthenaCommon.CFElements
import parOR
5 from eflowRec
import PFOnlineMon
13 from MagFieldServices.MagFieldServicesConfig
import AtlasFieldCacheCondAlgCfg
22 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
23 from TileGeoModel.TileGMConfig
import TileGMCfg
28 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
35 """ Get the track-to-calo extension after a preselection
37 Returns the component accumulator, the preselected track collection and the extension cache
40 pretracks_name = f
"HLTPFPreselTracks_{tracktype}"
41 cache_name = f
"HLTPFTrackExtensionCache_{tracktype}"
43 from InDetConfig.InDetTrackSelectionToolConfig
import PFTrackSelectionToolCfg
44 result.addEventAlgo(CompFactory.PFTrackPreselAlg(
45 f
"HLTPFTrackPresel_{tracktype}",
47 OutputTracks=pretracks_name,
53 monTool_trackExtrap.HistPath =
'TrackCaloExtrapolation_general'
55 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
56 result.addEventAlgo(CompFactory.Trk.PreselCaloExtensionBuilderAlg(
57 f
"HLTPFTrackExtension_{tracktype}",
58 ParticleCaloExtensionTool=result.popToolsAndMerge(
60 InputTracks=pretracks_name,
61 OutputCache=cache_name,
64 return result, pretracks_name, cache_name
67 """ Create the muon calo tagging configuration
69 Return the component accumulator and the tracks with muons removed
71 from TrkConfig.AtlasExtrapolatorConfig
import TrigPFlowExtrapolatorCfg
74 output_tracks = f
"PFMuonCaloTagTracks_{tracktype}"
76 from TrackToCalo.TrackToCaloConfig
import (
77 HLTPF_ParticleCaloExtensionToolCfg,
78 HLTPF_ParticleCaloCellAssociationToolCfg)
83 ParticleCaloExtensionTool=caloext,
88 CompFactory.PFTrackMuonCaloTaggingAlg(
89 f
"PFTrackMuonCaloTaggingAlg_{tracktype}",
90 InputTracks = tracksin,
91 InputCaloExtension = extcache,
93 OutputTracks = output_tracks,
94 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
95 MuonScoreTool = CompFactory.CaloMuonScoreTool(
97 ParticleCaloCellAssociationTool = calocellassoc
99 LooseTagTool=CompFactory.CaloMuonTag(
"LooseCaloMuonTag", TagMode=
"Loose"),
100 TightTagTool=CompFactory.CaloMuonTag(
"TightCaloMuonTag", TagMode=
"Tight"),
101 DepositInCaloTool=CompFactory.TrackDepositInCaloTool(
102 ExtrapolatorHandle=extrapolator,
103 ParticleCaloCellAssociationTool = calocellassoc,
104 ParticleCaloExtensionTool = caloext
109 return result, output_tracks
111 def MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin):
112 """ Create the muon iso tagging configuration
114 Return the component accumulator and the tracks with muons removed
117 output_tracks = f
"PFMuonIsoTagTracks_{tracktype}"
119 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
122 CompFactory.PFTrackMuonIsoTaggingAlg(
123 f
"PFTrackMuonIsoTaggingalg_{tracktype}",
124 InputTracks = tracksin,
125 InputClusters = clustersin,
126 InputVertices = verticesin,
127 OutputTracks = output_tracks,
128 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
129 TrackIsoTool = CompFactory.xAOD.TrackIsolationTool(
130 TrackParticleLocation=tracksin,
133 CaloIsoTool = CompFactory.xAOD.CaloIsolationTool(
134 ParticleCaloExtensionTool=result.popToolsAndMerge(
136 InputCaloExtension=extcache,
137 ParticleCaloCellAssociationTool=
"",
138 saveOnlyRequestedCorrections=
True,
143 return result, output_tracks
150 muon_mode = inputFlags.Trigger.FSHad.PFOMuonRemoval
151 if muon_mode ==
"None":
156 inputFlags, tracktype, tracksin
158 result.merge(ext_acc)
159 if muon_mode ==
"Calo":
161 raise ValueError(
"Cells must be provided for the 'Calo' muon mode!")
163 inputFlags, tracktype, pretracks, extension_cache, cellsin
165 elif muon_mode ==
"Iso":
167 inputFlags, tracktype, pretracks, verticesin, extension_cache, clustersin
170 raise ValueError(f
"Invalid muon removal mode '{muon_mode}'")
171 result.merge(tag_acc)
173 from InDetConfig.InDetTrackSelectionToolConfig
import PFTrackSelectionToolCfg
174 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
177 from eflowRec
import PFOnlineMon
179 monTool_extrapolator.HistPath =
'TrackExtrapolator'
182 CompFactory.PFTrackSelector(
183 f
"PFTrackSelector_{tracktype}",
184 trackExtrapolatorTool = CompFactory.eflowTrackCaloExtensionTool(
185 "HLTPF_eflowTrkCaloExt",
186 TrackCaloExtensionTool=result.popToolsAndMerge(
188 PFParticleCache = extension_cache,
189 MonTool_TrackCaloExtension = monTool_extrapolator
195 VertexContainer=verticesin,
196 eflowRecTracksOutputName=f
"eflowRecTracks_{tracktype}",
206 from eflowRec.PFCfg
import getPFMomentCalculatorTool
208 if inputFlags.PF.useClusterMoments:
241 MomentsNames = [
"CENTER_MAG"]
243 result.setPrivateTools(PFMomentCalculatorTool)
246 def PFCfg(inputFlags, tracktype="", clustersin=None, calclustersin=None, tracksin=None, verticesin=None, cellsin=None):
249 seqname = f
'HLTPFlow_{tracktype}'
250 result.addSequence(
parOR(seqname))
253 if clustersin
is None:
254 clustersin=inputFlags.eflowRec.RawClusterColl
255 if calclustersin
is None:
256 calclustersin=inputFlags.eflowRec.CalClusterColl
258 tracksin = inputFlags.eflowRec.TrackColl
259 if verticesin
is None:
260 verticesin = inputFlags.eflowRec.VertexColl
264 result.merge(calogeocfg)
267 PFTrackSelector = selcfg.getPrimary()
271 PFTrackSelector.MonTool = monTool
273 result.merge( selcfg, seqname )
279 from eflowRec.PFCfg
import getPFClusterSelectorTool
280 from eflowRec.PFCfg
import getPFCellLevelSubtractionTool,getPFRecoverSplitShowersTool
282 PFTrackClusterMatchingTool_1 = CompFactory.PFTrackClusterMatchingTool(
"CalObjBldMatchingTool")
284 monTool_matching.HistPath =
'PFTrackClusterMatchingTool_1'
285 PFTrackClusterMatchingTool_1.MonTool_ClusterMatching = monTool_matching
289 "PFCellLevelSubtractionTool",
291 cellSubtractionTool.PFTrackClusterMatchingTool=PFTrackClusterMatchingTool_1
295 "PFRecoverSplitShowersTool",
297 recoverSplitShowersTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
300 CompFactory.PFAlgorithm(
301 f
"PFAlgorithm_{tracktype}",
306 "PFClusterSelectorTool",
308 SubtractionToolList = [
310 recoverSplitShowersTool,
316 eflowRecTracksInputName = PFTrackSelector.eflowRecTracksOutputName,
317 eflowRecClustersOutputName = f
"eflowRecClusters_{tracktype}",
318 PFCaloClustersOutputName = f
"PFCaloCluster_{tracktype}",
319 eflowCaloObjectsOutputName = f
"eflowCaloObjects_{tracktype}",
327 chargedPFOArgs = dict(
328 inputFlags=inputFlags,
329 nameSuffix=f
"_{tracktype}",
330 chargedFlowElementOutputName=f
"HLT_{tracktype}ChargedParticleFlowObjects",
331 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
333 neutralPFOArgs = dict(
334 inputFlags=inputFlags,
335 nameSuffix=f
"_{tracktype}",
336 neutralFlowElementOutputName=f
"HLT_{tracktype}NeutralParticleFlowObjects",
337 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
339 from eflowRec.PFCfg
import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm
346 if __name__==
"__main__":
348 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
351 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"]
353 cfgFlags.addFlag(
"eflowRec.TrackColl",
"InDetTrackParticles")
354 cfgFlags.addFlag(
"eflowRec.VertexColl",
"PrimaryVertices")
355 cfgFlags.addFlag(
"eflowRec.RawClusterColl",
"CaloTopoClusters")
356 cfgFlags.addFlag(
"eflowRec.CalClusterColl",
"CaloCalTopoClustersNew")
359 cfgFlags.PF.addClusterMoments =
False
360 cfgFlags.PF.useClusterMoments =
False
364 cfgFlags.GeoModel.Align.Dynamic =
False
368 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
371 from CaloRec.CaloTopoClusterConfig
import CaloTopoClusterCfg
373 tcalg = tccfg.getPrimary()
374 tcalg.ClustersOutputName =
"CaloCalTopoClustersNew"
376 cfg.addEventAlgo(tcalg,sequenceName=
"AthAlgSeq")
378 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
381 cfg.merge(
PFCfg(cfgFlags))
386 "xAOD::CaloClusterContainer#CaloCalTopoClusters*",
387 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
388 "xAOD::PFOContainer#*ParticleFlowObjects",
389 "xAOD::PFOAuxContainer#*ParticleFlowObjectsAux."
391 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg, outputStreamName
393 from pprint
import pprint
396 histSvc = CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='expert-monitoring.root', OPT='RECREATE'"])
397 cfg.addService(histSvc)
399 cfg.getService(
"StoreGateSvc").Dump =
True