ATLAS Offline Software
Loading...
Searching...
No Matches
PFCfg Namespace Reference

Functions

 PFTrackSelectorAlgCfg (inputFlags, algName, useCaching=True)
 getPFClusterSelectorTool (inputFlags, clustersin, calclustersin, algName)
 getPFTrackClusterMatchingTool (inputFlags, matchCut, distanceType, clusterPositionType, name)
 getPFCellLevelSubtractionTool (inputFlags, toolName)
 getPFRecoverSplitShowersTool (inputFlags, toolName)
 getPFMomentCalculatorTool (inputFlags, momentsToCalculateList)
 getPFLCCalibTool (inputFlags)
 getChargedFlowElementCreatorAlgorithm (inputFlags, chargedFlowElementOutputName, nameSuffix="", eflowCaloObjectContainerName="eflowCaloObjects")
 getNeutralFlowElementCreatorAlgorithm (inputFlags, neutralFlowElementOutputName, nameSuffix="", eflowCaloObjectContainerName="eflowCaloObjects")
 getLCNeutralFlowElementCreatorAlgorithm (inputFlags, neutralFlowElementOutputName)
 getPFOClusterMLCorrectionAlgorithmCfg (inputFlags, inputNameBase="JetETMiss", outputNameBase="JetETMissClusterMLCorrected")
 getNeutralPFOClusterMLCorrectionToolCfg (inputFlags, toolName="NeutralPFOClusterMLCorrectionTool", clusterMLCorrectedEnergyDecorationKey="clusterE_ML")
 getEGamFlowElementAssocAlgorithm (inputFlags, algName="", **kwargs)
 getMuonFlowElementAssocAlgorithm (inputFlags, algName="", **kwargs)
 getTauFlowElementAssocAlgorithm (inputFlags, algName="", **kwargs)
 getOfflinePFAlgorithm (inputFlags)
 PFGlobalFlowElementLinkingCfg (inputFlags, **kwargs)

Function Documentation

◆ getChargedFlowElementCreatorAlgorithm()

PFCfg.getChargedFlowElementCreatorAlgorithm ( inputFlags,
chargedFlowElementOutputName,
nameSuffix = "",
eflowCaloObjectContainerName = "eflowCaloObjects" )

Definition at line 182 of file PFCfg.py.

182def getChargedFlowElementCreatorAlgorithm(inputFlags,chargedFlowElementOutputName,nameSuffix="",eflowCaloObjectContainerName="eflowCaloObjects"):
183 FlowElementChargedCreatorAlgorithmFactory = CompFactory.PFChargedFlowElementCreatorAlgorithm
184 FlowElementChargedCreatorAlgorithm = FlowElementChargedCreatorAlgorithmFactory("PFChargedFlowElementCreatorAlgorithm"+nameSuffix)
185 FlowElementChargedCreatorAlgorithm.eflowCaloObjectContainerName = eflowCaloObjectContainerName
186 if chargedFlowElementOutputName:
187 FlowElementChargedCreatorAlgorithm.FlowElementOutputName=chargedFlowElementOutputName
188 if(inputFlags.PF.EOverPMode):
189 FlowElementChargedCreatorAlgorithm.FlowElementOutputName="EOverPChargedParticleFlowObjects"
190 FlowElementChargedCreatorAlgorithm.EOverPMode = True
191 if inputFlags.PF.addCPData:
192 FlowElementChargedCreatorAlgorithm.addCPData = True
193
194 return FlowElementChargedCreatorAlgorithm
195
if(febId1==febId2)

◆ getEGamFlowElementAssocAlgorithm()

PFCfg.getEGamFlowElementAssocAlgorithm ( inputFlags,
algName = "",
** kwargs )

Definition at line 246 of file PFCfg.py.

246def getEGamFlowElementAssocAlgorithm(inputFlags, algName="", **kwargs):
247
248 kwargs.setdefault("neutral_FE_cont_name", "")
249 kwargs.setdefault("charged_FE_cont_name", "")
250 kwargs.setdefault("doTCC", False)
251 kwargs.setdefault("useGlobal", False)
252
253 PFEGamFlowElementLinkerAlgorithmFactory=CompFactory.PFEGamFlowElementAssoc
254 if not algName:
255 algName = "PFEGamFlowElementAssoc"
256 PFEGamFlowElementLinkerAlgorithm=PFEGamFlowElementLinkerAlgorithmFactory(algName)
257
258 #set an an alternate name if needed
259 #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header
260 #for a key of type SG::WriteDecorHandle<xAOD::SomeCont>someKey{this,"SpecificContainerName","myContainerName","other-labels"}
261 #setting algorithm.SpecificContainerName="myNewContainerName" changes parameter "myContainerName"
262 #(also applies to ReadHandles)
263 if kwargs['neutral_FE_cont_name']:
264 PFEGamFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer = kwargs['neutral_FE_cont_name']
265
266 if kwargs['charged_FE_cont_name']:
267 PFEGamFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer = kwargs['charged_FE_cont_name']
268
269 if kwargs['doTCC']:
270 # ReadHandles to change
271 PFEGamFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer="TrackCaloClustersNeutral"
272 PFEGamFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer="TrackCaloClustersCharged"
273
274 #Now to change the writeHandles
275 # first the Electron -> FE links
276 EL_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey)
277 PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey=EL_NFE_Link.replace("FELinks","TCCLinks")
278 EL_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey)
279 PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey=EL_CFE_Link.replace("FELinks","TCCLinks")
280 #then the converse case (FE -> Electron)
281
282 PFEGamFlowElementLinkerAlgorithm.ChargedFEElectronDecorKey="TCC_ElectronLinks"
283 PFEGamFlowElementLinkerAlgorithm.NeutralFEElectronDecorKey="TCC_ElectronLinks"
284
285
286 # first the Photon -> FE links
287 PH_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey)
288 PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey=PH_NFE_Link.replace("FELinks","TCCLinks")
289 PH_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey)
290 PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey=PH_CFE_Link.replace("FELinks","TCCLinks")
291 #then the converse case (FE -> Photons)
292
293 PFEGamFlowElementLinkerAlgorithm.ChargedFEPhotonDecorKey="TCC_PhotonLinks"
294 PFEGamFlowElementLinkerAlgorithm.NeutralFEPhotonDecorKey="TCC_PhotonLinks"
295
296 if kwargs['useGlobal']:
297 # ReadHandles to change
298 PFEGamFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects"
299 PFEGamFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects"
300
301 #Now to change the writeHandles
302 # first the Electron -> FE links
303 EL_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey)
304 PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey=EL_NFE_Link.replace("FELinks","GlobalFELinks")
305 EL_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey)
306 PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey=EL_CFE_Link.replace("FELinks","GlobalFELinks")
307 #then the converse case (FE -> Electron)
308
309 PFEGamFlowElementLinkerAlgorithm.ChargedFEElectronDecorKey="GlobalFE_ElectronLinks"
310 PFEGamFlowElementLinkerAlgorithm.NeutralFEElectronDecorKey="GlobalFE_ElectronLinks"
311
312
313 # first the Photon -> FE links
314 PH_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey)
315 PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey=PH_NFE_Link.replace("FELinks","GlobalFELinks")
316 PH_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey)
317 PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey=PH_CFE_Link.replace("FELinks","GlobalFELinks")
318 #then the converse case (FE -> Photons)
319
320 PFEGamFlowElementLinkerAlgorithm.ChargedFEPhotonDecorKey="TCC_PhotonLinks"
321 PFEGamFlowElementLinkerAlgorithm.NeutralFEPhotonDecorKey="TCC_PhotonLinks"
322
323
324
325 return PFEGamFlowElementLinkerAlgorithm
326

◆ getLCNeutralFlowElementCreatorAlgorithm()

PFCfg.getLCNeutralFlowElementCreatorAlgorithm ( inputFlags,
neutralFlowElementOutputName )

Definition at line 211 of file PFCfg.py.

211def getLCNeutralFlowElementCreatorAlgorithm(inputFlags,neutralFlowElementOutputName):
212 LCFlowElementNeutralCreatorAlgorithmFactory = CompFactory.PFLCNeutralFlowElementCreatorAlgorithm
213 LCFlowElementNeutralCreatorAlgorithm = LCFlowElementNeutralCreatorAlgorithmFactory("PFLCNeutralFlowElementCreatorAlgorithm")
214 if neutralFlowElementOutputName:
215 LCFlowElementNeutralCreatorAlgorithm.FELCOutputName=neutralFlowElementOutputName
216 if(inputFlags.PF.EOverPMode):
217 LCFlowElementNeutralCreatorAlgorithm.FEInputContainerName="EOverPNeutralParticleFlowObjects"
218 LCFlowElementNeutralCreatorAlgorithm.FELCOutputName="EOverPLCNeutralParticleFlowObjects"
219
220 return LCFlowElementNeutralCreatorAlgorithm
221
222# Factory function to create the ML-based neutral flow element creator algorithm

◆ getMuonFlowElementAssocAlgorithm()

PFCfg.getMuonFlowElementAssocAlgorithm ( inputFlags,
algName = "",
** kwargs )

Definition at line 327 of file PFCfg.py.

327def getMuonFlowElementAssocAlgorithm(inputFlags, algName="", **kwargs):
328
329 kwargs.setdefault("neutral_FE_cont_name", "")
330 kwargs.setdefault("charged_FE_cont_name", "")
331 kwargs.setdefault("LinkNeutralFEClusters", True)
332 kwargs.setdefault("doTCC", False)
333 kwargs.setdefault("useGlobal", False)
334
335 useMuonTopoClusters = False
336 from AthenaConfiguration.Enums import ProductionStep
337 # set 'useMuonTopoClusters=True' if running on AOD, as do not have calorimeter cells for CaloCalTopoCluster
338 # Assumes that in production workflows this only happens in "Derivation" or if DQ environment is AOD
339 if inputFlags.Common.ProductionStep in [ProductionStep.Derivation] or inputFlags.DQ.Environment == "AOD":
340 useMuonTopoClusters = True
341
342
343 PFMuonFlowElementLinkerAlgorithmFactory=CompFactory.PFMuonFlowElementAssoc
344 if not algName:
345 algName="PFMuonFlowElementAssoc"
346 PFMuonFlowElementLinkerAlgorithm=PFMuonFlowElementLinkerAlgorithmFactory(algName)
347
348 #set an an alternate name if needed
349 #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header as such
350 #for a key of type SG::WriteDecorHandle<xAOD::SomeCont>someKey{this,"SpecificContainerName","myContainerName","other-labels"}
351 #setting algorithm.SpecificContainerName="myNewContainerName" changes parameter "myContainerName" to "myNewContainerName"
352 if kwargs['neutral_FE_cont_name']:
353 #update the readhandle
354 PFMuonFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer = kwargs['neutral_FE_cont_name']
355 #update the write handle for the link
356
357 if kwargs['charged_FE_cont_name']:
358 PFMuonFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer = kwargs['charged_FE_cont_name']
359
360 PFMuonFlowElementLinkerAlgorithm.LinkNeutralFEClusters = kwargs['LinkNeutralFEClusters']
361 PFMuonFlowElementLinkerAlgorithm.useMuonTopoClusters = useMuonTopoClusters
362
363 #prototype on AOD with the linkers already defined - so need to rename the output links to something besides their default name.
364
365 #Track Calo cluster (TCC) specific configuration. Input is differently named FE container, and in the AOD step specifically
366 if kwargs['doTCC']:
367 #input containers are TrackCaloClustersCharged and TrackCaloClustersNeutral, so rename them
368 #service_key="StoreGateSvc+"
369 service_key=""
370 PFMuonFlowElementLinkerAlgorithm.MuonContainer=service_key+"Muons"
371 PFMuonFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer=service_key+"TrackCaloClustersCharged"
372 PFMuonFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer=service_key+"TrackCaloClustersNeutral"
373
374 #Output
375 #rename the FE_MuonLinks as TCC_MuonLinks
376 #rename output containers
377 PFMuonFlowElementLinkerAlgorithm.MuonContainer_chargedFELinks="chargedTCCLinks"
378 PFMuonFlowElementLinkerAlgorithm.MuonContainer_neutralFELinks="neutralTCCLinks"
379 PFMuonFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer_FE_MuonLinks="TCC_MuonLinks"
380 PFMuonFlowElementLinkerAlgorithm.JetETMissChargedFlowElements_FE_MuonLinks="TCC_MuonLinks"
381 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_ChargedFE_ennergy_matched_muon="TCC_efrac_matched_muon"
382 # several variables relating to Neutral Flow Elements/TCCs to Muons for debug. perhaps at some point these should be removed by default
383 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_nMatchedMuons="TCC_nMatchedMuons"
384 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_FE_efrac_matched_muon="TCC_efrac_matched_muon"
385
386 PFMuonFlowElementLinkerAlgorithm.MuonContainer_muon_efrac_matched_FE="muon_efrac_matched_TCC"
387 # this is because the algorithm adds this debug container which we don't need
388 PFMuonFlowElementLinkerAlgorithm.MuonContainer_ClusterInfo_deltaR="deltaR_muon_clus_TCCalg"
389
390 if kwargs['useGlobal']:
391 PFMuonFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects"
392 PFMuonFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects"
393
394 PFMuonFlowElementLinkerAlgorithm.MuonContainer_chargedFELinks="chargedGlobalFELinks"
395 PFMuonFlowElementLinkerAlgorithm.MuonContainer_neutralFELinks="neutralGlobalFELinks"
396
397 PFMuonFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer_FE_MuonLinks="GlobalFE_MuonLinks"
398 PFMuonFlowElementLinkerAlgorithm.JetETMissChargedFlowElements_FE_MuonLinks="GlobalFE_MuonLinks"
399 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_ChargedFE_ennergy_matched_muon="GlobalFE_efrac_matched_muon"
400
401 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_nMatchedMuons="GlobalFE_nMatchedMuons"
402 PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_FE_efrac_matched_muon="GlobalFE_efrac_matched_muon"
403
404 PFMuonFlowElementLinkerAlgorithm.MuonContainer_muon_efrac_matched_FE="muon_efrac_matched_GlobalFE"
405 # this is because the algorithm adds this debug container which we don't need
406 PFMuonFlowElementLinkerAlgorithm.MuonContainer_ClusterInfo_deltaR="deltaR_muon_clus_GlobalFEalg"
407
408 if kwargs['LinkNeutralFEClusters'] and not useMuonTopoClusters:
409 # We dereference links to cells, so make sure we have the
410 # dependency.
411 PFMuonFlowElementLinkerAlgorithm.ExtraInputs.add(('CaloCellContainer', inputFlags.Egamma.Keys.Input.CaloCells))
412
413 if kwargs['LinkNeutralFEClusters']:
414 if kwargs['doTCC']:
415 # since the cells are deleted on AOD, if you try to run the link between NFE and Muon on AOD, it will crash. Terminate to catch this.
416 # This is a known bug to rectify soon
417 from AthenaCommon.Logging import logging
418 msg=logging.getLogger("PFCfg.py::getMuonFlowElementAssocAlgorithm")
419 msg.error("Neutral FE from AOD configured to be linked with Muon. This link will fail due to missing CaloCells in the AOD")
420 msg.info("Terminating job")
421 exit(0)
422
423
424 return PFMuonFlowElementLinkerAlgorithm
425

◆ getNeutralFlowElementCreatorAlgorithm()

PFCfg.getNeutralFlowElementCreatorAlgorithm ( inputFlags,
neutralFlowElementOutputName,
nameSuffix = "",
eflowCaloObjectContainerName = "eflowCaloObjects" )

Definition at line 196 of file PFCfg.py.

196def getNeutralFlowElementCreatorAlgorithm(inputFlags,neutralFlowElementOutputName,nameSuffix="",eflowCaloObjectContainerName="eflowCaloObjects"):
197 FlowElementNeutralCreatorAlgorithmFactory = CompFactory.PFNeutralFlowElementCreatorAlgorithm
198 FlowElementNeutralCreatorAlgorithm = FlowElementNeutralCreatorAlgorithmFactory("PFNeutralFlowElementCreatorAlgorithm"+nameSuffix)
199 FlowElementNeutralCreatorAlgorithm.eflowCaloObjectContainerName = eflowCaloObjectContainerName
200 if neutralFlowElementOutputName:
201 FlowElementNeutralCreatorAlgorithm.FlowElementOutputName=neutralFlowElementOutputName
202 if(inputFlags.PF.EOverPMode):
203 FlowElementNeutralCreatorAlgorithm.FlowElementOutputName="EOverPNeutralParticleFlowObjects"
204 if(inputFlags.PF.useCalibHitTruthClusterMoments and inputFlags.PF.addClusterMoments):
205 FlowElementNeutralCreatorAlgorithm.UseCalibHitTruth=True
206 if inputFlags.PF.addCPData:
207 FlowElementNeutralCreatorAlgorithm.addCPData = True
208
209 return FlowElementNeutralCreatorAlgorithm
210

◆ getNeutralPFOClusterMLCorrectionToolCfg()

PFCfg.getNeutralPFOClusterMLCorrectionToolCfg ( inputFlags,
toolName = "NeutralPFOClusterMLCorrectionTool",
clusterMLCorrectedEnergyDecorationKey = "clusterE_ML" )

Definition at line 233 of file PFCfg.py.

233def getNeutralPFOClusterMLCorrectionToolCfg(inputFlags, toolName="NeutralPFOClusterMLCorrectionTool", clusterMLCorrectedEnergyDecorationKey="clusterE_ML"):
234 if toolName == "NeutralPFOClusterMLCorrectionTool":
235 tool = CompFactory.NeutralPFOClusterMLCorrectionTool(toolName)
236 tool.ClusterMLCorrectedEnergyDecorationKey = clusterMLCorrectedEnergyDecorationKey
237 else:
238 raise ValueError(f"Unknown tool name: {toolName}")
239
240 ca = ComponentAccumulator()
241 ca.setPrivateTools(tool)
242 return ca
243
244
245

◆ getOfflinePFAlgorithm()

PFCfg.getOfflinePFAlgorithm ( inputFlags)

Definition at line 473 of file PFCfg.py.

473def getOfflinePFAlgorithm(inputFlags):
474 result=ComponentAccumulator()
475
476 PFAlgorithm=CompFactory.PFAlgorithm
477 PFAlgorithm = PFAlgorithm("PFAlgorithm")
478
479
480 if inputFlags.HeavyIon.Egamma.doSubtractedClusters:
481 PFAlgorithm.PFClusterSelectorTool = getPFClusterSelectorTool(inputFlags,inputFlags.HeavyIon.Egamma.UncalibCaloTopoCluster,inputFlags.HeavyIon.Egamma.CaloTopoCluster,"PFClusterSelectorTool")
482 else:
483 topoClustersName="CaloTopoClusters"
484 PFAlgorithm.PFClusterSelectorTool = getPFClusterSelectorTool(inputFlags,topoClustersName,"CaloCalTopoClusters","PFClusterSelectorTool")
485
486 PFAlgorithm.SubtractionToolList = [getPFCellLevelSubtractionTool(inputFlags,"PFCellLevelSubtractionTool")]
487
488 if(False is inputFlags.PF.EOverPMode and False is inputFlags.PF.useTruthCheating):
489 PFAlgorithm.SubtractionToolList += [getPFRecoverSplitShowersTool(inputFlags,"PFRecoverSplitShowersTool")]
490
491 PFMomentCalculatorTools=result.popToolsAndMerge(getPFMomentCalculatorTool(inputFlags,[]))
492 PFAlgorithm.BaseToolList = [PFMomentCalculatorTools]
493 PFAlgorithm.BaseToolList += [getPFLCCalibTool(inputFlags)]
494 if inputFlags.PF.EOverPMode:
495 PFAlgorithm.BaseToolList += [CompFactory.PFRadialEnergyCalculatorTool()]
496
497 result.addEventAlgo(PFAlgorithm)
498 return result
499

◆ getPFCellLevelSubtractionTool()

PFCfg.getPFCellLevelSubtractionTool ( inputFlags,
toolName )

Definition at line 70 of file PFCfg.py.

70def getPFCellLevelSubtractionTool(inputFlags,toolName):
71 PFCellLevelSubtractionToolFactory = CompFactory.PFSubtractionTool
72 PFCellLevelSubtractionTool = PFCellLevelSubtractionToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
73
74 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
75 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
76 PFCellLevelSubtractionTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss()
77 else:
78 if inputFlags.PF.useLegacyEOverPRun4:
79 eflowCellEOverPTool_mc12_HLLHC = CompFactory.eflowCellEOverPTool_mc12_HLLHC
80 PFCellLevelSubtractionTool.eflowCellEOverPTool = eflowCellEOverPTool_mc12_HLLHC ()
81 else:
82 PFCellEOverPTool = CompFactory.PFCellEOverPTool
83 PFCellLevelSubtractionTool.eflowCellEOverPTool = PFCellEOverPTool("PFCellEOverPTool", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
84 #this should always be false for any reference derived, except eflowCellEOverPTool_mc12_HLLHC.h or eflowCellEOverPTool_Run2_mc20_JetETMiss.h
85 PFCellLevelSubtractionTool.useLegacyEBinIndex=False
86
87 if(inputFlags.PF.EOverPMode):
88 PFCellLevelSubtractionTool.CalcEOverP = True
89 PFCellLevelSubtractionTool.nClusterMatchesToUse = -1
90 else:
91 PFCellLevelSubtractionTool.nClusterMatchesToUse = 1
92
93 if(inputFlags.PF.EOverPMode):
94 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,0.2,"EtaPhiSquareDistance","PlainEtaPhi","CalObjBldMatchingTool")
95 else:
96 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,1.64,"EtaPhiSquareSignificance","GeomCenterEtaPhi","CalObjBldMatchingTool")
97
98 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_015 = getPFTrackClusterMatchingTool(inputFlags,0.15,"EtaPhiSquareDistance","PlainEtaPhi","MatchingTool_Pull_015")
99 PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_02 = getPFTrackClusterMatchingTool(inputFlags,0.2,"EtaPhiSquareDistance","PlainEtaPhi","MatchingTool_Pull_02")
100
101 if inputFlags.PF.useMLEOverP:
102 PFEnergyPredictorTool = CompFactory.PFEnergyPredictorTool("PFCellLevelEnergyPredcictorTool",ModelPath = inputFlags.PF.EOverP_NN_Model)
103 PFCellLevelSubtractionTool.NNEnergyPredictorTool = PFEnergyPredictorTool
104 PFCellLevelSubtractionTool.addCPData = inputFlags.PF.addCPData
105
106 if inputFlags.PF.useTruthCheating:
107 if inputFlags.PF.useTrackClusterTruthMatching:
108 PFCellLevelSubtractionTool.CaloClusterReadDecorHandleKey_NLeadingTruthParticles = "CaloTopoClusters." + inputFlags.Calo.TopoCluster.CalibrationHitDecorationName
109 PFCellLevelSubtractionTool.useTrackClusterTruthMatching=True
110
111 if inputFlags.PF.useTruthForChargedShowerSubtraction:
112 PFCellLevelSubtractionTool.useTruthForChargedShowerSubtraction = True
113 PFCellLevelSubtractionTool.PFSimulateTruthShowerTool = CompFactory.PFSimulateTruthShowerTool("PFSimulateTruthShowerTool")
114
115 return PFCellLevelSubtractionTool
116
Class to store reference e/p mean and widths, as well as reference energy density radial profile fit ...
Class to store reference e/p mean and widths, as well as reference energy density radial profile fit ...

◆ getPFClusterSelectorTool()

PFCfg.getPFClusterSelectorTool ( inputFlags,
clustersin,
calclustersin,
algName )

Definition at line 42 of file PFCfg.py.

42def getPFClusterSelectorTool(inputFlags,clustersin,calclustersin,algName):
43
44 PFClusterSelectorToolFactory = CompFactory.PFClusterSelectorTool
45 PFClusterSelectorTool = PFClusterSelectorToolFactory(algName)
46 if clustersin is not None:
47 PFClusterSelectorTool.clustersName = clustersin
48 if calclustersin is not None:
49 PFClusterSelectorTool.calClustersName = calclustersin
50
51 if inputFlags.PF.useTruthCheating:
52 if inputFlags.PF.useTrackClusterTruthMatching:
53 PFClusterSelectorTool.CaloClusterReadDecorHandleKey_NLeadingTruthParticles = "CaloTopoClusters." + inputFlags.Calo.TopoCluster.CalibrationHitDecorationName
54
55 if inputFlags.PF.useTopoTowers:
56 PFClusterSelectorTool.clustersName="CaloTopoSignal"
57 PFClusterSelectorTool.calClustersName="CaloCalTopoSignal"
58
59 return PFClusterSelectorTool
60

◆ getPFLCCalibTool()

PFCfg.getPFLCCalibTool ( inputFlags)

Definition at line 164 of file PFCfg.py.

164def getPFLCCalibTool(inputFlags):
165 PFLCCalibTool = CompFactory.PFLCCalibTool
166 PFLCCalibTool = PFLCCalibTool("PFLCCalibTool")
167
168 PFClusterCollectionTool = CompFactory.PFClusterCollectionTool
169 PFLCCalibTool.eflowRecClusterCollectionTool = PFClusterCollectionTool("PFClusterCollectionTool_LCCalib")
170 PFLCCalibTool.UseLocalWeight = False
171
172 from CaloRec.CaloTopoClusterConfig import getTopoClusterLocalCalibTools
173 lcCalibToolList = getTopoClusterLocalCalibTools(inputFlags)
174
175 PFLCCalibTool.CaloClusterLocalCalib=lcCalibToolList[0]
176 PFLCCalibTool.CaloClusterLocalCalibOOCC=lcCalibToolList[1]
177 PFLCCalibTool.CaloClusterLocalCalibOOCCPi0=lcCalibToolList[2]
178 PFLCCalibTool.CaloClusterLocalCalibDM=lcCalibToolList[3]
179
180 return PFLCCalibTool
181
Inherits from IPFClusterCollectionTool and AthAlgTool.
This tool can either use a series of CaloClusterProcessor to calibrate the modified xAOD::CaloCluster...

◆ getPFMomentCalculatorTool()

PFCfg.getPFMomentCalculatorTool ( inputFlags,
momentsToCalculateList )

Definition at line 142 of file PFCfg.py.

142def getPFMomentCalculatorTool(inputFlags, momentsToCalculateList):
143 result=ComponentAccumulator()
144 PFMomentCalculatorToolFactory = CompFactory.PFMomentCalculatorTool
145 PFMomentCalculatorTool = PFMomentCalculatorToolFactory("PFMomentCalculatorTool")
146
147 from CaloRec.CaloTopoClusterConfig import getTopoMoments
148 PFClusterMomentsMaker = result.popToolsAndMerge(getTopoMoments(inputFlags))
149 if (len(momentsToCalculateList) > 0):
150 PFClusterMomentsMaker.MomentsNames = momentsToCalculateList
151 PFMomentCalculatorTool.CaloClusterMomentsMaker = PFClusterMomentsMaker
152
153 PFClusterCollectionTool = CompFactory.PFClusterCollectionTool
154 PFMomentCalculatorTool.PFClusterCollectionTool = PFClusterCollectionTool("PFClusterCollectionTool")
155
156 if(inputFlags.PF.useCalibHitTruthClusterMoments):
157 PFMomentCalculatorTool.UseCalibHitTruth=True
158 from CaloRec.CaloTopoClusterConfig import getTopoCalibMoments
159 PFMomentCalculatorTool.CaloCalibClusterMomentsMaker2 = getTopoCalibMoments(inputFlags)
160
161 result.setPrivateTools(PFMomentCalculatorTool)
162 return result
163

◆ getPFOClusterMLCorrectionAlgorithmCfg()

PFCfg.getPFOClusterMLCorrectionAlgorithmCfg ( inputFlags,
inputNameBase = "JetETMiss",
outputNameBase = "JetETMissClusterMLCorrected" )

Definition at line 223 of file PFCfg.py.

223def getPFOClusterMLCorrectionAlgorithmCfg(inputFlags, inputNameBase = "JetETMiss", outputNameBase = "JetETMissClusterMLCorrected"):
224 alg = CompFactory.PFOClusterMLCorrectionAlgorithm("PFOClusterMLCorrectionAlgorithm")
225 suffix = "ParticleFlowObjects"
226 alg.NeutralPFlowInputContainer = inputNameBase + "Neutral" + suffix
227 alg.ChargedPFlowInputContainer = inputNameBase + "Charged" + suffix
228 alg.NeutralPFlowOutputContainer = outputNameBase + "Neutral" + suffix
229 alg.ChargedPFlowOutputContainer = outputNameBase + "Charged" + suffix
230
231 return alg
232

◆ getPFRecoverSplitShowersTool()

PFCfg.getPFRecoverSplitShowersTool ( inputFlags,
toolName )

Definition at line 117 of file PFCfg.py.

117def getPFRecoverSplitShowersTool(inputFlags,toolName):
118 PFRecoverSplitShowersToolFactory = CompFactory.PFSubtractionTool
119 PFRecoverSplitShowersTool = PFRecoverSplitShowersToolFactory(toolName,useNNEnergy = inputFlags.PF.useMLEOverP)
120
121 if inputFlags.GeoModel.Run <= LHCPeriod.Run3:
122 eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss
123 PFRecoverSplitShowersTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss("eflowCellEOverPTool_Run2_mc20_JetETMiss_Recover")
124 else:
125 if inputFlags.PF.useLegacyEOverPRun4:
126 eflowCellEOverPTool_mc12_HLLHC = CompFactory.eflowCellEOverPTool_mc12_HLLHC
127 PFRecoverSplitShowersTool.eflowCellEOverPTool = eflowCellEOverPTool_mc12_HLLHC ()
128 else:
129 PFCellEOverPTool = CompFactory.PFCellEOverPTool
130 PFRecoverSplitShowersTool.eflowCellEOverPTool = PFCellEOverPTool("PFCellEOverPTool_Recover", referenceFileLocation = inputFlags.PF.EOverP_CellOrdering_ReferenceLocation)
131 #this should always be false for any reference derived, except eflowCellEOverPTool_mc12_HLLHC.h or eflowCellEOverPTool_Run2_mc20_JetETMiss.h
132 PFRecoverSplitShowersTool.useLegacyEBinIndex=False
133
134 PFRecoverSplitShowersTool.RecoverSplitShowers = True
135
136 if inputFlags.PF.useMLEOverP:
137 PFEnergyPredictorTool = CompFactory.PFEnergyPredictorTool("PFRecoverSplitShowersEnergyPredcictorTool",ModelPath = inputFlags.PF.EOverP_NN_Model)
138 PFRecoverSplitShowersTool.NNEnergyPredictorTool = PFEnergyPredictorTool
139
140 return PFRecoverSplitShowersTool
141

◆ getPFTrackClusterMatchingTool()

PFCfg.getPFTrackClusterMatchingTool ( inputFlags,
matchCut,
distanceType,
clusterPositionType,
name )

Definition at line 61 of file PFCfg.py.

61def getPFTrackClusterMatchingTool(inputFlags,matchCut,distanceType,clusterPositionType,name):
62 PFTrackClusterMatchingTool = CompFactory.PFTrackClusterMatchingTool
63 MatchingTool = PFTrackClusterMatchingTool(name)
64 MatchingTool.ClusterPositionType = clusterPositionType
65 MatchingTool.DistanceType = distanceType
66 MatchingTool.MatchCut = matchCut*matchCut
67 return MatchingTool
68
69
This is the tool, which inherits from AthAlgTool, which clients can use for track-cluster matching.

◆ getTauFlowElementAssocAlgorithm()

PFCfg.getTauFlowElementAssocAlgorithm ( inputFlags,
algName = "",
** kwargs )

Definition at line 426 of file PFCfg.py.

426def getTauFlowElementAssocAlgorithm(inputFlags, algName="", **kwargs):
427
428 kwargs.setdefault("neutral_FE_cont_name", "")
429 kwargs.setdefault("charged_FE_cont_name", "")
430 kwargs.setdefault("doTCC", False)
431 kwargs.setdefault("useGlobal", False)
432
433 PFTauFlowElementLinkerAlgorithmFactory=CompFactory.PFTauFlowElementAssoc
434 if not algName:
435 algName = "PFTauFlowElementAssoc"
436
437 PFTauFlowElementLinkerAlgorithm=PFTauFlowElementLinkerAlgorithmFactory(algName)
438
439 #set an an alternate name if needed
440 #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header
441 #for a key of type SG::WriteDecorHandle<xAOD::SomeCont>someKey{this,"SpecificContainerName","myContainerName","other-labels"}
442 #setting algorithm.SpecificContainerName="myNewContainerName" changes parameter "myContainerName"
443 #(also applies to ReadHandles)
444 if kwargs['neutral_FE_cont_name']:
445 PFTauFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer = kwargs['neutral_FE_cont_name']
446
447 if kwargs['charged_FE_cont_name']:
448 PFTauFlowElementLinkerAlgorithm.JetETMissChargedFlowElementContainer = kwargs['charged_FE_cont_name']
449
450 if kwargs['doTCC']:
451 PFTauFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer="TrackCaloClustersNeutral"
452 PFTauFlowElementLinkerAlgorithm.JetETMissChargedFlowElementContainer="TrackCaloClustersCharged"
453
454 PFTauFlowElementLinkerAlgorithm.TauNeutralFEDecorKey="neutralTCCLinks"
455 PFTauFlowElementLinkerAlgorithm.TauChargedFEDecorKey="chargedTCCLinks"
456
457 PFTauFlowElementLinkerAlgorithm.NeutralFETauDecorKey="TCC_TauLinks"
458 PFTauFlowElementLinkerAlgorithm.ChargedFETauDecorKey="TCC_TauLinks"
459
460 #This allows to set the links on the global particle flow containers created by JetPFlowSelectionAlg in JetRecTools
461 if kwargs['useGlobal']:
462 PFTauFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects"
463 PFTauFlowElementLinkerAlgorithm.JetETMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects"
464
465 PFTauFlowElementLinkerAlgorithm.TauNeutralFEDecorKey="neutralGlobalFELinks"
466 PFTauFlowElementLinkerAlgorithm.TauChargedFEDecorKey="chargedGlobalFELinks"
467
468 PFTauFlowElementLinkerAlgorithm.NeutralFETauDecorKey="GlobalFE_TauLinks"
469 PFTauFlowElementLinkerAlgorithm.ChargedFETauDecorKey="GlobalFE_TauLinks"
470
471 return PFTauFlowElementLinkerAlgorithm
472

◆ PFGlobalFlowElementLinkingCfg()

PFCfg.PFGlobalFlowElementLinkingCfg ( inputFlags,
** kwargs )

Definition at line 500 of file PFCfg.py.

500def PFGlobalFlowElementLinkingCfg(inputFlags, **kwargs):
501 result=ComponentAccumulator()
502
503 kwargs.setdefault("useGlobal", True)
504
505 result.addEventAlgo(getTauFlowElementAssocAlgorithm(inputFlags, algName="PFTauGlobalFlowElementAssoc", **kwargs))
506 result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags, algName="PFMuonGlobalFlowElementAssoc", **kwargs))
507 result.addEventAlgo(getEGamFlowElementAssocAlgorithm(inputFlags, algName="PFEGamGlobalFlowElementAssoc", **kwargs))
508 return result

◆ PFTrackSelectorAlgCfg()

PFCfg.PFTrackSelectorAlgCfg ( inputFlags,
algName,
useCaching = True )

Definition at line 6 of file PFCfg.py.

6def PFTrackSelectorAlgCfg(inputFlags,algName,useCaching=True):
7 PFTrackSelectorFactory=CompFactory.PFTrackSelector
8 PFTrackSelector=PFTrackSelectorFactory(algName)
9
10 result = ComponentAccumulator()
11
12 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
13 pcExtensionTool = result.popToolsAndMerge(ParticleCaloExtensionToolCfg(inputFlags))
14
15 eflowTrackCaloExtensionTool=CompFactory.eflowTrackCaloExtensionTool
16 TrackCaloExtensionTool=eflowTrackCaloExtensionTool(TrackCaloExtensionTool=pcExtensionTool)
17 if (not useCaching):
18 TrackCaloExtensionTool.PFParticleCache = ""
19
20 PFTrackSelector.trackExtrapolatorTool = TrackCaloExtensionTool
21
22 from InDetConfig.InDetTrackSelectionToolConfig import PFTrackSelectionToolCfg
23 PFTrackSelector.trackSelectionTool = result.popToolsAndMerge(PFTrackSelectionToolCfg(inputFlags))
24
25 # P->T conversion extra dependencies
26 if inputFlags.Detector.GeometryITk:
27 PFTrackSelector.ExtraInputs = {
28 ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkPixelDetectorElementCollection"),
29 ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkStripDetectorElementCollection"),
30 }
31 else:
32 PFTrackSelector.ExtraInputs = {
33 ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
34 ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
35 ("InDetDD::TRT_DetElementContainer", "ConditionStore+TRT_DetElementContainer"),
36 }
37
38 result.addEventAlgo (PFTrackSelector, primary=True)
39
40 return result
41
Inherits from eflowTrackExtrapolatorBaseAlgTool and AthAlgTool.