ATLAS Offline Software
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 
11 using namespace CaloRecGPU;
12 using namespace ClusterMomentsCalculator;
13 
14 GPUClusterInfoAndMomentsCalculator::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 {
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 
36  return StatusCode::SUCCESS;
37 }
38 
40 {
43 
44  return StatusCode::SUCCESS;
45 }
46 
47 StatusCode GPUClusterInfoAndMomentsCalculator::execute(const EventContext & ctx, const ConstantDataHolder & constant_data,
48  EventDataHolder & event_data, void * /*temporary_buffer*/) const
49 {
51 
53 
54  if (m_measureTimes)
55  {
56  record_times(ctx.evt(),
57  times[ 0],
58  times[ 1],
59  times[ 2],
60  times[ 3],
61  times[ 4],
62  times[ 5],
63  times[ 6],
64  times[ 7],
65  times[ 8],
66  times[ 9],
67  times[10]
68  );
69  }
70 
71  return StatusCode::SUCCESS;
72 }
73 
75 {
76  if (m_measureTimes)
77  {
78  print_times("Isolation_Clusters Isolation_Cells Zeroth_Clusters "
79  "First_Cells First_Clusters Second_Cells Shower_Axis Second_Clusters "
80  "Third_Cells Third_Clusters Finalize_Clusters", num_time_measurements);
81  }
82  return StatusCode::SUCCESS;
83 }
84 
GPUClusterInfoAndMomentsCalculator::m_skipInvalidClusters
Gaudi::Property< bool > m_skipInvalidClusters
If false, do the moment calculation even for invalid clusters (which may waste computation).
Definition: GPUClusterInfoAndMomentsCalculator.h:108
GPUClusterInfoAndMomentsCalculator.h
GPUClusterInfoAndMomentsCalculator::initialize_non_CUDA
virtual StatusCode initialize_non_CUDA() override
Initialization that does not invoke CUDA functions.
Definition: GPUClusterInfoAndMomentsCalculator.cxx:20
GPUClusterInfoAndMomentsCalculator::finalize
virtual StatusCode finalize() override
Definition: GPUClusterInfoAndMomentsCalculator.cxx:74
ClusterMomentsCalculator::num_time_measurements
constexpr unsigned int num_time_measurements
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:801
GPUClusterInfoAndMomentsCalculator::m_options
ClusterMomentsCalculator::CMCOptionsHolder m_options
Options for the algorithm, held in a GPU-friendly way.
Definition: GPUClusterInfoAndMomentsCalculator.h:112
ClusterMomentsCalculator::CMCOptionsHolder::sendToGPU
void sendToGPU(const bool clear_CPU=false)
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ClusterMomentsCalculator
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:20
CaloGPUTimed
Base class to provide some basic common infrastructure for timing measurements...
Definition: CaloGPUTimed.h:25
ClusterMomentsCalculator::calculateClusterPropertiesAndMoments
void calculateClusterPropertiesAndMoments(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const CMCOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, size_t(&times)[num_time_measurements], const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream={}, const bool defer_instead_of_oversize=false)
GPUClusterInfoAndMomentsCalculator::GPUClusterInfoAndMomentsCalculator
GPUClusterInfoAndMomentsCalculator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: GPUClusterInfoAndMomentsCalculator.cxx:14
ClusterMomentsCalculator::CMCOptionsHolder::allocate
void allocate()
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:791
CaloRecGPU::EventDataHolder
Definition: DataHolders.h:35
GPUClusterInfoAndMomentsCalculator::initialize_CUDA
virtual StatusCode initialize_CUDA() override
Initialization that invokes CUDA functions.
Definition: GPUClusterInfoAndMomentsCalculator.cxx:39
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
GPUClusterInfoAndMomentsCalculator::m_twoGaussianNoise
Gaudi::Property< bool > m_twoGaussianNoise
if set to true use 2-gaussian noise description for TileCal
Definition: GPUClusterInfoAndMomentsCalculator.h:103
CaloGPUTimed::print_times
void print_times(const std::string &header, const size_t time_size) const
Definition: CaloGPUTimed.h:143
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
GPUClusterInfoAndMomentsCalculatorImpl.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
GPUClusterInfoAndMomentsCalculator::m_maxAxisAngle
Gaudi::Property< double > m_maxAxisAngle
the maximal allowed deviation from the IP-to-ClusterCenter-axis.
Definition: GPUClusterInfoAndMomentsCalculator.h:63
CaloGPUTimed::record_times
void record_times(const size_t event_num, const std::vector< size_t > &times) const
Definition: CaloGPUTimed.h:86
CaloGPUTimed::m_measureTimes
Gaudi::Property< bool > m_measureTimes
If true, times are recorded to the file given by m_timeFileName.
Definition: CaloGPUTimed.h:46
GPUClusterInfoAndMomentsCalculator::m_minBadLArQuality
Gaudi::Property< double > m_minBadLArQuality
the minimal cell quality in the LAr for declaring a cell bad
Definition: GPUClusterInfoAndMomentsCalculator.h:89
GPUClusterInfoAndMomentsCalculator::m_kernelSizeOptimizer
ServiceHandle< IGPUKernelSizeOptimizerSvc > m_kernelSizeOptimizer
Handle to the CUDA kernel block and grid size optimization service.
Definition: GPUClusterInfoAndMomentsCalculator.h:115
GPUClusterInfoAndMomentsCalculator::m_absOpt
Gaudi::Property< bool > m_absOpt
if set to true use abs E value of cells to calculate cluster moments
Definition: GPUClusterInfoAndMomentsCalculator.h:94
BasicClusterInfoCalculator::register_kernels
void register_kernels(IGPUKernelSizeOptimizer &optimizer)
CaloRecGPU::ConstantDataHolder
Definition: DataHolders.h:19
GPUClusterInfoAndMomentsCalculator::m_minLLongitudinal
Gaudi::Property< double > m_minLLongitudinal
the minimal in the definition of the Longitudinal moment
Definition: GPUClusterInfoAndMomentsCalculator.h:81
GPUClusterInfoAndMomentsCalculator::m_minRLateral
Gaudi::Property< double > m_minRLateral
the minimal in the definition of the Lateral moment
Definition: GPUClusterInfoAndMomentsCalculator.h:71
CaloRecGPU
Definition: BaseDefinitions.h:11
GPUClusterInfoAndMomentsCalculator::execute
virtual StatusCode execute(const EventContext &ctx, const CaloRecGPU::ConstantDataHolder &constant_data, CaloRecGPU::EventDataHolder &event_data, void *temporary_buffer) const override
Definition: GPUClusterInfoAndMomentsCalculator.cxx:47
plot_times.times
def times(fn)
Definition: plot_times.py:10
ClusterMomentsCalculator::CMCOptionsHolder::m_options
CaloRecGPU::Helpers::CPU_object< ClusterMomentCalculationOptions > m_options
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:787
GPUClusterInfoAndMomentsCalculator::m_etaInnerWheel
Gaudi::Property< double > m_etaInnerWheel
Transition from outer to inner wheel in EME2.
Definition: GPUClusterInfoAndMomentsCalculator.h:98