144def runUFOReconstruction(flags, constits, caloClusterName="CaloCalTopoClusters", detectorEtaName = "default", assocPostfix="UFO", inputFEcontainerkey=""):
145
146 """Create a UFO collection from PFlow and tracks (PFO retrieved from PFOPrefix and tracks directly from trackParticleName).
147 This functions schedules 2 UFO specific algs :
148 * a TrackCaloClusterInfoUFOAlg to build the TrackCaloClusterInfo object
149 * a TrackCaloClusterAlg to build the UFO
150 """
151 from JetRecConfig.JetDefinition import JetDefinition
152 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
153 components=ComponentAccumulator()
154
155 if isinstance(constits, JetDefinition):
156 jdef = constits
157 constits = jdef.inputdef
158 trackParticleName = jdef._contextDic['Tracks']
159 else:
160 trackParticleName = "InDetTrackParticles"
161
162 pfoVariant= constits.label.split("PFlow")[-1]
163
164 decorKey = getDecorationKeyFunc(trackParticleName,assocPostfix)
165
166
167
168 components.merge(
169 setupTrackCaloAssoc(flags, caloClusterName, detectorEtaName, trackParticleName, assocPostfix, onlyPV0Tracks=False)
170 )
171
172
173 from TrackVertexAssociationTool.TrackVertexAssociationToolConfig import TTVAToolCfg
174 commonArgs=dict(
175 TrackVertexAssoTool = components.popToolsAndMerge(
176 TTVAToolCfg(flags,"tvaTool",WorkingPoint="Nonprompt_All_MaxWeight")),
177 AssoClustersDecor=decorKey("AssoClusters"),
178 )
179
180
181 inputFEcontainerkey = inputFEcontainerkey or constits.containername
182
183
184 UFOInfoAlg = CompFactory.TrackCaloClusterInfoUFOAlg(f"UFOInfoAlg{pfoVariant}",
185 TCCInfoName = pfoVariant+"UFOInfo",
186 InputTracks = trackParticleName,
187 InputClusters = caloClusterName,
188 VertexContainer = "PrimaryVertices",
189 InputPFO=inputFEcontainerkey,
190 OriginPFO='originalObjectLink',
191 ClusterECut = 0.,
192 **commonArgs
193 )
194
195
196 components.addEventAlgo( UFOInfoAlg)
197
198 tccUFO = CompFactory.UFOTool(f"UFOtool{pfoVariant}",
199 ClusterECut = UFOInfoAlg.ClusterECut,
200 InputPFO=inputFEcontainerkey,
201 OriginPFO='originalObjectLink',
202 **commonArgs
203 )
204
205 UFOAlg = CompFactory.TrackCaloClusterAlg(name = f"TrackCaloClusterAlgUFO{pfoVariant}",
206 OutputTCCName = f"UFO{pfoVariant}",
207 TCCInfo = UFOInfoAlg.TCCInfoName ,
208 TCCTools = [tccUFO,],
209 )
210
211
212
213 components.addEventAlgo( UFOAlg)
214 return components