ATLAS Offline Software
Loading...
Searching...
No Matches
GPUClusterInfoAndMomentsCalculator.cxx
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
9
10
11using namespace CaloRecGPU;
12using namespace ClusterMomentsCalculator;
13
14GPUClusterInfoAndMomentsCalculator::GPUClusterInfoAndMomentsCalculator(const std::string & type, const std::string & name, const IInterface * parent):
15 base_class(type, name, parent),
16 CaloGPUTimed(this)
17{
18}
19
21{
22 m_options.allocate();
23
24 m_options.m_options->use_abs_energy = m_absOpt;
25 m_options.m_options->use_two_gaussian_noise = m_twoGaussianNoise;
26 m_options.m_options->skip_invalid_clusters = m_skipInvalidClusters;
27 m_options.m_options->min_LAr_quality = m_minBadLArQuality;
28 m_options.m_options->max_axis_angle = m_maxAxisAngle;
29 m_options.m_options->eta_inner_wheel = m_etaInnerWheel;
30 m_options.m_options->min_l_longitudinal = m_minLLongitudinal;
31 m_options.m_options->min_r_lateral = m_minRLateral;
32
33
34 ATH_CHECK( m_kernelSizeOptimizer.retrieve() );
35 ATH_CHECK( m_streamTool.retrieve() );
36
37 return StatusCode::SUCCESS;
38}
39
41{
42 m_options.sendToGPU();
44
45 return StatusCode::SUCCESS;
46}
47
48StatusCode GPUClusterInfoAndMomentsCalculator::execute(const EventContext & ctx, const ConstantDataHolder & constant_data,
49 EventDataHolder & event_data, void * /*temporary_buffer*/) const
50{
51 size_t times[num_time_measurements];
52
53 calculateClusterPropertiesAndMoments(event_data, constant_data, m_options, *(m_kernelSizeOptimizer.get()), m_streamTool->stream(ctx), times, m_measureTimes);
54
56 {
57 record_times(ctx.evt(),
58 times[ 0],
59 times[ 1],
60 times[ 2],
61 times[ 3],
62 times[ 4],
63 times[ 5],
64 times[ 6],
65 times[ 7],
66 times[ 8],
67 times[ 9],
68 times[10]
69 );
70 }
71
72 return StatusCode::SUCCESS;
73}
74
76{
78 {
79 print_times("Isolation_Clusters Isolation_Cells Zeroth_Clusters "
80 "First_Cells First_Clusters Second_Cells Shower_Axis Second_Clusters "
81 "Third_Cells Third_Clusters Finalize_Clusters", num_time_measurements);
82 }
83 return StatusCode::SUCCESS;
84}
#define ATH_CHECK
Evaluate an expression and check for errors.
Gaudi::Property< bool > m_measureTimes
If true, times are recorded to the file given by m_timeFileName.
CaloGPUTimed(T *ptr)
void print_times(const std::string &header, const size_t time_size) const
void record_times(const size_t event_num, const std::vector< size_t > &times) const
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< double > m_etaInnerWheel
Transition from outer to inner wheel in EME2.
Gaudi::Property< double > m_minBadLArQuality
the minimal cell quality in the LAr for declaring a cell bad
ToolHandle< AthCUDA::IStreamTool > m_streamTool
Tool providing the CUDA stream to use.
Gaudi::Property< double > m_maxAxisAngle
the maximal allowed deviation from the IP-to-ClusterCenter-axis.
ClusterMomentsCalculator::CMCOptionsHolder m_options
Options for the algorithm, held in a GPU-friendly way.
Gaudi::Property< double > m_minRLateral
the minimal in the definition of the Lateral moment
GPUClusterInfoAndMomentsCalculator(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< double > m_minLLongitudinal
the minimal in the definition of the Longitudinal moment
Gaudi::Property< bool > m_absOpt
if set to true use abs E value of cells to calculate cluster moments
Gaudi::Property< bool > m_twoGaussianNoise
if set to true use 2-gaussian noise description for TileCal
virtual StatusCode initialize_CUDA() override
Initialization that invokes CUDA functions.
ServiceHandle< IGPUKernelSizeOptimizerSvc > m_kernelSizeOptimizer
Handle to the CUDA kernel block and grid size optimization service.
Gaudi::Property< bool > m_skipInvalidClusters
If false, do the moment calculation even for invalid clusters (which may waste computation).
virtual StatusCode execute(const EventContext &ctx, const CaloRecGPU::ConstantDataHolder &constant_data, CaloRecGPU::EventDataHolder &event_data, void *temporary_buffer) const override
virtual StatusCode initialize_non_CUDA() override
Initialization that does not invoke CUDA functions.
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration.
void register_kernels(IGPUKernelSizeOptimizer &optimizer)
void calculateClusterPropertiesAndMoments(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const CMCOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream, size_t(&times)[num_time_measurements], const bool synchronize=false)