ATLAS Offline Software
Loading...
Searching...
No Matches
CaloRecGPUConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6def SingleToolToPlot(tool_name, prefix):
7 return (tool_name, prefix)
8
9def ComparedToolsToPlot(tool_ref, tool_test, prefix, match_in_energy = False, match_without_shared = False, match_perfectly = False):
10 return (tool_ref, tool_test, prefix, match_in_energy, match_without_shared, match_perfectly)
11
12def MatchingOptions(min_similarity = 0.50, terminal_weight = 250., grow_weight = 500., seed_weight = 1000.):
13 return (min_similarity, terminal_weight, grow_weight, seed_weight)
14
15def BasicConstantDataExporterToolCfg(flags, name = "ConstantDataExporter", **kwargs):
16 result=ComponentAccumulator()
17
18 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
19 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
20
21 ConstantDataExporter = CompFactory.BasicConstantGPUDataExporter(name, **kwargs)
22
23 result.setPrivateTools(ConstantDataExporter)
24 return result
25
26def BasicEventDataExporterToolCfg(flags, cellsname, name = "EventDataExporter", **kwargs):
27 result=ComponentAccumulator()
28
29 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
30 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
31
32 kwargs.setdefault("CellsName", cellsname)
33
34 if flags.CaloRecGPU.ActiveConfig.FillMissingCells:
35 kwargs.setdefault("MissingCellsToFill", flags.CaloRecGPU.ActiveConfig.MissingCellsToFill)
36
37 EventDataExporter = CompFactory.BasicEventDataGPUExporter(name, **kwargs)
38
39 result.setPrivateTools(EventDataExporter)
40 return result
41
42def BasicAthenaClusterImporterToolCfg(flags, cellsname, name = "ClusterImporter", **kwargs):
43 result=ComponentAccumulator()
44 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
45 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
46 kwargs.setdefault("CellsName", cellsname)
47 kwargs.setdefault("ClusterSize", flags.CaloRecGPU.ActiveConfig.ClusterSize)
48 if flags.CaloRecGPU.ActiveConfig.FillMissingCells:
49 kwargs.setdefault("MissingCellsToFill", flags.CaloRecGPU.ActiveConfig.MissingCellsToFill)
50
51 AthenaClusterImporter = CompFactory.BasicGPUToAthenaImporter(name, **kwargs)
52 result.setPrivateTools(AthenaClusterImporter)
53 return result
54
55def CPUOutputToolCfg(flags, cellsname, name = "CPUOutput", **kwargs):
56 result=ComponentAccumulator()
57 kwargs.setdefault("CellsName", cellsname)
58 kwargs.setdefault("SavePath", "output")
59
60 CPUOutput = CompFactory.CaloCPUOutput(name, **kwargs)
61 result.setPrivateTools(CPUOutput)
62 return result
63
64def GPUOutputToolCfg(flags, name = "GPUOutput", **kwargs):
65 result=ComponentAccumulator()
66 kwargs.setdefault("UseSortedAndCutClusters", True)
67 kwargs.setdefault("SavePath", "output")
68
69 GPUOutput = CompFactory.CaloGPUOutput(name, **kwargs)
70 result.setPrivateTools(GPUOutput)
71 return result
72
73def ClusterInfoCalcToolCfg(flags, name = "GPUClusterInfoCalculator", do_cut = True, **kwargs):
74 result=ComponentAccumulator()
75 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
76 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
77 if do_cut:
78 kwargs.setdefault("ClusterCutsInAbsEt", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterCutClustersInAbsEt)
79 kwargs.setdefault("ClusterEtorAbsEtCut", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterEnergyCut)
80 else:
81 kwargs.setdefault("ClusterCutsInAbsEt", True)
82 kwargs.setdefault("ClusterEtorAbsEtCut", -1)
83 #Cutting on absolute value with a negative value => not cutting at all.
84
85 CalcTool = CompFactory.BasicGPUClusterInfoCalculator(name, **kwargs)
86 result.setPrivateTools(CalcTool)
87 return result
88
89def ClusterSorterToolCfg(flags, name = "GPUClusterSorter", do_cut = False, **kwargs):
90 result=ComponentAccumulator()
91 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
92 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
93 if do_cut:
94 kwargs.setdefault("ClusterCutsInAbsEt", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterCutClustersInAbsEt)
95 kwargs.setdefault("ClusterEtorAbsEtCut", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterEnergyCut)
96 else:
97 kwargs.setdefault("ClusterCutsInAbsEt", True)
98 kwargs.setdefault("ClusterEtorAbsEtCut", -1)
99 #Cutting on absolute value with a negative value => not cutting at all.
100
101 SorTool = CompFactory.GPUClusterSorter(name, **kwargs)
102 result.setPrivateTools(SorTool)
103 return result
104
105def TopoAutomatonClusteringToolCfg(flags, name = "TopoAutomatonClustering", **kwargs):
106 result=ComponentAccumulator()
107
108 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
109 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
110
111 kwargs.setdefault("CalorimeterNames", flags.CaloRecGPU.ActiveConfig.GrowingCalorimeterNames)
112
113 kwargs.setdefault("SeedSamplingNames", flags.CaloRecGPU.ActiveConfig.GrowingSeedSamplingNames)
114
115 kwargs.setdefault("SeedThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
116 kwargs.setdefault("NeighborThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
117 kwargs.setdefault("CellThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.TermThreshold)
118
119 kwargs.setdefault("SeedCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsSeedThreshold)
120 kwargs.setdefault("NeighborCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsGrowThreshold)
121 kwargs.setdefault("CellCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsTermThreshold)
122
123 kwargs.setdefault("TwoGaussianNoise", flags.CaloRecGPU.ActiveConfig.doTwoGaussianNoise)
124
125 kwargs.setdefault("SeedCutsInT", flags.CaloRecGPU.ActiveConfig.doTimeCut)
126 kwargs.setdefault("CutOOTseed", flags.CaloRecGPU.ActiveConfig.doTimeCut and flags.CaloRecGPU.ActiveConfig.extendTimeCut)
127 kwargs.setdefault("UseTimeCutUpperLimit", flags.CaloRecGPU.ActiveConfig.useUpperLimitForTimeCut)
128 kwargs.setdefault("TimeCutUpperLimit", flags.CaloRecGPU.ActiveConfig.timeCutUpperLimit)
129
130 kwargs.setdefault("SeedThresholdOnTAbs", flags.CaloRecGPU.ActiveConfig.GrowingTimeCutSeedThreshold)
131
132 kwargs.setdefault("TreatL1PredictedCellsAsGood", flags.CaloRecGPU.ActiveConfig.GrowingTreatL1PredictedCellsAsGood)
133
134 kwargs.setdefault("XTalkEM2", flags.CaloRecGPU.ActiveConfig.xtalkEM2)
135 kwargs.setdefault("XTalkDeltaT", flags.CaloRecGPU.ActiveConfig.xtalkDeltaT)
136
137 #The other cross-talk options are not supported yet.
138
139 kwargs.setdefault("NeighborOption", flags.CaloRecGPU.ActiveConfig.GrowingNeighborOption)
140
141 kwargs.setdefault("RestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictHECIWandFCalNeighbors)
142
143 kwargs.setdefault("RestrictPSNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictPSNeighbors)
144
145 TAClusterMaker = CompFactory.TopoAutomatonClustering(name, **kwargs)
146 result.setPrivateTools(TAClusterMaker)
147 return result
148
149def DefaultTopologicalClusteringToolCfg(flags, cellsname, name = "TopoClusterMaker", **kwargs):
150 result=ComponentAccumulator()
151
152 kwargs.setdefault("CellsName", cellsname)
153
154 kwargs.setdefault("CalorimeterNames", flags.CaloRecGPU.ActiveConfig.GrowingCalorimeterNames)
155 kwargs.setdefault("SeedSamplingNames", flags.CaloRecGPU.ActiveConfig.GrowingSeedSamplingNames)
156
157 kwargs.setdefault("NeighborOption", flags.CaloRecGPU.ActiveConfig.GrowingNeighborOption)
158 kwargs.setdefault("RestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictHECIWandFCalNeighbors)
159 kwargs.setdefault("RestrictPSNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictPSNeighbors)
160
161 kwargs.setdefault("SeedThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
162 kwargs.setdefault("NeighborThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
163 kwargs.setdefault("CellThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.TermThreshold)
164
165 kwargs.setdefault("SeedCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsSeedThreshold)
166 kwargs.setdefault("NeighborCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsGrowThreshold)
167 kwargs.setdefault("CellCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsTermThreshold)
168
169 kwargs.setdefault("SeedCutsInT", flags.CaloRecGPU.ActiveConfig.doTimeCut)
170 kwargs.setdefault("CutOOTseed", flags.CaloRecGPU.ActiveConfig.doTimeCut and flags.CaloRecGPU.ActiveConfig.extendTimeCut)
171 kwargs.setdefault("UseTimeCutUpperLimit", flags.CaloRecGPU.ActiveConfig.useUpperLimitForTimeCut)
172 kwargs.setdefault("TimeCutUpperLimit", flags.CaloRecGPU.ActiveConfig.timeCutUpperLimit)
173 kwargs.setdefault("XTalkEM2", flags.CaloRecGPU.ActiveConfig.xtalkEM2)
174 kwargs.setdefault("XTalkEM2D", flags.CaloRecGPU.ActiveConfig.xtalkEM2D)
175 kwargs.setdefault("XTalkEM2n", flags.CaloRecGPU.ActiveConfig.xtalkEM2n)
176 kwargs.setdefault("XTalkEM3", flags.CaloRecGPU.ActiveConfig.xtalkEM3)
177 kwargs.setdefault("XTalkEMEta", flags.CaloRecGPU.ActiveConfig.xtalkEMEta)
178 kwargs.setdefault("XTalkDeltaT", flags.CaloRecGPU.ActiveConfig.xtalkDeltaT)
179 kwargs.setdefault("XTalk2Eratio1", flags.CaloRecGPU.ActiveConfig.xtalk2Eratio1)
180 kwargs.setdefault("XTalk2Eratio2", flags.CaloRecGPU.ActiveConfig.xtalk2Eratio2)
181 kwargs.setdefault("XTalk3Eratio", flags.CaloRecGPU.ActiveConfig.xtalk3Eratio)
182 kwargs.setdefault("XTalkEtaEratio", flags.CaloRecGPU.ActiveConfig.xtalkEtaEratio)
183 kwargs.setdefault("XTalk2DEratio", flags.CaloRecGPU.ActiveConfig.xtalk2DEratio)
184
185 kwargs.setdefault("ClusterCutsInAbsEt", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterCutClustersInAbsEt)
186 kwargs.setdefault("ClusterEtorAbsEtCut", flags.CaloRecGPU.ActiveConfig.PostGrowingClusterEnergyCut)
187
188 kwargs.setdefault("TwoGaussianNoise", flags.CaloRecGPU.ActiveConfig.doTwoGaussianNoise)
189
190 kwargs.setdefault("SeedThresholdOnTAbs", flags.CaloRecGPU.ActiveConfig.GrowingTimeCutSeedThreshold)
191
192 kwargs.setdefault("TreatL1PredictedCellsAsGood", flags.CaloRecGPU.ActiveConfig.GrowingTreatL1PredictedCellsAsGood)
193
194 kwargs.setdefault("UseGPUCriteria", not flags.CaloRecGPU.ActiveConfig.UseOriginalCriteria)
195
196 TopoMaker = CompFactory.CaloTopoClusterMaker(name, **kwargs)
197 result.setPrivateTools(TopoMaker)
198 return result
199
200def TopoAutomatonSplitterToolCfg(flags, name = "ClusterSplitter", **kwargs):
201 result=ComponentAccumulator()
202
203 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
204 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
205
206 kwargs.setdefault("NumberOfCellsCut", flags.CaloRecGPU.ActiveConfig.SplittingNumberOfCellsCut)
207 kwargs.setdefault("EnergyCut", flags.CaloRecGPU.ActiveConfig.SplittingEnergyCut)
208 kwargs.setdefault("SamplingNames", flags.CaloRecGPU.ActiveConfig.SplittingSamplingNames)
209 kwargs.setdefault("SecondarySamplingNames", flags.CaloRecGPU.ActiveConfig.SplittingSecondarySamplingNames)
210 kwargs.setdefault("ShareBorderCells", flags.CaloRecGPU.ActiveConfig.SplittingShareBorderCells)
211 kwargs.setdefault("EMShowerScale", flags.CaloRecGPU.ActiveConfig.SplittingEMShowerScale)
212 kwargs.setdefault("WeightingOfNegClusters", flags.CaloRecGPU.ActiveConfig.SplittingUseNegativeClusters)
213
214 kwargs.setdefault("TreatL1PredictedCellsAsGood", flags.CaloRecGPU.ActiveConfig.SplittingTreatL1PredictedCellsAsGood)
215
216 kwargs.setdefault("NeighborOption", flags.CaloRecGPU.ActiveConfig.SplittingNeighborOption)
217 kwargs.setdefault("RestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.SplittingRestrictHECIWandFCalNeighbors)
218 kwargs.setdefault("RestrictPSNeighbors", flags.CaloRecGPU.ActiveConfig.GPUSplittingRestrictPSNeighbors)
219 #Since the CPU version does not restrict this!
220
221 Splitter = CompFactory.TopoAutomatonSplitting(name, **kwargs)
222 result.setPrivateTools(Splitter)
223 return result
224
225def DefaultClusterSplittingToolCfg(flags, name = "TopoSplitter", **kwargs):
226 result=ComponentAccumulator()
227
228 kwargs.setdefault("NeighborOption", flags.CaloRecGPU.ActiveConfig.SplittingNeighborOption)
229 kwargs.setdefault("RestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.SplittingRestrictHECIWandFCalNeighbors)
230
231 kwargs.setdefault("NumberOfCellsCut", flags.CaloRecGPU.ActiveConfig.SplittingNumberOfCellsCut)
232 kwargs.setdefault("EnergyCut", flags.CaloRecGPU.ActiveConfig.SplittingEnergyCut)
233
234 kwargs.setdefault("SamplingNames", flags.CaloRecGPU.ActiveConfig.SplittingSamplingNames)
235 kwargs.setdefault("SecondarySamplingNames", flags.CaloRecGPU.ActiveConfig.SplittingSecondarySamplingNames)
236
237 kwargs.setdefault("ShareBorderCells", flags.CaloRecGPU.ActiveConfig.SplittingShareBorderCells)
238 kwargs.setdefault("EMShowerScale", flags.CaloRecGPU.ActiveConfig.SplittingEMShowerScale)
239
240 kwargs.setdefault("TreatL1PredictedCellsAsGood", flags.CaloRecGPU.ActiveConfig.SplittingTreatL1PredictedCellsAsGood)
241
242 kwargs.setdefault("WeightingOfNegClusters", flags.CaloRecGPU.ActiveConfig.SplittingUseNegativeClusters)
243
244 kwargs.setdefault("UseGPUCriteria", not flags.CaloRecGPU.ActiveConfig.UseOriginalCriteria)
245
246 TopoSplitter = CompFactory.CaloTopoClusterSplitter(name, **kwargs)
247 result.setPrivateTools(TopoSplitter)
248 return result
249
250def GPUClusterMomentsCalculatorToolCfg(flags, name = "GPUTopoMoments", **kwargs):
251 result=ComponentAccumulator()
252
253 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
254 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
255
256 kwargs.setdefault("WeightingOfNegClusters", flags.CaloRecGPU.ActiveConfig.MomentsUseAbsEnergy)
257
258 kwargs.setdefault("MaxAxisAngle", flags.CaloRecGPU.ActiveConfig.MomentsMaxAxisAngle)
259
260 kwargs.setdefault("TwoGaussianNoise", flags.CaloRecGPU.ActiveConfig.doTwoGaussianNoise)
261
262 kwargs.setdefault("MinBadLArQuality", flags.CaloRecGPU.ActiveConfig.MomentsMinBadLArQuality)
263
264 kwargs.setdefault("MinRLateral", flags.CaloRecGPU.ActiveConfig.MomentsMinRLateral)
265 kwargs.setdefault("MinLLongitudinal", flags.CaloRecGPU.ActiveConfig.MomentsMinLLongitudinal)
266
267 GPUTopoMoments = CompFactory.GPUClusterInfoAndMomentsCalculator(name, **kwargs)
268 result.setPrivateTools(GPUTopoMoments)
269 return result
270
271def DefaultClusterMomentsCalculatorToolCfg(flags, instantiateForTrigger, name = "TopoMoments", **kwargs):
272 result=ComponentAccumulator()
273
274 kwargs.setdefault("WeightingOfNegClusters", flags.CaloRecGPU.ActiveConfig.MomentsUseAbsEnergy)
275
276 kwargs.setdefault("MaxAxisAngle", flags.CaloRecGPU.ActiveConfig.MomentsMaxAxisAngle)
277
278 kwargs.setdefault("TwoGaussianNoise", flags.CaloRecGPU.ActiveConfig.doTwoGaussianNoise)
279
280 kwargs.setdefault("MinBadLArQuality", flags.CaloRecGPU.ActiveConfig.MomentsMinBadLArQuality)
281
282 kwargs.setdefault("MomentsNames", flags.CaloRecGPU.ActiveConfig.MomentsToCalculate)
283
284 kwargs.setdefault("MinRLateral", flags.CaloRecGPU.ActiveConfig.MomentsMinRLateral)
285 kwargs.setdefault("MinLLongitudinal", flags.CaloRecGPU.ActiveConfig.MomentsMinLLongitudinal)
286
287 kwargs.setdefault("UseGPUCriteria", not flags.CaloRecGPU.ActiveConfig.UseOriginalCriteria)
288
289 TopoMoments = CompFactory.CaloClusterMomentsMaker(name, **kwargs)
290
291 if not flags.Common.isOnline and not instantiateForTrigger and "LArHVFraction" not in kwargs:
292 #If it's already in kwargs, don't override
293 #(extra flexibility for the user, not that it's needed...)
294 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
295 result.merge(LArElecCalibDBCfg(flags,["HVScaleCorr"]))
296 if flags.Input.isMC:
297 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey="LArHVScaleCorr")
298 else:
299 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey="LArHVScaleCorrRecomputed")
300
301 result.setPrivateTools(TopoMoments)
302 return result
303
304def AthenaClusterAndMomentsImporterToolCfg(flags, cellsname, instantiateForTrigger, name = "ClusterAndMomentsImporter", **kwargs):
305 result=ComponentAccumulator()
306 kwargs.setdefault("CellsName", cellsname)
307
308 kwargs.setdefault("ClusterSize", flags.CaloRecGPU.ActiveConfig.ClusterSize)
309
310 kwargs.setdefault("MeasureTimes", flags.CaloRecGPU.ActiveConfig.MeasureTimes)
311 kwargs.setdefault("TimeFileOutput", name + "Times.txt")
312
313 if not flags.Common.isOnline and not instantiateForTrigger:
314 kwargs.setdefault("FillHVMoments", True)
315 if flags.Input.isMC:
316 kwargs.setdefault("HVScaleCorrKey", "LArHVScaleCorr")
317 else:
318 kwargs.setdefault("HVScaleCorrKey", "LArHVScaleCorrRecomputed")
319 else:
320 kwargs.setdefault("FillHVMoments", False)
321
322 kwargs.setdefault("MomentsNames", flags.CaloRecGPU.ActiveConfig.MomentsToCalculate)
323
324 if flags.CaloRecGPU.ActiveConfig.FillMissingCells:
325 kwargs.setdefault("MissingCellsToFill", flags.CaloRecGPU.ActiveConfig.MissingCellsToFill)
326
327 AthenaClusterImporter = CompFactory.GPUToAthenaImporterWithMoments(name, **kwargs)
328 result.setPrivateTools(AthenaClusterImporter)
329 return result
330
331def CellsCounterCPUToolCfg(flags, cellsname, name = "CPUCounts", **kwargs):
332 result=ComponentAccumulator()
333 kwargs.setdefault("SavePath", "counts")
334 kwargs.setdefault("FilePrefix", "CPU")
335 kwargs.setdefault("CellsName", cellsname)
336
337 kwargs.setdefault("SeedThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
338 kwargs.setdefault("NeighborThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
339 kwargs.setdefault("CellThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.TermThreshold)
340
341 CPUCount = CompFactory.CaloCellsCounterCPU(name, **kwargs)
342 result.setPrivateTools(CPUCount)
343 return result
344
345def CellsCounterGPUToolCfg(flags, name = "GPUCounts", **kwargs):
346 result=ComponentAccumulator()
347 kwargs.setdefault("SavePath", "counts")
348 kwargs.setdefault("FilePrefix", "GPU")
349
350 kwargs.setdefault("SeedThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
351 kwargs.setdefault("NeighborThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
352 kwargs.setdefault("CellThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.TermThreshold)
353
354 GPUCount = CompFactory.CaloCellsCounterGPU(name, **kwargs)
355 result.setPrivateTools(GPUCount)
356 return result
357
358def PerformanceInformationOutputToolCfg(flags, cellsname, name = "PerfInfoTool", **kwargs):
359 result=ComponentAccumulator()
360 kwargs.setdefault("FileName", "event_info.txt")
361 kwargs.setdefault("CellsName", cellsname)
362
363 kwargs.setdefault("SeedThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
364 kwargs.setdefault("NeighborThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
365 kwargs.setdefault("CellThresholdOnEorAbsEinSigma", flags.CaloRecGPU.ActiveConfig.TermThreshold)
366
367 kwargs.setdefault("GrowingNeighborOption", flags.CaloRecGPU.ActiveConfig.GrowingNeighborOption)
368 kwargs.setdefault("GrowingRestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictHECIWandFCalNeighbors)
369 kwargs.setdefault("GrowingRestrictPSNeighbors", flags.CaloRecGPU.ActiveConfig.GrowingRestrictPSNeighbors)
370
371
372 kwargs.setdefault("SplittingNeighborOption", flags.CaloRecGPU.ActiveConfig.SplittingNeighborOption)
373 kwargs.setdefault("SplittingRestrictHECIWandFCalNeighbors", flags.CaloRecGPU.ActiveConfig.SplittingRestrictHECIWandFCalNeighbors)
374 kwargs.setdefault("SplittingRestrictPSNeighbors", flags.CaloRecGPU.ActiveConfig.GPUSplittingRestrictPSNeighbors)
375
376 kwargs.setdefault("SeedCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsSeedThreshold)
377 kwargs.setdefault("NeighborCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsGrowThreshold)
378 kwargs.setdefault("CellCutsInAbsE", flags.CaloRecGPU.ActiveConfig.UseAbsTermThreshold)
379
380 GPUCount = CompFactory.CaloPerformancePropertiesOutput(name, **kwargs)
381 result.setPrivateTools(GPUCount)
382 return result
383
384def MomentsDumperToolCfg(flags, name = "MomentsDumper", **kwargs):
385 result=ComponentAccumulator()
386 kwargs.setdefault("SavePath", "moments")
387
388 MomentsDumper = CompFactory.CaloMomentsDumper(name, **kwargs)
389 result.setPrivateTools(MomentsDumper)
390 return result
391
392def PlotterToolCfg(flags, cellsname, name = "PlotterMonitoring", **kwargs):
393 result=ComponentAccumulator()
394
395 kwargs.setdefault("SeedThreshold", flags.CaloRecGPU.ActiveConfig.SeedThreshold)
396 kwargs.setdefault("NeighborThreshold", flags.CaloRecGPU.ActiveConfig.GrowThreshold)
397 kwargs.setdefault("CellThreshold", flags.CaloRecGPU.ActiveConfig.TermThreshold)
398
399 kwargs.setdefault("CellsName", cellsname)
400
401 kwargs.setdefault("ClusterMatchingParameters", MatchingOptions())
402
403 if flags.CaloRecGPU.ActiveConfig.FillMissingCells:
404 kwargs.setdefault("MissingCellsToFill", flags.CaloRecGPU.ActiveConfig.MissingCellsToFill)
405
406 #Tools and Combinations to plot
407 #should be set by the end user.
408
409 PloTool = CompFactory.CaloGPUClusterAndCellDataMonitor(name, **kwargs)
410
411 if "MonitoringTool" not in kwargs:
412 from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool
413 PloTool.MonitoringTool = GenericMonitoringTool(flags, "PlotterMonitoringTool")
414
415 result.setPrivateTools(PloTool)
416 return result
417
418def DefaultCalibMomentsToolCfg(flags, name = "TopoCalibMoments", **kwargs):
419 result=ComponentAccumulator()
420
421 kwargs.setdefault("MomentsNames", ["ENG_CALIB_TOT"
422 ,"ENG_CALIB_OUT_L"
423 ,"ENG_CALIB_OUT_T"
424 ,"ENG_CALIB_EMB0"
425 ,"ENG_CALIB_EME0"
426 ,"ENG_CALIB_TILEG3"
427 ,"ENG_CALIB_DEAD_TOT"
428 ,"ENG_CALIB_DEAD_EMB0"
429 ,"ENG_CALIB_DEAD_TILE0"
430 ,"ENG_CALIB_DEAD_TILEG3"
431 ,"ENG_CALIB_DEAD_EME0"
432 ,"ENG_CALIB_DEAD_HEC0"
433 ,"ENG_CALIB_DEAD_FCAL"
434 ,"ENG_CALIB_DEAD_LEAKAGE"
435 ,"ENG_CALIB_DEAD_UNCLASS"
436 ,"ENG_CALIB_FRAC_EM"
437 ,"ENG_CALIB_FRAC_HAD"
438 ,"ENG_CALIB_FRAC_REST"])
439
440 kwargs.setdefault("CalibrationHitContainerNames", ["LArCalibrationHitInactive"
441 ,"LArCalibrationHitActive"
442 ,"TileCalibHitActiveCell"
443 ,"TileCalibHitInactiveCell"])
444
445 kwargs.setdefault("DMCalibrationHitContainerNames", ["LArCalibrationHitDeadMaterial"
446 ,"TileCalibHitDeadMaterial"])
447
448 TopoCalibMoments = CompFactory.CaloCalibClusterMomentsMaker2(name, **kwargs)
449 result.setPrivateTools(TopoCalibMoments)
450 return result
451
452def DefaultTopoClusterLocalCalibToolsCfg(flags, instantiateForTrigger, prefix = ''):
453 result=ComponentAccumulator()
454
455 CaloClusterLocalCalib=CompFactory.CaloClusterLocalCalib
456
457 # Local cell weights
458 LCClassify = CompFactory.CaloLCClassificationTool(prefix + "LCClassify")
459 LCClassify.ClassificationKey = "EMFracClassify"
460 LCClassify.UseSpread = False
461 LCClassify.MaxProbability = 0.85 if flags.GeoModel.AtlasVersion.startswith("Rome") and instantiateForTrigger else 0.5
462 LCClassify.StoreClassificationProbabilityInAOD = True
463 if instantiateForTrigger:
464 LCClassify.UseNormalizedEnergyDensity = not flags.GeoModel.AtlasVersion.startswith("Rome")
465 if not instantiateForTrigger:
466 LCClassify.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
467
468 LCWeight = CompFactory.CaloLCWeightTool(prefix + "LCWeight")
469 LCWeight.CorrectionKey = "H1ClusterCellWeights"
470 LCWeight.SignalOverNoiseCut = 2.0
471 LCWeight.UseHadProbability = True
472
473 LocalCalib = CaloClusterLocalCalib (prefix + "LocalCalib")
474 LocalCalib.ClusterClassificationTool = [LCClassify]
475 LocalCalib.ClusterRecoStatus = [1,2]
476 LocalCalib.LocalCalibTools = [LCWeight]
477 if not instantiateForTrigger:
478 LocalCalib.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
479
480 # Out-of-cluster corrections
481 LCOut = CompFactory.CaloLCOutOfClusterTool(prefix + "LCOut")
482 LCOut.CorrectionKey = "OOCCorrection"
483 LCOut.UseEmProbability = False
484 LCOut.UseHadProbability = True
485
486 OOCCalib = CaloClusterLocalCalib (prefix + "OOCCalib")
487 OOCCalib.ClusterRecoStatus = [1,2]
488 OOCCalib.LocalCalibTools = [LCOut]
489 if not instantiateForTrigger:
490 OOCCalib.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
491
492 LCOutPi0 = CompFactory.CaloLCOutOfClusterTool(prefix + "LCOutPi0")
493 LCOutPi0.CorrectionKey = "OOCPi0Correction"
494 LCOutPi0.UseEmProbability = True
495 LCOutPi0.UseHadProbability = False
496
497 OOCPi0Calib = CaloClusterLocalCalib (prefix + "OOCPi0Calib")
498 OOCPi0Calib.ClusterRecoStatus = [1,2]
499 OOCPi0Calib.LocalCalibTools = [LCOutPi0]
500 if not instantiateForTrigger:
501 OOCPi0Calib.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
502
503 # Dead material corrections
504 LCDeadMaterial = CompFactory.CaloLCDeadMaterialTool(prefix + "LCDeadMaterial")
505 LCDeadMaterial.HadDMCoeffKey = "HadDMCoeff2"
506 LCDeadMaterial.ClusterRecoStatus = 0
507 LCDeadMaterial.WeightModeDM = 2
508 LCDeadMaterial.UseHadProbability = True
509 if not instantiateForTrigger:
510 LCDeadMaterial.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
511
512 DMCalib = CaloClusterLocalCalib (prefix + "DMCalib")
513 DMCalib.ClusterRecoStatus = [1,2]
514 DMCalib.LocalCalibTools = [LCDeadMaterial]
515 if not instantiateForTrigger:
516 DMCalib.WeightingOfNegClusters = flags.CaloRecGPU.ActiveConfig.CalibrationUseAbsEnergy
517
518 lccalibtools = [
519 LocalCalib,
520 OOCCalib,
521 OOCPi0Calib,
522 DMCalib]
523
524 result.setPrivateTools(lccalibtools)
525
526 return result
527
528#Depending on ReallyUseGPUTools,
529#instantiates GPU or CPU tools with consistent options...
530def GPUCaloTopoClusterCfg(flags, instantiateForTrigger, cellsname,
531 clustersname = None, clustersnapname="CaloTopoClusters", name="HybridClusterProcessor",
532 PlotterTool = None, addAsPrimary = True, ReallyUseGPUTools = True):
533
534 doLCCalib = flags.CaloRecGPU.ActiveConfig.doTopoClusterLocalCalib
535
536 if clustersname is None:
537 clustersname = "CaloCalTopoClusters" if doLCCalib else "CaloTopoClusters"
538
539 if clustersname == "CaloTopoClusters" and doLCCalib:
540 raise RuntimeError("Inconsistent arguments: clustersname must not be 'CaloTopoClusters' if doTopoClusterLocalCalib is True")
541
542 result = ComponentAccumulator()
543
544 if not instantiateForTrigger:
545
546 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
547 from TileGeoModel.TileGMConfig import TileGMCfg
548 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
549
550 result.merge(CaloNoiseCondAlgCfg(flags,"totalNoise"))
551 result.merge(CaloNoiseCondAlgCfg(flags,"electronicNoise"))
552
553 result.merge(LArGMCfg(flags))
554 result.merge(TileGMCfg(flags))
555
556
557 HybridClusterProcessor = CompFactory.CaloGPUHybridClusterProcessor(name)
558 HybridClusterProcessor.ClustersOutputName = clustersname
559
560 HybridClusterProcessor.WriteTriggerSpecificInfo = instantiateForTrigger
561
562 HybridClusterProcessor.MeasureTimes = flags.CaloRecGPU.ActiveConfig.MeasureTimes
563
564 HybridClusterProcessor.TimeFileOutput = "GlobalTimes.txt"
565
566 HybridClusterProcessor.DeferConstantDataPreparationToFirstEvent = True
567 HybridClusterProcessor.DoPlots = PlotterTool is not None
568 HybridClusterProcessor.PlotterTool = PlotterTool
569
570 HybridClusterProcessor.NumPreAllocatedDataHolders = flags.CaloRecGPU.ActiveConfig.NumPreAllocatedDataHolders
571
572 if ReallyUseGPUTools:
573
574 HybridClusterProcessor.ConstantDataToGPUTool = result.popToolsAndMerge( BasicConstantDataExporterToolCfg(flags) )
575 HybridClusterProcessor.EventDataToGPUTool = result.popToolsAndMerge( BasicEventDataExporterToolCfg(flags, cellsname) )
576 HybridClusterProcessor.GPUToEventDataTool = result.popToolsAndMerge( AthenaClusterAndMomentsImporterToolCfg(flags, cellsname, instantiateForTrigger) )
577
578
579 HybridClusterProcessor.BeforeGPUTools = []
580
581 HybridClusterProcessor.GPUTools = []
582
583 HybridClusterProcessor.GPUTools += [result.popToolsAndMerge( TopoAutomatonClusteringToolCfg(flags,"GPUGrowing"))]
584
585 HybridClusterProcessor.GPUTools += [result.popToolsAndMerge( ClusterInfoCalcToolCfg(flags,"PostGPUGrowingClusterPropertiesCalculator", True))]
586
587 HybridClusterProcessor.GPUTools += [result.popToolsAndMerge( TopoAutomatonSplitterToolCfg(flags,"GPUSplitting") )]
588
589 HybridClusterProcessor.GPUTools += [result.popToolsAndMerge( ClusterSorterToolCfg(flags, "GPUClusterSorting", False) )]
590
591 HybridClusterProcessor.GPUTools += [result.popToolsAndMerge( GPUClusterMomentsCalculatorToolCfg(flags,"GPUTopoMoments") )]
592
593 else:
594
595 HybridClusterProcessor.ConstantDataToGPUTool = None
596 HybridClusterProcessor.EventDataToGPUTool = None
597 HybridClusterProcessor.GPUToEventDataTool = None
598 HybridClusterProcessor.SkipConversions = True
599
600 HybridClusterProcessor.GPUTools = []
601
602 HybridClusterProcessor.BeforeGPUTools = []
603
604 HybridClusterProcessor.BeforeGPUTools += [result.popToolsAndMerge( DefaultTopologicalClusteringToolCfg(flags, cellsname,"CPUGrowing"))]
605
606 HybridClusterProcessor.BeforeGPUTools += [result.popToolsAndMerge( DefaultClusterSplittingToolCfg(flags,"CPUSplitting") )]
607
608 HybridClusterProcessor.BeforeGPUTools += [result.popToolsAndMerge( DefaultClusterMomentsCalculatorToolCfg(flags, instantiateForTrigger, "CPUTopoMoments") )]
609
610 HybridClusterProcessor.BeforeGPUTools += [ CompFactory.CaloClusterStoreRawProperties("RawPropertiesStorer") ]
611
612
613
614 HybridClusterProcessor.AfterGPUTools = []
615
616 if not instantiateForTrigger:
617 from CaloBadChannelTool.CaloBadChanToolConfig import CaloBadChanToolCfg
618 caloBadChanTool = result.popToolsAndMerge( CaloBadChanToolCfg(flags) )
619 HybridClusterProcessor.AfterGPUTools += [CompFactory.CaloClusterBadChannelList(badChannelTool = caloBadChanTool)]
620
621 if not instantiateForTrigger and flags.CaloRecGPU.ActiveConfig.doCalibHitMoments:
622
623 calibHitsMomentsMaker = result.popToolsAndMerge(DefaultCalibMomentsToolCfg(flags))
624 HybridClusterProcessor.AfterGPUTools += [calibHitsMomentsMaker]
625
626 if doLCCalib:
627 if not instantiateForTrigger:
628 HybridClusterProcessor.AfterGPUTools += [CompFactory.CaloClusterSnapshot(OutputName=clustersnapname,
629 SetCrossLinks=True,
630 FinalClusterContainerName=clustersname)]
631 else:
632 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
633 from CaloRec.CaloTopoClusterConfig import caloTopoCoolFolderCfg
634 result.merge(CaloNoiseCondAlgCfg(flags, noisetype="electronicNoise"))
635 result.merge(caloTopoCoolFolderCfg(flags))
636
637 calibTools = result.popToolsAndMerge(DefaultTopoClusterLocalCalibToolsCfg(flags, instantiateForTrigger, 'Trig' if instantiateForTrigger else ''))
638
639 HybridClusterProcessor.AfterGPUTools += calibTools
640 #This is already a tool array.
641
642 if not instantiateForTrigger:
643 from CaloRec.CaloTopoClusterConfig import caloTopoCoolFolderCfg
644 result.merge(caloTopoCoolFolderCfg(flags))
645
646 if instantiateForTrigger:
647 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
648 result.merge(CaloNoiseCondAlgCfg(flags))
649
650 result.addEventAlgo(HybridClusterProcessor, primary=addAsPrimary)
651
652 if instantiateForTrigger or clustersname in flags.CaloRecGPU.ActiveConfig.skipWriteList:
653 # don't add these clusters to ESD and AOD
654 return result
655
656 #Output config:
657 AODMoments=[ "SECOND_R"
658 ,"SECOND_LAMBDA"
659 ,"CENTER_MAG"
660 ,"CENTER_LAMBDA"
661 ,"FIRST_ENG_DENS"
662 ,"ENG_FRAC_MAX"
663 ,"ISOLATION"
664 ,"ENG_BAD_CELLS"
665 ,"N_BAD_CELLS"
666 ,"BADLARQ_FRAC"
667 ,"ENG_POS"
668 ,"SIGNIFICANCE"
669 ,"AVG_LAR_Q"
670 ,"AVG_TILE_Q"
671 ,"EM_PROBABILITY"
672 ,"BadChannelList"
673 ,"SECOND_TIME"
674 ,"NCELL_SAMPLING"]
675
676 if flags.CaloRecGPU.ActiveConfig.writeExtendedClusterMoments:
677 AODMoments += ["LATERAL"
678 ,"LONGITUDINAL"
679 ,"CELL_SIGNIFICANCE"
680 ,"PTD"
681 ,"MASS"]
682
683 if flags.Reco.EnableHI:
684 AODMoments += ["CELL_SIG_SAMPLING"]
685
686 if flags.CaloRecGPU.ActiveConfig.writeCalibHitClusterMoments:
687 AODMoments += ["ENG_CALIB_TOT"
688 ,"ENG_CALIB_OUT_L"
689 ,"ENG_CALIB_OUT_T"
690 ,"ENG_CALIB_EMB0"
691 ,"ENG_CALIB_EME0"
692 ,"ENG_CALIB_TILEG3"
693 ,"ENG_CALIB_DEAD_TOT"
694 ,"ENG_CALIB_DEAD_EMB0"
695 ,"ENG_CALIB_DEAD_TILE0"
696 ,"ENG_CALIB_DEAD_TILEG3"
697 ,"ENG_CALIB_DEAD_EME0"
698 ,"ENG_CALIB_DEAD_HEC0"
699 ,"ENG_CALIB_DEAD_FCAL"
700 ,"ENG_CALIB_DEAD_LEAKAGE"
701 ,"ENG_CALIB_DEAD_UNCLASS"
702 ,"ENG_CALIB_FRAC_EM"
703 ,"ENG_CALIB_FRAC_HAD"
704 ,"ENG_CALIB_FRAC_REST"]
705
706
707 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD, addToESD
708 toESD = [f"xAOD::CaloClusterContainer#{clustersname}",
709 f"xAOD::CaloClusterAuxContainer#{clustersname}Aux.",
710 f"CaloClusterCellLinkContainer#{clustersname}_links"]
711 toAOD = [f"xAOD::CaloClusterContainer#{clustersname}",
712 f"CaloClusterCellLinkContainer#{clustersname}_links"]
713
714 AODMoments.append("CellLink") #Add data-link to cell-link container
715 if flags.CaloRecGPU.ActiveConfig.addCalibrationHitDecoration: #Add calib hit deco if requried
716 AODMoments.append(flags.CaloRecGPU.ActiveConfig.CalibrationHitDecorationName)
717
718 if flags.CaloRecGPU.ActiveConfig.addCPData:
719 AODMoments += ["ClusterWidthEta","ClusterWidthPhi"]
720
721 auxItems = f"xAOD::CaloClusterAuxContainer#{clustersname}Aux."
722 auxItems+= ".".join(AODMoments)
723
724 toAOD.append(auxItems)
725
726 result.merge(addToESD(flags, toESD))
727 result.merge(addToAOD(flags, toAOD))
728
729
730 return result
731
DefaultTopoClusterLocalCalibToolsCfg(flags, instantiateForTrigger, prefix='')
CellsCounterCPUToolCfg(flags, cellsname, name="CPUCounts", **kwargs)
PerformanceInformationOutputToolCfg(flags, cellsname, name="PerfInfoTool", **kwargs)
MatchingOptions(min_similarity=0.50, terminal_weight=250., grow_weight=500., seed_weight=1000.)
PlotterToolCfg(flags, cellsname, name="PlotterMonitoring", **kwargs)
BasicAthenaClusterImporterToolCfg(flags, cellsname, name="ClusterImporter", **kwargs)
CPUOutputToolCfg(flags, cellsname, name="CPUOutput", **kwargs)
GPUOutputToolCfg(flags, name="GPUOutput", **kwargs)
DefaultClusterSplittingToolCfg(flags, name="TopoSplitter", **kwargs)
GPUClusterMomentsCalculatorToolCfg(flags, name="GPUTopoMoments", **kwargs)
DefaultCalibMomentsToolCfg(flags, name="TopoCalibMoments", **kwargs)
DefaultTopologicalClusteringToolCfg(flags, cellsname, name="TopoClusterMaker", **kwargs)
BasicEventDataExporterToolCfg(flags, cellsname, name="EventDataExporter", **kwargs)
AthenaClusterAndMomentsImporterToolCfg(flags, cellsname, instantiateForTrigger, name="ClusterAndMomentsImporter", **kwargs)
TopoAutomatonClusteringToolCfg(flags, name="TopoAutomatonClustering", **kwargs)
ClusterInfoCalcToolCfg(flags, name="GPUClusterInfoCalculator", do_cut=True, **kwargs)
DefaultClusterMomentsCalculatorToolCfg(flags, instantiateForTrigger, name="TopoMoments", **kwargs)
MomentsDumperToolCfg(flags, name="MomentsDumper", **kwargs)
BasicConstantDataExporterToolCfg(flags, name="ConstantDataExporter", **kwargs)
ComparedToolsToPlot(tool_ref, tool_test, prefix, match_in_energy=False, match_without_shared=False, match_perfectly=False)
CellsCounterGPUToolCfg(flags, name="GPUCounts", **kwargs)
SingleToolToPlot(tool_name, prefix)
TopoAutomatonSplitterToolCfg(flags, name="ClusterSplitter", **kwargs)
GPUCaloTopoClusterCfg(flags, instantiateForTrigger, cellsname, clustersname=None, clustersnapname="CaloTopoClusters", name="HybridClusterProcessor", PlotterTool=None, addAsPrimary=True, ReallyUseGPUTools=True)
ClusterSorterToolCfg(flags, name="GPUClusterSorter", do_cut=False, **kwargs)