66def PFCfg(inputFlags,**kwargs):
67
68 result=ComponentAccumulator()
69
70
71 PFLeptonSelectorFactory=CompFactory.PFLeptonSelector
72 PFLeptonSelector = PFLeptonSelectorFactory("PFLeptonSelector")
73 PFLeptonSelector.selectElectrons=False
74 PFLeptonSelector.selectMuons=False
75 result.addEventAlgo(PFLeptonSelector)
76
77 from eflowRec.PFCfg import PFTrackSelectorAlgCfg
78 useCaching = True
79
80 if inputFlags.Input.Format is Format.POOL and "StreamRDO" not in inputFlags.Input.ProcessingTags:
81 useCaching = False
82 result.merge(PFTrackSelectorAlgCfg(inputFlags,"PFTrackSelector",useCaching))
83
84 from eflowRec.PFCfg import getOfflinePFAlgorithm
85 result.merge(getOfflinePFAlgorithm(inputFlags))
86
87 from eflowRec.PFCfg import getChargedFlowElementCreatorAlgorithm,getNeutralFlowElementCreatorAlgorithm,getLCNeutralFlowElementCreatorAlgorithm
88 result.addEventAlgo(getChargedFlowElementCreatorAlgorithm(inputFlags,""))
89 result.addEventAlgo(getNeutralFlowElementCreatorAlgorithm(inputFlags,""))
90 result.addEventAlgo(getLCNeutralFlowElementCreatorAlgorithm(inputFlags,""))
91
92
93 if not inputFlags.PF.EOverPMode:
94 if inputFlags.PF.useElPhotLinks:
95 from eflowRec.PFCfg import getEGamFlowElementAssocAlgorithm
96 result.addEventAlgo(getEGamFlowElementAssocAlgorithm(inputFlags))
97
98 if inputFlags.PF.useMuLinks and inputFlags.Detector.GeometryMuon:
99 from eflowRec.PFCfg import getMuonFlowElementAssocAlgorithm
100 result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags))
101
102 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD, addToESD
103 toESDAndAOD = ""
104 if(inputFlags.PF.EOverPMode):
105 toESDAndAOD = ["xAOD::FlowElementContainer#EOverPChargedParticleFlowObjects","xAOD::FlowElementAuxContainer#EOverPChargedParticleFlowObjectsAux."]
106 toESDAndAOD += ["xAOD::FlowElementContainer#EOverPNeutralParticleFlowObjects","xAOD::FlowElementAuxContainer#EOverPNeutralParticleFlowObjectsAux."]
107 else:
108 toESDAndAOD = ["xAOD::FlowElementContainer#JetETMissChargedParticleFlowObjects", "xAOD::FlowElementAuxContainer#JetETMissChargedParticleFlowObjectsAux."]
109 toESDAndAOD += ["xAOD::FlowElementContainer#JetETMissNeutralParticleFlowObjects","xAOD::FlowElementAuxContainer#JetETMissNeutralParticleFlowObjectsAux.-FEShowerSubtractedClusterLink"]
110 toESDAndAOD += ["xAOD::FlowElementContainer#JetETMissLCNeutralParticleFlowObjects","xAOD::ShallowAuxContainer#JetETMissLCNeutralParticleFlowObjectsAux."]
111
112 if inputFlags.PF.addCPData:
113
114
115 toESDAndAOD += ["xAOD::CaloClusterContainer#PFCaloCluster","xAOD::CaloClusterAuxContainer#PFCaloClusterAux."]
116
117
118 PFClusterWidthDecorator = CompFactory.PFClusterWidthDecorator()
119 result.addEventAlgo(PFClusterWidthDecorator)
120
121 from TrigGepPerf.KeepCellsConfig import KeepCellsCfg
122 result.merge(KeepCellsCfg(inputFlags))
123 toESDAndAOD += ["CaloCellContainer#AllCalo"]
124
125 result.merge(addToESD(inputFlags, toESDAndAOD))
126 result.merge(addToAOD(inputFlags, toESDAndAOD))
127
128
129
130 if inputFlags.PF.doThinning:
131 from ThinningUtils.ThinNegativeEnergyNeutralPFOCfg import ThinNegativeEnergyNeutralPFOCfg
132 result.merge(ThinNegativeEnergyNeutralPFOCfg(inputFlags))
133
134 return result
135
136
137
138