ATLAS Offline Software
CscIdHelper.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8  m_module_hashes.fill(-1);
10 }
11 
14  int status = 0;
15 
16  // Check whether this helper should be reinitialized
17  if (!reinitialize(dict_mgr)) {
18  ATH_MSG_INFO("Request to reinitialize not satisfied - tags have not changed");
19  return 0;
20  } else {
21  ATH_MSG_DEBUG("(Re)initialize");
22  }
23 
25  if (AtlasDetectorID::initialize_from_dictionary(dict_mgr)) return 1;
26 
27  // Register version of the MuonSpectrometer dictionary
28  if (register_dict_tag(dict_mgr, "MuonSpectrometer")) return 1;
29 
30  m_dict = dict_mgr.find_dictionary("MuonSpectrometer");
31  if (!m_dict) {
32  ATH_MSG_ERROR(" initialize_from_dict - cannot access MuonSpectrometer dictionary ");
33  return 1;
34  }
35 
37 
38  if (initLevelsFromDict()) return 1;
39 
40  int index = technologyIndex("CSC");
41  if (index == -1) {
42  ATH_MSG_DEBUG("initLevelsFromDict - there are no CSC entries in the dictionary! ");
43  return 0;
44  }
45 
46  IdDictField* field = m_dict->find_field("chamberLayer");
47  if (field) {
48  m_CHAMBERLAYER_INDEX = field->m_index;
49  } else {
50  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'chamberLayer' field ");
51  status = 1;
52  }
53 
54  field = m_dict->find_field("wireLayer");
55  if (field) {
56  m_WIRELAYER_INDEX = field->m_index;
57  } else {
58  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'wireLayer' field ");
59  status = 1;
60  }
61 
62  field = m_dict->find_field("cscMeasuresPhi");
63  if (field) {
64  m_MEASURESPHI_INDEX = field->m_index;
65  } else {
66  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscMeasuresPhi' field ");
67  status = 1;
68  }
69 
70  field = m_dict->find_field("cscStrip");
71  if (field) {
72  m_CHANNEL_INDEX = field->m_index;
73  } else {
74  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscStrip' field ");
75  status = 1;
76  }
77 
78  // initialize the multilayer index
80 
82 
83  IdDictGroup* cscGroup = m_dict->find_group("csc");
84  if (!cscGroup) {
85  ATH_MSG_ERROR("Cannot find csc group");
86  } else {
87  m_GROUP_INDEX = cscGroup->regions()[0]->m_index;
88  }
89 
90  const IdDictRegion& region = *m_dict->m_regions[m_GROUP_INDEX];
98 
99  ATH_MSG_DEBUG(" CSC decode index and bit fields for each level: " << std::endl
100  << " muon " << m_muon_impl.show_to_string() << std::endl
101  << " station " << m_sta_impl.show_to_string() << std::endl
102  << " eta " << m_eta_impl.show_to_string() << std::endl
103  << " phi " << m_phi_impl.show_to_string() << std::endl
104  << " technology " << m_tec_impl.show_to_string() << std::endl
105  << " cham layer " << m_cla_impl.show_to_string() << std::endl
106  << " layer " << m_lay_impl.show_to_string() << std::endl
107  << " phi " << m_mea_impl.show_to_string() << std::endl
108  << " strip " << m_str_impl.show_to_string());
109 
114 
116  int muonField = -1;
117  const IdDictDictionary* atlasDict = dict_mgr.find_dictionary("ATLAS");
118  if (atlasDict->get_label_value("subdet", "MuonSpectrometer", muonField)) {
119  ATH_MSG_ERROR("Could not get value for label 'MuonSpectrometer' of field "
120  << "'subdet' in dictionary " << atlasDict->m_name);
121  return 1;
122  }
123 
125 
127  region_id.add(muonField);
128  Range prefix;
129  MultiRange muon_range = m_dict->build_multirange(region_id, prefix, "technology");
130  if (muon_range.size() > 0) {
131  ATH_MSG_INFO("MultiRange built successfully to Technology: "
132  << "MultiRange size is " << muon_range.size());
133  } else {
134  ATH_MSG_ERROR("Muon MultiRange is empty for modules");
135  }
136 
137  // Build MultiRange down to "detector element" for all mdt regions
138 
139  ExpandedIdentifier detectorElement_region;
140  detectorElement_region.add(muonField);
141  Range detectorElement_prefix;
142  MultiRange muon_detectorElement_range = m_dict->build_multirange(detectorElement_region, detectorElement_prefix, "chamberLayer");
143  if (muon_detectorElement_range.size() > 0) {
144  ATH_MSG_INFO("MultiRange built successfully to detector element: "
145  << "Multilayer MultiRange size is " << muon_detectorElement_range.size());
146  } else {
147  ATH_MSG_ERROR("Muon CSC detector element MultiRange is empty");
148  }
149 
151 
152  ExpandedIdentifier csc_region;
153  csc_region.add(muonField);
154  Range csc_prefix;
155  MultiRange muon_channel_range = m_dict->build_multirange(csc_region, csc_prefix, "cscStrip");
156  if (muon_channel_range.size() > 0) {
157  ATH_MSG_INFO("MultiRange built successfully to cscStrip: "
158  << "MultiRange size is " << muon_channel_range.size());
159  } else {
160  ATH_MSG_ERROR("Muon MultiRange is empty for channels");
161  }
162 
170  int cscField = -1;
171  status = m_dict->get_label_value("technology", "CSC", cscField);
172 
173  for (int i = 0; i < (int)muon_range.size(); ++i) {
174  const Range& range = muon_range[i];
175  if (range.fields() > m_TECHNOLOGY_INDEX) {
177  if (field.match((ExpandedIdentifier::element_type)cscField)) {
179  ATH_MSG_DEBUG("field size is " << (int)range.cardinality() << " field index = " << i);
180  }
181  }
182  }
183 
184  for (int j = 0; j < (int)muon_detectorElement_range.size(); ++j) {
185  const Range& range = muon_detectorElement_range[j];
186  if (range.fields() > m_TECHNOLOGY_INDEX) {
188  if (field.match((ExpandedIdentifier::element_type)cscField)) {
190  ATH_MSG_DEBUG("detector element field size is " << (int)range.cardinality() << " field index = " << j);
191  }
192  }
193  }
194 
195  for (int j = 0; j < (int)muon_channel_range.size(); ++j) {
196  const Range& range = muon_channel_range[j];
197  if (range.fields() > m_TECHNOLOGY_INDEX) {
199  if (field.match((ExpandedIdentifier::element_type)cscField)) {
201  ATH_MSG_DEBUG("channel field size is " << (int)range.cardinality() << " field index = " << j);
202  }
203  }
204  }
205 
207 
208  if (m_full_module_range.size() == 0) {
209  ATH_MSG_ERROR("CSC MultiRange ID is empty for modules");
210  status = 1;
211  }
212 
214 
215  if (m_full_detectorElement_range.size() == 0) {
216  ATH_MSG_ERROR("CSC MultiRange ID is empty for detector elements");
217  status = 1;
218  }
219 
221 
222  if (m_full_channel_range.size() == 0) {
223  ATH_MSG_ERROR("CSC MultiRange ID is empty for channels");
224  status = 1;
225  }
226 
228 
229  ATH_MSG_INFO("Initializing CSC hash indices ... ");
230  status = init_hashes();
231  status = init_detectorElement_hashes(); // for chamber layer - a chamber
235 
237 
238  ATH_MSG_INFO("Initializing CSC hash indices for finding neighbors ... ");
240 
241  // now we have to set the stripMax values (for the stripMax(id) function)
242  // this could be also done on an event-by-event basis as for stripMin(id)
243  // however, for all existing layouts there are only 2 possible values for stripMax,
244  // namely those for layers which measure phi (measuresPhi(id)=true) and the rest.
245  // thus, we initialize 2 member variables here to speed up calling the function during runtime
246  // loop on the channel Identifiers and check (for consistency!) that really only
247  // two maximum numbers of strips (w/o measuresPhi) are around
248  ExpandedIdentifier expId;
249  IdContext strip_context = channel_context();
250  for (const auto& id : m_channel_vec) {
251  if (get_expanded_id(id, expId, &strip_context)) {
252  ATH_MSG_ERROR("Failed to retrieve ExpandedIdentifier from Identifier " << id.get_compact());
253  return 1;
254  }
255  bool measPhi = measuresPhi(id);
256  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
257  const Range& range = m_full_channel_range[i];
258  if (range.match(expId)) {
259  const Range::field& phi_field = range[m_CHANNEL_INDEX];
260  if (!phi_field.has_maximum()) {
261  ATH_MSG_ERROR("Range::field for phi at position " << i << " does not have a maximum");
262  return 1;
263  }
264  unsigned int max = phi_field.get_maximum();
265  if (measPhi) {
266  if (m_stripMaxPhi != UINT_MAX && m_stripMaxPhi != max) {
267  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxPhi=" << m_stripMaxPhi);
268  return 1;
269  } else
270  m_stripMaxPhi = max;
271  } else {
272  if (m_stripMaxEta != UINT_MAX && m_stripMaxEta != max) {
273  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxEta=" << m_stripMaxEta);
274  return 1;
275  } else
276  m_stripMaxEta = max;
277  }
278  }
279  }
280  }
281 
282  // check whether the current layout contains chamberLayer 1 Identifiers (pre-Run3) in the vector of module Identifiers
283  if (!m_module_vec.empty() && chamberLayer(m_module_vec.at(0)) == 1) m_hasChamLay1 = true;
284  m_init = true;
285  return (status);
286 }
287 
288 inline unsigned int CscIdHelper::moduleHashIdx(const Identifier& id) const{
291  constexpr unsigned int C = s_phiDim;
292  constexpr unsigned int BxC = C*s_etaDim;
293  const int stEta = stationEta(id);
294  return (stationName(id) - m_stationShift)*BxC + (stEta + s_etaDim/2 - (stEta>0))*C + (stationPhi(id) -1);
295 }
296 inline unsigned int CscIdHelper::detEleHashIdx(const Identifier& id) const{
297  return moduleHashIdx(id) *s_mlDim + (chamberLayer(id) -1);
298 }
299 
301 
303  unsigned int hash_max = module_hash_max();
304  for (unsigned int i = 0; i < hash_max; ++i) {
305  const Identifier& id = m_module_vec[i];
306  const unsigned idx = moduleHashIdx(id);
307  if (idx >= m_module_hashes.size() || m_module_hashes[idx] < hash_max){
308  ATH_MSG_FATAL("Failed to assign module hash to "<<show_to_string(id));
309  return 1;
310  }
311  m_module_hashes[idx] = i;
312  }
313 
314  hash_max = detectorElement_hash_max();
315  for (unsigned int i = 0; i < hash_max; ++i) {
316  const Identifier& id = m_detectorElement_vec[i];
317  const unsigned idx = detEleHashIdx(id);
318  if (idx >= m_detectorElement_hashes.size() || m_detectorElement_hashes[idx] < hash_max){
319  ATH_MSG_FATAL("Failed to assign detector hash to "<<show_to_string(id));
320  return 1;
321  }
323  }
324 
325  return 0;
326 }
327 
329  const unsigned int idx = moduleHashIdx(id);
330  if (idx >= m_module_hashes.size()) return 1;
331  hash_id = m_module_hashes[idx];
332  return 0;
333 }
335  const unsigned int idx = detEleHashIdx(id);
336  if (idx >= m_detectorElement_hashes.size()) return 1;
337  hash_id = m_detectorElement_hashes[idx];
338  return 0;
339 }
340 
341 
342 
343 void CscIdHelper::idChannels(const Identifier& id, std::vector<Identifier>& vect) const {
344  vect.clear();
345  Identifier parent = parentID(id);
346  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
347  const Range& range = m_full_channel_range[i];
348  Range::const_identifier_factory first = range.factory_begin();
349  Range::const_identifier_factory last = range.factory_end();
350  for (; first != last; ++first) {
351  Identifier child;
352  get_id((*first), child);
353  if (parentID(child) == parent) vect.push_back(child);
354  }
355  }
356 }
357 
359  ExpandedIdentifier expId;
360  IdContext eta_context(expId, 0, m_ETA_INDEX);
361  if (!get_expanded_id(id, expId, &eta_context)) {
362  int result = -999;
363  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
364  const Range& range = m_full_module_range[i];
365  if (range.match(expId)) {
366  const Range::field& eta_field = range[m_ETA_INDEX];
367  if (eta_field.has_minimum()) {
368  int etamin = eta_field.get_minimum();
369  if (-999 == result) {
370  result = etamin;
371  } else {
372  if (etamin < result) result = etamin;
373  }
374  }
375  }
376  }
377  return (result);
378  }
379  return (999);
380 }
381 
383  ExpandedIdentifier expId;
384  IdContext eta_context(expId, 0, m_ETA_INDEX);
385  if (!get_expanded_id(id, expId, &eta_context)) {
386  int result = -999;
387  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
388  const Range& range = m_full_module_range[i];
389  if (range.match(expId)) {
390  const Range::field& eta_field = range[m_ETA_INDEX];
391  if (eta_field.has_maximum()) {
392  int etamax = eta_field.get_maximum();
393  if (result < etamax) result = etamax;
394  }
395  }
396  }
397  return (result);
398  }
399  return (-999);
400 }
401 
403  ExpandedIdentifier expId;
404  IdContext phi_context(expId, 0, m_PHI_INDEX);
405  if (!get_expanded_id(id, expId, &phi_context)) {
406  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
407  const Range& range = m_full_module_range[i];
408  if (range.match(expId)) {
409  const Range::field& phi_field = range[m_PHI_INDEX];
410  if (phi_field.has_minimum()) { return (phi_field.get_minimum()); }
411  }
412  }
413  }
415  return (999);
416 }
417 
419  ExpandedIdentifier expId;
420  IdContext phi_context(expId, 0, m_PHI_INDEX);
421  if (!get_expanded_id(id, expId, &phi_context)) {
422  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
423  const Range& range = m_full_module_range[i];
424  if (range.match(expId)) {
425  const Range::field& phi_field = range[m_PHI_INDEX];
426  if (phi_field.has_maximum()) { return (phi_field.get_maximum()); }
427  }
428  }
429  }
431  return (-999);
432 }
433 
435  ExpandedIdentifier expId;
436  IdContext chamberLayer_context(expId, 0, m_CHAMBERLAYER_INDEX);
437  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
438  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
439  const Range& range = m_full_channel_range[i];
440  if (range.match(expId)) {
441  const Range::field& phi_field = range[m_CHAMBERLAYER_INDEX];
442  if (phi_field.has_minimum()) { return (phi_field.get_minimum()); }
443  }
444  }
445  }
447  return (999);
448 }
449 
451  ExpandedIdentifier expId;
452  IdContext chamberLayer_context(expId, 0, m_CHAMBERLAYER_INDEX);
453  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
454  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
455  const Range& range = m_full_channel_range[i];
456  if (range.match(expId)) {
457  const Range::field& phi_field = range[m_CHAMBERLAYER_INDEX];
458  if (phi_field.has_maximum()) { return (phi_field.get_maximum()); }
459  }
460  }
461  }
463  return (-999);
464 }
465 
466 int CscIdHelper::wireLayerMin(const Identifier& id) const {
467  ExpandedIdentifier expId;
468  IdContext wireLayer_context(expId, 0, m_WIRELAYER_INDEX);
469  if (!get_expanded_id(id, expId, &wireLayer_context)) {
470  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
471  const Range& range = m_full_channel_range[i];
472  if (range.match(expId)) {
473  const Range::field& phi_field = range[m_WIRELAYER_INDEX];
474  if (phi_field.has_minimum()) { return (phi_field.get_minimum()); }
475  }
476  }
477  }
479  return (999);
480 }
481 
482 int CscIdHelper::wireLayerMax(const Identifier& id) const {
483  ExpandedIdentifier expId;
484  IdContext chamberLayer_context(expId, 0, m_WIRELAYER_INDEX);
485  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
486  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
487  const Range& range = m_full_channel_range[i];
488  if (range.match(expId)) {
489  const Range::field& phi_field = range[m_WIRELAYER_INDEX];
490  if (phi_field.has_maximum()) { return (phi_field.get_maximum()); }
491  }
492  }
493  }
495  return (-999);
496 }
497 
499  ExpandedIdentifier expId;
500  IdContext measuresPhi_context(expId, 0, m_MEASURESPHI_INDEX);
501  if (!get_expanded_id(id, expId, &measuresPhi_context)) {
502  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
503  const Range& range = m_full_channel_range[i];
504  if (range.match(expId)) {
505  const Range::field& phi_field = range[m_MEASURESPHI_INDEX];
506  if (phi_field.has_minimum()) { return (phi_field.get_minimum()); }
507  }
508  }
509  }
511  return (999);
512 }
513 
515  ExpandedIdentifier expId;
516  IdContext measuresPhi_context(expId, 0, m_MEASURESPHI_INDEX);
517  if (!get_expanded_id(id, expId, &measuresPhi_context)) {
518  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
519  const Range& range = m_full_channel_range[i];
520  if (range.match(expId)) {
521  const Range::field& phi_field = range[m_MEASURESPHI_INDEX];
522  if (phi_field.has_maximum()) { return (phi_field.get_maximum()); }
523  }
524  }
525  }
527  return (-999);
528 }
529 
530 int CscIdHelper::stripMin(const Identifier& id) const {
531  ExpandedIdentifier expId;
532  IdContext strip_context = channel_context();
533  if (!get_expanded_id(id, expId, &strip_context)) {
534  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
535  const Range& range = m_full_channel_range[i];
536  if (range.match(expId)) {
537  const Range::field& phi_field = range[m_CHANNEL_INDEX];
538  if (phi_field.has_minimum()) { return (phi_field.get_minimum()); }
539  }
540  }
541  }
543  return (999);
544 }
545 
546 int CscIdHelper::stripMax(const Identifier& id) const {
547  if (measuresPhi(id))
548  return m_stripMaxPhi;
549  else
550  return m_stripMaxEta;
551 }
552 
554 
555 bool CscIdHelper::valid(const Identifier& id) const {
556  if (!validElement(id)) return false;
557 
558  int cLayer = chamberLayer(id);
559  if ((cLayer < chamberLayerMin(id)) || (cLayer > chamberLayerMax(id))) {
560  ATH_MSG_DEBUG("Invalid chamberLayer=" << cLayer << " chamberLayerMin=" << chamberLayerMin(id)
561  << " chamberLayerMax=" << chamberLayerMax(id));
562  return false;
563  }
564 
565  int wLayer = wireLayer(id);
566  if ((wLayer < wireLayerMin(id)) || (wLayer > wireLayerMax(id))) {
567  ATH_MSG_DEBUG("Invalid wireLayer=" << wLayer << " wireLayerMin=" << wireLayerMin(id) << " wireLayerMax=" << wireLayerMax(id));
568  return false;
569  }
570 
571  int mPhi = measuresPhi(id);
572  if ((mPhi < measuresPhiMin(id)) || (mPhi > measuresPhiMax(id))) {
573  ATH_MSG_DEBUG("Invalid measuresPhi=" << mPhi << " measuresPhiMin=" << measuresPhiMin(id)
574  << " measuresPhiMax=" << measuresPhiMax(id));
575  return false;
576  }
577 
578  int channel = strip(id);
579  if ((channel > stripMax(id)) || (channel < stripMin(id))) {
580  ATH_MSG_DEBUG("Invalid strip=" << channel << " stripMin=" << stripMin(id) << " stripMax=" << stripMax(id));
581  return false;
582  }
583  return true;
584 }
585 bool CscIdHelper::isStNameInTech(const std::string& stationName) const { return stationName[0] == 'C'; }
586 bool CscIdHelper::validElement(const Identifier& id) const {
587  int station = stationName(id);
588  if (!validStation(station)) {
589  ATH_MSG_DEBUG("Invalid stationName=" << stationNameString(station));
590  return false;
591  }
592 
593  int eta = stationEta(id);
594  if ((eta < stationEtaMin(id)) || (eta > stationEtaMax(id)) || (0 == eta)) {
595  ATH_MSG_DEBUG("Invalid stationEta=" << eta << " for stationName=" << stationNameString(station)
596  << " stationEtaMin=" << stationEtaMin(id) << " stationEtaMax=" << stationEtaMax(id));
597  return false;
598  }
599 
600  int phi = stationPhi(id);
601  if ((phi < stationPhiMin(id)) || (phi > stationPhiMax(id))) {
602  ATH_MSG_DEBUG("Invalid stationPhi=" << phi << " for stationName=" << stationNameString(station)
603  << " stationPhiMin=" << stationPhiMin(id) << " stationPhiMax=" << stationPhiMax(id));
604  return false;
605  }
606  return true;
607 }
608 
610 
612  if (!validStation(stationName)) {
613  ATH_MSG_DEBUG("Invalid stationName=" << stationNameString(stationName));
614  return false;
615  }
616  if ((stationEta < stationEtaMin(id)) || (stationEta > stationEtaMax(id)) || (0 == stationEta)) {
617  ATH_MSG_DEBUG("Invalid stationEta=" << stationEta << " for stationName=" << stationNameString(stationName)
618  << " stationEtaMin=" << stationEtaMin(id) << " stationEtaMax=" << stationEtaMax(id));
619  return false;
620  }
621  if ((stationPhi < stationPhiMin(id)) || (stationPhi > stationPhiMax(id))) {
622  ATH_MSG_DEBUG("Invalid stationPhi=" << stationPhi << " for stationName=" << stationNameString(stationName)
623  << " stationPhiMin=" << stationPhiMin(id) << " stationPhiMax=" << stationPhiMax(id));
624  return false;
625  }
626  return true;
627 }
628 
629 bool CscIdHelper::validChannel(const Identifier& id, int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
630  int measuresPhi, int strip) const {
631  if (!validElement(id, stationName, stationEta, stationPhi)) return false;
632 
633  if ((chamberLayer < chamberLayerMin(id)) || (chamberLayer > chamberLayerMax(id))) {
634  ATH_MSG_DEBUG("Invalid chamberLayer=" << chamberLayer << " chamberLayerMin=" << chamberLayerMin(id)
635  << " chamberLayerMax=" << chamberLayerMax(id));
636  return false;
637  }
638  if ((wireLayer < wireLayerMin(id)) || (wireLayer > wireLayerMax(id))) {
639  ATH_MSG_DEBUG("Invalid wireLayer=" << wireLayer << " wireLayerMin=" << wireLayerMin(id) << " wireLayerMax=" << wireLayerMax(id));
640  return false;
641  }
642  if ((measuresPhi < measuresPhiMin(id)) || (measuresPhi > measuresPhiMax(id))) {
643  ATH_MSG_DEBUG("Invalid measuresPhi=" << measuresPhi << " measuresPhiMin=" << measuresPhiMin(id)
644  << " measuresPhiMax=" << measuresPhiMax(id));
645  return false;
646  }
647  if ((strip > stripMax(id)) || (strip < stripMin(id))) {
648  ATH_MSG_DEBUG("Invalid strip=" << strip << " stripMin=" << stripMin(id) << " stripMax=" << stripMax(id));
649  return false;
650  }
651  return true;
652 }
653 
654 // calculate the hash offset
656  m_hashOffset[0][0] = 0;
657  std::string version = m_dict->m_version;
658 
659  if (version == "H8 2004") {
660  m_hashOffset[0][1] = 1536;
661  m_hashOffset[1][0] = m_hashOffset[0][0];
662  m_hashOffset[1][1] = m_hashOffset[0][1];
663  } else if (version == "CSC Cosmic") {
664  m_hashOffset[0][1] = 3072;
665  m_hashOffset[1][0] = m_hashOffset[0][0];
666  m_hashOffset[1][1] = m_hashOffset[0][1];
667  } else if (version == "P.03" || version == "H8 2003" || version == "H8 2002" || version == "M2.8") {
668  m_hashOffset[0][1] = 27392;
669  m_hashOffset[1][0] = m_hashOffset[0][1] + 3584;
670  m_hashOffset[1][1] = m_hashOffset[0][1] + m_hashOffset[1][0];
671  } else {
672  m_hashOffset[0][1] = 24576;
673  m_hashOffset[1][0] = m_hashOffset[0][1] + 6144;
674  m_hashOffset[1][1] = m_hashOffset[0][1] + m_hashOffset[1][0];
675  }
676  return 0;
677 }
679  // pack fields independently
686  return result;
687 }
689  try {
692  return result;
693  } catch (const std::out_of_range&) { isValid = false; }
694  return Identifier{0};
695 }
696 
697 Identifier CscIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi) const {
698  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi);
699 }
700 Identifier CscIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool& isValid) const {
701  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi, isValid);
702 }
703 
704 Identifier CscIdHelper::elementID(const Identifier& id) const { return parentID(id); }
705 
706 Identifier CscIdHelper::channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi,
707  int strip) const {
708  // pack fields independently
719  return result;
720 }
721 Identifier CscIdHelper::channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi,
722  int strip, bool& isValid) const {
723  try {
726  return result;
727  } catch (const std::out_of_range&) { isValid = false; }
728  return Identifier{0};
729 }
730 
731 Identifier CscIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
732  int measuresPhi, int strip) const {
734 }
735 Identifier CscIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
736  int measuresPhi, int strip, bool& isValid) const {
738 }
739 
740 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip) const {
741  Identifier result(id);
746  return result;
747 }
748 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip, bool& isValid) const {
749  try {
751  isValid = valid(result);
752  return result;
753  } catch (const std::out_of_range&) { isValid = false; }
754  return Identifier{0};
755 }
757 
759  assert(is_csc(id));
760  Identifier result(id);
765  return result;
766 }
767 
768 // Access to components of the ID
769 
770 int CscIdHelper::chamberLayer(const Identifier& id) const { return m_cla_impl.unpack(id); }
771 
772 int CscIdHelper::wireLayer(const Identifier& id) const { return m_lay_impl.unpack(id); }
773 
774 bool CscIdHelper::measuresPhi(const Identifier& id) const { return m_mea_impl.unpack(id); }
775 
776 int CscIdHelper::strip(const Identifier& id) const { return m_str_impl.unpack(id); }
777 
778 int CscIdHelper::channel(const Identifier& id) const { return strip(id); }
779 
781 
783 
785 
787 
789 
791 
793 
795 
797 
799 
801 
803 
805 
807 
809  int cscField = technologyIndex("CSC");
810  if (m_dict) { cscField = csc_field_value(); }
811  return cscField;
812 }
813 
814 int CscIdHelper::sector(const Identifier& id) const { return stationEta(id) * (2 * stationPhi(id) - (stationName(id) - 49) + 1); }
815 
816 int CscIdHelper::gasGap(const Identifier& id) const { return chamberLayer(id); }
CscIdHelper.h
Identifier::value_type
IDENTIFIER_TYPE value_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:39
MuonIdHelper::validStation
bool validStation(int stationName, int technology) const
Definition: MuonIdHelper.cxx:771
MuonIdHelper::stationNameIndex
int stationNameIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:846
CscIdHelper::valid
bool valid(const Identifier &id) const
Public validation of levels.
Definition: CscIdHelper.cxx:555
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:129
CscIdHelper::stripMax
static int stripMax()
Definition: CscIdHelper.cxx:804
IdDictDictionary::build_multirange
MultiRange build_multirange() const
Get MultiRange for full dictionary.
Definition: IdDictMgr.cxx:1048
MuonIdHelper::initLevelsFromDict
int initLevelsFromDict()
Definition: MuonIdHelper.cxx:240
CscIdHelper::s_phiDim
static constexpr unsigned int s_phiDim
8 phi stations
Definition: CscIdHelper.h:158
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
AtlasDetectorID::initialize_from_dictionary
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
Definition: AtlasDetectorID.cxx:320
MuonIdHelper::m_init
bool m_init
Definition: MuonIdHelper.h:342
get_generator_info.result
result
Definition: get_generator_info.py:21
IdDictGroup
Definition: IdDictDefs.h:355
CscIdHelper::ChamberLayerMax
@ ChamberLayerMax
Definition: CscIdHelper.h:209
max
#define max(a, b)
Definition: cfImp.cxx:41
CscIdHelper::moduleHashIdx
unsigned int moduleHashIdx(const Identifier &id) const
Definition: CscIdHelper.cxx:288
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
CscIdHelper::initialize_from_dictionary
int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
Definition: CscIdHelper.cxx:13
MuonIdHelper::get_id
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override
Create compact id from hash id (return == 0 for OK)
Definition: MuonIdHelper.cxx:69
MuonIdHelper::technologyIndex
int technologyIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:852
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
IdDictFieldImplementation::show_to_string
std::string show_to_string(void) const
Definition: IdDictFieldImplementation.cxx:57
AtlasDetectorID::muon_field_value
int muon_field_value() const
Definition: AtlasDetectorID.h:620
dumpTgcDigiDeadChambers.stationName
dictionary stationName
Definition: dumpTgcDigiDeadChambers.py:30
CscIdHelper::m_MEASURESPHI_INDEX
size_type m_MEASURESPHI_INDEX
Definition: CscIdHelper.h:177
MuonIdHelper::channel_context
IdContext channel_context() const
id for channel
Definition: MuonIdHelper.cxx:745
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
index
Definition: index.py:1
CscIdHelper::m_hasChamLay1
bool m_hasChamLay1
Definition: CscIdHelper.h:221
MuonIdHelper::detectorElement_hash_max
size_type detectorElement_hash_max() const
Definition: MuonIdHelper.h:186
MultiRange::add
void add(const Range &range)
Definition: DetectorDescription/Identifier/src/Range.cxx:2410
MuonIdHelper::m_sta_impl
IdDictFieldImplementation m_sta_impl
Definition: MuonIdHelper.h:289
DMTest::C
C_v1 C
Definition: C.h:26
CscIdHelper::idChannels
void idChannels(const Identifier &id, std::vector< Identifier > &vect) const
Definition: CscIdHelper.cxx:343
CscIdHelper::m_CHAMBERLAYER_INDEX
size_type m_CHAMBERLAYER_INDEX
Definition: CscIdHelper.h:175
ExpandedIdentifier::add
void add(element_type value)
CscIdHelper::StripMax
@ StripMax
Definition: CscIdHelper.h:215
CscIdHelper::measuresPhiMax
static int measuresPhiMax()
Definition: CscIdHelper.cxx:800
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:108
MuonIdHelper::is_csc
bool is_csc(const Identifier &id) const
Definition: MuonIdHelper.cxx:789
IdDictFieldImplementation::pack
void pack(int value, Identifier &id) const
Definition: IdDictFieldImplementation.h:174
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:804
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
MuonIdHelper::m_phi_impl
IdDictFieldImplementation m_phi_impl
Definition: MuonIdHelper.h:291
CscIdHelper::measuresPhiMin
static int measuresPhiMin()
Definition: CscIdHelper.cxx:798
CscIdHelper::chamberLayerMin
static int chamberLayerMin()
Definition: CscIdHelper.cxx:790
IdDictFieldImplementation::unpack
int unpack(Identifier id) const
Identifier manipulation methods.
Definition: IdDictFieldImplementation.h:148
MuonIdHelper::m_full_channel_range
MultiRange m_full_channel_range
Definition: MuonIdHelper.h:274
CscIdHelper::m_stationShift
unsigned int m_stationShift
Minimal station index found.
Definition: CscIdHelper.h:171
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
IdDictDictionary::find_field
IdDictField * find_field(const std::string &name) const
Definition: IdDictMgr.cxx:309
CalibDbCompareRT.region_id
region_id
Definition: CalibDbCompareRT.py:68
IdDictRegion
Definition: IdDictDefs.h:448
IdDictDictionary::m_version
std::string m_version
Definition: IdDictDefs.h:284
CscIdHelper::channel
int channel(const Identifier &id) const override
Definition: CscIdHelper.cxx:778
CscIdHelper::MeasuresPhiMin
@ MeasuresPhiMin
Definition: CscIdHelper.h:212
IdDictFieldImplementation::reset
void reset(Identifier &id) const
Definition: IdDictFieldImplementation.h:184
CscIdHelper::stationEtaMax
static int stationEtaMax()
Definition: CscIdHelper.cxx:784
CscIdHelper::wireLayer
int wireLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:772
CscIdHelper::strip_hash_offsets
int strip_hash_offsets()
Definition: CscIdHelper.cxx:655
CscIdHelper::isStNameInTech
bool isStNameInTech(const std::string &stationName) const override
The valid element checks converted the identifier to a stationName string in order to assess whether ...
Definition: CscIdHelper.cxx:585
IdDictMgr
Definition: IdDictDefs.h:32
IdDictDictionary::find_group
IdDictGroup * find_group(const std::string &group_name) const
Definition: IdDictMgr.cxx:383
CscIdHelper::m_module_hashes
std::array< unsigned int, s_modHashDim > m_module_hashes
Definition: CscIdHelper.h:165
IdDictMgr::find_dictionary
IdDictDictionary * find_dictionary(const std::string &name) const
Access dictionary by name.
Definition: IdDictMgr.cxx:161
MuonIdHelper
Definition: MuonIdHelper.h:80
Range::field::has_minimum
bool has_minimum() const
Definition: DetectorDescription/Identifier/src/Range.cxx:390
CscIdHelper::parentID
Identifier parentID(const Identifier &id) const
get parent id from channel id
Definition: CscIdHelper.cxx:758
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CscIdHelper::StationEtaMax
@ StationEtaMax
Definition: CscIdHelper.h:205
CscIdHelper::stationEtaMin
static int stationEtaMin()
Access to min and max of level ranges.
Definition: CscIdHelper.cxx:782
CscIdHelper::m_str_impl
IdDictFieldImplementation m_str_impl
Definition: CscIdHelper.h:182
lumiFormat.i
int i
Definition: lumiFormat.py:92
MuonIdHelper::m_module_vec
id_vec m_module_vec
Definition: MuonIdHelper.h:271
CscIdHelper::validChannel
bool validChannel(const Identifier &id, int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip) const
Definition: CscIdHelper.cxx:629
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
CscIdHelper::get_module_hash
int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:328
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CscIdHelper::wireLayerMax
static int wireLayerMax()
Definition: CscIdHelper.cxx:796
CscIdHelper::m_stripMaxPhi
unsigned int m_stripMaxPhi
Definition: CscIdHelper.h:219
IdDictDictionary::m_regions
std::vector< IdDictRegion * > m_regions
Definition: IdDictDefs.h:302
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
test_pyathena.parent
parent
Definition: test_pyathena.py:15
MuonIdHelper::m_full_detectorElement_range
MultiRange m_full_detectorElement_range
Definition: MuonIdHelper.h:279
CscIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: CscIdHelper.cxx:816
MuonIdHelper::m_full_module_range
MultiRange m_full_module_range
Definition: MuonIdHelper.h:269
CscIdHelper::CscIdHelper
CscIdHelper()
Definition: CscIdHelper.cxx:7
CscIdHelper::ChamberLayerMin
@ ChamberLayerMin
Definition: CscIdHelper.h:208
MuonIdHelper::get_expanded_id
int get_expanded_id(const Identifier &id, ExpandedIdentifier &exp_id, const IdContext *context) const
Create expanded id from compact id (return == 0 for OK)
Definition: MuonIdHelper.cxx:159
Range::const_identifier_factory
Definition: DetectorDescription/Identifier/Identifier/Range.h:191
CscIdHelper::StationEtaMin
@ StationEtaMin
Definition: CscIdHelper.h:204
IdDictGroup::regions
const std::vector< IdDictRegion * > & regions()
Definition: IdDictMgr.cxx:2272
MuonIdHelper::m_eta_impl
IdDictFieldImplementation m_eta_impl
Definition: MuonIdHelper.h:290
Range::field::get_minimum
element_type get_minimum() const
Definition: DetectorDescription/Identifier/Identifier/Range.h:524
MuonIdHelper::init_hashes
int init_hashes()
Definition: MuonIdHelper.cxx:347
CscIdHelper::WireLayerMin
@ WireLayerMin
Definition: CscIdHelper.h:210
CscIdHelper::m_WIRELAYER_INDEX
size_type m_WIRELAYER_INDEX
Definition: CscIdHelper.h:176
MuonIdHelper::m_muon_impl
IdDictFieldImplementation m_muon_impl
Definition: MuonIdHelper.h:288
MuonIdHelper::m_GROUP_INDEX
size_t m_GROUP_INDEX
Definition: MuonIdHelper.h:258
min
#define min(a, b)
Definition: cfImp.cxx:40
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:266
CscIdHelper::m_lay_impl
IdDictFieldImplementation m_lay_impl
Definition: CscIdHelper.h:180
Range::field::has_maximum
bool has_maximum() const
Definition: DetectorDescription/Identifier/src/Range.cxx:398
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:814
CscIdHelper::stationPhiMin
static int stationPhiMin()
Definition: CscIdHelper.cxx:786
IdDictDictionary::get_label_value
int get_label_value(const std::string &field, const std::string &label, int &value) const
Definition: IdDictMgr.cxx:338
MuonIdHelper::stationNameString
const std::string & stationNameString(const int &index) const
Definition: MuonIdHelper.cxx:858
MuonIdHelper::init_neighbors
int init_neighbors()
Definition: MuonIdHelper.cxx:522
CscIdHelper::init_id_to_hashes
int init_id_to_hashes()
Definition: CscIdHelper.cxx:300
CscIdHelper::sector
int sector(const Identifier &id) const
Definition: CscIdHelper.cxx:814
MultiRange
A MultiRange combines several Ranges.
Definition: DetectorDescription/Identifier/Identifier/Range.h:351
CscIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip) const
Definition: CscIdHelper.cxx:706
MuonIdHelper::m_detectorElement_vec
id_vec m_detectorElement_vec
Definition: MuonIdHelper.h:281
CscIdHelper::m_stripMaxEta
unsigned int m_stripMaxEta
Definition: CscIdHelper.h:220
CscIdHelper::validElement
bool validElement(const Identifier &id) const
Definition: CscIdHelper.cxx:586
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:809
Range
A Range describes the possible ranges for the field values of an ExpandedIdentifier.
Definition: DetectorDescription/Identifier/Identifier/Range.h:27
CscIdHelper::m_cla_impl
IdDictFieldImplementation m_cla_impl
Definition: CscIdHelper.h:179
CscIdHelper::m_mea_impl
IdDictFieldImplementation m_mea_impl
Definition: CscIdHelper.h:181
MuonIdHelper::module_hash_max
size_type module_hash_max() const
the maximum hash value
Definition: MuonIdHelper.cxx:752
IdDictDictionary
Definition: IdDictDefs.h:97
MuonIdHelper::m_ETA_INDEX
size_type m_ETA_INDEX
Definition: MuonIdHelper.h:260
CscIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: CscIdHelper.cxx:678
Range::field::get_maximum
element_type get_maximum() const
Definition: DetectorDescription/Identifier/Identifier/Range.h:531
MuonIdHelper::init_detectorElement_hashes
virtual int init_detectorElement_hashes()
Definition: MuonIdHelper.cxx:394
get_generator_info.version
version
Definition: get_generator_info.py:33
CscIdHelper::stripMin
static int stripMin()
Definition: CscIdHelper.cxx:802
AtlasDetectorID::reinitialize
bool reinitialize(const IdDictMgr &dict_mgr)
Test whether an idhelper should be reinitialized based on the change of tags.
Definition: AtlasDetectorID.cxx:284
MuonIdHelper::m_TECHNOLOGY_INDEX
size_type m_TECHNOLOGY_INDEX
Definition: MuonIdHelper.h:262
IdDictDictionary::m_name
std::string m_name
Definition: IdDictDefs.h:283
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:574
CscIdHelper::chamberLayerMax
static int chamberLayerMax()
Definition: CscIdHelper.cxx:792
CscIdHelper::strip
int strip(const Identifier &id) const
Definition: CscIdHelper.cxx:776
CscIdHelper::WireLayerMax
@ WireLayerMax
Definition: CscIdHelper.h:211
MultiRange::size
size_type size() const
Definition: DetectorDescription/Identifier/src/Range.cxx:2488
DeMoScan.first
bool first
Definition: DeMoScan.py:534
CscIdHelper::s_etaDim
static constexpr unsigned int s_etaDim
Definition: CscIdHelper.h:156
MuonIdHelper::resetAndSet
void resetAndSet(const IdDictFieldImplementation &dict, const int new_val, Identifier &id) const
Definition: MuonIdHelper.h:309
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
MuonIdHelper::m_DETECTORELEMENT_INDEX
size_type m_DETECTORELEMENT_INDEX
Definition: MuonIdHelper.h:264
CscIdHelper::s_mlDim
static constexpr unsigned int s_mlDim
2 multi layer
Definition: CscIdHelper.h:160
MuonIdHelper::m_tec_impl
IdDictFieldImplementation m_tec_impl
Definition: MuonIdHelper.h:292
MuonIdHelper::m_channel_vec
id_vec m_channel_vec
Definition: MuonIdHelper.h:276
CscIdHelper::detEleHashIdx
unsigned int detEleHashIdx(const Identifier &id) const
Definition: CscIdHelper.cxx:296
merge.status
status
Definition: merge.py:17
CscIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: CscIdHelper.cxx:774
MuonIdHelper::init_channel_hashes
int init_channel_hashes()
Definition: MuonIdHelper.cxx:441
ExpandedIdentifier::element_type
int element_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:116
Range::field
This is the individual specification for the range of one ExpandedIdentifier field.
Definition: DetectorDescription/Identifier/Identifier/Range.h:37
IdDictField
Definition: IdDictDefs.h:318
Muon::nsw::STGTPSegments::moduleIDBits::stationEta
constexpr uint8_t stationEta
1 to 3
Definition: NSWSTGTPDecodeBitmaps.h:127
IdentifierHash
Definition: IdentifierHash.h:38
CscIdHelper::StripMin
@ StripMin
Definition: CscIdHelper.h:214
CscIdHelper::wireLayerMin
static int wireLayerMin()
Definition: CscIdHelper.cxx:794
CscIdHelper::MeasuresPhiMax
@ MeasuresPhiMax
Definition: CscIdHelper.h:213
LArCellBinning.etamin
etamin
Definition: LArCellBinning.py:137
CscIdHelper::m_hashOffset
int m_hashOffset[2][2]
Definition: CscIdHelper.h:217
CscIdHelper::StationPhiMin
@ StationPhiMin
Definition: CscIdHelper.h:206
IdContext
class IdContext
Definition: IdContext.h:34
IdDictRegion::m_implementation
std::vector< IdDictFieldImplementation > m_implementation
Definition: IdDictDefs.h:474
CscIdHelper::get_detectorElement_hash
int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:334
MuonIdHelper::m_PHI_INDEX
size_type m_PHI_INDEX
Definition: MuonIdHelper.h:261
CscIdHelper::stationPhiMax
static int stationPhiMax()
Definition: CscIdHelper.cxx:788
AtlasDetectorID::csc_field_value
int csc_field_value() const
Definition: AtlasDetectorID.h:656
CscIdHelper::chamberLayer
int chamberLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:770
CscIdHelper::StationPhiMax
@ StationPhiMax
Definition: CscIdHelper.h:207
CscIdHelper::cscTechnology
int cscTechnology() const
Utility methods.
Definition: CscIdHelper.cxx:808
CscIdHelper::m_detectorElement_hashes
std::array< unsigned int, s_detHashDim > m_detectorElement_hashes
Definition: CscIdHelper.h:166
MuonIdHelper::m_CHANNEL_INDEX
size_type m_CHANNEL_INDEX
Definition: MuonIdHelper.h:265
MuonIdHelper::m_dict
const IdDictDictionary * m_dict
Definition: MuonIdHelper.h:266