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
14 result = ComponentAccumulator()
16 from MagFieldServices.MagFieldServicesConfig
import AtlasFieldCacheCondAlgCfg
17 result.merge(AtlasFieldCacheCondAlgCfg(inputFlags))
24 result = ComponentAccumulator()
25 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
26 from TileGeoModel.TileGMConfig
import TileGMCfg
28 result.merge(LArGMCfg(inputFlags))
29 result.merge(TileGMCfg(inputFlags))
31 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
33 result.merge(CaloNoiseCondAlgCfg(inputFlags,
"totalNoise"))
38 """ Get the track-to-calo extension after a preselection
40 Returns the component accumulator, the preselected track collection and the extension cache
42 result = ComponentAccumulator()
43 pretracks_name = f
"HLTPFPreselTracks_{tracktype}"
44 cache_name = f
"HLTPFTrackExtensionCache_{tracktype}"
46 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
47 PFTrackSelectionToolCfg)
48 result.addEventAlgo(CompFactory.PFTrackPreselAlg(
49 f
"HLTPFTrackPresel_{tracktype}",
51 OutputTracks=pretracks_name,
52 TrackSelTool=result.popToolsAndMerge(PFTrackSelectionToolCfg(flags))
57 monTool_trackExtrap.HistPath =
'TrackCaloExtrapolation_general'
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,
68 return result, pretracks_name, cache_name
71 """ Create the muon calo tagging configuration
73 Return the component accumulator and the tracks with muons removed
75 from TrkConfig.AtlasExtrapolatorConfig
import TrigPFlowExtrapolatorCfg
76 result = ComponentAccumulator()
77 extrapolator = result.popToolsAndMerge(TrigPFlowExtrapolatorCfg(flags))
78 output_tracks = f
"PFMuonCaloTagTracks_{tracktype}"
80 from TrackToCalo.TrackToCaloConfig
import (
81 HLTPF_ParticleCaloExtensionToolCfg,
82 HLTPF_ParticleCaloCellAssociationToolCfg)
84 caloext = result.popToolsAndMerge(HLTPF_ParticleCaloExtensionToolCfg(flags))
85 calocellassoc = result.popToolsAndMerge(HLTPF_ParticleCaloCellAssociationToolCfg(
87 ParticleCaloExtensionTool=caloext,
92 CompFactory.PFTrackMuonCaloTaggingAlg(
93 f
"PFTrackMuonCaloTaggingAlg_{tracktype}",
94 InputTracks = tracksin,
95 InputCaloExtension = extcache,
97 OutputTracks = output_tracks,
98 MinPt = flags.Trigger.FSHad.PFOMuonRemovalMinPt,
99 MuonScoreTool = CompFactory.CaloMuonScoreTool(
101 ParticleCaloCellAssociationTool = calocellassoc
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
113 return result, output_tracks
115def MuonIsoTagCfg(flags, tracktype, tracksin, verticesin, extcache, clustersin):
116 """ Create the muon iso tagging configuration
118 Return the component accumulator and the tracks with muons removed
120 result = ComponentAccumulator()
121 output_tracks = f
"PFMuonIsoTagTracks_{tracktype}"
123 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
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,
137 CaloIsoTool = CompFactory.xAOD.CaloIsolationTool(
138 ParticleCaloExtensionTool=result.popToolsAndMerge(
139 HLTPF_ParticleCaloExtensionToolCfg(flags)),
140 InputCaloExtension=extcache,
141 ParticleCaloCellAssociationTool=
"",
142 saveOnlyRequestedCorrections=
True,
147 return result, output_tracks
152 result = ComponentAccumulator()
154 muon_mode = inputFlags.Trigger.FSHad.PFOMuonRemoval
155 if muon_mode ==
"None":
160 inputFlags, tracktype, tracksin
162 result.merge(ext_acc)
163 if muon_mode ==
"Calo":
165 raise ValueError(
"Cells must be provided for the 'Calo' muon mode!")
167 inputFlags, tracktype, pretracks, extension_cache, cellsin
169 elif muon_mode ==
"Iso":
171 inputFlags, tracktype, pretracks, verticesin, extension_cache, clustersin
174 raise ValueError(f
"Invalid muon removal mode '{muon_mode}'")
175 result.merge(tag_acc)
177 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig
import (
178 PFTrackSelectionToolCfg)
179 from TrackToCalo.TrackToCaloConfig
import HLTPF_ParticleCaloExtensionToolCfg
182 from eflowRec
import PFOnlineMon
184 monTool_extrapolator.HistPath =
'TrackExtrapolator'
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
196 trackSelectionTool = result.popToolsAndMerge(PFTrackSelectionToolCfg(inputFlags)),
200 VertexContainer=verticesin,
201 eflowRecTracksOutputName=f
"eflowRecTracks_{tracktype}",
220 PFCellLevelSubtractionToolFactory = CompFactory.PFSubtractionTool
221 PFCellLevelSubtractionTool = PFCellLevelSubtractionToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
223 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
224 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
227 PFCellEOverPTool = CompFactory.PFCellEOverPTool
228 PFCellLevelSubtractionTool.eflowCellEOverPTool =
PFCellEOverPTool(
"PFCellEOverPTool", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
230 PFCellLevelSubtractionTool.useLegacyEBinIndex=
False
232 if(inputFlags.PF.EOverPMode):
233 PFCellLevelSubtractionTool.CalcEOverP =
True
234 PFCellLevelSubtractionTool.nClusterMatchesToUse = -1
236 PFCellLevelSubtractionTool.nClusterMatchesToUse = 1
238 if(inputFlags.PF.EOverPMode):
239 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,0.2,
"EtaPhiSquareDistance",
"PlainEtaPhi",
"CalObjBldMatchingTool")
241 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,1.64,
"EtaPhiSquareSignificance",
"GeomCenterEtaPhi",
"CalObjBldMatchingTool")
243 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_02 = getPFTrackClusterMatchingTool(inputFlags,0.2,
"EtaPhiSquareDistance",
"PlainEtaPhi",
"MatchingTool_Pull_02")
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
250 if inputFlags.PF.useTruthCheating:
251 if inputFlags.PF.useTrackClusterTruthMatching:
252 PFCellLevelSubtractionTool.CaloClusterReadDecorHandleKey_NLeadingTruthParticles =
"CaloTopoClusters." + inputFlags.Calo.TopoCluster.CalibrationHitDecorationName
253 PFCellLevelSubtractionTool.useTrackClusterTruthMatching=
True
255 if inputFlags.PF.useTruthForChargedShowerSubtraction:
256 PFCellLevelSubtractionTool.useTruthForChargedShowerSubtraction =
True
257 PFCellLevelSubtractionTool.PFSimulateTruthShowerTool = CompFactory.PFSimulateTruthShowerTool(
"PFSimulateTruthShowerTool")
259 return PFCellLevelSubtractionTool
263 PFRecoverSplitShowersToolFactory = CompFactory.PFSubtractionTool
264 PFRecoverSplitShowersTool = PFRecoverSplitShowersToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
266 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
267 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
270 PFCellEOverPTool = CompFactory.PFCellEOverPTool
271 PFRecoverSplitShowersTool.eflowCellEOverPTool =
PFCellEOverPTool(
"PFCellEOverPTool_Recover", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
273 PFRecoverSplitShowersTool.useLegacyEBinIndex=
False
275 PFRecoverSplitShowersTool.RecoverSplitShowers =
True
277 if inputFlags.PF.useMLEOverP:
278 PFEnergyPredictorTool = CompFactory.PFEnergyPredictorTool(
"PFRecoverSplitShowersEnergyPredcictorTool",ModelPath = inputFlags.PF.EOverP_NN_Model)
279 PFRecoverSplitShowersTool.NNEnergyPredictorTool = PFEnergyPredictorTool
281 return PFRecoverSplitShowersTool
285 result = ComponentAccumulator()
287 if inputFlags.PF.useClusterMoments:
320 MomentsNames = [
"CENTER_MAG"]
322 PFMomentCalculatorTool = CompFactory.PFMomentCalculatorTool(
"PFMomentCalculatorTool")
324 from CaloRec.CaloTopoClusterConfig
import getTopoMoments
325 PFClusterMomentsMaker = result.popToolsAndMerge(getTopoMoments(inputFlags))
326 PFClusterMomentsMaker.MomentsNames = MomentsNames
327 PFMomentCalculatorTool.CaloClusterMomentsMaker = PFClusterMomentsMaker
329 PFClusterCollectionTool = CompFactory.PFClusterCollectionTool
332 if(inputFlags.PF.useCalibHitTruthClusterMoments):
333 PFMomentCalculatorTool.UseCalibHitTruth=
True
334 from CaloRec.CaloTopoClusterConfig
import getTopoCalibMoments
335 PFMomentCalculatorTool.CaloCalibClusterMomentsMaker2 = getTopoCalibMoments(inputFlags)
337 result.setPrivateTools(PFMomentCalculatorTool)
340def PFCfg(inputFlags, tracktype="", clustersin=None, calclustersin=None, tracksin=None, verticesin=None, cellsin=None):
342 result=ComponentAccumulator()
343 seqname = f
'HLTPFlow_{tracktype}'
344 result.addSequence(parOR(seqname))
347 if clustersin
is None:
348 clustersin=inputFlags.eflowRec.RawClusterColl
349 if calclustersin
is None:
350 calclustersin=inputFlags.eflowRec.CalClusterColl
352 tracksin = inputFlags.eflowRec.TrackColl
353 if verticesin
is None:
354 verticesin = inputFlags.eflowRec.VertexColl
358 result.merge(calogeocfg)
361 PFTrackSelector = selcfg.getPrimary()
365 PFTrackSelector.MonTool = monTool
367 result.merge( selcfg, seqname )
373 from eflowRec.PFCfg
import getPFClusterSelectorTool
375 PFTrackClusterMatchingTool_1 = CompFactory.PFTrackClusterMatchingTool(
"CalObjBldMatchingTool")
377 monTool_matching.HistPath =
'PFTrackClusterMatchingTool_1'
378 PFTrackClusterMatchingTool_1.MonTool_ClusterMatching = monTool_matching
382 "PFCellLevelSubtractionTool",
384 cellSubtractionTool.PFTrackClusterMatchingTool=PFTrackClusterMatchingTool_1
388 "PFRecoverSplitShowersTool",
390 recoverSplitShowersTool.PFTrackClusterMatchingTool = PFTrackClusterMatchingTool_1
393 CompFactory.PFAlgorithm(
394 f
"PFAlgorithm_{tracktype}",
395 PFClusterSelectorTool = getPFClusterSelectorTool(
399 "PFClusterSelectorTool",
401 SubtractionToolList = [
403 recoverSplitShowersTool,
409 eflowRecTracksInputName = PFTrackSelector.eflowRecTracksOutputName,
410 eflowRecClustersOutputName = f
"eflowRecClusters_{tracktype}",
411 PFCaloClustersOutputName = f
"PFCaloCluster_{tracktype}",
412 eflowCaloObjectsOutputName = f
"eflowCaloObjects_{tracktype}",
420 chargedPFOArgs = dict(
421 inputFlags=inputFlags,
422 nameSuffix=f
"_{tracktype}",
423 chargedFlowElementOutputName=recordable(f
"HLT_{tracktype}ChargedParticleFlowObjects"),
424 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
426 neutralPFOArgs = dict(
427 inputFlags=inputFlags,
428 nameSuffix=f
"_{tracktype}",
429 neutralFlowElementOutputName=recordable(f
"HLT_{tracktype}NeutralParticleFlowObjects"),
430 eflowCaloObjectContainerName=f
"eflowCaloObjects_{tracktype}"
432 from eflowRec.PFCfg
import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm
433 result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(**neutralPFOArgs), seqname)
434 result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(**chargedPFOArgs), seqname)
439if __name__==
"__main__":
441 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
442 cfgFlags = initConfigFlags()
444 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"]
446 cfgFlags.addFlag(
"eflowRec.TrackColl",
"InDetTrackParticles")
447 cfgFlags.addFlag(
"eflowRec.VertexColl",
"PrimaryVertices")
448 cfgFlags.addFlag(
"eflowRec.RawClusterColl",
"CaloTopoClusters")
449 cfgFlags.addFlag(
"eflowRec.CalClusterColl",
"CaloCalTopoClustersNew")
452 cfgFlags.PF.addClusterMoments =
False
453 cfgFlags.PF.useClusterMoments =
False
457 cfgFlags.GeoModel.Align.Dynamic =
False
461 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
462 cfg=MainServicesCfg(cfgFlags)
464 from CaloRec.CaloTopoClusterConfig
import CaloTopoClusterCfg
465 tccfg = CaloTopoClusterCfg(cfgFlags)
466 tcalg = tccfg.getPrimary()
467 tcalg.ClustersOutputName =
"CaloCalTopoClustersNew"
469 cfg.addEventAlgo(tcalg,sequenceName=
"AthAlgSeq")
471 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
472 cfg.merge(PoolReadCfg(cfgFlags))
474 cfg.merge(
PFCfg(cfgFlags))
479 "xAOD::CaloClusterContainer#CaloCalTopoClusters*",
480 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
481 "xAOD::PFOContainer#*ParticleFlowObjects",
482 "xAOD::PFOAuxContainer#*ParticleFlowObjectsAux."
484 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg, outputStreamName
485 cfg.merge(OutputStreamCfg(cfgFlags,
"xAOD",ItemList=outputlist))
486 from pprint
import pprint
487 pprint( cfg.getEventAlgo(outputStreamName(
"xAOD")).ItemList )
489 histSvc = CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='expert-monitoring.root', OPT='RECREATE'"])
490 cfg.addService(histSvc)
492 cfg.getService(
"StoreGateSvc").Dump =
True
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)
getMonTool_PFAlgorithm(flags)
getMonTool_ParticleCaloExtensionTool(flags)