ATLAS Offline Software
Loading...
Searching...
No Matches
TopoAutomatonClustering.h
Go to the documentation of this file.
1//
2// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3//
4// Dear emacs, this is -*- c++ -*-
5//
6
7
8#ifndef CALORECGPU_TOPOAUTOMATONCLUSTERING_H
9#define CALORECGPU_TOPOAUTOMATONCLUSTERING_H
10
12
14
18#include <string>
19#include <mutex>
20
22
23#include "CLHEP/Units/SystemOfUnits.h"
24
27
28#include "GaudiKernel/ServiceHandle.h"
29
36
37
39 public extends<AthAlgTool, CaloClusterGPUProcessor>, public CaloGPUTimed, public CaloGPUCUDAInitialization
40{
41 public:
42
43 TopoAutomatonClustering(const std::string & type, const std::string & name, const IInterface * parent);
44
45 virtual StatusCode initialize() override
46 {
48 }
49
50 virtual StatusCode initialize_non_CUDA() override;
51
52 virtual StatusCode initialize_CUDA() override;
53
54 virtual StatusCode execute (const EventContext & ctx,
55 const CaloRecGPU::ConstantDataHolder & constant_data,
56 CaloRecGPU::EventDataHolder & event_data,
57 void * temporary_buffer) const override;
58
59 virtual StatusCode finalize() override;
60
61 virtual ~TopoAutomatonClustering() = default;
62
63 private:
64
74 Gaudi::Property<std::vector<std::string>> m_caloNames {this, "CalorimeterNames", {}, "Name(s) of Calorimeters to use for clustering"};
75
86 Gaudi::Property<std::vector<std::string>> m_samplingNames {this, "SeedSamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for seeds"};
87
104 Gaudi::Property<float> m_cellThresholdOnEorAbsEinSigma {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"};
105
115 Gaudi::Property<float> m_neighborThresholdOnEorAbsEinSigma {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"};
116
125 Gaudi::Property<float> m_seedThresholdOnEorAbsEinSigma {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"};
126
127
136 Gaudi::Property<bool> m_seedCutsInAbsE {this, "SeedCutsInAbsE", true, "Seed cuts in Abs E instead of E"};
137
144 Gaudi::Property<bool> m_neighborCutsInAbsE {this, "NeighborCutsInAbsE", true, "Neighbor (grow) cuts in Abs E instead of E"};
145
152 Gaudi::Property<bool> m_cellCutsInAbsE {this, "CellCutsInAbsE", true, "Cell (terminal) cuts in Abs E instead of E"};
153
157 Gaudi::Property<bool> m_cutCellsInTime {this, "SeedCutsInT", false, "Do seed cuts in time"};
158
161 Gaudi::Property<float> m_timeThreshold {this, "SeedThresholdOnTAbs", 12.5 * CLHEP::ns, "Time thresholds (in abs. val.)"};
162
165 Gaudi::Property<float> m_thresholdForKeeping {this, "TimeCutUpperLimit", 20., "Significance upper limit for applying time cut"};
166
167
171 Gaudi::Property<bool> m_treatL1PredictedCellsAsGood {this, "TreatL1PredictedCellsAsGood", true, "Treat bad cells with dead OTX if predicted from L1 as good"};
172
176 Gaudi::Property<bool> m_excludeCutSeedsFromClustering {this, "CutOOTseed", true, "Exclude out-of-time seeds from neighbouring and cell stage"};
177
181 Gaudi::Property<bool> m_keepSignificantCells {this, "UseTimeCutUpperLimit", false, "Do not apply time cut on cells of large significance"};
182
186 Gaudi::Property<bool> m_twoGaussianNoise{this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"};
187
188
213 Gaudi::Property<std::string> m_neighborOptionString {this, "NeighborOption", "super3D",
214 "Neighbor option to be used for cell neighborhood relations"};
215
225 Gaudi::Property<bool> m_restrictHECIWandFCalNeighbors {this, "RestrictHECIWandFCalNeighbors",
226 false, "Limit the neighbors in HEC IW and FCal2&3"};
227
235 Gaudi::Property<bool> m_restrictPSNeighbors {this, "RestrictPSNeighbors",
236 false, "Limit the neighbors in presampler Barrel and Endcap"};
237
238
243 Gaudi::Property<bool> m_xtalkEM2 {this, "XTalkEM2",
244 false, "Relax time window (if timing is used) in EM2 when xTalk is present"};
245
249 Gaudi::Property<float> m_xtalkDeltaT {this, "XTalkDeltaT",
250 15 * CLHEP::ns, "Delta T to add to upper time threshold for EM2 cells affected by xtalk."};
251
252
256
258 ServiceHandle<IGPUKernelSizeOptimizerSvc> m_kernelSizeOptimizer { this, "KernelSizeOptimizer", "GPUKernelSizeOptimizerSvc", "CUDA kernel size optimization service." };
259
261 ToolHandle<AthCUDA::IStreamTool> m_streamTool {this, "StreamTool", "", "CUDA stream tool."};
262
263};
264
265#endif //CALORECGPU_TOPOAUTOMATONCLUSTERING_H
Define macros for attributes used to control the static checker.
Base class to provide some basic common infrastructure for initializing CUDA only at the right place ...
CaloGPUTimed(T *ptr)
Holds CPU and GPU versions of the geometry and cell noise information, which are assumed to be consta...
Definition DataHolders.h:27
Holds the mutable per-event information (clusters and cells) and provides utilities to convert betwee...
Definition DataHolders.h:73
ToolHandle< AthCUDA::IStreamTool > m_streamTool
Tool providing the CUDA stream to use.
Gaudi::Property< bool > m_twoGaussianNoise
if set to true use 2-gaussian noise description for TileCal
Gaudi::Property< std::vector< std::string > > m_caloNames
vector of names of the calorimeters to consider.
virtual ~TopoAutomatonClustering()=default
Gaudi::Property< bool > m_restrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3.
virtual StatusCode execute(const EventContext &ctx, const CaloRecGPU::ConstantDataHolder &constant_data, CaloRecGPU::EventDataHolder &event_data, void *temporary_buffer) const override
Gaudi::Property< bool > m_xtalkEM2
If set to true, the time window is softened in the EMB2 and EME2_OW due to crosstalk from direct neig...
Gaudi::Property< bool > m_cellCutsInAbsE
if set to true cell cuts are on and .
Gaudi::Property< float > m_timeThreshold
threshold used for timing cut on seed cells.
Gaudi::Property< float > m_xtalkDeltaT
Additional maximum delta t added to the upper limit time window in case crosstalk in EM2 should be ac...
TopoAutomatonClustering(const std::string &type, const std::string &name, const IInterface *parent)
TAGrowing::TACOptionsHolder m_options
Options for the algorithm, held in a GPU-friendly way.
Gaudi::Property< float > m_cellThresholdOnEorAbsEinSigma
all cells have to satisfy
virtual StatusCode initialize() override
Gaudi::Property< float > m_seedThresholdOnEorAbsEinSigma
cells with start a cluster
Gaudi::Property< bool > m_restrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap.
Gaudi::Property< std::string > m_neighborOptionString
type of neighbor relations to use.
Gaudi::Property< bool > m_treatL1PredictedCellsAsGood
if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead ...
Gaudi::Property< bool > m_neighborCutsInAbsE
if set to true neighbor cuts are on and .
Gaudi::Property< float > m_neighborThresholdOnEorAbsEinSigma
cells with extend the cluster
Gaudi::Property< std::vector< std::string > > m_samplingNames
vector of names of the calorimeter samplings to consider for seeds.
Gaudi::Property< bool > m_excludeCutSeedsFromClustering
if set to true, seed cells failing the time cut are also excluded from cluster at all
Gaudi::Property< bool > m_cutCellsInTime
if set to true, time cut is applied to seed cells, no cut otherwise
virtual StatusCode finalize() override
Gaudi::Property< float > m_thresholdForKeeping
upper limit on the energy significance, for applying the cell time cut
virtual StatusCode initialize_CUDA() override
Initialization that invokes CUDA functions.
virtual StatusCode initialize_non_CUDA() override
Initialization that does not invoke CUDA functions.
ServiceHandle< IGPUKernelSizeOptimizerSvc > m_kernelSizeOptimizer
Handle to the CUDA kernel block and grid size optimization service.
Gaudi::Property< bool > m_keepSignificantCells
if set to true, the time cut is not applied on cell of large significance
Gaudi::Property< bool > m_seedCutsInAbsE
if set to true seed cuts are on and .