ATLAS Offline Software
CscIdHelper.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
9  m_module_hashes.fill(-1);
10  m_detectorElement_hashes.fill(-1);
11 }
12 
15  int status = 0;
16 
17  // Check whether this helper should be reinitialized
18  if (!reinitialize(dict_mgr)) {
19  ATH_MSG_INFO("Request to reinitialize not satisfied - tags have not changed");
20  return 0;
21  } else {
22  ATH_MSG_DEBUG("(Re)initialize");
23  }
24 
26  if (AtlasDetectorID::initialize_from_dictionary(dict_mgr)) return 1;
27 
28  // Register version of the MuonSpectrometer dictionary
29  if (register_dict_tag(dict_mgr, "MuonSpectrometer")) return 1;
30 
31  m_dict = dict_mgr.find_dictionary("MuonSpectrometer");
32  if (!m_dict) {
33  ATH_MSG_ERROR(" initialize_from_dict - cannot access MuonSpectrometer dictionary ");
34  return 1;
35  }
36 
38 
39  if (initLevelsFromDict()) return 1;
40 
41  int index = technologyIndex("CSC");
42  if (index == -1) {
43  ATH_MSG_DEBUG("initLevelsFromDict - there are no CSC entries in the dictionary! ");
44  return 0;
45  }
46 
47  IdDictField* field = m_dict->find_field("chamberLayer");
48  if (field) {
49  m_CHAMBERLAYER_INDEX = field->m_index;
50  } else {
51  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'chamberLayer' field ");
52  status = 1;
53  }
54 
55  field = m_dict->find_field("wireLayer");
56  if (field) {
57  m_WIRELAYER_INDEX = field->m_index;
58  } else {
59  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'wireLayer' field ");
60  status = 1;
61  }
62 
63  field = m_dict->find_field("cscMeasuresPhi");
64  if (field) {
65  m_MEASURESPHI_INDEX = field->m_index;
66  } else {
67  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscMeasuresPhi' field ");
68  status = 1;
69  }
70 
71  field = m_dict->find_field("cscStrip");
72  if (field) {
73  m_CHANNEL_INDEX = field->m_index;
74  } else {
75  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscStrip' field ");
76  status = 1;
77  }
78 
79  // initialize the multilayer index
81 
83 
84  IdDictGroup* cscGroup = m_dict->find_group("csc");
85  if (!cscGroup) {
86  ATH_MSG_ERROR("Cannot find csc group");
87  } else {
88  m_GROUP_INDEX = cscGroup->regions()[0]->m_index;
89  }
90 
91  const IdDictRegion& region = *m_dict->m_regions[m_GROUP_INDEX];
99 
100  ATH_MSG_DEBUG(" CSC decode index and bit fields for each level: " << std::endl
101  << " muon " << m_muon_impl.show_to_string() << std::endl
102  << " station " << m_sta_impl.show_to_string() << std::endl
103  << " eta " << m_eta_impl.show_to_string() << std::endl
104  << " phi " << m_phi_impl.show_to_string() << std::endl
105  << " technology " << m_tec_impl.show_to_string() << std::endl
106  << " cham layer " << m_cla_impl.show_to_string() << std::endl
107  << " layer " << m_lay_impl.show_to_string() << std::endl
108  << " phi " << m_mea_impl.show_to_string() << std::endl
109  << " strip " << m_str_impl.show_to_string());
110 
115 
117  int muonField = -1;
118  const IdDictDictionary* atlasDict = dict_mgr.find_dictionary("ATLAS");
119  if (atlasDict->get_label_value("subdet", "MuonSpectrometer", muonField)) {
120  ATH_MSG_ERROR("Could not get value for label 'MuonSpectrometer' of field "
121  << "'subdet' in dictionary " << atlasDict->m_name);
122  return 1;
123  }
124 
126 
128  region_id.add(muonField);
129  Range prefix;
130  MultiRange muon_range = m_dict->build_multirange(region_id, prefix, "technology");
131  if (muon_range.size() > 0) {
132  ATH_MSG_INFO("MultiRange built successfully to Technology: "
133  << "MultiRange size is " << muon_range.size());
134  } else {
135  ATH_MSG_ERROR("Muon MultiRange is empty for modules");
136  }
137 
138  // Build MultiRange down to "detector element" for all mdt regions
139 
140  ExpandedIdentifier detectorElement_region;
141  detectorElement_region.add(muonField);
142  Range detectorElement_prefix;
143  MultiRange muon_detectorElement_range = m_dict->build_multirange(detectorElement_region, detectorElement_prefix, "chamberLayer");
144  if (muon_detectorElement_range.size() > 0) {
145  ATH_MSG_INFO("MultiRange built successfully to detector element: "
146  << "Multilayer MultiRange size is " << muon_detectorElement_range.size());
147  } else {
148  ATH_MSG_ERROR("Muon CSC detector element MultiRange is empty");
149  }
150 
152 
153  ExpandedIdentifier csc_region;
154  csc_region.add(muonField);
155  Range csc_prefix;
156  MultiRange muon_channel_range = m_dict->build_multirange(csc_region, csc_prefix, "cscStrip");
157  if (muon_channel_range.size() > 0) {
158  ATH_MSG_INFO("MultiRange built successfully to cscStrip: "
159  << "MultiRange size is " << muon_channel_range.size());
160  } else {
161  ATH_MSG_ERROR("Muon MultiRange is empty for channels");
162  }
163 
171  int cscField = -1;
172  status = m_dict->get_label_value("technology", "CSC", cscField);
173 
174  for (int i = 0; i < (int)muon_range.size(); ++i) {
175  const Range& range = muon_range[i];
176  if (range.fields() > m_TECHNOLOGY_INDEX) {
178  if (field.match((ExpandedIdentifier::element_type)cscField)) {
180  ATH_MSG_DEBUG("field size is " << (int)range.cardinality() << " field index = " << i);
181  }
182  }
183  }
184 
185  for (int j = 0; j < (int)muon_detectorElement_range.size(); ++j) {
186  const Range& range = muon_detectorElement_range[j];
187  if (range.fields() > m_TECHNOLOGY_INDEX) {
189  if (field.match((ExpandedIdentifier::element_type)cscField)) {
191  ATH_MSG_DEBUG("detector element field size is " << (int)range.cardinality() << " field index = " << j);
192  }
193  }
194  }
195 
196  for (int j = 0; j < (int)muon_channel_range.size(); ++j) {
197  const Range& range = muon_channel_range[j];
198  if (range.fields() > m_TECHNOLOGY_INDEX) {
200  if (field.match((ExpandedIdentifier::element_type)cscField)) {
202  ATH_MSG_DEBUG("channel field size is " << (int)range.cardinality() << " field index = " << j);
203  }
204  }
205  }
206 
208 
209  if (m_full_module_range.size() == 0) {
210  ATH_MSG_ERROR("CSC MultiRange ID is empty for modules");
211  status = 1;
212  }
213 
215 
216  if (m_full_detectorElement_range.size() == 0) {
217  ATH_MSG_ERROR("CSC MultiRange ID is empty for detector elements");
218  status = 1;
219  }
220 
222 
223  if (m_full_channel_range.size() == 0) {
224  ATH_MSG_ERROR("CSC MultiRange ID is empty for channels");
225  status = 1;
226  }
227 
229 
230  ATH_MSG_INFO("Initializing CSC hash indices ... ");
231  status = init_hashes();
232  status = init_detectorElement_hashes(); // for chamber layer - a chamber
236 
238 
239  ATH_MSG_INFO("Initializing CSC hash indices for finding neighbors ... ");
241 
242  // now we have to set the stripMax values (for the stripMax(id) function)
243  // this could be also done on an event-by-event basis as for stripMin(id)
244  // however, for all existing layouts there are only 2 possible values for stripMax,
245  // namely those for layers which measure phi (measuresPhi(id)=true) and the rest.
246  // thus, we initialize 2 member variables here to speed up calling the function during runtime
247  // loop on the channel Identifiers and check (for consistency!) that really only
248  // two maximum numbers of strips (w/o measuresPhi) are around
249  ExpandedIdentifier expId;
250  IdContext strip_context = channel_context();
251  for (const auto& id : m_channel_vec) {
252  if (get_expanded_id(id, expId, &strip_context)) {
253  ATH_MSG_ERROR("Failed to retrieve ExpandedIdentifier from Identifier " << id.get_compact());
254  return 1;
255  }
256  bool measPhi = measuresPhi(id);
257  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
258  const Range& range = m_full_channel_range[i];
259  if (range.match(expId)) {
260  const Range::field& phi_field = range[m_CHANNEL_INDEX];
261  if (not !phi_field.empty()) {
262  ATH_MSG_ERROR("Range::field for phi at position " << i << " does not have a maximum");
263  return 1;
264  }
265  unsigned int max = phi_field.get_maximum();
266  if (measPhi) {
267  if (m_stripMaxPhi != UINT_MAX && m_stripMaxPhi != max) {
268  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxPhi=" << m_stripMaxPhi);
269  return 1;
270  } else
271  m_stripMaxPhi = max;
272  } else {
273  if (m_stripMaxEta != UINT_MAX && m_stripMaxEta != max) {
274  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxEta=" << m_stripMaxEta);
275  return 1;
276  } else
277  m_stripMaxEta = max;
278  }
279  }
280  }
281  }
282 
283  // check whether the current layout contains chamberLayer 1 Identifiers (pre-Run3) in the vector of module Identifiers
284  if (!m_module_vec.empty() && chamberLayer(m_module_vec.at(0)) == 1) m_hasChamLay1 = true;
285  m_init = true;
286  return (status);
287 }
288 
289 inline unsigned int CscIdHelper::moduleHashIdx(const Identifier& id) const{
292  constexpr unsigned int C = s_phiDim;
293  constexpr unsigned int BxC = C*s_etaDim;
294  const int stEta = stationEta(id);
295  return (stationName(id) - m_stationShift)*BxC + (stEta + s_etaDim/2 - (stEta>0))*C + (stationPhi(id) -1);
296 }
297 inline unsigned int CscIdHelper::detEleHashIdx(const Identifier& id) const{
298  return moduleHashIdx(id) *s_mlDim + (chamberLayer(id) -1);
299 }
300 
302 
304  unsigned int hash_max = module_hash_max();
305  for (unsigned int i = 0; i < hash_max; ++i) {
306  const Identifier& id = m_module_vec[i];
307  const unsigned idx = moduleHashIdx(id);
308  if (idx >= m_module_hashes.size() || m_module_hashes[idx] < hash_max){
309  ATH_MSG_FATAL("Failed to assign module hash to "<<show_to_string(id));
310  return 1;
311  }
312  m_module_hashes[idx] = i;
313  }
314 
315  hash_max = detectorElement_hash_max();
316  for (unsigned int i = 0; i < hash_max; ++i) {
317  const Identifier& id = m_detectorElement_vec[i];
318  const unsigned idx = detEleHashIdx(id);
319  if (idx >= m_detectorElement_hashes.size() || m_detectorElement_hashes[idx] < hash_max){
320  ATH_MSG_FATAL("Failed to assign detector hash to "<<show_to_string(id));
321  return 1;
322  }
324  }
325 
326  return 0;
327 }
328 
330  const unsigned int idx = moduleHashIdx(id);
331  if (idx >= m_module_hashes.size()) return 1;
332  hash_id = m_module_hashes[idx];
333  return 0;
334 }
336  const unsigned int idx = detEleHashIdx(id);
337  if (idx >= m_detectorElement_hashes.size()) return 1;
338  hash_id = m_detectorElement_hashes[idx];
339  return 0;
340 }
341 
342 
343 
344 void CscIdHelper::idChannels(const Identifier& id, std::vector<Identifier>& vect) const {
345  vect.clear();
346  Identifier parent = parentID(id);
347  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
348  const Range& range = m_full_channel_range[i];
350  for (const auto & expId : rit) {
351  Identifier child;
352  get_id(expId, 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 (not eta_field.empty()) {
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 (not eta_field.empty()) {
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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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 (not phi_field.empty()) { 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
MuonIdHelper::validStation
bool validStation(int stationName, int technology) const
Definition: MuonIdHelper.cxx:767
MuonIdHelper::stationNameIndex
int stationNameIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:842
CscIdHelper::valid
bool valid(const Identifier &id) const
Public validation of levels.
Definition: CscIdHelper.cxx:555
ConstRangeIterator
Definition: RangeIterator.h:46
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:161
CscIdHelper::stripMax
static int stripMax()
Definition: CscIdHelper.cxx:804
IdDictDictionary::build_multirange
MultiRange build_multirange() const
Get MultiRange for full dictionary.
Definition: IdDictDictionary.cxx:299
MuonIdHelper::initLevelsFromDict
int initLevelsFromDict()
Definition: MuonIdHelper.cxx:241
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: IdDictGroup.h:19
CscIdHelper::ChamberLayerMax
@ ChamberLayerMax
Definition: CscIdHelper.h:209
CscIdHelper::moduleHashIdx
unsigned int moduleHashIdx(const Identifier &id) const
Definition: CscIdHelper.cxx:289
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
CscIdHelper::initialize_from_dictionary
int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
Definition: CscIdHelper.cxx:14
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:70
MuonIdHelper::technologyIndex
int technologyIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:848
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:38
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:741
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
index
Definition: index.py:1
CscIdHelper::m_hasChamLay1
bool m_hasChamLay1
Definition: CscIdHelper.h:221
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MuonIdHelper::detectorElement_hash_max
size_type detectorElement_hash_max() const
Definition: MuonIdHelper.h:186
MultiRange::add
void add(const Range &range)
Definition: MultiRange.cxx:22
IdentifierField::get_minimum
element_type get_minimum() const
Query the values.
Definition: IdentifierField.h:59
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
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:344
CscIdHelper::m_CHAMBERLAYER_INDEX
size_type m_CHAMBERLAYER_INDEX
Definition: CscIdHelper.h:175
ExpandedIdentifier::add
void add(element_type value)
Append a value into a new field.
CscIdHelper::StripMax
@ StripMax
Definition: CscIdHelper.h:215
CscIdHelper::measuresPhiMax
static int measuresPhiMax()
Definition: CscIdHelper.cxx:800
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
MuonIdHelper::is_csc
bool is_csc(const Identifier &id) const
Definition: MuonIdHelper.cxx:785
IdDictFieldImplementation::pack
void pack(int value, Identifier &id) const
Definition: IdDictFieldImplementation.h:173
IdentifierField::get_maximum
element_type get_maximum() const
Definition: IdentifierField.h:68
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:800
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
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:147
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:77
IdDictDictionary::find_field
IdDictField * find_field(const std::string &name) const
Definition: IdDictDictionary.cxx:45
CalibDbCompareRT.region_id
region_id
Definition: CalibDbCompareRT.py:68
IdDictRegion
Definition: IdDictRegion.h:20
IdDictDictionary::m_version
std::string m_version
Definition: IdDictDictionary.h:217
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:183
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: IdDictMgr.h:14
IdDictDictionary::find_group
IdDictGroup * find_group(const std::string &group_name) const
Definition: IdDictDictionary.cxx:115
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:115
MuonIdHelper
Definition: MuonIdHelper.h:80
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
IdentifierField::empty
bool empty() const
Definition: IdentifierField.h:114
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
CscIdHelper::get_module_hash
int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:329
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: IdDictDictionary.h:235
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:8
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:160
CscIdHelper::StationEtaMin
@ StationEtaMin
Definition: CscIdHelper.h:204
IdDictGroup::regions
const std::vector< IdDictRegion * > & regions()
Definition: IdDictGroup.cxx:44
MuonIdHelper::m_eta_impl
IdDictFieldImplementation m_eta_impl
Definition: MuonIdHelper.h:290
MuonIdHelper::init_hashes
int init_hashes()
Definition: MuonIdHelper.cxx:348
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
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
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:810
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: IdDictDictionary.cxx:73
MuonIdHelper::stationNameString
const std::string & stationNameString(const int &index) const
Definition: MuonIdHelper.cxx:854
MuonIdHelper::init_neighbors
int init_neighbors()
Definition: MuonIdHelper.cxx:520
CscIdHelper::init_id_to_hashes
int init_id_to_hashes()
Definition: CscIdHelper.cxx:301
CscIdHelper::sector
int sector(const Identifier &id) const
Definition: CscIdHelper.cxx:814
MultiRange
A MultiRange combines several Ranges.
Definition: MultiRange.h:17
CscIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip) const
Definition: CscIdHelper.cxx:706
RangeIterator.h
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:805
Range
A Range describes the possible ranges for the field values of an ExpandedIdentifier.
Definition: DetectorDescription/Identifier/Identifier/Range.h:29
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:748
IdDictDictionary
Definition: IdDictDictionary.h:30
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
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: IdDictDictionary.h:216
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: MultiRange.cxx:70
CscIdHelper::s_etaDim
static constexpr unsigned int s_etaDim
Definition: CscIdHelper.h:156
IdentifierField
This is the individual specification for the range of one ExpandedIdentifier IdentifierField.
Definition: IdentifierField.h:21
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
Identifier::value_type
unsigned long long value_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:27
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:297
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:440
IdDictField
Definition: IdDictField.h:15
Muon::nsw::STGTPSegments::moduleIDBits::stationEta
constexpr uint8_t stationEta
1 to 3
Definition: NSWSTGTPDecodeBitmaps.h:159
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
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
ExpandedIdentifier::element_type
int element_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:106
CscIdHelper::m_hashOffset
int m_hashOffset[2][2]
Definition: CscIdHelper.h:217
CscIdHelper::StationPhiMin
@ StationPhiMin
Definition: CscIdHelper.h:206
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
IdDictRegion::m_implementation
std::vector< IdDictFieldImplementation > m_implementation
Definition: IdDictRegion.h:42
CscIdHelper::get_detectorElement_hash
int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:335
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
Identifier
Definition: IdentifierFieldParser.cxx:14
MuonIdHelper::m_dict
const IdDictDictionary * m_dict
Definition: MuonIdHelper.h:266