ATLAS Offline Software
CaloCell.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef CALOEVENT_CALOCELL_H
6 #define CALOEVENT_CALOCELL_H
7 
26 // Update:
27 // Jan 10 2001 HMA
28 // ordor of static/virtual/const
29 // Nov 12 2001 EDF
30 // Inherit from Navigible. Now CaloCell has a pure virtual method
31 // and can not be instantiated directly.
32 // June 13 2003 DR delegate to CaloDetDescrElement
33 // Feb 25 2004 DR CaloGain data member
34 // Apr 01 2004 PL new navigation and clean-up
35 //
36 
38 
40 
41 #include "Identifier/Identifier.h"
43 #include "FourMom/P4EEtaPhiMBase.h"
44 #include <math.h>
45 #include <iostream>
46 #include <functional>
47 #include <memory>
48 
49 //class CaloDetDescrElement;
50 #include "CaloDetDescr/CaloDetDescrElement.h"
52 
53 
54 class CaloCell: virtual public P4EEtaPhiMBase,
55  virtual public INavigable4Momentum,
57 {
58 public:
59 
61  CaloCell();
62 
65  float energy,
66  float time,
67  double quality,
69 
72  float energy,
73  float time,
77 
78 
81  const Identifier & ID,
82  float energy,
83  float time,
84  double quality,
86 
89  const Identifier & ID,
90  float energy,
91  float time,
95 
96 
98  virtual ~CaloCell ();
99 
101  void assign (const CaloDetDescrElement* caloDDE,
102  const Identifier & ID,
103  float energy,
104  float time,
108 
110  double energy () const;
111 
115 
117  virtual double phi () const override final;
119  virtual double eta () const override final;
121  virtual double sinTh () const override final;
123  virtual double cosTh () const override final;
125  virtual double sinPhi () const override final;
127  virtual double cosPhi () const override final;
129  virtual double cotTh () const override final;
131  virtual double m () const override final;
133  virtual double e () const override final;
135  virtual double et () const override final;
136 
138 
140  float x () const;
142  float y () const;
144  float z () const;
145 
148  Identifier ID () const ;
149 
151  float time () const;
153  uint16_t quality() const;
155  uint16_t provenance() const;
157  CaloGain::CaloGain gain() const;
158 
160  const CaloDetDescrElement* caloDDE() const;
162  void setCaloDDE (const CaloDetDescrElement* caloDDE);
164  void addEnergy (float energy);
166  void addTime (float delta);
168  void setProvenance (uint16_t prov);
172  void setQuality (uint16_t quality);
174  void setQuality (double quality);
175 
179 
180  virtual bool badcell() const;
182  virtual void setEnergy (float energy);
184  virtual void scaleEnergy (float scale);
186  virtual void setTime (float time);
188 
190  virtual void set4Mom (const I4Momentum * const theI4Mom ) override final;
191 
193  virtual void set4Mom (const I4Momentum & theI4Mom) override final;
194 
196  virtual void set4Mom (const CLHEP::HepLorentzVector & theHlv ) override final;
197 
198 
200  virtual std::unique_ptr<CaloCell> clone() const;
201 
203  void set (const CaloDetDescrElement* caloDDE,
204  const Identifier& ID);
205 
207  void set (float energy,
208  float time,
212 
213 
215  void set (float energy,
216  float time,
217  double quality,
219 
220 
221 protected:
222 
224  float m_energy ;
226  float m_time ;
227 
228  // Reflex doesn't handle unions completely correctly.
229  // If you have a union as a data member, it will print a warning
230  // at runtime. So, hide the union from reflex. (Only m_quality is used
231  // in inlined code.)
233 #ifdef __REFLEX__
234  int m_quality ;
235 # define m_qualProv ((uint16_t*)&m_quality)
236 # define m_tileQual ((uint8_t*)&m_quality)
237 #else
238  union {
239  int m_quality = 0 ;
242  };
243 #endif
244 
251 
252 };
253 
254 
255 // inlines
256 
258  :
259  m_energy(0),
260  m_time(0),
261  m_quality(0),
262  m_gain(CaloGain::UNKNOWNGAIN),
263  m_caloDDE(0)
264 {}
265 
266 
267 #ifndef __REFLEX__
268 inline
270  const Identifier & ID,
271  float energy,
272  float time,
274  uint16_t provenance,
276 {
277  m_energy = energy;
278  m_time = time;
279  m_ID = ID;
280  m_gain = gain;
281  m_caloDDE = caloDDE;
282  m_qualProv[0]=quality;
284 }
285 #endif
286 
287 
288 
289 inline Identifier CaloCell::ID() const {
290  return m_ID;
291 }
292 
293 
300  std::size_t operator() (const CaloCell* p) const
301  {
302  return p->ID().get_identifier32().get_compact();
303  }
304 };
305 
306 
307 // Make this the default hash function for NavigationToken.
308 inline
309 std::size_t navigationHash (const CaloCell* p)
310 {
311  return p->ID().get_identifier32().get_compact();
312 }
313 
314 inline
316  return m_caloDDE;
317 }
318 
319 
320 inline
321 double CaloCell::energy() const
322 {
323  return m_energy;
324 }
325 
326 inline
327 double CaloCell::e() const
328 {
329  return m_energy;
330 }
331 
332 
333 inline
334 double CaloCell::m() const
335 {
336  // zero mass by convention
337  return 0.;
338 }
339 
340 
341 inline
343 {
344  return m_qualProv[0];
345 }
346 
347 inline
349 {
350  // cppcheck-suppress objectIndex
351  return m_qualProv[1];
352 }
353 
354 inline
356 {
357  return m_gain;
358 }
359 
360 
361 inline
362 float CaloCell::time() const
363 {
364  return m_time;
365 }
366 
367 
368 inline
369 double CaloCell::phi() const
370 {
371  return m_caloDDE->phi();
372 }
373 
374 
375 inline
376 double CaloCell::eta() const
377 {
378  return m_caloDDE->eta();
379 }
380 
381 
382 inline
383 double CaloCell::sinTh() const
384 {
385  return m_caloDDE->sinTh();
386 }
387 
388 
389 inline
390 double CaloCell::cosTh() const
391 {
392  return m_caloDDE->cosTh();
393 }
394 
395 
396 inline
397 double CaloCell::cotTh() const
398 {
399  return m_caloDDE->cotTh();
400 }
401 
402 
403 inline
404 double CaloCell::sinPhi() const
405 {
406  return m_caloDDE->sinPhi();
407 }
408 
409 
410 inline
411 double CaloCell::cosPhi() const
412 {
413  return m_caloDDE->cosPhi();
414 }
415 
416 inline double
418 {
419  return this->e() * this->sinTh();
420 }
421 
422 inline
423 float CaloCell::x() const
424 {
425  return m_caloDDE->x();
426 }
427 
428 
429 inline
430 float CaloCell::y() const
431 {
432  return m_caloDDE->y();
433 }
434 
435 
436 inline
437 float CaloCell::z() const
438 {
439  return m_caloDDE->z();
440 }
441 
442 inline
444  m_energy += energy;
445 }
446 
447 inline
448 void CaloCell::addTime (float delta)
449 {
450  m_time += delta;
451 }
452 
453 inline
455 {
456  m_qualProv[0] = quality;
457 }
458 
459 inline
461 {
462  m_quality = (int)(quality);
463 }
464 
465 inline
467 {
468  m_energy = energy ;
469 }
470 
471 inline
473 {
474  m_energy *= scale ;
475 }
476 
477 inline
479 {
480  m_time = time;
481 }
482 
483 inline
485 {
486  // cppcheck-suppress objectIndex
487  m_qualProv[1] = prov;
488 }
489 
490 inline
492 {
493  m_gain = gain;
494 }
495 
496 inline
498  m_caloDDE = caloDDE;
499  if (m_caloDDE) {
500  m_ID = m_caloDDE->identify();
501  }
502 }
503 
504 inline
505 void CaloCell::set(const CaloDetDescrElement* caloDDE,
506  const Identifier& ID) {
507  m_ID = ID;
508  m_caloDDE = caloDDE;
509 }
510 
511 #endif
512 
513 
CaloDetDescrElement::cosPhi
float cosPhi() const
for fast px py pz computation
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:391
navigationHash
std::size_t navigationHash(const CaloCell *p)
Definition: CaloCell.h:309
CaloCell::assign
void assign(const CaloDetDescrElement *caloDDE, const Identifier &ID, float energy, float time, uint16_t quality, uint16_t provenance, CaloGain::CaloGain gain)
For initializing a cell we get from a DataPool.
Definition: CaloCell.h:269
I4Momentum
Definition: I4Momentum.h:31
CaloCell::setCaloDDE
void setCaloDDE(const CaloDetDescrElement *caloDDE)
set pointer to CaloDetDescrElement
Definition: CaloCell.h:497
CaloCell::m_tileQual
uint8_t m_tileQual[4]
Definition: CaloCell.h:241
P4EEtaPhiMBase.h
CaloCell::cotTh
virtual double cotTh() const override final
get cottan(theta)
Definition: CaloCell.h:397
CaloCell::phi
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition: CaloCell.h:369
CaloDetDescrElement::cotTh
float cotTh() const
for fast px py pz computation
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:387
CaloCell::set
void set(const CaloDetDescrElement *caloDDE, const Identifier &ID)
Fast method to change the identity of a cell.
Definition: CaloCell.h:505
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:558
CaloDetDescrElement::y
float y() const
cell y
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:365
INavigable4Momentum.h
CaloCell::y
float y() const
get y (through CaloDetDescrElement)
Definition: CaloCell.h:430
CaloCell::set4Mom
virtual void set4Mom(const I4Momentum *const theI4Mom) override final
set 4Momentum (will throw exception since cannot be implemented)
Definition: CaloCell.cxx:115
CaloCell::setTime
virtual void setTime(float time)
set time
Definition: CaloCell.h:478
CaloGain::UNKNOWNGAIN
@ UNKNOWNGAIN
Definition: CaloGain.h:20
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
NavigableTerminalNode
Dummy type needed fro specialized implementation.
Definition: NavigableTerminalNode.h:19
CaloCell::e
virtual double e() const override final
get energy (data member) (synonym to method energy()
Definition: CaloCell.h:327
CaloCell::addTime
void addTime(float delta)
add time
Definition: CaloCell.h:448
CaloCellIDFcn
A functional to get the ID from a CaloCell pointer.
Definition: CaloCell.h:299
CaloCell::provenance
uint16_t provenance() const
get provenance (data member)
Definition: CaloCell.h:348
CaloCell::setEnergy
virtual void setEnergy(float energy)
set energy
Definition: CaloCell.h:466
CaloCell::time
float time() const
get time (data member)
Definition: CaloCell.h:362
CaloCell::clone
virtual std::unique_ptr< CaloCell > clone() const
clone a CaloCell
Definition: CaloCell.cxx:134
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
CaloGain
Definition: CaloGain.h:10
CaloCell::energy
double energy() const
get energy (data member)
Definition: CaloCell.h:321
CaloGain::INVALIDGAIN
@ INVALIDGAIN
Definition: CaloGain.h:18
GeoPrimitives.h
CaloCell::cosPhi
virtual double cosPhi() const override final
get cos(phi)
Definition: CaloCell.h:411
CaloCell::m_quality
int m_quality
Definition: CaloCell.h:239
CaloDetDescrElement::identify
Identifier identify() const override final
cell identifier
Definition: CaloDetDescrElement.cxx:63
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
CaloCell::CaloCell
CaloCell()
default constructor (should not be used, only there for persistency reason)
Definition: CaloCell.h:257
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
CaloCell::setQuality
void setQuality(uint16_t quality)
set quality
Definition: CaloCell.h:454
CaloCell::caloDDE
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition: CaloCell.h:315
CaloCell::m_qualProv
uint16_t m_qualProv[2]
Definition: CaloCell.h:240
CaloCell::m_gain
CaloGain::CaloGain m_gain
gain
Definition: CaloCell.h:247
CaloCell::m_energy
float m_energy
energy (in MeV)
Definition: CaloCell.h:224
CaloCell::badcell
virtual bool badcell() const
check is cell is dead
Definition: CaloCell.cxx:144
CaloCell::et
virtual double et() const override final
get et
Definition: CaloCell.h:417
CaloCell::setGain
void setGain(CaloGain::CaloGain gain=CaloGain::INVALIDGAIN)
set gain
Definition: CaloCell.h:491
CaloCell::setProvenance
void setProvenance(uint16_t prov)
set Provenance
Definition: CaloCell.h:484
CaloCell::quality
uint16_t quality() const
get quality (data member)
Definition: CaloCell.h:342
CaloCell::~CaloCell
virtual ~CaloCell()
default destructor
Definition: CaloCell.cxx:13
CaloCell::scaleEnergy
virtual void scaleEnergy(float scale)
scale energy
Definition: CaloCell.h:472
NavigableTerminalNode.h
CaloCell::gain
CaloGain::CaloGain gain() const
get gain (data member )
Definition: CaloCell.h:355
CaloCell::ID
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition: CaloCell.h:289
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
CaloDetDescrElement::x
float x() const
cell x
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:363
CaloCellIDFcn::operator()
std::size_t operator()(const CaloCell *p) const
Definition: CaloCell.h:300
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CaloCell::m_time
float m_time
time
Definition: CaloCell.h:226
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
P4EEtaPhiMBase
Definition: P4EEtaPhiMBase.h:26
CaloDetDescrElement::z
float z() const
cell z
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:367
INavigable4Momentum
Definition: INavigable4Momentum.h:21
CaloDetDescrElement::cosTh
float cosTh() const
for fast px py pz computation
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:385
CaloCell::m
virtual double m() const override final
get mass (hardcoded to be null)
Definition: CaloCell.h:334
CaloCell::z
float z() const
get z (through CaloDetDescrElement)
Definition: CaloCell.h:437
python.TrackLeptonConfig.quality
quality
Definition: TrackLeptonConfig.py:16
CaloCell::x
float x() const
get x (through CaloDetDescrElement)
Definition: CaloCell.h:423
CaloDetDescrElement::eta
float eta() const
cell eta
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:344
CaloCell::cosTh
virtual double cosTh() const override final
get cos(theta) (derived from sinTh)
Definition: CaloCell.h:390
CaloDetDescrElement::phi
float phi() const
cell phi
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:346
CaloCell::m_caloDDE
const CaloDetDescrElement * m_caloDDE
pointer to static CaloDetDescrElement to access information that does not change from event to event
Definition: CaloCell.h:250
CaloDetDescrElement::sinTh
float sinTh() const
for algorithm working in transverse Energy
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:383
CaloCell::addEnergy
void addEnergy(float energy)
add energy
Definition: CaloCell.h:443
CaloDetDescrElement::sinPhi
float sinPhi() const
for fast px py pz computation
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:389
CaloGain.h
CaloCell::sinPhi
virtual double sinPhi() const override final
get sin(phi)
Definition: CaloCell.h:404
CaloCell::m_ID
Identifier m_ID
offline identifier
Definition: CaloCell.h:245
CaloCell::sinTh
virtual double sinTh() const override final
get sin(theta) (through CaloDetDescrElement)
Definition: CaloCell.h:383
CaloCell::eta
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition: CaloCell.h:376
Identifier
Definition: IdentifierFieldParser.cxx:14