ATLAS Offline Software
BasicConstantGPUDataExporter.cxx
Go to the documentation of this file.
1 //
2 // Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 //
4 // Dear emacs, this is -*- c++ -*-
5 //
6 
8 
10 
12 
15 #include "StoreGate/DataHandle.h"
17 
18 #include "boost/chrono/chrono.hpp"
19 #include "boost/chrono/thread_clock.hpp"
20 
21 #include <algorithm>
22 
23 using namespace CaloRecGPU;
24 
25 BasicConstantGPUDataExporter::BasicConstantGPUDataExporter(const std::string & type, const std::string & name, const IInterface * parent):
27  CaloGPUTimed(this),
28  m_hasBeenInitialized(false)
29 {
30  declareInterface<ICaloClusterGPUConstantTransformer> (this);
31 }
32 
34 {
36  {
37  ATH_MSG_INFO("Initializing data tool again...");
38  return StatusCode::SUCCESS;
39  }
40 
42 
44 
45  m_hasBeenInitialized = true;
46 
47  return StatusCode::SUCCESS;
48 }
49 
51 {
52  ATH_MSG_ERROR("BasicConstantGPUDataExporter (" << this->name() << ") must be used with the "
53  "GPU data preparation happening on the first event.");
54 
55  return StatusCode::FAILURE;
56 }
57 
58 StatusCode BasicConstantGPUDataExporter::convert(const EventContext & ctx, ConstantDataHolder & cd, const bool keep_CPU_info) const
59 {
60  using clock_type = boost::chrono::thread_clock;
61  auto time_cast = [](const auto & before, const auto & after)
62  {
63  return boost::chrono::duration_cast<boost::chrono::microseconds>(after - before).count();
64  };
65 
66  auto start = clock_type::now();
67 
69  const CaloDetDescrManager * calo_dd_man = *caloMgrHandle;
70 
71  cd.m_geometry.allocate();
72 
73  const CaloCell_ID * calo_id = calo_dd_man->getCaloCell_ID();
74 
75  float min_eta_pos[NumSamplings], max_eta_pos[NumSamplings],
76  min_eta_neg[NumSamplings], max_eta_neg[NumSamplings],
77  min_phi_pos[NumSamplings], max_phi_pos[NumSamplings],
78  min_phi_neg[NumSamplings], max_phi_neg[NumSamplings],
79  min_deta [NumSamplings], min_dphi [NumSamplings];
80 
81  for (int i = 0; i < NumSamplings; ++i)
82  {
83  min_eta_pos[i] = std::numeric_limits<float>::max();
84  max_eta_pos[i] = std::numeric_limits<float>::lowest();
85  min_eta_neg[i] = std::numeric_limits<float>::max();
86  max_eta_neg[i] = std::numeric_limits<float>::lowest();
87  min_phi_pos[i] = std::numeric_limits<float>::max();
88  max_phi_pos[i] = std::numeric_limits<float>::lowest();
89  min_phi_neg[i] = std::numeric_limits<float>::max();
90  max_phi_neg[i] = std::numeric_limits<float>::lowest();
91  min_deta [i] = std::numeric_limits<float>::max();
92  min_dphi [i] = std::numeric_limits<float>::max();
93  }
94 
95  for (int cell = 0; cell < NCaloCells; ++cell)
96  {
97  const CaloDetDescrElement * caloElement = calo_dd_man->get_element((IdentifierHash) cell);
98 
99  const Identifier cell_identifier = calo_id->cell_id((IdentifierHash) cell);
100 
101  const int sampling = calo_id->calo_sample(cell_identifier);
102  const int intra_calo_sampling = calo_id->sampling(cell_identifier);
103  const int subcalo = caloElement->getSubCalo();
104  const int region = calo_id->region(cell_identifier);
105 
106  const bool is_PS = (subcalo == CaloCell_ID::LAREM && intra_calo_sampling == 0);
107 
108  const bool is_HECIW_or_FCAL = ( (subcalo == CaloCell_ID::LARHEC && region == 1 ) ||
109  (subcalo == CaloCell_ID::LARFCAL && intra_calo_sampling > 1 ) );
110 
111  cd.m_geometry->otherCellInfo[cell] = OtherCellInfo(sampling,
112  ConstantEnumConversion::from_intra_calorimeter_sampling_enum(intra_calo_sampling),
113  ConstantEnumConversion::from_subcalo_enum(subcalo),
114  ConstantEnumConversion::from_region_enum(region),
115  is_PS,
116  is_HECIW_or_FCAL);
117  cd.m_geometry->x[cell] = caloElement->x();
118  cd.m_geometry->y[cell] = caloElement->y();
119  cd.m_geometry->z[cell] = caloElement->z();
120  cd.m_geometry->r[cell] = caloElement->r();
121  cd.m_geometry->eta[cell] = caloElement->eta();
122  cd.m_geometry->phi[cell] = caloElement->phi();
123 
124  cd.m_geometry->dx[cell] = caloElement->dx();
125  cd.m_geometry->dy[cell] = caloElement->dy();
126  cd.m_geometry->dz[cell] = caloElement->dz();
127  cd.m_geometry->dr[cell] = caloElement->dr();
128  cd.m_geometry->deta[cell] = caloElement->deta();
129  cd.m_geometry->dphi[cell] = caloElement->dphi();
130 
131  cd.m_geometry->volume[cell] = caloElement->volume();
132  cd.m_geometry->neighbours.offsets[cell] = 0;
133 
134  if (caloElement->eta() >= 0)
135  {
136  min_eta_pos[sampling] = std::min(min_eta_pos[sampling], caloElement->eta() - caloElement->deta() / 2);
137  min_phi_pos[sampling] = std::min(min_phi_pos[sampling], caloElement->phi() - caloElement->dphi() / 2);
138  max_eta_pos[sampling] = std::max(max_eta_pos[sampling], caloElement->eta() + caloElement->deta() / 2);
139  max_phi_pos[sampling] = std::max(max_phi_pos[sampling], caloElement->phi() + caloElement->dphi() / 2);
140  }
141  else
142  {
143  min_eta_neg[sampling] = std::min(min_eta_neg[sampling], caloElement->eta() - caloElement->deta() / 2);
144  min_phi_neg[sampling] = std::min(min_phi_neg[sampling], caloElement->phi() - caloElement->dphi() / 2);
145  max_eta_neg[sampling] = std::max(max_eta_neg[sampling], caloElement->eta() + caloElement->deta() / 2);
146  max_phi_neg[sampling] = std::max(max_phi_neg[sampling], caloElement->phi() + caloElement->dphi() / 2);
147  }
148  min_deta[sampling] = std::min(min_deta[sampling], caloElement->deta());
149  min_dphi[sampling] = std::min(min_dphi[sampling], caloElement->dphi());
150 
151  }
152 
153  for (int i = 0; i < NumSamplings; ++i)
154  {
155  constexpr float corrective_factor = 0.99f;
156  cd.m_geometry->etaPhiToCell.initialize(i, min_eta_neg[i], min_phi_neg[i], max_eta_neg[i], max_phi_neg[i],
157  min_eta_pos[i], min_phi_pos[i], max_eta_pos[i], max_phi_pos[i],
158  min_deta[i]*corrective_factor, min_dphi[i]*corrective_factor);
159  }
160 
161  cd.m_geometry->fill_eta_phi_map();
162 
163  std::vector<IdentifierHash> neighbour_vector, full_neighs, prev_neighs;
164 
165  for (int cell = 0; cell < NCaloCells; ++cell)
166  {
167  for (int neigh_bit_set = 0; neigh_bit_set < NumNeighOptions; ++neigh_bit_set)
168  {
169  const unsigned int curr_neigh_opt = (1U << neigh_bit_set);
170 
171  if (curr_neigh_opt == LArNeighbours::corners2D || curr_neigh_opt == LArNeighbours::corners3D)
172  //Scanning the ATLAS codebase, neighbour handling has special cases
173  //for all2D (LarFCAL_Base_ID.cxx, LArMiniFCAL_ID.cxx, Tile_Base_ID.cxx)
174  //and all3DwithCorners (Tile_Base_ID.cxx), which include
175  //neighbours not returned when just the constituent bits are set separately.
176  //As an imperfect workaround, we stuff them in the immediately previous option
177  //(corners, for both 2D and 3D).
178  {
179  if (curr_neigh_opt == LArNeighbours::corners2D)
180  {
181  calo_id->get_neighbours((IdentifierHash) cell,
183  full_neighs);
184  }
185  else /*if (curr_neigh_opt == LArNeighbours::corners3D)*/
186  {
187  calo_id->get_neighbours((IdentifierHash) cell,
189  prev_neighs);
190  calo_id->get_neighbours((IdentifierHash) cell,
192  neighbour_vector);
193  //We will exclude the cells that could come from later options
194  //(it seems, from Tile_Base_ID.cxx, all3DwithCorners will give more than super3D),
195  //which... might make some sense, but seems unexpected.
196 
197 
198  std::sort(neighbour_vector.begin(), neighbour_vector.end());
199  std::sort(prev_neighs.begin(), prev_neighs.end());
200 
201  full_neighs.clear();
202 
203  std::set_difference( prev_neighs.begin(), prev_neighs.end(),
204  neighbour_vector.begin(), neighbour_vector.end(),
205  std::back_inserter(full_neighs) );
206 
207  }
208 
209  prev_neighs.resize(cd.m_geometry->neighbours.get_total_number_of_neighbours(cell));
210  //We want to add just the neighbours that are not part of this.
211 
212  for (size_t neigh = 0; neigh < prev_neighs.size(); ++neigh)
213  {
214  prev_neighs[neigh] = cd.m_geometry->neighbours.get_neighbour(cell, neigh);
215  }
216 
217  std::sort(full_neighs.begin(), full_neighs.end());
218  std::sort(prev_neighs.begin(), prev_neighs.end());
219 
220  neighbour_vector.clear();
221 
222  std::set_difference( full_neighs.begin(), full_neighs.end(),
223  prev_neighs.begin(), prev_neighs.end(),
224  std::back_inserter(neighbour_vector) );
225  }
226  else
227  {
228  calo_id->get_neighbours((IdentifierHash) cell, (LArNeighbours::neighbourOption) curr_neigh_opt, neighbour_vector);
229  }
230 
231  std::sort(neighbour_vector.begin(), neighbour_vector.end());
232 
233  const int neighs_start = cd.m_geometry->neighbours.get_total_number_of_neighbours(cell);
234 
235  for (size_t neigh_num = 0; neigh_num < neighbour_vector.size(); ++neigh_num)
236  {
237  cd.m_geometry->neighbours.set_neighbour(cell, neighs_start + neigh_num, neighbour_vector[neigh_num]);
238  }
239 
240  cd.m_geometry->neighbours.offsets[cell] += NeighOffset::offset_delta(neigh_bit_set) * neighbour_vector.size();
241 
242  }
243  }
244 
245 #if CALORECGPU_ADD_FULL_PAIRS_LIST_TO_CONSTANT_INFORMATION
246 
247 //Note: the commented out code is used to output the hard-coded numbers
248 //in NeighPairsArr. For the time being, it should remain here until
249 //a more definitive solution for the geometry is found.
250 
251  {
252  int num_pairs = 0;
253 
254  auto add_neighbours = [&](const int cell, const unsigned int curr_neigh_opt)
255  {
256  int neighbours[NMaxNeighbours];
257 
258  const int num_neighs = cd.m_geometry->neighbours.get_neighbours(curr_neigh_opt, cell, neighbours);
259 
260  for (int neigh = 0; neigh < num_neighs; ++neigh)
261  {
262  cd.m_geometry->neighPairs.cell_A[num_pairs] = cell;
263  cd.m_geometry->neighPairs.cell_B[num_pairs] = neighbours[neigh];
264  ++num_pairs;
265  }
266  };
267 
268  for (int neigh_bit_set = 0; neigh_bit_set < NumNeighOptions; ++neigh_bit_set)
269  {
270  const unsigned int curr_neigh_opt = (1U << neigh_bit_set);
271 
272  for (int cell = 0; cell < NCaloCells; ++cell)
273  {
274  if (cd.m_geometry->is_PS(cell) || cd.m_geometry->is_HECIW_or_FCal(cell))
275  {
276  continue;
277  }
278 
279  add_neighbours(cell, curr_neigh_opt);
280  }
281 
282  //const int PS_start = num_pairs;
283 
284  for (int cell = 0; cell < NCaloCells; ++cell)
285  {
286  if (!cd.m_geometry->is_PS(cell))
287  {
288  continue;
289  }
290 
291  add_neighbours(cell, curr_neigh_opt);
292  }
293 
294  //const int HECIW_FCal_start = num_pairs;
295 
296  for (int cell = 0; cell < NCaloCells; ++cell)
297  {
298  if (!cd.m_geometry->is_HECIW_or_FCal(cell))
299  {
300  continue;
301  }
302 
303  add_neighbours(cell, curr_neigh_opt);
304  }
305 
306  //std::cout << neigh_bit_set << " " << num_pairs << " " << PS_start << " " << HECIW_FCal_start << std::endl;
307  }
308  }
309 #endif
310 
311  auto after_geo = clock_type::now();
312 
313  /*
314  //Useful output for debugging and studying regularities in calorimeter geometry...
315 
316  std::cout << "ID\tCaloSample\tSampling\tRegion\tSubCalo";
317  for (int j = 0; j < NumNeighOptions; ++j)
318  {
319  std::cout << "\tn_" << j;
320  }
321  std::cout << "\tn_total\tOffset" << std::endl;
322 
323  for (int cell = 0; cell < NCaloCells; ++cell)
324  {
325 
326  const CaloDetDescrElement * caloElement = calo_dd_man->get_element((IdentifierHash) cell);
327  std::cout << cell << "\t"
328  << (int) calo_id->calo_sample(calo_id->cell_id((IdentifierHash) cell)) << "\t"
329  << (int) calo_id->sampling(calo_id->cell_id((IdentifierHash) cell)) << "\t"
330  << (int) calo_id->region(calo_id->cell_id((IdentifierHash) cell)) << "\t"
331  << (int) caloElement->getSubCalo();
332 
333  const NeighOffset n_off = cd.m_geometry->neighbours.offsets[cell];
334 
335  for (int j = 0; j < NumNeighOptions; ++j)
336  {
337  std::cout << "\t" << n_off.get_num_cells(j);
338  }
339 
340  std::cout << "\t" << n_off.get_total_number() << "\t" << n_off << std::endl;
341  }
342  // */
343 
344  SG::ReadCondHandle<CaloNoise> noise_handle(m_noiseCDOKey, ctx);
345  const CaloNoise * noise_tool = *noise_handle;
346 
347  IdentifierHash t_start, t_end;
348  calo_id->calo_cell_hash_range(CaloCell_ID::TILE, t_start, t_end);
349 
350  if (t_start != TileCellStart)
351  {
352  ATH_MSG_WARNING("Tile start (" << t_start << ") differs from assumed constant value (" << TileCellStart << ")!");
353  }
354  if (t_end != TileCellAfterEnd)
355  {
356  ATH_MSG_WARNING("Tile end (" << t_end << ") differs from assumed constant value (" << TileCellAfterEnd << ")!");
357  }
358 
359  const CaloCondBlobFlt * blob = noise_tool->getTileBlob();
360 
361  cd.m_cell_noise.allocate();
362 
363  if (!blob)
364  {
365  cd.m_cell_noise->noise_properties = CellNoiseProperties::invalid_value();
366  }
367  else
368  {
369  cd.m_cell_noise->noise_properties = CellNoiseProperties(blob->getObjVersion(), noise_tool->getNoiseType());
370  }
371 
372  cd.m_cell_noise->luminosity = noise_tool->getLumi();
373 
374  for (int cell = 0; cell < int(t_start); ++cell)
375  {
376  for (int gain_state = 0; gain_state < CaloRecGPU::NumGainStates; ++gain_state)
377  {
378  cd.m_cell_noise->noise[cell][gain_state] = noise_tool->larStorage()[(gain_state > 2 ? 0 : gain_state)][cell];
379  }
380  }
381  for (int cell = t_start; cell < int(t_end); ++cell)
382  {
383  for (int gain_state = 0; gain_state < CaloRecGPU::NumGainStates; ++gain_state)
384  {
385  cd.m_cell_noise->noise[cell][gain_state] = noise_tool->tileStorage()[gain_state][cell - t_start];
386  cd.m_cell_noise->double_gaussian_constants[0][cell - t_start][gain_state] = blob->getData(cell - t_start, gain_state, 2);
387  cd.m_cell_noise->double_gaussian_constants[1][cell - t_start][gain_state] = blob->getData(cell - t_start, gain_state, 3);
388  cd.m_cell_noise->double_gaussian_constants[2][cell - t_start][gain_state] = blob->getData(cell - t_start, gain_state, 4);
389  cd.m_cell_noise->double_gaussian_constants[3][cell - t_start][gain_state] = blob->getData(cell - t_start, gain_state, 1);
390  }
391  }
392  for (int cell = t_end; cell < NCaloCells; ++cell)
393  {
394  for (int gain_state = 0; gain_state < CaloRecGPU::NumGainStates; ++gain_state)
395  {
396  cd.m_cell_noise->noise[cell][gain_state] = 0;
397  }
398  }
399 
400  auto after_noise = clock_type::now();
401 
402  cd.sendToGPU(!(m_keepCPUData || keep_CPU_info));
403 
404 
405  auto after_send = clock_type::now();
406 
407  if (m_measureTimes)
408  {
409  record_times(ctx.evt(), time_cast(start, after_geo),
410  time_cast(after_geo, after_noise),
411  time_cast(after_noise, after_send)
412  );
413  }
414 
415  return StatusCode::SUCCESS;
416 
417 }
418 
420 {
421 
422  if (m_measureTimes)
423  {
424  print_times("Geometry Geometry_Correction Noise Transfer_to_GPU", 3 /*4*/);
425  }
426  return StatusCode::SUCCESS;
427 }
BasicConstantGPUDataExporter::initialize
virtual StatusCode initialize() override
Definition: BasicConstantGPUDataExporter.cxx:33
CaloDetDescrElement::deta
float deta() const
cell deta
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:356
LArNeighbours::neighbourOption
neighbourOption
Definition: LArNeighbours.h:12
CaloCell_Base_ID::LARFCAL
@ LARFCAL
Definition: CaloCell_Base_ID.h:46
LArNeighbours::corners3D
@ corners3D
Definition: LArNeighbours.h:25
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloDetDescrElement::y
float y() const
cell y
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:365
CaloCondBlobFlt
Class for storing a number of floats (Flt) and functions on those.
Definition: CaloCondBlobFlt.h:29
BasicConstantGPUDataExporter::m_noiseCDOKey
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
Key of the CaloNoise Conditions data object.
Definition: BasicConstantGPUDataExporter.h:57
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
LArNeighbours::corners2D
@ corners2D
Definition: LArNeighbours.h:17
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloDetDescrManager_Base::get_element
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
Definition: CaloDetDescrManager.cxx:159
BasicConstantGPUDataExporter::convert
virtual StatusCode convert(CaloRecGPU::ConstantDataHolder &constant_data, const bool override_keep_CPU_info) const override
Fill the @ConstantDataHolder with the relevant information.
Definition: BasicConstantGPUDataExporter.cxx:50
CaloDetDescrElement::dr
float dr() const
cell dr
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:360
CaloNoise::getNoiseType
NOISETYPE getNoiseType() const
Definition: CaloNoise.h:87
CaloCell_Base_ID::LARHEC
@ LARHEC
Definition: CaloCell_Base_ID.h:46
BasicConstantGPUDataExporter::BasicConstantGPUDataExporter
BasicConstantGPUDataExporter(const std::string &type, const std::string &name, const IInterface *parent)
Definition: BasicConstantGPUDataExporter.cxx:25
CaloRecGPU::NumSamplings
constexpr int NumSamplings
Definition: BaseDefinitions.h:44
DataHandle.h
CaloGPUTimed
Base class to provide some basic common infrastructure for timing measurements...
Definition: CaloGPUTimed.h:25
CaloCell_ID.h
CaloDetDescrElement::getSubCalo
CaloCell_ID::SUBCALO getSubCalo() const
cell subcalo
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:433
CaloDetDescrElement::dz
float dz() const
cell dz
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:379
BasicConstantGPUDataExporter::m_hasBeenInitialized
bool m_hasBeenInitialized
Definition: BasicConstantGPUDataExporter.h:66
CaloRecGPU::TileCellAfterEnd
constexpr int TileCellAfterEnd
Definition: BaseDefinitions.h:19
python.handimod.now
now
Definition: handimod.py:675
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
LArNeighbours::all3DwithCorners
@ all3DwithCorners
Definition: LArNeighbours.h:26
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
BasicConstantGPUDataExporter::finalize
virtual StatusCode finalize() override
Definition: BasicConstantGPUDataExporter.cxx:419
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
CaloCell_Base_ID::TILE
@ TILE
Definition: CaloCell_Base_ID.h:46
CaloRecGPU::NCaloCells
constexpr int NCaloCells
Definition: BaseDefinitions.h:13
BasicConstantGPUDataExporter::m_keepCPUData
Gaudi::Property< bool > m_keepCPUData
If true, do not delete the CPU version of the GPU-friendly data representation.
Definition: BasicConstantGPUDataExporter.h:52
CaloRecGPU::NMaxNeighbours
constexpr int NMaxNeighbours
Definition: BaseDefinitions.h:12
BasicConstantGPUDataExporter::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Key for the CaloDetDescrManager in the Condition Store.
Definition: BasicConstantGPUDataExporter.h:62
LArNeighbours::super3D
@ super3D
Definition: LArNeighbours.h:29
BasicConstantGPUDataExporter.h
CaloRecGPU::OtherCellInfo
Definition: ConstantInfoDefinitions.h:125
CaloNoise
Definition: CaloNoise.h:16
CaloDetDescrElement::volume
float volume() const
cell volume
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:381
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
CaloNoise.h
errorcheck.h
Helpers for checking error return status codes and reporting errors.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloRecGPU::NumGainStates
constexpr int NumGainStates
Definition: BaseDefinitions.h:40
CaloDetDescrElement::x
float x() const
cell x
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:363
CaloNoise::tileStorage
boost::multi_array< float, 2 > & tileStorage()
Definition: CaloNoise.h:72
CaloRecGPU::NumNeighOptions
constexpr int NumNeighOptions
Definition: BaseDefinitions.h:47
CaloDetDescrElement::dphi
float dphi() const
cell dphi
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:358
CaloRecGPU::CellNoiseProperties
Definition: ConstantInfoDefinitions.h:376
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
CaloDetDescrElement::dx
float dx() const
cell dx
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:375
CaloGPUTimed::record_times
void record_times(const size_t event_num, const std::vector< size_t > &times) const
Definition: CaloGPUTimed.h:86
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CaloNoise::larStorage
boost::multi_array< float, 2 > & larStorage()
Non-const accessor to underlying storage for filling:
Definition: CaloNoise.h:71
CaloGPUTimed::m_measureTimes
Gaudi::Property< bool > m_measureTimes
If true, times are recorded to the file given by m_timeFileName.
Definition: CaloGPUTimed.h:46
CaloDetDescrElement::z
float z() const
cell z
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:367
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
CUDAFriendlyClasses.h
CaloNoise::getTileBlob
const CaloCondBlobFlt * getTileBlob() const
Definition: CaloNoise.h:83
CaloRecGPU::ConstantDataHolder
Definition: DataHolders.h:19
CaloDetDescrManager::getCaloCell_ID
const CaloCell_ID * getCaloCell_ID() const
get calo cell ID helper
Definition: CaloDetDescrManager.cxx:1590
calibdata.cd
cd
Definition: calibdata.py:51
CaloDetDescrElement::eta
float eta() const
cell eta
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:344
CaloDetDescrElement::phi
float phi() const
cell phi
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:346
CaloDetDescrElement::r
float r() const
cell r
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:348
AthAlgTool
Definition: AthAlgTool.h:26
CaloCell_Base_ID::LAREM
@ LAREM
Definition: CaloCell_Base_ID.h:46
checker_macros.h
Define macros for attributes used to control the static checker.
CaloRecGPU
Definition: BaseDefinitions.h:11
CaloDetDescrElement::dy
float dy() const
cell dy
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:377
CaloRecGPU::TileCellStart
constexpr int TileCellStart
Definition: BaseDefinitions.h:17
LArNeighbours::all2D
@ all2D
Definition: LArNeighbours.h:18
CaloCondBlobAlgs_fillNoiseFromASCII.blob
blob
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:96
CaloNoise::getLumi
float getLumi() const
Definition: CaloNoise.h:85
Identifier
Definition: IdentifierFieldParser.cxx:14