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
21#include "CLHEP/Units/SystemOfUnits.h"
22
25
26#include "GaudiKernel/ServiceHandle.h"
27
34
35
37 public extends<AthAlgTool, CaloClusterGPUProcessor>, public CaloGPUTimed, public CaloGPUCUDAInitialization
38{
39 public:
40
41 TopoAutomatonClustering(const std::string & type, const std::string & name, const IInterface * parent);
42
43 virtual StatusCode initialize() override
44 {
46 }
47
48 virtual StatusCode initialize_non_CUDA() override;
49
50 virtual StatusCode initialize_CUDA() override;
51
52 virtual StatusCode execute (const EventContext & ctx,
53 const CaloRecGPU::ConstantDataHolder & constant_data,
54 CaloRecGPU::EventDataHolder & event_data,
55 void * temporary_buffer) const override;
56
57 virtual StatusCode finalize() override;
58
59 virtual ~TopoAutomatonClustering() = default;
60
61 private:
62
72 Gaudi::Property<std::vector<std::string>> m_caloNames {this, "CalorimeterNames", {}, "Name(s) of Calorimeters to use for clustering"};
73
84 Gaudi::Property<std::vector<std::string>> m_samplingNames {this, "SeedSamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for seeds"};
85
102 Gaudi::Property<float> m_cellThresholdOnEorAbsEinSigma {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"};
103
113 Gaudi::Property<float> m_neighborThresholdOnEorAbsEinSigma {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"};
114
123 Gaudi::Property<float> m_seedThresholdOnEorAbsEinSigma {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"};
124
125
134 Gaudi::Property<bool> m_seedCutsInAbsE {this, "SeedCutsInAbsE", true, "Seed cuts in Abs E instead of E"};
135
142 Gaudi::Property<bool> m_neighborCutsInAbsE {this, "NeighborCutsInAbsE", true, "Neighbor (grow) cuts in Abs E instead of E"};
143
150 Gaudi::Property<bool> m_cellCutsInAbsE {this, "CellCutsInAbsE", true, "Cell (terminal) cuts in Abs E instead of E"};
151
155 Gaudi::Property<bool> m_cutCellsInTime {this, "SeedCutsInT", false, "Do seed cuts in time"};
156
159 Gaudi::Property<float> m_timeThreshold {this, "SeedThresholdOnTAbs", 12.5 * CLHEP::ns, "Time thresholds (in abs. val.)"};
160
163 Gaudi::Property<float> m_thresholdForKeeping {this, "TimeCutUpperLimit", 20., "Significance upper limit for applying time cut"};
164
165
169 Gaudi::Property<bool> m_treatL1PredictedCellsAsGood {this, "TreatL1PredictedCellsAsGood", true, "Treat bad cells with dead OTX if predicted from L1 as good"};
170
174 Gaudi::Property<bool> m_excludeCutSeedsFromClustering {this, "CutOOTseed", true, "Exclude out-of-time seeds from neighbouring and cell stage"};
175
179 Gaudi::Property<bool> m_keepSignificantCells {this, "UseTimeCutUpperLimit", false, "Do not apply time cut on cells of large significance"};
180
184 Gaudi::Property<bool> m_twoGaussianNoise{this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"};
185
186
211 Gaudi::Property<std::string> m_neighborOptionString {this, "NeighborOption", "super3D",
212 "Neighbor option to be used for cell neighborhood relations"};
213
223 Gaudi::Property<bool> m_restrictHECIWandFCalNeighbors {this, "RestrictHECIWandFCalNeighbors",
224 false, "Limit the neighbors in HEC IW and FCal2&3"};
225
233 Gaudi::Property<bool> m_restrictPSNeighbors {this, "RestrictPSNeighbors",
234 false, "Limit the neighbors in presampler Barrel and Endcap"};
235
236
241 Gaudi::Property<bool> m_xtalkEM2 {this, "XTalkEM2",
242 false, "Relax time window (if timing is used) in EM2 when xTalk is present"};
243
247 Gaudi::Property<float> m_xtalkDeltaT {this, "XTalkDeltaT",
248 15 * CLHEP::ns, "Delta T to add to upper time threshold for EM2 cells affected by xtalk."};
249
250
254
256 ServiceHandle<IGPUKernelSizeOptimizerSvc> m_kernelSizeOptimizer { this, "KernelSizeOptimizer", "GPUKernelSizeOptimizerSvc", "CUDA kernel size optimization service." };
257
258};
259
260#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
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 .