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