ATLAS Offline Software
JGTowerBase_ID.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include "CxxUtils/StrFormat.h"
8 #include "GaudiKernel/MsgStream.h"
9 #include "IdDict/IdDictDefs.h"
12 #include <algorithm>
13 #include <cassert>
14 #include <cmath>
15 #include <cstdio>
16 #include <iostream>
17 #include <set>
18 #include <string>
19 
21 
22 
24  const std::string& group) :
26  , m_jgtower_region_index(0)
27  , m_CALO_INDEX(999)
28  , m_DETZSIDE_INDEX(999)
29  , m_SAMPLING_INDEX(999)
30  , m_REGION_INDEX(999)
31  , m_ETA_INDEX(999)
32  , m_PHI_INDEX(999)
33  , m_dict(nullptr)
34  , m_tower_hash_max(0)
35  , m_calo_region_hash_max(0)
36 
37 {
38 
39 }
40 
42 
43 
44 
45 IdContext
47 {
49  return {id, 0, m_REGION_INDEX};
50 }
51 
52 IdContext
54 {
56  return {id, 0, m_PHI_INDEX};
57 }
58 
59 
60 int JGTowerBase_ID::get_id (const IdentifierHash& hash_id, Identifier& id, const IdContext* context) const
61 {
62  MsgStream log(m_msgSvc, "JGTowerBase_ID" );
63  std::stringstream strm;
64  std::string strg;
65  int result = 1;
66  id.clear();
67 
68  size_t begin = (context) ? context->begin_index(): 0;
69  // cannot get hash if end is 0:
70  size_t end = (context) ? context->end_index() : 0;
71 
72  if (0 == begin) {
73  if (m_REGION_INDEX == end) {
74  if (hash_id < (unsigned int)(m_region_vec.end() - m_region_vec.begin()))
75  {
76  id = m_region_vec[hash_id];
77  result = 0;
78  }
79  else
80  {
81  strm << hash_id;
82  strg = " hash_id out of range "+strm.str();
83  if(m_msgSvc)
84  {
85  log << MSG::ERROR << strg << endmsg;
86  }
87  else
88  {
89  std::cout << strg << std::endl;
90  }
91  }
92  }
93  else if (m_PHI_INDEX == end) {
94  if (hash_id < (unsigned int)(m_tower_vec.end() - m_tower_vec.begin())) {
95  id = m_tower_vec[hash_id];
96  result = 0;
97  }
98  else
99  {
100  strm << hash_id;
101  strg = " hash_id out of range "+strm.str();
102  if(m_msgSvc)
103  {
104  log << MSG::ERROR << strg << endmsg;
105  }
106  else
107  {
108  std::cout << strg << std::endl;
109  }
110  }
111  }
112  }
113  return(result);
114 }
115 
116 int JGTowerBase_ID::get_hash (const Identifier& id, IdentifierHash& hash_id, const IdContext* context) const
117 {
118  hash_id = 0;
119  int result = 1;
120 
121  size_t begin = (context) ? context->begin_index(): 0;
122  size_t end = (context) ? context->end_index() : 0;
123 
124  if (0 == begin) {
125  if (m_REGION_INDEX == end) {
126  Identifier redId = region_id (id);
127  std::vector<Identifier>::const_iterator it = std::lower_bound(m_region_vec.begin(),m_region_vec.end(),redId);
128  if ( it != m_region_vec.end() ){
129  hash_id = it - m_region_vec.begin();
130  result = 0;
131  }
132  }
133  else if (m_PHI_INDEX == end) {
134 
135  //Identifier redId = tower_id (id);
136 
137  std::vector<Identifier>::const_iterator it = std::lower_bound(m_tower_vec.begin(),m_tower_vec.end(),id);
138  if ( it != m_tower_vec.end() ){
139  hash_id = it - m_tower_vec.begin();
140  result = 0;
141  }
142  }
143 
144  else {
145  std::string errorMessage =
146  "Error in JGTowerBase_ID::get_hash, invalid context ";
147  throw CaloID_Exception(errorMessage , 10);
148  }
149  }
150 
151  return (result);
152 }
153 
154 
156 {
157  IdentifierHash regHash;
158  IdContext regionContext = region_context();
159  int sc = get_hash(regId, regHash, &regionContext);
160  if (sc!=0) return NOT_VALID;
161  return regHash;
162 }
163 
164 
165 int JGTowerBase_ID::initialize_base_from_dictionary (const IdDictMgr& dict_mgr, const std::string& t_pre)
166 {
167  MsgStream log(m_msgSvc, "JGTowerBase_ID" );
168  std::string strg = "initialize_from_dictionary";
169  if(m_msgSvc) {
170  log << MSG::INFO << strg << endmsg;
171  }
172  else {
173  std::cout << strg << std::endl;
174  }
175 
176  // Check whether this helper should be reinitialized
177  if (!reinitialize(dict_mgr)) {
178  if(m_msgSvc)log << MSG::DEBUG << "Request to reinitialize not satisfied - tags have not changed" << endmsg;
179  return (0);
180  }
181  else {
182  if(m_msgSvc)log << MSG::DEBUG << "(Re)initialize" << endmsg;
183  }
184 
185  std::stringstream strm;
186  std::stringstream strm1;
187  std::stringstream strm2;
188  std::string strg1;
189  std::string strg2;
190 
191  // init base object
192  if(AtlasDetectorID::initialize_from_dictionary(dict_mgr)) return (1);
193 
194  // Register version of the Calorimeter dictionary
195  if (register_dict_tag(dict_mgr, "Calorimeter")) return(1);
196 
197  m_dict = dict_mgr.find_dictionary ("Calorimeter");
198  if(!m_dict)
199  {
200  strg= " initialize_from_dict - cannot access Calorimeter dictionary ";
201  if(m_msgSvc) {
202  log << MSG::ERROR << strg << endmsg;
203  }
204  else
205  {
206  std::cout << strg << std::endl;
207  }
208  return(1);
209  }
210 
211  // Initialize the field indices
212  if(initLevelsFromDict(t_pre)) return (1);
213 
214  // Find values for the calo and JGTOWER (neg) fields
215  int caloValue = -1;
216  if (m_dict->get_label_value("subdet", "Calorimeter", caloValue))
217  {
218  strm << m_dict->name();
219  strg= "Could not get value for label 'Calorimeter' of field 'subdet' in dictionary "+strm.str();
220  if(m_msgSvc)
221  {
222  log << MSG::ERROR << strg << endmsg;
223  }
224  else
225  {
226  std::cout << strg << std::endl;
227  }
228  return (1);
229  }
230 
231  int jgtowerCaloValue = -1;
232  // negative half
233  // if (m_dict->get_label_value("DetZside", "negative_jgtower_side", jgtowerCaloValue))
234  // positive half FLG 12 Jul 07: negative side -> problem for test beam
235  if (m_dict->get_label_value("DetZside", "positive_lvl1_side", jgtowerCaloValue))
236  {
237  strm << m_dict->name();
238  // strg = " Could not get value for label 'negative_jgtower_side' of field 'DetZside in dictionary"+strm.str();
239  strg = " Could not get value for label positive_lvl1_side of field 'DetZside in dictionary"+strm.str();
240  if(m_msgSvc)
241  {
242  log << MSG::ERROR << strg << endmsg;
243  }
244  else
245  {
246  std::cout << strg << std::endl;
247  }
248  return (1);
249  }
250 
251  // Set up id for region and range prefix
252  // NOTE: negative value is good enough to get multirange since the
253  // regions are symmetric in +/-eta
254  // FLG Jul 07: EXCEPT FOR CTB !!!!!!!!!!
255 
256  ExpandedIdentifier reg_id;
257  reg_id.add(caloValue);
258  reg_id.add(jgtowerCaloValue);
259  Range prefix;
260  m_full_reg_range = m_dict->build_multirange(reg_id, "Reg_"+t_pre+"ower", prefix, t_pre+"region");
261  m_full_tower_range = m_dict->build_multirange(reg_id, "Reg_"+t_pre+"ower", prefix, t_pre+"phi");
262 
263  // Setup the hash tables
264  if(init_hashes()) return (1);
265 
266  // initialize dictionary regions
267  if (fill_vec_of_dict_regions ("Reg_"+t_pre+"ower")) return 1;
268 
269  // Setup hash tables for finding neighbors
270  if(init_neighbors()) return (1);
271 
272  strm1 << (std::string)m_full_tower_range;
273  strg = " JGTowerBase_ID::initialize_from_dict : ";
274  strg1 = " tower range -> "+strm1.str();
275  if(m_msgSvc)
276  {
277  log << MSG::DEBUG << strg << endmsg;
278  log << MSG::DEBUG << strg1 << endmsg;
279  log << MSG::DEBUG << strg2 << endmsg;
280  }
281  else
282  {
283  std::cout << strg << std::endl;
284  std::cout << strg1 << std::endl;
285  std::cout << strg2 << std::endl;
286  }
287 
288  //std::cout << " JGTowerBase_ID::initialize_from_dict : "
289  // << std::endl;
290  //std::cout << " tower range -> " << (std::string)m_full_tower_range
291  // << std::endl;
292  //std::cout << " layer range -> " << (std::string)m_full_layer_range
293  // << std::endl;
294 
295 
296  // Setup for hash calculation
297 
298  // Regions have uniform eta/phi granularity
299  // The lookup table only needs to contain the
300  // hash offset for each region, the first eta index
301  // and the number of phi cells.
302 
303  // The implementation requires:
304 
305  // 1) a lookup table for each region containing hash offset,
306  // etamin and nphi
307  // 2) a decoder to access the "index" corresponding to the
308  // pnz/samp/reg fields. These fields use 6 bits, so the
309  // vector has a length of 64 for 16 regions.
310 
311 
312  // Create decoder for fields pnz to region
314  m_jgtower_impl.bits() +
318  m_pnz_reg_impl.set_bits(bits, bits_offset);
319  int size = (1 << bits);
320 
321  // std::cout << "pnz_reg "
322  // << m_pnz_reg_impl.show_to_string() << std::endl;
323  // std::cout << "size " << size << std::endl;
324 
325 
326  // std::cout << "pnz_reg " << m_pnz_reg_impl.decode_index() << " "
327  // << (std::string)m_pnz_reg_impl.ored_field() << " "
328  // << std::hex << m_pnz_reg_impl.mask() << " "
329  // << m_pnz_reg_impl.zeroing_mask() << " "
330  // << std::dec << m_pnz_reg_impl.shift()
331  // << " " << m_pnz_reg_impl.bits() << " " <<m_pnz_reg_impl.bits_offset()
332  // << std::endl;
333 
334 
335  // Set up vector as lookup table for hash calculation.
336  m_hash_calcs.resize(size);
337 
338  for (unsigned int i = 0; i < m_calo_region_hash_max; ++i) {
339 
340  Identifier regId = region_id(i) ;
341 
342  HashCalc hc;
343 
344  int etamin = eta_min(regId);
345  Identifier min = tower_id ( regId, etamin, 0);
347  hc.m_hash = min_hash;
348  hc.m_etamin = etamin;
349  hc.m_nphi = phi_max(min)+1 ;
351 
352  if (m_pnz_reg_impl.unpack(min) >= size)
353  {
354  strm << size;
355  strm1 << show_to_string(min);
356  strm2 << m_pnz_reg_impl.unpack(min);
357  strg = "Min > "+strm.str();
358  strg1= " "+strm1.str();
359  strg2= " "+strm2.str();
360  if(m_msgSvc)
361  {
362  log << MSG::DEBUG << strg << endmsg;
363  log << MSG::DEBUG << strg1 << endmsg;
364  log << MSG::DEBUG << strg2 << endmsg;
365  }
366  else
367  {
368  std::cout << strg << std::endl;
369  std::cout << strg1 << std::endl;
370  std::cout << strg2 << std::endl;
371  }
372  //std::cout << "min > " << size << " "
373  // << i << " "
374  // << show_to_string(min) << " "
375  // << m_pnz_reg_impl.unpack(min) << " "
376  // << std::endl;
377  }
378  }
379 
380  // Check hash calculation
381  for (unsigned int i = 0; i < m_tower_hash_max; ++i) {
382  Identifier id = tower_id(i);
383  if (tower_hash(id) != i)
384  {
385  strm << show_to_string(id);
386  strm1 << tower_hash(id);
387  strm2 << i;
388  strg = " ***** Error tower ranges, id, hash, i = "+strm.str();
389  strg1= " , "+strm1.str();
390  strg2= " , "+strm2.str();
391  if(m_msgSvc)
392  {
393  log << MSG::ERROR << strg << endmsg;
394  log << MSG::ERROR << strg1 << endmsg;
395  log << MSG::ERROR << strg2 << endmsg;
396  }
397  else
398  {
399  std::cout << strg << std::endl;
400  std::cout << strg1 << std::endl;
401  std::cout << strg2 << std::endl;
402  }
403 
404  //std::cout << "tower ranges, id, hash, i = "
405  // << show_to_string(id) << ", "
406  // << tower_hash(id) << ", "
407  // << i
408  // << std::endl;
409  }
410  }
411 
412  return 0;
413 
414 }
415 
416 
417 
418 
419 int JGTowerBase_ID::eta_min(const Identifier regId) const
420 {
421  ExpandedIdentifier expId;
422  IdContext region_cntxt = region_context();
423  if(!get_expanded_id(regId, expId, &region_cntxt)) {
424  int result = -999;
425  for (unsigned int i = 0; i < m_full_tower_range.size(); ++i) {
426  const Range& range = m_full_tower_range[i];
427  if (range.match(expId)) {
428  const Range::field& eta_field = range[m_ETA_INDEX];
429  if (not eta_field.empty()) {
430  int etamin = eta_field.get_minimum();
431  if (-999 == result) {
432  result = etamin;
433  }
434  else {
435  if (etamin < result) result = etamin;
436  }
437  }
438  }
439  }
440  return (result);
441  }
442  return (-999);
443 }
444 
445 int JGTowerBase_ID::eta_max(const Identifier regId) const
446 {
447  ExpandedIdentifier expId;
448  IdContext region_cntxt = region_context();
449  if(!get_expanded_id(regId, expId, &region_cntxt)) {
450  int result = -999;
451  for (unsigned int i = 0; i < m_full_tower_range.size(); ++i) {
452  const Range& range = m_full_tower_range[i];
453  if (range.match(expId)) {
454  const Range::field& eta_field = range[m_ETA_INDEX];
455  if (not eta_field.empty()) {
456  int etamax = eta_field.get_maximum();
457  if (result < etamax) result = etamax;
458  }
459  }
460  }
461  return (result);
462  }
463  return (-999); // default
464 }
465 
466 int JGTowerBase_ID::phi_max(const Identifier regId) const
467 {
468  ExpandedIdentifier expId;
469  IdContext region_cntxt = region_context();
470  if(!get_expanded_id(regId, expId, &region_cntxt)) {
471  int result = -999;
472  for (unsigned int i = 0; i < m_full_tower_range.size(); ++i) {
473  const Range& range = m_full_tower_range[i];
474  if (range.match(expId)) {
475  const Range::field& phi_field = range[m_PHI_INDEX];
476  if (not phi_field.empty()) {
477  int phimax = phi_field.get_maximum();
478  if (result < phimax) result = phimax;
479  }
480  }
481  }
482  return (result);
483  }
484  return (-999); // default
485 }
486 
488 {
489  IdentifierHash regHash = calo_region_hash(regId);
490  if (regHash >= m_vecOfDictRegions.size()) return NOT_VALID;
491  return m_vecOfDictRegions[regHash]->deta();
492 }
493 
495 {
496  IdentifierHash regHash = calo_region_hash(regId);
497  if (regHash >= m_vecOfDictRegions.size()) return NOT_VALID;
498  return m_vecOfDictRegions[regHash]->dphi();
499 }
500 
501 float JGTowerBase_ID::eta0(const Identifier regId) const
502 {
503  IdentifierHash regHash = calo_region_hash(regId);
504  if (regHash >= m_vecOfDictRegions.size()) return NOT_VALID;
505  return m_vecOfDictRegions[regHash]->eta0();
506 }
507 
508 float JGTowerBase_ID::phi0(const Identifier regId) const
509 {
510  IdentifierHash regHash = calo_region_hash(regId);
511  if (regHash >= m_vecOfDictRegions.size()) return NOT_VALID;
512  return m_vecOfDictRegions[regHash]->phi0();
513 }
514 
515 int
517 {
518  unsigned short index = id;
519  if (index < m_prev_phi_vec.size()) {
520  if (m_prev_phi_vec[index] == NOT_VALID_HASH) return (1);
521  prev = m_prev_phi_vec[index];
522  return (0);
523  }
524  return (1);
525 }
526 
527 int
529 {
530  unsigned short index = id;
531  if (index < m_next_phi_vec.size()) {
532  if (m_next_phi_vec[index] == NOT_VALID_HASH) return (1);
534  return (0);
535  }
536  return (1);
537 }
538 
539 int
541 {
542  unsigned short index = id;
543  if (index < m_prev_eta_vec.size()) {
544  if (m_prev_eta_vec[index] == NOT_VALID_HASH) return (1);
545  prev = m_prev_eta_vec[index];
546  return (0);
547  }
548  return (1);
549 }
550 
551 int
553 {
554  unsigned short index = id;
555  if (index < m_next_eta_vec.size()) {
556  if (m_next_eta_vec[index] == NOT_VALID_HASH) return (1);
558  return (0);
559  }
560  return (1);
561 }
562 
563 
564 int JGTowerBase_ID::get_expanded_id (const Identifier& id, ExpandedIdentifier& exp_id, const IdContext* context) const
565 {
566  // We assume that the context is >= region
567  exp_id.clear();
568  exp_id << calo_field_value()
569  << pos_neg(id)
570  << sampling(id)
571  << region(id);
572  if(context && context->end_index() >= m_ETA_INDEX) {
573  exp_id << eta(id);
574  if(context->end_index() >= m_PHI_INDEX) {
575  exp_id << phi(id);
576  }
577  }
578  return (0);
579 }
580 void JGTowerBase_ID::tower_id_checks ( int pos_neg, int sampling, int region,
581  int eta, int phi ) const
582 {
583  // Fill expanded id
585  id << pos_neg << sampling <<
586  region << eta << phi;
587 
588  if (!m_full_tower_range.match(id)) {
589  std::string errorMessage = "JGTowerBase_ID::tower_id() result is not OK: ID, range = "
590  + std::string(id) + " , " + (std::string)m_full_tower_range;
591  throw CaloID_Exception(errorMessage , 2);
592  }
593 }
594 
596  int eta, int phi ) const
597 {
598  // Fill expanded id
600 
601  IdContext context = region_context();
602  if (get_expanded_id(regionId, id, &context)) {
603  std::string errorMessage = "JGTowerBase_ID::tower_id(regionId) result is not OK: ID= "
604  + show_to_string(regionId) ;
605  throw CaloID_Exception(errorMessage , 2);
606  }
607 
608  id << eta << phi;
609 
610  if (!m_full_tower_range.match(id)) {
611  std::string errorMessage = "JGTowerBase_ID::tower_id(regionId,field values) result is not OK: ID, range = "
612  + std::string(id) + " , " + (std::string)m_full_tower_range;
613  throw CaloID_Exception(errorMessage , 2);
614  }
615 }
616 
617 void JGTowerBase_ID::region_id_checks (int pos_neg, int sampling, int region)const
618 {
619  // Fill expanded id
621  id << pos_neg << sampling << region ;
622 
623  if (!m_full_reg_range.match(id)) {
624  std::string errorMessage = "JGTowerBase_ID::region_id() result is not OK: ID, range = "
625  + std::string(id) + " , " + (std::string)m_full_reg_range;
626  throw CaloID_Exception(errorMessage , 2);
627  }
628 }
629 
630 int JGTowerBase_ID::initLevelsFromDict(const std::string& t_pre)
631 {
632  MsgStream log(m_msgSvc, "JGTowerBase_ID" );
633  std::stringstream strm;
634  std::stringstream strm1;
635  std::stringstream strm2;
636  std::stringstream strm3;
637  std::stringstream strm4;
638  std::stringstream strm5;
639  std::stringstream strm6;
640  std::stringstream strm7;
641  std::string strg;
642  std::string strg1;
643  std::string strg2;
644  std::string strg3;
645  std::string strg4;
646  std::string strg5;
647  std::string strg6;
648  std::string strg7;
649  if(!m_dict)
650  {
651  strg= "initLevelsFromDict - dictionary NOT initialized ";
652  if(m_msgSvc) {
653  log << MSG::ERROR << strg << endmsg;
654  }
655  else
656  {
657  std::cout << strg << std::endl;
658  }
659  return (1);
660  }
661 
662  // Find out which identifier field corresponds to each level.
663 
664  m_CALO_INDEX = 999 ;
665  m_DETZSIDE_INDEX = 999 ;
666  m_SAMPLING_INDEX = 999 ;
667  m_REGION_INDEX = 999 ;
668  m_ETA_INDEX = 999 ;
669  m_PHI_INDEX = 999 ;
670 
671  // Save index to a JGTOWER region for unpacking - search with region name
672  IdDictRegion* reg = m_dict->find_region(t_pre+"ower_0");
673  if (reg)
674  {
675  m_jgtower_region_index = reg->index();
676  }
677  else
678  {
679  strg = "initLevelsFromDict - unable to find jgtower region ";
680  if(m_msgSvc) {
681  log << MSG::ERROR << strg << endmsg;
682  }
683  else
684  {
685  std::cout << strg << std::endl;
686  }
687  return (1);
688  }
689 
690  // Fing a JGTOWER region
691  IdDictField* field = m_dict->find_field("subdet") ;
692  if (field) {
693  m_CALO_INDEX = field->index();
694  }
695  else
696  {
697  strg= "initLevelsFromDict - unable to find 'subdet' field ";
698  if(m_msgSvc)
699  {
700  log << MSG::ERROR << strg << endmsg;
701  }
702  else
703  {
704  std::cout << strg << std::endl;
705  }
706  return (1);
707  }
708 
709  field = m_dict->find_field("DetZside") ;
710  if (field) {
711  m_DETZSIDE_INDEX = field->index();
712  }
713  else
714  {
715  strg= "initLevelsFromDict - unable to find 'DetZside' field ";
716  if(m_msgSvc)
717  {
718  log << MSG::ERROR << strg << endmsg;
719  }
720  else
721  {
722  std::cout << strg << std::endl;
723  }
724  return (1);
725  }
726 
727  field = m_dict->find_field(t_pre+"sampling") ;
728  if (field) {
729  m_SAMPLING_INDEX = field->index();
730  }
731  else
732  {
733 
734  strg="initLevelsFromDict - unable to find '"+t_pre+"sampling' field ";
735  if(m_msgSvc)
736  {
737  log << MSG::ERROR << strg << endmsg;
738  }
739  else
740  {
741  std::cout << strg << std::endl;
742  }
743  return (1);
744  }
745 
746  field = m_dict->find_field(t_pre+"region") ;
747  if (field) {
748  m_REGION_INDEX = field->index();
749  }
750  else
751  {
752 
753  strg="initLevelsFromDict - unable to find 'region' field ";
754  if(m_msgSvc)
755  {
756  log << MSG::ERROR << strg << endmsg;
757  }
758  else
759  {
760  std::cout << strg << std::endl;
761  }
762  return (1);
763  }
764 
765  /* std::cout << "m_region= " << m_REGION_INDEX << std::endl; */
766 
767  field = m_dict->find_field(t_pre+"eta") ;
768  if (field) {
769  m_ETA_INDEX = field->index();
770  }
771  else
772  {
773  strg= "initLevelsFromDict - unable to find 'eta' field ";
774  if(m_msgSvc)
775  {
776  log << MSG::ERROR << strg << endmsg;
777  }
778  else
779  {
780  std::cout << strg << std::endl;
781  }
782  return (1);
783  }
784 
785  field = m_dict->find_field(t_pre+"phi") ;
786  if (field) {
787  m_PHI_INDEX = field->index();
788  }
789  else
790  {
791 
792  strg= "initLevelsFromDict - unable to find 'phi' field ";
793  if(m_msgSvc)
794  {
795  log << MSG::ERROR << strg << endmsg;
796  }
797  else
798  {
799  std::cout << strg << std::endl;
800  }
801  return (1);
802  }
803  // Set the field implementations
804 
806 
807  m_calo_impl = region.implementation(m_CALO_INDEX);
808  m_jgtower_impl = region.implementation(m_DETZSIDE_INDEX);
809  m_sampling_impl = region.implementation(m_SAMPLING_INDEX);
810  m_region_impl = region.implementation(m_REGION_INDEX);
811  m_eta_impl = region.implementation(m_ETA_INDEX);
812  m_phi_impl = region.implementation(m_PHI_INDEX);
813 
814  strm1 << m_calo_impl.show_to_string();
815  strm2 << m_jgtower_impl.show_to_string();
816  strm3 << m_sampling_impl.show_to_string();
817  strm4 << m_region_impl.show_to_string();
818  strm5 << m_eta_impl.show_to_string();
819  strm6 << m_phi_impl.show_to_string();
820  strg = "decode index and bit fields for each level: ";
821  strg1= "calo "+strm1.str();
822  strg2= "detzside "+strm2.str();
823  strg3= "sampling "+strm3.str();
824  strg4= "reg "+strm4.str();
825  strg5= "eta "+strm5.str();
826  strg6= "phi "+strm6.str();
827  if(m_msgSvc)
828  {
829  log << MSG::DEBUG << strg << endmsg;
830  log << MSG::DEBUG << strg1 << endmsg;
831  log << MSG::DEBUG << strg2 << endmsg;
832  log << MSG::DEBUG << strg3 << endmsg;
833  log << MSG::DEBUG << strg4 << endmsg;
834  log << MSG::DEBUG << strg5 << endmsg;
835  log << MSG::DEBUG << strg6 << endmsg;
836  }
837  else
838  {
839  std::cout << strg << std::endl;
840  std::cout << strg1 << std::endl;
841  std::cout << strg2 << std::endl;
842  std::cout << strg3 << std::endl;
843  std::cout << strg4 << std::endl;
844  std::cout << strg5 << std::endl;
845  std::cout << strg6 << std::endl;
846  }
847 
848  return(0) ;
849 }
850 
851 
853 {
854  MsgStream log(m_msgSvc, "JGTowerBase_ID" );
855  std::stringstream strm;
856  std::stringstream strm1;
857  std::stringstream strm2;
858  std::string strg;
859  std::string strg1;
860  std::string strg2;
861  // tower hash
864  unsigned int nids = 0;
865  std::set<Identifier> ids;
866  for (unsigned int i = 0; i < m_full_tower_range.size(); ++i) {
867  const Range& range = m_full_tower_range[i];
869  auto first = rit.begin();
870  auto last = rit.end();
871  for (; first != last; ++first) {
872  const ExpandedIdentifier& exp_id = (*first);
873  Identifier tow_id = tower_id ( exp_id[m_DETZSIDE_INDEX],
874  exp_id[m_SAMPLING_INDEX],
875  exp_id[m_REGION_INDEX] ,
876  exp_id[m_ETA_INDEX] ,
877  exp_id[m_PHI_INDEX] ) ;
878  if(!(ids.insert(tow_id)).second)
879  {
880  if(m_msgSvc)
881  {
882  log << MSG::ERROR << " init_hashes "
883  << " duplicated id for J/GTower id. nids= " << nids
884  << " compact Id " << endmsg;
885  }
886  else
887  {
888  std::cout << " JGTowerBase_ID::init_hashes "
889  << " Error: duplicated id for J/GTower id. nids= " << nids
890  << " compact Id " ;
891  (*first).show();
892  std::cout << " " << show_to_string(tow_id) << std::endl;
893  }
894  }
895  nids++;
896  }
897  }
898  if(ids.size() != m_tower_hash_max)
899  {
900  if( m_msgSvc)
901  {
902  log << MSG::ERROR << " init_hashes "
903  << " set size NOT EQUAL to hash max. size " << ids.size()
904  << " hash max " << m_tower_hash_max
905  << endmsg;
906  }
907  else
908  {
909  std::cout << " JGTowerBase_ID::init_hashes "
910  << " Error: set size NOT EQUAL to hash max. size " << ids.size()
911  << " hash max " << m_tower_hash_max
912  << std::endl;
913  }
914  return (1);
915  }
916 
917  nids=0;
918  std::set<Identifier>::const_iterator first = ids.begin();
919  std::set<Identifier>::const_iterator last = ids.end();
920  for (;first != last && nids < m_tower_vec.size(); ++first) {
921  m_tower_vec[nids] = (*first) ;
922  nids++;
923  }
924  // region hash
927  nids = 0;
928  ids.clear();
929  for (unsigned int i = 0; i < m_full_reg_range.size(); ++i) {
930  const Range& range = m_full_reg_range[i];
932  auto first = rit.begin();
933  auto last = rit.end();
934  for (; first != last; ++first) {
935  const ExpandedIdentifier& exp_id = (*first);
936  Identifier reg_id = region_id ( exp_id[m_DETZSIDE_INDEX],
937  exp_id[m_SAMPLING_INDEX],
938  exp_id[m_REGION_INDEX] );
939  if(!(ids.insert(reg_id)).second)
940  {
941  if(m_msgSvc)
942  {
943  log << MSG::ERROR << " JGTowerBase_ID::init_hashes "
944  << " duplicated id for region id. nids= " << nids
945  << " compact Id " << endmsg;
946  }
947  else
948  {
949  std::cout << " JGTowerBase_ID::init_hashes "
950  << " Error: duplicated id for region id. nids= " << nids
951  << " compact Id " ;
952  (*first).show();
953  std::cout << " " << show_to_string(reg_id) << std::endl;
954  std::cout << std::endl;
955  }
956  }
957  nids++;
958  }
959  }
960  if(ids.size() != m_calo_region_hash_max)
961  {
962  if(m_msgSvc)
963  {
964  log << MSG::ERROR << " JGTowerBase_ID::init_hashes "
965  << " set size NOT EQUAL to region hash max. size " << ids.size()
966  << " region hash max " << m_calo_region_hash_max
967  << endmsg;
968  }
969  else
970  {
971  std::cout << " JGTowerBase_ID::init_hashes "
972  << " Error: set size NOT EQUAL to region hash max. size " << ids.size()
973  << " region hash max " << m_calo_region_hash_max
974  << std::endl;
975  }
976  return (1);
977  }
978  nids=0;
979  first = ids.begin();
980  last = ids.end();
981  for (;first != last && nids < m_region_vec.size(); ++first) {
982  m_region_vec[nids] = (*first) ;
983  nids++;
984  }
985 
986  return (0);
987 }
988 
989 
990 
992 {
993  MsgStream log(m_msgSvc, "JGTowerBase_ID" );
994  // std::cout << " JGTowerBase_ID::init_neighbors " << std::endl;
995  // std::cout << " m_tower_hash_max, NOT_VALID_HASH = " << m_tower_hash_max << " " << NOT_VALID_HASH << std::endl;
996 
1001  for (unsigned int i = 0; i < m_full_tower_range.size(); ++i) {
1002  const Range& range = m_full_tower_range[i];
1003  const Range::field& eta_field = range[m_ETA_INDEX];
1004  const Range::field& phi_field = range[m_PHI_INDEX];
1006  auto first = rit.begin();
1007  auto last = rit.end();
1008  for (; first != last; ++first) {
1009  const ExpandedIdentifier& exp_id = (*first);
1010  ExpandedIdentifier::element_type previous_eta;
1012  ExpandedIdentifier::element_type previous_phi;
1014  bool peta = eta_field.get_previous(exp_id[m_ETA_INDEX], previous_eta);
1015  bool neta = eta_field.get_next (exp_id[m_ETA_INDEX], next_eta);
1016  bool pphi = phi_field.get_previous(exp_id[m_PHI_INDEX], previous_phi);
1017  bool nphi = phi_field.get_next (exp_id[m_PHI_INDEX], next_phi);
1018 
1019  IdContext tcontext = tower_context();
1020 
1021  // Get and save region id to speed things up
1022  Identifier reg_id = region_id ( exp_id[m_DETZSIDE_INDEX],
1023  exp_id[m_SAMPLING_INDEX],
1024  exp_id[m_REGION_INDEX] );
1025 
1026  // First get primary hash id
1027  IdentifierHash hash_id;
1028  Identifier id = tower_id (reg_id,
1029  exp_id[m_ETA_INDEX],
1030  exp_id[m_PHI_INDEX]);
1031  if (get_hash(id, hash_id,&tcontext))
1032  {
1033  if( m_msgSvc )
1034  {
1035  log << MSG::ERROR << " init_neighbors - unable to get hash, compact = " << endmsg;
1036  }
1037  else
1038  {
1039  std::cout << " JGTowerBase_ID::init_neighbors - unable to get hash, compact = ";
1040  exp_id.show();
1041  std::cout << std::endl;
1042  }
1043  return (1);
1044  }
1045 
1046  // index for the subsequent arrays
1047  unsigned short index = hash_id;
1048  assert (hash_id < m_prev_phi_vec.size());
1049  assert (hash_id < m_next_phi_vec.size());
1050  assert (hash_id < m_prev_eta_vec.size());
1051  assert (hash_id < m_next_eta_vec.size());
1052 
1053  if (pphi) {
1054  // Get previous phi hash id
1055  id = tower_id (reg_id,
1056  exp_id[m_ETA_INDEX],
1057  previous_phi);
1058  // forward to compact -> hash
1059  if (get_hash(id, hash_id,&tcontext))
1060  {
1061  if( m_msgSvc )
1062  {
1063  log << MSG::ERROR << " init_neighbors - unable to get previous phi hash, exp/compact " << endmsg;
1064  }
1065  else
1066  {
1067  std::cout << " JGTowerBase_ID::init_neighbors - unable to get previous phi hash, exp/compact ";
1068  exp_id.show();
1069  std::cout << " "
1070  << std::endl;
1071  }
1072  return (1);
1073  }
1074  m_prev_phi_vec[index] = hash_id;
1075  }
1076 
1077  if (nphi) {
1078  // Get next phi hash id
1079  id = tower_id (reg_id,
1080  exp_id[m_ETA_INDEX],
1081  next_phi);
1082  // forward to compact -> hash
1083  if (get_hash(id, hash_id,&tcontext))
1084  {
1085  if(m_msgSvc)
1086  {
1087  log << MSG::ERROR << " init_neighbors - unable to get next phi hash, exp/compact "<<endmsg;
1088  }
1089  else
1090  {
1091  std::cout << " JGTowerBase_ID::init_neighbors - unable to get next phi hash, exp/compact ";
1092  exp_id.show();
1093  std::cout << " "
1094  << std::endl;
1095  }
1096  return (1);
1097  }
1098  m_next_phi_vec[index] = hash_id;
1099  }
1100  if (peta) {
1101  // Get previous eta hash id
1102  id = tower_id (reg_id,
1103  previous_eta,
1104  exp_id[m_PHI_INDEX]);
1105  // forward to compact -> hash
1106  if (get_hash(id, hash_id,&tcontext))
1107  {
1108  if( m_msgSvc )
1109  {
1110  log << MSG::ERROR << " init_neighbors - unable to get previous eta hash, exp/compact "<< endmsg;
1111  }
1112  else
1113  {
1114  std::cout << " JGTowerBase_ID::init_neighbors - unable to get previous eta hash, exp/compact ";
1115  exp_id.show();
1116  std::cout << " "
1117  << std::endl;
1118  }
1119  return (1);
1120  }
1121  m_prev_eta_vec[index] = hash_id;
1122  }
1123 
1124  if (neta) {
1125  // Get next eta hash id
1126  id = tower_id (reg_id,
1127  next_eta,
1128  exp_id[m_PHI_INDEX]);
1129  // forward to compact -> hash
1130  if (get_hash(id, hash_id,&tcontext))
1131  {
1132  if( m_msgSvc )
1133  {
1134  log << MSG::ERROR << " init_neighbors - unable to get next eta hash, exp/compact ";
1135  }
1136  else
1137  {
1138  std::cout << " JGTowerBase_ID::init_neighbors - unable to get next eta hash, exp/compact ";
1139  exp_id.show();
1140  std::cout << " "
1141  << std::endl;
1142  }
1143  return (1);
1144  }
1145  m_next_eta_vec[index] = hash_id;
1146  } // end neta cond
1147  } // end loop on identifiers
1148  } // end loop on ranges
1149  return (0);
1150 }
1151 
1152 int
1154 {
1155  m_vecOfDictRegions.clear();
1157  IdContext region_cntxt = region_context();
1158  ExpandedIdentifier expRegId;
1159  for (unsigned int i = 0; i < m_calo_region_hash_max; ++i) {
1160  Identifier id = region_id(i);
1161  if(!get_expanded_id(id, expRegId, &region_cntxt)) {
1162  m_vecOfDictRegions.push_back (m_dict->find_region(expRegId,group_name));
1163  }
1164  }
1165  //assert (m_vecOfDictRegions.size() == regions().hash_max());
1166  return 0;
1167 }
IdDictDictionary::find_region
IdDictRegion * find_region(const std::string &region_name) const
Definition: IdDictDictionary.cxx:92
JGTowerBase_ID::get_prev_in_phi
int get_prev_in_phi(const IdentifierHash &id, IdentifierHash &prev) const
access to hashes for neighbours in phi – towers only (no extended) return == 0 for neighbours found
Definition: JGTowerBase_ID.cxx:516
ConstRangeIterator
Definition: RangeIterator.h:46
JGTowerBase_ID::m_vecOfDictRegions
std::vector< const IdDictRegion * > m_vecOfDictRegions
List of IdDictRegion objects.
Definition: JGTowerBase_ID.h:327
JGTowerBase_ID::eta
int eta(const Identifier id) const
return eta according to :
Definition: JGTowerBase_ID.h:484
IdDictDictionary::build_multirange
MultiRange build_multirange() const
Get MultiRange for full dictionary.
Definition: IdDictDictionary.cxx:291
JGTowerBase_ID::fill_vec_of_dict_regions
int fill_vec_of_dict_regions(const std::string &group_name="")
Definition: JGTowerBase_ID.cxx:1153
AtlasDetectorID::initialize_from_dictionary
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
Definition: AtlasDetectorID.cxx:250
get_generator_info.result
result
Definition: get_generator_info.py:21
JGTowerBase_ID::phi0
float phi0(const Identifier regId) const
Return the minimum phi of region, or NOT_VALID.
Definition: JGTowerBase_ID.cxx:508
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
JGTowerBase_ID::m_prev_eta_vec
std::vector< unsigned short > m_prev_eta_vec
Definition: JGTowerBase_ID.h:323
CaloID_Exception
Exception class for Calo Identifiers.
Definition: CaloID_Exception.h:20
IdDictFieldImplementation::show_to_string
std::string show_to_string(void) const
Definition: IdDictFieldImplementation.cxx:38
JGTowerBase_ID::tower_id_checks
void tower_id_checks(int pos_neg, int sampling, int region, int eta, int phi) const
Definition: JGTowerBase_ID.cxx:580
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
JGTowerBase_ID::calo_region_hash
IdentifierHash calo_region_hash(const Identifier id) const
Definition: JGTowerBase_ID.cxx:155
index
Definition: index.py:1
IdDictDictionary::region
const IdDictRegion & region(size_t i) const
Region at index i.
Definition: IdDictDictionary.h:341
JGTowerBase_ID::HashCalc::m_etamin
size_type m_etamin
Definition: JGTowerBase_ID.h:342
JGTowerBase_ID::tower_hash
IdentifierHash tower_hash(Identifier towerId) const
create hash id from tower id
Definition: JGTowerBase_ID.h:586
IdentifierField::get_minimum
element_type get_minimum() const
Query the values.
Definition: IdentifierField.h:121
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
JGTowerBase_ID::phi
int phi(const Identifier id) const
return phi according to :
Definition: JGTowerBase_ID.h:490
IdContext::end_index
size_type end_index() const
Definition: IdContext.h:46
AtlasDetectorID::calo_field_value
int calo_field_value() const
Definition: AtlasDetectorID.h:618
JGTowerBase_ID::get_hash
virtual int get_hash(const Identifier &id, IdentifierHash &hash_id, const IdContext *context=0) const
create hash id from compact id (return == 0 for OK)
Definition: JGTowerBase_ID.cxx:116
JGTowerBase_ID::m_sampling_impl
IdDictFieldImplementation m_sampling_impl
Definition: JGTowerBase_ID.h:351
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
ExpandedIdentifier::add
void add(element_type value)
Append a value into a new field.
skel.it
it
Definition: skel.GENtoEVGEN.py:407
JGTowerBase_ID::m_next_eta_vec
std::vector< unsigned short > m_next_eta_vec
Definition: JGTowerBase_ID.h:324
JGTowerBase_ID::sampling
int sampling(const Identifier id) const
return sampling according to :
Definition: JGTowerBase_ID.h:473
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
JGTowerBase_ID::region
int region(const Identifier id) const
return region according to :
Definition: JGTowerBase_ID.h:478
ExpandedIdentifier::show
void show() const
Send to std::cout.
Definition: DetectorDescription/Identifier/src/ExpandedIdentifier.cxx:60
JGTowerBase_ID::tower_context
IdContext tower_context() const
access to IdContext's which define which levels of fields are contained in the id
Definition: JGTowerBase_ID.cxx:53
AtlasDetectorID::m_msgSvc
IMessageSvc * m_msgSvc
pointer to the message service
Definition: AtlasDetectorID.h:369
JGTowerBase_ID::phi_max
int phi_max(const Identifier regId) const
min value of phi index (-999 == failure)
Definition: JGTowerBase_ID.cxx:466
JGTowerBase_ID::get_prev_in_eta
int get_prev_in_eta(const IdentifierHash &id, IdentifierHash &prev) const
access to hashes for neighbours in eta – towers only (no extended) return == 0 for neighbours found
Definition: JGTowerBase_ID.cxx:540
IdentifierField::get_maximum
element_type get_maximum() const
Definition: IdentifierField.h:130
JGTowerBase_ID::region_context
IdContext region_context() const
access to IdContext's which define which levels of fields are contained in the id
Definition: JGTowerBase_ID.cxx:46
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
JGTowerBase_ID::m_PHI_INDEX
size_type m_PHI_INDEX
Definition: JGTowerBase_ID.h:311
IdDictDictionary::name
const std::string & name() const
Dictionary name.
Definition: IdDictDictionary.h:323
JGTowerBase_ID::m_region_impl
IdDictFieldImplementation m_region_impl
Definition: JGTowerBase_ID.h:352
JGTowerBase_ID::m_CALO_INDEX
size_type m_CALO_INDEX
Definition: JGTowerBase_ID.h:306
JGTowerBase_ID::m_region_vec
std::vector< Identifier > m_region_vec
Definition: JGTowerBase_ID.h:320
JGTowerBase_ID::m_pnz_reg_impl
IdDictFieldImplementation m_pnz_reg_impl
Definition: JGTowerBase_ID.h:356
IdDictFieldImplementation::unpack
int unpack(Identifier id) const
Identifier manipulation methods.
Definition: IdDictFieldImplementation.h:147
JGTowerBase_ID::m_prev_phi_vec
std::vector< unsigned short > m_prev_phi_vec
Definition: JGTowerBase_ID.h:321
JGTowerBase_ID::get_next_in_eta
int get_next_in_eta(const IdentifierHash &id, IdentifierHash &next) const
access to hashes for neighbours in eta – towers only (no extended) return == 0 for neighbours found
Definition: JGTowerBase_ID.cxx:552
IdDictDictionary::find_field
IdDictField * find_field(const std::string &name) const
Definition: IdDictDictionary.cxx:36
JGTowerBase_ID::m_full_reg_range
MultiRange m_full_reg_range
Definition: JGTowerBase_ID.h:315
IdDictRegion
Definition: IdDictRegion.h:20
JGTowerBase_ID::m_calo_region_hash_max
size_type m_calo_region_hash_max
Definition: JGTowerBase_ID.h:318
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
JGTowerBase_ID::m_hash_calcs
std::vector< HashCalc > m_hash_calcs
Definition: JGTowerBase_ID.h:345
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
JGTowerBase_ID::m_SAMPLING_INDEX
size_type m_SAMPLING_INDEX
Definition: JGTowerBase_ID.h:308
IdDictDefs.h
JGTowerBase_ID::m_jgtower_region_index
size_type m_jgtower_region_index
Definition: JGTowerBase_ID.h:305
JGTowerBase_ID::initialize_base_from_dictionary
virtual int initialize_base_from_dictionary(const IdDictMgr &dict_mgr, const std::string &t_pre)
initialization from the identifier dictionary
Definition: JGTowerBase_ID.cxx:165
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
IdDictMgr
Definition: IdDictMgr.h:14
IdContext::begin_index
size_type begin_index() const
Definition: IdContext.h:45
StrFormat.h
Provide helper functions to create formatted strings.
IdDictMgr::find_dictionary
IdDictDictionary * find_dictionary(const std::string &name) const
Access dictionary by name.
Definition: IdDictMgr.cxx:115
JGTowerBase_ID::HashCalc
small class holding the starting hash value, the min eta and the number of phi bins of each region
Definition: JGTowerBase_ID.h:335
fillPileUpNoiseLumi.next
next
Definition: fillPileUpNoiseLumi.py:52
IdentifierField::empty
bool empty() const
If true, this field does not have any constraints, and may hold any value representable by element_ty...
Definition: IdentifierField.h:182
lumiFormat.i
int i
Definition: lumiFormat.py:85
IdDictFieldImplementation::set_bits
void set_bits(size_type bits, size_type bits_offset)
Definition: IdDictFieldImplementation.h:278
JGTowerBase_ID::JGTowerBase_ID
JGTowerBase_ID(const std::string &name, const std::string &group)
Definition: JGTowerBase_ID.cxx:23
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
JGTowerBase_ID::HashCalc::m_nphi
size_type m_nphi
Definition: JGTowerBase_ID.h:343
IdDictFieldImplementation::bits_offset
size_type bits_offset() const
Definition: IdDictFieldImplementation.h:208
JGTowerBase_ID::m_tower_vec
std::vector< Identifier > m_tower_vec
Definition: JGTowerBase_ID.h:319
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
mc.group_name
group_name
Definition: mc.PhPy8EG_A14NNPDF23_NNLOPS_example.py:33
IdentifierField::get_next
bool get_next(element_type current, element_type &next) const
Definition: IdentifierField.cxx:149
ConstRangeIterator::begin
ConstRangeIterator begin() const
Definition: RangeIterator.cxx:18
JGTowerBase_ID::m_REGION_INDEX
size_type m_REGION_INDEX
Definition: JGTowerBase_ID.h:309
JGTowerBase_ID::~JGTowerBase_ID
virtual ~JGTowerBase_ID()
JGTowerBase_ID::init_hashes
int init_hashes()
Definition: JGTowerBase_ID.cxx:852
JGTowerBase_ID::m_next_phi_vec
std::vector< unsigned short > m_next_phi_vec
Definition: JGTowerBase_ID.h:322
JGTowerBase_ID::eta0
float eta0(const Identifier regId) const
Return the minimum eta of region, or NOT_VALID.
Definition: JGTowerBase_ID.cxx:501
JGTowerBase_ID::m_dict
const IdDictDictionary * m_dict
Definition: JGTowerBase_ID.h:313
AtlasDetectorID::register_dict_tag
int register_dict_tag(const IdDictMgr &dict_mgr, const std::string &dict_name)
Register the file and tag names for a particular IdDict dictionary.
Definition: AtlasDetectorID.cxx:196
JGTowerBase_ID::region_id_checks
void region_id_checks(int pos_neg, int sampling, int region) const
Definition: JGTowerBase_ID.cxx:617
IdDictDictionary::get_label_value
int get_label_value(const std::string &field, const std::string &label, int &value) const
Definition: IdDictDictionary.cxx:64
JGTowerBase_ID::init_neighbors
int init_neighbors()
Definition: JGTowerBase_ID.cxx:991
CxxUtils::strformat
std::string strformat(const char *fmt,...)
return a std::string according to a format fmt and varargs
Definition: StrFormat.cxx:49
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:239
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
JGTowerBase_ID::region_id
Identifier region_id(int pos_neg, int sampling, int region) const
build a region (of towers) identifier
Definition: JGTowerBase_ID.h:573
IdentifierHash.h
JGTowerBase_ID::m_jgtower_impl
IdDictFieldImplementation m_jgtower_impl
Definition: JGTowerBase_ID.h:350
JGTowerBase_ID::m_ETA_INDEX
size_type m_ETA_INDEX
Definition: JGTowerBase_ID.h:310
RangeIterator.h
Range
A Range describes the possible ranges for the field values of an ExpandedIdentifier.
Definition: DetectorDescription/Identifier/Identifier/Range.h:29
AtlasDetectorID::calo_exp
ExpandedIdentifier calo_exp(void) const
Definition: AtlasDetectorID.h:508
JGTowerBase_ID::m_tower_hash_max
size_type m_tower_hash_max
Definition: JGTowerBase_ID.h:317
JGTowerBase_ID::get_id
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const
create compact id from hash id (return == 0 for OK)
Definition: JGTowerBase_ID.cxx:60
JGTowerBase_ID::m_DETZSIDE_INDEX
size_type m_DETZSIDE_INDEX
Definition: JGTowerBase_ID.h:307
JGTowerBase_ID::tower_id
Identifier tower_id(int pos_neg, int sampling, int region, int eta, int phi) const
build a tower identifier
Definition: JGTowerBase_ID.h:384
MultiRange::match
int match(const ExpandedIdentifier &id) const
Match an identifier.
Definition: MultiRange.cxx:57
JGTowerBase_ID::get_next_in_phi
int get_next_in_phi(const IdentifierHash &id, IdentifierHash &next) const
access to hashes for neighbours in phi – towers only (no extended) return == 0 for neighbours found
Definition: JGTowerBase_ID.cxx:528
DeMoScan.index
string index
Definition: DeMoScan.py:362
AtlasDetectorID::reinitialize
bool reinitialize(const IdDictMgr &dict_mgr)
Test whether an idhelper should be reinitialized based on the change of tags.
Definition: AtlasDetectorID.cxx:216
JGTowerBase_ID::NOT_VALID_HASH
@ NOT_VALID_HASH
Definition: JGTowerBase_ID.h:287
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
JGTowerBase_ID::pos_neg
int pos_neg(const Identifier id) const
return pos_neg according to :
Definition: JGTowerBase_ID.h:467
JGTowerBase_ID::tower_hash_binary_search
IdentifierHash tower_hash_binary_search(Identifier towerId) const
create hash id from tower id – method NOT optimised, please use tower_hash() above
Definition: JGTowerBase_ID.h:593
AtlasDetectorID::show_to_string
std::string show_to_string(Identifier id, const IdContext *context=0, char sep='.') const
or provide the printout in string form
Definition: AtlasDetectorID.cxx:360
JGTowerBase_ID::eta_max
int eta_max(const Identifier regId) const
max value of eta index (-999 == failure)
Definition: JGTowerBase_ID.cxx:445
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
MultiRange::size
size_type size() const
Definition: MultiRange.cxx:70
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
JGTowerBase_ID::HashCalc::m_hash
IdentifierHash m_hash
Definition: JGTowerBase_ID.h:341
JGTowerBase_ID::initLevelsFromDict
int initLevelsFromDict(const std::string &t_pre)
Definition: JGTowerBase_ID.cxx:630
JGTowerBase_ID::eta_min
int eta_min(const Identifier regId) const
min value of eta index (-999 == failure)
Definition: JGTowerBase_ID.cxx:419
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
IdentifierField
This is the individual specification for the range of one ExpandedIdentifier IdentifierField.
Definition: IdentifierField.h:83
JGTowerBase_ID::get_expanded_id
int get_expanded_id(const Identifier &id, ExpandedIdentifier &exp_id, const IdContext *context) const
create expanded Identifier from Identifier (return == 0 for OK)
Definition: JGTowerBase_ID.cxx:564
ExpandedIdentifier::clear
void clear()
Erase all fields.
IdentifierField::get_previous
bool get_previous(element_type current, element_type &previous) const
Returns false if previous/next is at end of range, or not possible.
Definition: IdentifierField.cxx:106
JGTowerBase_ID::phiGranularity
float phiGranularity(const Identifier regId) const
Return the phi granularity of a region, or NOT_VALID.
Definition: JGTowerBase_ID.cxx:494
IdDictRegion::index
size_t index() const
Definition: IdDictRegion.h:119
JGTowerBase_ID::m_phi_impl
IdDictFieldImplementation m_phi_impl
Definition: JGTowerBase_ID.h:354
ConstRangeIterator::end
ConstRangeIterator end() const
Definition: RangeIterator.cxx:32
IdDictField
Definition: IdDictField.h:15
MultiRange::cardinality
size_type cardinality() const
Computes a possible cardinality from all ranges.
Definition: MultiRange.cxx:82
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
LArCellBinning.etamin
etamin
Definition: LArCellBinning.py:137
ExpandedIdentifier::element_type
int element_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:106
JGTowerBase_ID::m_full_tower_range
MultiRange m_full_tower_range
Definition: JGTowerBase_ID.h:316
JGTowerBase_ID::m_calo_impl
IdDictFieldImplementation m_calo_impl
Definition: JGTowerBase_ID.h:349
JGTowerBase_ID.h
Factor out code common between JTower_ID and GTower_ID.
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
JGTowerBase_ID::etaGranularity
float etaGranularity(const Identifier regId) const
Return the eta granularity of a region, or NOT_VALID.
Definition: JGTowerBase_ID.cxx:487
JGTowerBase_ID::NOT_VALID
@ NOT_VALID
Definition: JGTowerBase_ID.h:33
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:52
IdDictFieldImplementation::size_type
Identifier::size_type size_type
Definition: IdDictFieldImplementation.h:62
JGTowerBase_ID::m_eta_impl
IdDictFieldImplementation m_eta_impl
Definition: JGTowerBase_ID.h:353
IdDictFieldImplementation::bits
size_type bits() const
Definition: IdDictFieldImplementation.h:202
Identifier
Definition: IdentifierFieldParser.cxx:14