diff --git a/Reconstruction/eflowRec/python/PFCfg.py b/Reconstruction/eflowRec/python/PFCfg.py index 6af98670c9652510407ed4d8c4ff61f3560c329c..ac11b821b1d0c1a320722e666c4037cf2658bda6 100644 --- a/Reconstruction/eflowRec/python/PFCfg.py +++ b/Reconstruction/eflowRec/python/PFCfg.py @@ -54,8 +54,8 @@ def getPFCellLevelSubtractionTool(inputFlags,toolName): PFCellLevelSubtractionToolFactory = CompFactory.PFCellLevelSubtractionTool PFCellLevelSubtractionTool = PFCellLevelSubtractionToolFactory(toolName) - eflowCellEOverPTool_mc12_JetETMiss = CompFactory.eflowCellEOverPTool_mc12_JetETMiss - PFCellLevelSubtractionTool.eflowCellEOverPTool = eflowCellEOverPTool_mc12_JetETMiss() + eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss + PFCellLevelSubtractionTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss() if(inputFlags.PF.EOverPMode): PFCellLevelSubtractionTool.CalcEOverP = True @@ -68,6 +68,7 @@ def getPFCellLevelSubtractionTool(inputFlags,toolName): else: PFCellLevelSubtractionTool.PFTrackClusterMatchingTool = getPFTrackClusterMatchingTool(inputFlags,1.64,"EtaPhiSquareSignificance","GeomCenterEtaPhi","CalObjBldMatchingTool") + PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_015 = getPFTrackClusterMatchingTool(inputFlags,0.15,"EtaPhiSquareDistance","PlainEtaPhi","MatchingTool_Pull_015") PFCellLevelSubtractionTool.PFTrackClusterMatchingTool_02 = getPFTrackClusterMatchingTool(inputFlags,0.2,"EtaPhiSquareDistance","PlainEtaPhi","MatchingTool_Pull_02") return PFCellLevelSubtractionTool @@ -76,8 +77,8 @@ def getPFRecoverSplitShowersTool(inputFlags,toolName): PFRecoverSplitShowersToolFactory = CompFactory.PFRecoverSplitShowersTool PFRecoverSplitShowersTool = PFRecoverSplitShowersToolFactory(toolName) - eflowCellEOverPTool_mc12_JetETMiss = CompFactory.eflowCellEOverPTool_mc12_JetETMiss - PFRecoverSplitShowersTool.eflowCellEOverPTool = eflowCellEOverPTool_mc12_JetETMiss("eflowCellEOverPTool_mc12_JetETMiss_Recover") + eflowCellEOverPTool_Run2_mc20_JetETMiss = CompFactory.eflowCellEOverPTool_Run2_mc20_JetETMiss + PFRecoverSplitShowersTool.eflowCellEOverPTool = eflowCellEOverPTool_Run2_mc20_JetETMiss("eflowCellEOverPTool_Run2_mc20_JetETMiss_Recover") PFRecoverSplitShowersTool.RecoverIsolatedTracks = inputFlags.PF.recoverIsolatedTracks diff --git a/Reconstruction/eflowRec/python/PFConfigFlags.py b/Reconstruction/eflowRec/python/PFConfigFlags.py index c5cfda28851368dd5e2c2bac1faa815d793a1ef1..dd5a54a53c2a7bd4da5928f66373de4d481c492d 100644 --- a/Reconstruction/eflowRec/python/PFConfigFlags.py +++ b/Reconstruction/eflowRec/python/PFConfigFlags.py @@ -11,7 +11,8 @@ def createPFConfigFlags(): pfConfigFlags.addFlag("PF.useCalibHitTruthClusterMoments",False) #This defines whether we calculate the calibration hit moments - only possible on if running from special calibraiton hit ESD samples. pfConfigFlags.addFlag("PF.recoverIsolatedTracks",False) #Defines whether we should apply the split shower recovery algorithm on isolated tracks pfConfigFlags.addFlag("PF.useUpdated2015ChargedShowerSubtraction",True) #Toggle whether to use updated 2015 charged shower subtraction, which disables the shower subtraction in high calorimeter energy density regions - pfConfigFlags.addFlag("PF.useElPhotMuLinks",True) + pfConfigFlags.addFlag("PF.useElPhotLinks",True) + pfConfigFlags.addFlag("PF.useMuLinks",True) pfConfigFlags.addFlag("PF.useOldPFO",False) return pfConfigFlags diff --git a/Reconstruction/eflowRec/python/PFRun3Config.py b/Reconstruction/eflowRec/python/PFRun3Config.py index d7dd5d5448996aa8958023b2a05e49eb4e252315..371f40e46962778fdf6011aabd2c079c7dd6d51b 100644 --- a/Reconstruction/eflowRec/python/PFRun3Config.py +++ b/Reconstruction/eflowRec/python/PFRun3Config.py @@ -9,7 +9,7 @@ def getOfflinePFAlgorithm(inputFlags): PFAlgorithm = PFAlgorithm("PFAlgorithm") from eflowRec.PFCfg import getPFClusterSelectorTool - PFAlgorithm.PFClusterSelectorTool = getPFClusterSelectorTool("CaloTopoClusters","CaloCalTopoClusters","PFClusterSelectorTool") + PFAlgorithm.PFClusterSelectorTool = getPFClusterSelectorTool("CaloTopoClusters","CaloCalTopoClusters","PFClusterSelectorTool") from eflowRec.PFCfg import getPFCellLevelSubtractionTool PFAlgorithm.SubtractionToolList = [getPFCellLevelSubtractionTool(inputFlags,"PFCellLevelSubtractionTool")] @@ -146,10 +146,34 @@ def PFCfg(inputFlags,**kwargs): result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(inputFlags,"")) result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(inputFlags,"")) - if(inputFlags.PF.useElPhotMuLinks): - from eflowRec.PFCfg import getMuonFlowElementAssocAlgorithm,getEGamFlowElementAssocAlgorithm - result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags)) + #Currently we do not have egamma reco in the run 3 config and hence there are no electrons/photons if not running from ESD or AOD + if(inputFlags.PF.useElPhotLinks and inputFlags.Input.Format == "POOL" ): + from eflowRec.PFCfg import getEGamFlowElementAssocAlgorithm result.addEventAlgo(getEGamFlowElementAssocAlgorithm(inputFlags)) + + #Currently we do not have muon reco in the run 3 config and hence there are no muons if not running from ESD or AOD + if(inputFlags.PF.useMuLinks and inputFlags.Input.Format == "POOL" ): + from eflowRec.PFCfg import getMuonFlowElementAssocAlgorithm + result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags)) + + from OutputStreamAthenaPool.OutputStreamConfig import addToAOD, addToESD + toESDAndAOD = "" + if(inputFlags.PF.EOverPMode): + toESDAndAOD = [f"xAOD::FlowElementContainer#EOverPChargedParticleFlowObjects",f"xAOD::FlowElementAuxContainer#EOverPChargedParticleFlowObjectsAux."] + toESDAndAOD += [f"xAOD::FlowElementContainer#EOverPNeutralParticleFlowObjects",f"xAOD::FlowElementAuxContainer#EOverPNeutralParticleFlowObjectsAux."] + else: + toESDAndAOD = [f"xAOD::FlowElementContainer#JetETMissChargedParticleFlowObjects", f"xAOD::FlowElementAuxContainer#JetETMissChargedParticleFlowObjectsAux."] + toESDAndAOD += [f"xAOD::FlowElementContainer#JetETMissNeutralParticleFlowObjects",f"xAOD::FlowElementAuxContainer#JetETMissNeutralParticleFlowObjectsAux.-FEShowerSubtractedClusterLink."] + toESDAndAOD += [f"xAOD::FlowElementContainer#JetETMissLCNeutralParticleFlowObjects",f"xAOD::ShallowAuxContainer#JetETMissLCNeutralParticleFlowObjectsAux."] + + #PFlow requires electrons, photons, muons and taus in order to have valid links to them. So lets add these objects to the AOD and ESD + toESDAndAOD += [f"xAOD::ElectronContainer#Electrons",f"xAOD::ElectronAuxContainer#ElectronsAux."] + toESDAndAOD += [f"xAOD::PhotonContainer#Photons",f"xAOD::PhotonAuxContainer#PhotonsAux."] + toESDAndAOD += [f"xAOD::MuonContainer#Muons",f"xAOD::MuonAuxContainer#MuonsAux."] + toESDAndAOD += [f"xAOD::TauJetContainer#TauJets",f"xAOD::TauJetAuxContainer#TauJetsAux."] + + result.merge(addToESD(inputFlags, toESDAndAOD)) + result.merge(addToAOD(inputFlags, toESDAndAOD)) return result @@ -177,6 +201,6 @@ if __name__=="__main__": list_remaps=ListRemaps() for mapping in list_remaps: - cfg.merge(mapping) + cfg.merge(mapping) cfg.run()