ATLAS Offline Software
RingerReFex.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*******************************************************
6  * Author: Denis Damazio
7  * Revision
8  * Joao Victor Pinto, jodafons@cern.ch
9  * werner freund, wsfreund@cern.ch
10  *
11  * Implements the RingerReFex (3nd revision).
12  *******************************************************/
13 
14 #include <vector>
15 #include <map>
16 #include <cmath>
17 #include <numeric>
26 #include "GaudiKernel/ThreadLocalContext.h"
27 #include "CaloDetDescr/CaloDetDescrElement.h"
31 using namespace Monitored;
32 
33 
34 
35 
37 
38 RingerReFex::RingerReFex(const std::string& type, const std::string& name, const IInterface* parent)
40 {}
41 
43 
45 
46  if((m_etaBins.size() < 2) || (m_etaBins.size()%2 != 0)){
47  ATH_MSG_FATAL( "Wrong eta range configuration. Size must be equal or more than two." );
48  return true;
49  }
50  return false;
51 }
52 
54 
56 {
57 
58  if (IReAlgToolCalo::initialize().isFailure()) {
59  ATH_MSG_FATAL( "Could not initialize base tool IReAlgToolCalo." );
60  return StatusCode::FAILURE;
61  }
62 
64  return StatusCode::FAILURE;
65  }
66 
67  ATH_CHECK( m_ringerContainerKey.initialize() );
68  ATH_CHECK( m_clusterContainerKey.initialize() );
70 
71  if (!m_monTool.empty()){
72  ATH_MSG_DEBUG("Retrieving monTool");
73  CHECK(m_monTool.retrieve());
74  }else{
75  ATH_MSG_INFO("No monTool configured. NO MONITORING");
76  }
77 
78 
79  ATH_MSG_DEBUG( "Ringer algorithm initialization completed successfully." );
80  ATH_MSG_DEBUG( "User parameters are: " );
81  ATH_MSG_DEBUG( "Using Global Center : " << m_globalCenter );
82  ATH_MSG_DEBUG( "Using Tile cells : " << m_useTile );
83  ATH_MSG_DEBUG( "Search Window in Eta : " << m_etaSearchWindowSize );
84  ATH_MSG_DEBUG( "Search Window in Phi : " << m_phiSearchWindowSize );
85  ATH_MSG_DEBUG( "Dumping cells info : " << m_dumpCells );
86  ATH_MSG_DEBUG( "Building Rings with noise factor : " << m_doNoiseThrRings );
87  ATH_MSG_DEBUG( "Building Rings with Noise Factor Constant: " << m_noiseFactor );
88 
89  return StatusCode::SUCCESS;
90 }
91 
92 
93 
94 StatusCode RingerReFex::prepareRinger(std::vector<RingerReFex::RingSet>& vec_rs,
95  const xAOD::TrigEMCluster& emCluster,
96  const IRoiDescriptor& roi,
97  const EventContext& context) const{
98 
100  const CaloNoise* noiseCDO=*noiseHdl;
101  for (unsigned rs = 0; rs < m_nRings.size(); ++rs) {
102 
103  auto obj = RingerReFex::RingSet( m_nRings[rs],
104  m_deltaEta[rs],
105  m_deltaPhi[rs],
106  m_detectors[rs],
107  m_samplings[rs],
108  m_samples[rs],
109  m_doQuarter[rs],
111  m_doPhiAxesDivision[rs]);
112  vec_rs.push_back( obj );
113  }
114 
115  std::vector<const CaloCell*> vec_tile_cells;
116  // Get all cells for the Tile calorimeter
117  std::vector<const TileCell*> sel;
118  std::vector<const TileCell*>::const_iterator it, itBegin, itEnd;
119 
120  if( m_dataSvc->loadCollections( context, roi, sel ).isFailure() ){
121  ATH_MSG_ERROR( "Error retrieving TileCalorimeter cells!" );
122  return StatusCode::FAILURE;
123  }
124 
125  itBegin = sel.begin();
126  itEnd = sel.end();
127  for(it = itBegin; it != itEnd; ++it)
128  {
129  if(!*it) continue;
130  vec_tile_cells.push_back(static_cast<const CaloCell *>(*it));
131  }
132 
133  // This is the main loop
134  for( auto& rs : vec_rs ){
135 
136  const CaloCell* hotCell = nullptr;
137  double ehot=-999e30;
138 
139  for ( auto det : rs.detectors() ){
140 
141  DETID det_id= static_cast<DETID>(det.first);
142  int sampling = det.second;
143 
144  if( det_id == TILE ){
145 
146  for (std::vector<const CaloCell *>::const_iterator it = vec_tile_cells.begin(); it != vec_tile_cells.end(); ++it)
147  {
148  if( !rs.isValid(*it) ) continue;
149 
150  rs.push_back(*it);
151  if( !m_globalCenter ){
152  if( maxCell( *it, ehot, emCluster.eta(), emCluster.phi() ) )
153  hotCell=*it;
154  }
155  }
156 
157 
158  }else{// TTEM, TTHEC, FCALEM and FCALHAD
159 
160  // Load all cells
163  if( m_dataSvc->loadCollections( context, roi, det_id, sampling, sel ).isFailure() )
164  {
165  ATH_MSG_ERROR( "Failure while trying to retrieve cell information for the "<< det_id <<" calorimeter." );
166  return StatusCode::FAILURE;
167  }
168 
169  itBegin = sel.begin();
170  itEnd = sel.end();
171 
172  // Loop over all LAr cells
173  // Append all valid cells and search the hottest cell
174  for(it = itBegin; it != itEnd; ++it)
175  {
176  if(!*it) continue;
177  // LAr object to CaloCell
178  const CaloCell *it_tmp = static_cast<const CaloCell*>(*it);
179 
180  // Check if the current cells is allow into this rs
181  if( !rs.isValid( it_tmp ) ) continue;
182  rs.push_back(it_tmp);
183 
184  if( !m_globalCenter ){
185  if( maxCell( *it, ehot, emCluster.eta(), emCluster.phi() ) )
186  hotCell=*it;
187  }
188  }
189 
190  }// Is TILE?
191 
192  }// Loop over all det configs
193 
194 
195  // Use all Tile cells in cache
196  if (m_globalCenter || !hotCell) {
197  rs.buildRings( emCluster.eta(), emCluster.phi(),noiseCDO,m_noiseFactor,m_doNoiseThrRings);
198  }else {
199  rs.buildRings( hotCell->eta(), hotCell->phi(),noiseCDO,m_noiseFactor,m_doNoiseThrRings);
200  }
201 
202  }// Loop over all ringer sets
203  return StatusCode::SUCCESS;
204 
205 }
206 
208 
210  const IRoiDescriptor& roi,
211  const CaloDetDescrElement*& ,
212  const EventContext& context) const
213 {
214 
215 
216  auto total_time = Monitored::Timer("TIME_total");
217  auto load_cells_time = Monitored::Timer("TIME_load_cells");
218  auto mon = Monitored::Group(m_monTool, total_time, load_cells_time);
219 
220  total_time.start();
221 
224 
225  ATH_CHECK( ringsCollection.record( std::make_unique<xAOD::TrigRingerRingsContainer>(),
226  std::make_unique<xAOD::TrigRingerRingsAuxContainer>() ) );
227 
228 
229 
230  // Check if the cluster is in the Eta region
231  bool accept=false;
232  for(unsigned i=0; i<m_etaBins.size();i+=2){
233  if((std::abs(emCluster.eta()) > m_etaBins[i]) && (std::abs(emCluster.eta()) <= m_etaBins[i+1])) accept=true;
234  }
235 
236 
237  if(!accept){
238  auto dummyRinger = new xAOD::TrigRingerRings();
239  ringsCollection->push_back( dummyRinger );
240  return StatusCode::SUCCESS;
241  }
242 
243 
244  std::vector<RingerReFex::RingSet> vec_rs;
245  load_cells_time.start();
246  ATH_CHECK(prepareRinger(vec_rs,emCluster,roi,context));
247  load_cells_time.stop();
248 
249  std::vector<float> ref_rings;
250  for (std::vector<RingerReFex::RingSet>::iterator it=vec_rs.begin(); it!=vec_rs.end(); ++it)
251  {
252  auto rings = it->rings();
253  ref_rings.insert(ref_rings.end(), rings.begin(), rings.end());
254  }
255 
256  auto ptrigRingerRings= new xAOD::TrigRingerRings();
257  ringsCollection->push_back( ptrigRingerRings );
258  ptrigRingerRings->setRings(ref_rings);
259  //ptrigRingerRings->auxdecor<int>("type") = 1;
260  if (m_dumpCells){
261  std::vector<float> cells_eta;
262  std::vector<float> cells_et;
263  std::vector<float> cells_phi;
264  std::vector<int> cells_sampling;
265  std::vector<int> cells_size;
266  std::vector<double> rings_sum;
267  std::vector<int> cells_id;
268  std::vector<float> cells_gain;
269 
270  for( auto& rs : vec_rs )
271  rs.fill_cells_info(cells_eta, cells_phi, cells_et, cells_sampling, cells_size, rings_sum, cells_id, cells_gain);
272 
273  static const SG::Decorator< std::vector<float> > cells_etaDec("cells_eta");
274  static const SG::Decorator< std::vector<float> > cells_etDec("cells_et");
275  static const SG::Decorator< std::vector<float> > cells_phiDec("cells_phi");
276  static const SG::Decorator< std::vector<int> > cells_samplingDec("cells_sampling");
277  static const SG::Decorator< std::vector<int> > cells_sizeDec("cells_size");
278  static const SG::Decorator< std::vector<int> > cells_idDec("cells_id");
279  static const SG::Decorator< std::vector<float> > cells_gainDec("cells_gain");
280  static const SG::Decorator< std::vector<double> > asym_rings_sumDec("asym_rings_sum");
281  static const SG::Decorator< std::vector<double> > rings_sumDec("rings_sum");
282  cells_etaDec(*ptrigRingerRings) = cells_eta;
283  cells_etDec(*ptrigRingerRings) = cells_et;
284  cells_phiDec(*ptrigRingerRings) = cells_phi;
285  cells_samplingDec(*ptrigRingerRings) = cells_sampling;
286  cells_sizeDec(*ptrigRingerRings) = cells_size;
287  cells_idDec(*ptrigRingerRings) = cells_id;
288  cells_gainDec(*ptrigRingerRings) = cells_gain;
289 
290  if (m_doQuarter[0]) asym_rings_sumDec(*ptrigRingerRings) = rings_sum;
291  else rings_sumDec(*ptrigRingerRings) = rings_sum;
292  }
293 
294  auto clusLink = ElementLink<xAOD::TrigEMClusterContainer>(m_clusterContainerKey.key(),0,context);
295  ptrigRingerRings->setEmClusterLink( clusLink );
296 
297 
298  if(msgLvl(MSG::DEBUG))
299  printRings(vec_rs, emCluster);
300 
301  total_time.stop();
302  return StatusCode::SUCCESS;
303 }
304 
305 
307 void RingerReFex::RingSet::fill_cells_info(std::vector<float> &cells_eta, std::vector<float> &cells_phi, std::vector<float> &cells_et, std::vector<int> &cells_sampling, std::vector<int> &cells_size, std::vector<double> &rings_sum, std::vector<int> &cells_id, std::vector<float> &cells_gain ){
308  for (std::vector<const CaloCell*>::const_iterator it=m_cells.begin(); it!=m_cells.end(); ++it) {
309  cells_eta.push_back((*it)->eta());
310  cells_phi.push_back((*it)->phi());
311  cells_et.push_back((*it)->energy());
312  auto sampling = (*it)->caloDDE()->getSampling();
313  cells_sampling.push_back((int) sampling);
314  cells_id.push_back((*it)->ID().get_identifier32().get_compact());
315  cells_gain.push_back((*it)->gain());
316  }
317  cells_size.push_back(m_cells.size());
318  double sum = 0;
319  for (auto ring : m_rings) sum+=ring;
320  rings_sum.push_back(sum);
321 }
322 
323 inline bool RingerReFex::maxCell ( const CaloCell* cell, double &energy, const double eta_ref, const double phi_ref ) const
324 {
325  const double etamin = eta_ref - (0.5 * m_etaSearchWindowSize);
326  const double etamax = eta_ref + (0.5 * m_etaSearchWindowSize);
327  const double phimin = phi_ref - (0.5 * m_phiSearchWindowSize);
328  const double phimax = phi_ref + (0.5 * m_phiSearchWindowSize);
329 
330  //are we, possibly at the wrap-around region for phi?
331  bool wrap = Ringer::check_wrap_around(phi_ref, false);
332  bool reverse_wrap = Ringer::check_wrap_around(phi_ref, true);
333 
334  if(!cell) return false;
335  double this_eta = cell->eta();
336  double this_phi = cell->phi();
337  if (this_eta > etamin && this_eta < etamax){
338  double phi_use = this_phi; //use this value for phi (wrap protection)
339  if (wrap) phi_use = Ringer::fix_wrap_around(phi_use, false);
340  if (reverse_wrap) phi_use = Ringer::fix_wrap_around(phi_use, true);
341  if (phi_use > phimin && phi_use < phimax){
342  if (cell->energy() > energy) {
343  energy = cell->energy();
344  return true;
345  }
346  }
347  }
348  return false;
349 }
350 
351 
353 
354 
355 void RingerReFex::printRings( std::vector<RingSet> &vec_rs, const xAOD::TrigEMCluster &cl ) const
356 {
357  ATH_MSG_INFO("--------------- Cluster Information (2) ----------------");
358 
359  //auto cl = ring->emCluster();
360  ATH_MSG_INFO("et = "<< cl.et() << " eta = " << cl.eta() << " roiword = " << cl.RoIword());
361 
362 
363  for(unsigned rs=0; rs<vec_rs.size(); ++rs){
364  ATH_MSG_INFO("RingSet number is: " << rs);
365  ATH_MSG_INFO("search eta window: " << m_etaSearchWindowSize << " search phi window: " << m_phiSearchWindowSize);
366  ATH_MSG_INFO("deta: " << m_deltaEta[rs] << " dphi: " << m_deltaPhi[rs]);
367  ATH_MSG_INFO("Pattern has size equal than: " << vec_rs.at(rs).rings().size());
368 
369  double tot=0;
370  for(unsigned i=0;i<vec_rs.at(rs).rings().size();++i){
371  tot+=vec_rs.at(rs).rings()[i];
372  ATH_MSG_INFO(" Ring " << i << " energy: " << vec_rs.at(rs).rings()[i] << " MeVs.");
373  }
374  ATH_MSG_INFO( "RingSet = " << rs << " Total energy = " << tot );
375  }// Loop over ringSets
376  ATH_MSG_INFO("---------------- End of information -----------------");
377 
378 }
379 
382 
383 
384 RingerReFex::RingSet::RingSet ( unsigned int maxRings, double deta, double dphi,
385  const std::vector<int> &detectors,
386  const std::vector<int> &samplings,
387  const std::vector<int> &samples,
388  bool doQuarter,
389  bool doEtaAxesDivision,
390  bool doPhiAxesDivision
391  )
392  : m_deltaEta(deta),
393  m_deltaPhi(dphi),
395  m_samplings(samplings),
397  m_doQuarter(doQuarter),
398  m_doEtaAxesDivision(doEtaAxesDivision),
399  m_doPhiAxesDivision(doPhiAxesDivision)
400 {
401 
402  if(doQuarter){
403  if(doEtaAxesDivision && doPhiAxesDivision){
404  m_rings.resize( (maxRings-1)*4 + 1 );
405  }else{
406  m_rings.resize( (maxRings-1)*2 + 2 );
407  }
408  }else{
409  m_rings.resize( maxRings );
410  }
411 
412 
413 }
414 
416 
417 const std::vector< std::pair< int, int > > RingerReFex::RingSet::detectors() const
418 {
419  std::vector< std::pair<int,int> > vec;
420  for ( unsigned i=0; i<m_detectors.size(); ++i )
421  vec.push_back( std::make_pair( m_detectors[i], m_samplings[i] ) );
422  return vec;
423 }
424 
426 
428 {
429  for (std::vector<int>::const_iterator it=m_samples.begin(); it!=m_samples.end(); ++it)
430  {
431  if ( cell->caloDDE()->getSampling() == static_cast<CaloSampling::CaloSample>(*it) )
432  return true;
433 
434  }
435  return false;
436 }
437 
439 
440 const std::vector<double>& RingerReFex::RingSet::rings() const
441 {
442  return m_rings;
443 }
444 
446 
448  m_cells.push_back(cell);
449 }
450 
452 
454  m_rings.clear();
455  m_cells.clear();
456 }
457 
459 
460 void RingerReFex::RingSet::buildRings( const double eta_center, const double phi_center,const CaloNoise* noiseCDO, const double noiseFactor, const bool doNoiseThrRings)
461 {
462  // cache cosh eta value
463  const double cosh_eta = std::cosh(std::abs(eta_center));
464 
465  //are we, possibly at the wrap-around region for phi?
466  const bool wrap = Ringer::check_wrap_around(phi_center, false);
467  const bool reverse_wrap = Ringer::check_wrap_around(phi_center, true);
468 
469  // Loop over all cells
470  for (std::vector<const CaloCell*>::const_iterator it=m_cells.begin(); it!=m_cells.end(); ++it) {
471 
472  if( !(*it) )
473  continue;
474 
475  double phi_use = (*it)->phi(); //use this value for phi (wrap protection)
476  if (wrap) phi_use = Ringer::fix_wrap_around(phi_use, false);
477  else if (reverse_wrap) phi_use = Ringer::fix_wrap_around(phi_use, true);
478 
479  // Measure delta eta and delta phi to find out on which ring we are
480  const double deltaEta = ((*it)->eta() - eta_center)/m_deltaEta;
481  const double deltaPhi = (phi_use - phi_center)/m_deltaPhi;
482 
483  // ring index
484  unsigned int i = 0;
485 
486 
487  const double deltaGreater = std::max(std::abs(deltaEta), std::abs(deltaPhi));
488  i = static_cast<unsigned int>( std::floor (deltaGreater) );
489  // Certain compilers have problems with round(), so let's do it ourselves
490  if ( (deltaGreater - (double) i) > 0.5) ++i;
491 
492  if(m_doQuarter){ // only for i>0, the central ring is not divided
493  bool etaPositive = ( deltaEta > 0 )?true:false;
494  bool phiPositive = ( deltaPhi > 0)?true:false;
495  // i > 0 (not central ring)
496  // Correct position in which we shall fill the ring:
498  if (phiPositive){
499  if (etaPositive){
500  i = (i * 4) - 3;
501  }
502  else{
503  i = (i * 4) - 2;
504  }
505  }
506  else if (etaPositive){
507  i = (i * 4) - 1;
508  }
509  else{
510  i = (i * 4);
511  }
512  } else if ((m_doEtaAxesDivision || m_doPhiAxesDivision) && i){
513  if (m_doEtaAxesDivision){
514  i = (etaPositive)?(i * 2):((i * 2) - 1);
515  }
516  else {
517  i = (phiPositive)?(i * 2):((i * 2) - 1);
518  }
519  }
520  }// Do quarter?
521 
522  // Fill
523  if (i < m_rings.size()) {
524  if (doNoiseThrRings){
525  float noiseSigma = noiseCDO->getNoise((*it)->ID(),(*it)->gain());
526  if ( (*it)->energy() > noiseSigma*noiseFactor){
527  m_rings[i] += (*it)->energy() / cosh_eta;
528  }
529  }else{ // Building Rings with sigmaNoise constraint? / in the constructor , rings already resized with your respect rings quantities
530  m_rings[i] += (*it)->energy() / cosh_eta;
531  }
532  }
533  }// Loop over each
534 
535 }
536 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TrigRingerRingsContainer.h
RingerReFex::RingSet::buildRings
void buildRings(const double eta_hot, const double phi_hot, const CaloNoise *noiseCDO, const double m_noiseFactor, const bool m_doNoiseThrRings)
=================================================================================
Definition: RingerReFex.cxx:460
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
RingerReFex::prepareRinger
StatusCode prepareRinger(std::vector< RingerReFex::RingSet > &vec_rs, const xAOD::TrigEMCluster &emCluster, const IRoiDescriptor &roi, const EventContext &context) const
Definition: RingerReFex.cxx:94
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
CaloCell::phi
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition: CaloCell.h:359
xAOD::TrigEMCluster_v1::eta
float eta() const
get Eta (calibrated)
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
max
#define max(a, b)
Definition: cfImp.cxx:41
RingerReFex.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
RingerReFex::m_noiseFactor
Gaudi::Property< double > m_noiseFactor
Definition: RingerReFex.h:108
RingerReFex::m_phiSearchWindowSize
Gaudi::Property< double > m_phiSearchWindowSize
Definition: RingerReFex.h:96
LArTT_Selector::end
const_iterator end() const
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
RingerReFex::m_doPhiAxesDivision
Gaudi::Property< std::vector< bool > > m_doPhiAxesDivision
Definition: RingerReFex.h:112
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
TrigEMCluster.h
skel.it
it
Definition: skel.GENtoEVGEN.py:423
RingerReFex::RingSet::push_back
void push_back(const CaloCell *)
=================================================================================
Definition: RingerReFex.cxx:447
RingerReFex::m_doNoiseThrRings
Gaudi::Property< bool > m_doNoiseThrRings
Definition: RingerReFex.h:107
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
RingerReFex::m_doQuarter
Gaudi::Property< std::vector< bool > > m_doQuarter
Definition: RingerReFex.h:110
RunPrintSiDetElements.detectors
detectors
Definition: RunPrintSiDetElements.py:59
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
RingerReFex::RingSet::m_cells
std::vector< const CaloCell * > m_cells
Definition: RingerReFex.h:55
CaloNoise::getNoise
float getNoise(const IdentifierHash h, const int gain) const
Accessor by IdentifierHash and gain.
Definition: CaloNoise.h:34
TrigRingerRings.h
RingerReFex::RingSet::RingSet
RingSet(unsigned int maxRings, double deta, double dphi, const std::vector< int > &detectors, const std::vector< int > &samplings, const std::vector< int > &samples, bool doQuarter, bool doEtaAxesDivision, bool doPhiAxesDivision)
Definition: RingerReFex.cxx:384
IReAlgToolCalo::m_dataSvc
ServiceHandle< ITrigCaloDataAccessSvc > m_dataSvc
Definition: IReAlgToolCalo.h:84
RingerReFex::RingSet::rings
const std::vector< double > & rings() const
=================================================================================
Definition: RingerReFex.cxx:440
DETID
DETID
An enum to define subdetector names.
Definition: RegSelEnums.h:23
RingerReFex::m_etaSearchWindowSize
Gaudi::Property< double > m_etaSearchWindowSize
Definition: RingerReFex.h:95
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
CxxUtils::vec
typename vecDetail::vec_typedef< T, N >::type vec
Define a nice alias for the vectorized type.
Definition: vec.h:207
RingerReFex::maxCell
bool maxCell(const CaloCell *cell, double &energy, const double eta_ref, const double phi_ref) const
Definition: RingerReFex.cxx:323
GenericMonitoringTool.h
RingerReFex::printRings
void printRings(std::vector< RingSet > &, const xAOD::TrigEMCluster &) const
=================================================================================
Definition: RingerReFex.cxx:355
xAOD::TrigEMCluster_v1::phi
float phi() const
get Phi (calibrated)
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigRingerRingsAuxContainer.h
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
TrigEMClusterAuxContainer.h
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
P4Helpers::deltaEta
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition: P4Helpers.h:53
lumiFormat.i
int i
Definition: lumiFormat.py:92
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
RingerReFex::m_detectors
Gaudi::Property< std::vector< std::vector< int > > > m_detectors
Definition: RingerReFex.h:101
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
RingerReFex::m_globalCenter
Gaudi::Property< bool > m_globalCenter
Definition: RingerReFex.h:109
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
IRoiDescriptor
Describes the API of the Region of Ineterest geometry.
Definition: IRoiDescriptor.h:23
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
01SubmitToGrid.samples
samples
Definition: 01SubmitToGrid.py:58
Ringer::check_wrap_around
bool check_wrap_around(const double phi_center, const bool reverse_wrap)
Helper function to identify wrap around cases.
Definition: PhiComps.h:17
RingerReFex::execute
virtual StatusCode execute(xAOD::TrigEMCluster &emCluster, const IRoiDescriptor &roi, const CaloDetDescrElement *&, const EventContext &context) const override
=================================================================================
Definition: RingerReFex.cxx:209
sel
sel
Definition: SUSYToolsTester.cxx:92
IReAlgToolCalo.h
WritePulseShapeToCool.det
det
Definition: WritePulseShapeToCool.py:204
test_pyathena.parent
parent
Definition: test_pyathena.py:15
LArTT_Selector::begin
const_iterator begin() const
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
RingerReFex::m_dumpCells
Gaudi::Property< bool > m_dumpCells
Definition: RingerReFex.h:106
RingerReFex::configurationInvalid
bool configurationInvalid()
=================================================================================
Definition: RingerReFex.cxx:44
RingerReFex::m_ringerContainerKey
SG::WriteHandleKey< xAOD::TrigRingerRingsContainer > m_ringerContainerKey
Definition: RingerReFex.h:91
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
LB_AnalMapSplitter.tot
tot
Definition: LB_AnalMapSplitter.py:46
RingerReFex::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: RingerReFex.h:90
CaloNoise
Definition: CaloNoise.h:16
xAOD::TrigRingerRings
TrigRingerRings_v2 TrigRingerRings
Define the latest version of the TrigRingerRings class.
Definition: TrigRingerRings.h:17
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
RingerReFex::m_samplings
Gaudi::Property< std::vector< std::vector< int > > > m_samplings
Definition: RingerReFex.h:102
RingerReFex::RingSet::fill_cells_info
void fill_cells_info(std::vector< float > &cells_eta, std::vector< float > &cells_phi, std::vector< float > &cells_et, std::vector< int > &cells_sampling, std::vector< int > &cells_size, std::vector< double > &rings_sum, std::vector< int > &cells_id, std::vector< float > &cells_gain)
=================================================================================
Definition: RingerReFex.cxx:307
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArTT_Selector< LArCellCont >
TILE
@ TILE
Definition: RegSelEnums.h:30
RingerReFex::m_etaBins
Gaudi::Property< std::vector< float > > m_etaBins
Definition: RingerReFex.h:100
IReAlgToolCalo
Base Class for Tools used for Egamma and Tau Feature Extraction Algorithms.
Definition: IReAlgToolCalo.h:37
TrigEMClusterContainer.h
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
RingerReFex::m_deltaPhi
Gaudi::Property< std::vector< float > > m_deltaPhi
Definition: RingerReFex.h:98
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
RingerReFex::RingSet::m_rings
std::vector< double > m_rings
Definition: RingerReFex.h:56
RingerReFex::m_clusterContainerKey
SG::ReadHandleKey< xAOD::TrigEMClusterContainer > m_clusterContainerKey
Definition: RingerReFex.h:92
RingerReFex::RingSet::clear
void clear()
=================================================================================
Definition: RingerReFex.cxx:453
RingerReFex::RingerReFex
RingerReFex(const std::string &type, const std::string &name, const IInterface *parent)
=================================================================================
Definition: RingerReFex.cxx:38
RingerReFex::m_useTile
Gaudi::Property< bool > m_useTile
Definition: RingerReFex.h:105
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
IReAlgToolCalo::initialize
virtual StatusCode initialize() override
Definition: IReAlgToolCalo.cxx:25
RingerReFex::m_noiseCDOKey
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
Definition: RingerReFex.h:93
RingerReFex::RingSet::isValid
bool isValid(const CaloCell *) const
=================================================================================
Definition: RingerReFex.cxx:427
RingerReFex::m_deltaEta
Gaudi::Property< std::vector< float > > m_deltaEta
Definition: RingerReFex.h:97
RingerReFex::m_samples
Gaudi::Property< std::vector< std::vector< int > > > m_samples
Definition: RingerReFex.h:103
xAOD::TrigEMCluster_v1
Description of a trigger EM cluster.
Definition: TrigEMCluster_v1.h:28
LArCellBinning.etamin
etamin
Definition: LArCellBinning.py:137
python.PyAthena.obj
obj
Definition: PyAthena.py:135
Ringer::fix_wrap_around
double fix_wrap_around(const double phi_value, const bool reverse_wrap)
Helper function to fix wrap around cases.
Definition: PhiComps.h:26
RingerReFex::m_nRings
Gaudi::Property< std::vector< unsigned int > > m_nRings
Definition: RingerReFex.h:99
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
Decorator.h
Helper class to provide type-safe access to aux data.
RingerReFex::RingSet::detectors
const std::vector< std::pair< int, int > > detectors() const
=================================================================================
Definition: RingerReFex.cxx:417
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
RingerReFex::initialize
virtual StatusCode initialize() override
=================================================================================
Definition: RingerReFex.cxx:55
CaloCell::eta
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition: CaloCell.h:366
RingerReFex::m_doEtaAxesDivision
Gaudi::Property< std::vector< bool > > m_doEtaAxesDivision
Definition: RingerReFex.h:111
xAOD::RingSet
RingSet_v1 RingSet
Definition of the current "RingSet version".
Definition: RingSet.h:15