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  CaloCell(const CaloCell&) = default;
97  CaloCell(CaloCell&&) = default;
98 
99  CaloCell& operator= (const CaloCell&) = default;
100  CaloCell& operator= (CaloCell&&) = default;
101 
102 
104  virtual ~CaloCell ();
105 
107  void assign (const CaloDetDescrElement* caloDDE,
108  const Identifier & ID,
109  float energy,
110  float time,
114 
116  double energy () const;
117 
121 
123  virtual double phi () const override final;
125  virtual double eta () const override final;
127  virtual double sinTh () const override final;
129  virtual double cosTh () const override final;
131  virtual double sinPhi () const override final;
133  virtual double cosPhi () const override final;
135  virtual double cotTh () const override final;
137  virtual double m () const override final;
139  virtual double e () const override final;
141  virtual double et () const override final;
142 
144 
146  float x () const;
148  float y () const;
150  float z () const;
151 
154  Identifier ID () const ;
155 
157  float time () const;
164 
170  void addEnergy (float energy);
172  void addTime (float delta);
174  void setProvenance (uint16_t prov);
178  void setQuality (uint16_t quality);
180  void setQuality (double quality);
181 
185 
186  virtual bool badcell() const;
188  virtual void setEnergy (float energy);
190  virtual void scaleEnergy (float scale);
192  virtual void setTime (float time);
194 
196  virtual void set4Mom (const I4Momentum * const theI4Mom ) override final;
197 
199  virtual void set4Mom (const I4Momentum & theI4Mom) override final;
200 
202  virtual void set4Mom (const CLHEP::HepLorentzVector & theHlv ) override final;
203 
204 
206  virtual std::unique_ptr<CaloCell> clone() const;
207 
210  const Identifier& ID);
211 
213  void set (float energy,
214  float time,
218 
219 
221  void set (float energy,
222  float time,
223  double quality,
225 
226 
227 protected:
228 
230  float m_energy ;
232  float m_time ;
233 
234  // Reflex doesn't handle unions completely correctly.
235  // If you have a union as a data member, it will print a warning
236  // at runtime. So, hide the union from reflex. (Only m_quality is used
237  // in inlined code.)
239 #ifdef __REFLEX__
240  int m_quality ;
241 # define m_qualProv ((uint16_t*)&m_quality)
242 # define m_tileQual ((uint8_t*)&m_quality)
243 #else
244  union {
245  int m_quality = 0 ;
248  };
249 #endif
250 
257 
258 };
259 
260 
261 // inlines
262 
264  :
265  m_energy(0),
266  m_time(0),
267  m_quality(0),
268  m_gain(CaloGain::UNKNOWNGAIN),
269  m_caloDDE(0)
270 {}
271 
272 
273 #ifndef __REFLEX__
274 inline
276  const Identifier & ID,
277  float energy,
278  float time,
280  uint16_t provenance,
282 {
283  m_energy = energy;
284  m_time = time;
285  m_ID = ID;
286  m_gain = gain;
287  m_caloDDE = caloDDE;
288  m_qualProv[0]=quality;
290 }
291 #endif
292 
293 
294 
295 inline Identifier CaloCell::ID() const {
296  return m_ID;
297 }
298 
299 
306  std::size_t operator() (const CaloCell* p) const
307  {
308  return p->ID().get_identifier32().get_compact();
309  }
310 };
311 
312 
313 // Make this the default hash function for NavigationToken.
314 inline
315 std::size_t navigationHash (const CaloCell* p)
316 {
317  return p->ID().get_identifier32().get_compact();
318 }
319 
320 inline
322  return m_caloDDE;
323 }
324 
325 
326 inline
327 double CaloCell::energy() const
328 {
329  return m_energy;
330 }
331 
332 inline
333 double CaloCell::e() const
334 {
335  return m_energy;
336 }
337 
338 
339 inline
340 double CaloCell::m() const
341 {
342  // zero mass by convention
343  return 0.;
344 }
345 
346 
347 inline
349 {
350  return m_qualProv[0];
351 }
352 
353 inline
355 {
356  // cppcheck-suppress objectIndex
357  return m_qualProv[1];
358 }
359 
360 inline
362 {
363  return m_gain;
364 }
365 
366 
367 inline
368 float CaloCell::time() const
369 {
370  return m_time;
371 }
372 
373 
374 inline
375 double CaloCell::phi() const
376 {
377  return m_caloDDE->phi();
378 }
379 
380 
381 inline
382 double CaloCell::eta() const
383 {
384  return m_caloDDE->eta();
385 }
386 
387 
388 inline
389 double CaloCell::sinTh() const
390 {
391  return m_caloDDE->sinTh();
392 }
393 
394 
395 inline
396 double CaloCell::cosTh() const
397 {
398  return m_caloDDE->cosTh();
399 }
400 
401 
402 inline
403 double CaloCell::cotTh() const
404 {
405  return m_caloDDE->cotTh();
406 }
407 
408 
409 inline
410 double CaloCell::sinPhi() const
411 {
412  return m_caloDDE->sinPhi();
413 }
414 
415 
416 inline
417 double CaloCell::cosPhi() const
418 {
419  return m_caloDDE->cosPhi();
420 }
421 
422 inline double
424 {
425  return this->e() * this->sinTh();
426 }
427 
428 inline
429 float CaloCell::x() const
430 {
431  return m_caloDDE->x();
432 }
433 
434 
435 inline
436 float CaloCell::y() const
437 {
438  return m_caloDDE->y();
439 }
440 
441 
442 inline
443 float CaloCell::z() const
444 {
445  return m_caloDDE->z();
446 }
447 
448 inline
449 void CaloCell::addEnergy(float energy) {
450  m_energy += energy;
451 }
452 
453 inline
454 void CaloCell::addTime (float delta)
455 {
456  m_time += delta;
457 }
458 
459 inline
461 {
462  m_qualProv[0] = quality;
463 }
464 
465 inline
467 {
468  m_quality = (int)(quality);
469 }
470 
471 inline
473 {
474  m_energy = energy ;
475 }
476 
477 inline
479 {
480  m_energy *= scale ;
481 }
482 
483 inline
485 {
486  m_time = time;
487 }
488 
489 inline
491 {
492  // cppcheck-suppress objectIndex
493  m_qualProv[1] = prov;
494 }
495 
496 inline
498 {
499  m_gain = gain;
500 }
501 
502 inline
504  m_caloDDE = caloDDE;
505  if (m_caloDDE) {
506  m_ID = m_caloDDE->identify();
507  }
508 }
509 
510 inline
511 void CaloCell::set(const CaloDetDescrElement* caloDDE,
512  const Identifier& ID) {
513  m_ID = ID;
514  m_caloDDE = caloDDE;
515 }
516 
517 #endif
518 
519 
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:315
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:275
I4Momentum
Definition: I4Momentum.h:31
et
Extra patterns decribing particle interation process.
CaloCell::setCaloDDE
void setCaloDDE(const CaloDetDescrElement *caloDDE)
set pointer to CaloDetDescrElement
Definition: CaloCell.h:503
CaloCell::m_tileQual
uint8_t m_tileQual[4]
Definition: CaloCell.h:247
P4EEtaPhiMBase.h
CaloCell::cotTh
virtual double cotTh() const override final
get cottan(theta)
Definition: CaloCell.h:403
CaloCell::CaloCell
CaloCell(const CaloCell &)=default
CaloCell::phi
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition: CaloCell.h:375
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:511
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:436
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:484
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:333
CaloCell::addTime
void addTime(float delta)
add time
Definition: CaloCell.h:454
CaloCellIDFcn
A functional to get the ID from a CaloCell pointer.
Definition: CaloCell.h:305
CaloCell::provenance
uint16_t provenance() const
get provenance (data member)
Definition: CaloCell.h:354
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
CaloCell::setEnergy
virtual void setEnergy(float energy)
set energy
Definition: CaloCell.h:472
CaloCell::time
float time() const
get time (data member)
Definition: CaloCell.h:368
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
CaloCell::CaloCell
CaloCell(CaloCell &&)=default
CaloGain
Definition: CaloGain.h:10
CaloCell::energy
double energy() const
get energy (data member)
Definition: CaloCell.h:327
CaloGain::INVALIDGAIN
@ INVALIDGAIN
Definition: CaloGain.h:18
GeoPrimitives.h
CaloCell::cosPhi
virtual double cosPhi() const override final
get cos(phi)
Definition: CaloCell.h:417
CaloCell::m_quality
int m_quality
Definition: CaloCell.h:245
CaloCell::operator=
CaloCell & operator=(const CaloCell &)=default
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:263
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:460
CaloCell::caloDDE
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition: CaloCell.h:321
CLHEP
STD'S.
Definition: CaloNoiseCompCondAlg.h:58
CaloCell::m_qualProv
uint16_t m_qualProv[2]
Definition: CaloCell.h:246
CaloCell::m_gain
CaloGain::CaloGain m_gain
gain
Definition: CaloCell.h:253
CaloCell::m_energy
float m_energy
energy (in MeV)
Definition: CaloCell.h:230
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:423
CaloCell::setGain
void setGain(CaloGain::CaloGain gain=CaloGain::INVALIDGAIN)
set gain
Definition: CaloCell.h:497
CaloCell::setProvenance
void setProvenance(uint16_t prov)
set Provenance
Definition: CaloCell.h:490
columnar::final
CM final
Definition: ColumnAccessor.h:106
CaloCell::quality
uint16_t quality() const
get quality (data member)
Definition: CaloCell.h:348
CaloCell::~CaloCell
virtual ~CaloCell()
default destructor
Definition: CaloCell.cxx:13
CaloCell::scaleEnergy
virtual void scaleEnergy(float scale)
scale energy
Definition: CaloCell.h:478
protected
#define protected
Definition: GenEventCnv_p1.h:26
NavigableTerminalNode.h
CaloCell::gain
CaloGain::CaloGain gain() const
get gain (data member )
Definition: CaloCell.h:361
CaloCell::ID
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition: CaloCell.h:295
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:306
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:232
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:340
CaloCell::z
float z() const
get z (through CaloDetDescrElement)
Definition: CaloCell.h:443
python.TrackLeptonConfig.quality
quality
Definition: TrackLeptonConfig.py:16
CaloCell::x
float x() const
get x (through CaloDetDescrElement)
Definition: CaloCell.h:429
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:396
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:256
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:449
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:410
CaloCell::m_ID
Identifier m_ID
offline identifier
Definition: CaloCell.h:251
CaloCell::sinTh
virtual double sinTh() const override final
get sin(theta) (through CaloDetDescrElement)
Definition: CaloCell.h:389
CaloCell::eta
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition: CaloCell.h:382
Identifier
Definition: IdentifierFieldParser.cxx:14