ATLAS Offline Software
CscIdHelper.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 "IdDict/IdDictField.h"
8 #include "IdDict/IdDictGroup.h"
9 #include "IdDict/IdDictMgr.h"
10 #include "IdDict/IdDictRegion.h"
12 
13 CscIdHelper::CscIdHelper() : MuonIdHelper("CscIdHelper", "csc") {
14  m_module_hashes.fill(-1);
15  m_detectorElement_hashes.fill(-1);
16 }
17 
20  int status = 0;
21 
22  // Check whether this helper should be reinitialized
23  if (!reinitialize(dict_mgr)) {
24  ATH_MSG_INFO("Request to reinitialize not satisfied - tags have not changed");
25  return 0;
26  } else {
27  ATH_MSG_DEBUG("(Re)initialize");
28  }
29 
31  if (AtlasDetectorID::initialize_from_dictionary(dict_mgr)) return 1;
32 
33  // Register version of the MuonSpectrometer dictionary
34  if (register_dict_tag(dict_mgr, "MuonSpectrometer")) return 1;
35 
36  m_dict = dict_mgr.find_dictionary("MuonSpectrometer");
37  if (!m_dict) {
38  ATH_MSG_ERROR(" initialize_from_dict - cannot access MuonSpectrometer dictionary ");
39  return 1;
40  }
41 
43 
44  if (initLevelsFromDict()) return 1;
45 
46  int index = technologyIndex("CSC");
47  if (index == -1) {
48  ATH_MSG_DEBUG("initLevelsFromDict - there are no CSC entries in the dictionary! ");
49  return 0;
50  }
51 
52  IdDictField* field = m_dict->find_field("chamberLayer");
53  if (field) {
54  m_CHAMBERLAYER_INDEX = field->index();
55  } else {
56  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'chamberLayer' field ");
57  status = 1;
58  }
59 
60  field = m_dict->find_field("wireLayer");
61  if (field) {
62  m_WIRELAYER_INDEX = field->index();
63  } else {
64  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'wireLayer' field ");
65  status = 1;
66  }
67 
68  field = m_dict->find_field("cscMeasuresPhi");
69  if (field) {
70  m_MEASURESPHI_INDEX = field->index();
71  } else {
72  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscMeasuresPhi' field ");
73  status = 1;
74  }
75 
76  field = m_dict->find_field("cscStrip");
77  if (field) {
78  m_CHANNEL_INDEX = field->index();
79  } else {
80  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'cscStrip' field ");
81  status = 1;
82  }
83 
84  // initialize the multilayer index
86 
88 
89  IdDictGroup* cscGroup = m_dict->find_group("csc");
90  if (!cscGroup) {
91  ATH_MSG_ERROR("Cannot find csc group");
92  } else {
93  m_GROUP_INDEX = cscGroup->regions()[0]->index();
94  }
95 
96  const IdDictRegion& region = m_dict->region(m_GROUP_INDEX);
104 
105  ATH_MSG_DEBUG(" CSC decode index and bit fields for each level: " << std::endl
106  << " muon " << m_muon_impl.show_to_string() << std::endl
107  << " station " << m_sta_impl.show_to_string() << std::endl
108  << " eta " << m_eta_impl.show_to_string() << std::endl
109  << " phi " << m_phi_impl.show_to_string() << std::endl
110  << " technology " << m_tec_impl.show_to_string() << std::endl
111  << " cham layer " << m_cla_impl.show_to_string() << std::endl
112  << " layer " << m_lay_impl.show_to_string() << std::endl
113  << " phi " << m_mea_impl.show_to_string() << std::endl
114  << " strip " << m_str_impl.show_to_string());
115 
120 
122  int muonField = -1;
123  const IdDictDictionary* atlasDict = dict_mgr.find_dictionary("ATLAS");
124  if (atlasDict->get_label_value("subdet", "MuonSpectrometer", muonField)) {
125  ATH_MSG_ERROR("Could not get value for label 'MuonSpectrometer' of field "
126  << "'subdet' in dictionary " << atlasDict->name());
127  return 1;
128  }
129 
131 
133  region_id.add(muonField);
134  Range prefix;
135  MultiRange muon_range = m_dict->build_multirange(region_id, prefix, "technology");
136  if (muon_range.size() > 0) {
137  ATH_MSG_INFO("MultiRange built successfully to Technology: "
138  << "MultiRange size is " << muon_range.size());
139  } else {
140  ATH_MSG_ERROR("Muon MultiRange is empty for modules");
141  }
142 
143  // Build MultiRange down to "detector element" for all mdt regions
144 
145  ExpandedIdentifier detectorElement_region;
146  detectorElement_region.add(muonField);
147  Range detectorElement_prefix;
148  MultiRange muon_detectorElement_range = m_dict->build_multirange(detectorElement_region, detectorElement_prefix, "chamberLayer");
149  if (muon_detectorElement_range.size() > 0) {
150  ATH_MSG_INFO("MultiRange built successfully to detector element: "
151  << "Multilayer MultiRange size is " << muon_detectorElement_range.size());
152  } else {
153  ATH_MSG_ERROR("Muon CSC detector element MultiRange is empty");
154  }
155 
157 
158  ExpandedIdentifier csc_region;
159  csc_region.add(muonField);
160  Range csc_prefix;
161  MultiRange muon_channel_range = m_dict->build_multirange(csc_region, csc_prefix, "cscStrip");
162  if (muon_channel_range.size() > 0) {
163  ATH_MSG_INFO("MultiRange built successfully to cscStrip: "
164  << "MultiRange size is " << muon_channel_range.size());
165  } else {
166  ATH_MSG_ERROR("Muon MultiRange is empty for channels");
167  }
168 
176  int cscField = -1;
177  status = m_dict->get_label_value("technology", "CSC", cscField);
178 
179  for (int i = 0; i < (int)muon_range.size(); ++i) {
180  const Range& range = muon_range[i];
181  if (range.fields() > m_TECHNOLOGY_INDEX) {
183  if (field.match((ExpandedIdentifier::element_type)cscField)) {
185  ATH_MSG_DEBUG("field size is " << (int)range.cardinality() << " field index = " << i);
186  }
187  }
188  }
189 
190  for (int j = 0; j < (int)muon_detectorElement_range.size(); ++j) {
191  const Range& range = muon_detectorElement_range[j];
192  if (range.fields() > m_TECHNOLOGY_INDEX) {
194  if (field.match((ExpandedIdentifier::element_type)cscField)) {
196  ATH_MSG_DEBUG("detector element field size is " << (int)range.cardinality() << " field index = " << j);
197  }
198  }
199  }
200 
201  for (int j = 0; j < (int)muon_channel_range.size(); ++j) {
202  const Range& range = muon_channel_range[j];
203  if (range.fields() > m_TECHNOLOGY_INDEX) {
205  if (field.match((ExpandedIdentifier::element_type)cscField)) {
207  ATH_MSG_DEBUG("channel field size is " << (int)range.cardinality() << " field index = " << j);
208  }
209  }
210  }
211 
213 
214  if (m_full_module_range.size() == 0) {
215  ATH_MSG_ERROR("CSC MultiRange ID is empty for modules");
216  status = 1;
217  }
218 
220 
221  if (m_full_detectorElement_range.size() == 0) {
222  ATH_MSG_ERROR("CSC MultiRange ID is empty for detector elements");
223  status = 1;
224  }
225 
227 
228  if (m_full_channel_range.size() == 0) {
229  ATH_MSG_ERROR("CSC MultiRange ID is empty for channels");
230  status = 1;
231  }
232 
234 
235  ATH_MSG_INFO("Initializing CSC hash indices ... ");
236  status = init_hashes();
237  status = init_detectorElement_hashes(); // for chamber layer - a chamber
241 
243 
244  ATH_MSG_INFO("Initializing CSC hash indices for finding neighbors ... ");
246 
247  // now we have to set the stripMax values (for the stripMax(id) function)
248  // this could be also done on an event-by-event basis as for stripMin(id)
249  // however, for all existing layouts there are only 2 possible values for stripMax,
250  // namely those for layers which measure phi (measuresPhi(id)=true) and the rest.
251  // thus, we initialize 2 member variables here to speed up calling the function during runtime
252  // loop on the channel Identifiers and check (for consistency!) that really only
253  // two maximum numbers of strips (w/o measuresPhi) are around
254  ExpandedIdentifier expId;
255  IdContext strip_context = channel_context();
256  for (const auto& id : m_channel_vec) {
257  if (get_expanded_id(id, expId, &strip_context)) {
258  ATH_MSG_ERROR("Failed to retrieve ExpandedIdentifier from Identifier " << id.get_compact());
259  return 1;
260  }
261  bool measPhi = measuresPhi(id);
262  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
263  const Range& range = m_full_channel_range[i];
264  if (range.match(expId)) {
265  const Range::field& phi_field = range[m_CHANNEL_INDEX];
266  if (not !phi_field.empty()) {
267  ATH_MSG_ERROR("Range::field for phi at position " << i << " does not have a maximum");
268  return 1;
269  }
270  unsigned int max = phi_field.get_maximum();
271  if (measPhi) {
272  if (m_stripMaxPhi != UINT_MAX && m_stripMaxPhi != max) {
273  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxPhi=" << m_stripMaxPhi);
274  return 1;
275  } else
276  m_stripMaxPhi = max;
277  } else {
278  if (m_stripMaxEta != UINT_MAX && m_stripMaxEta != max) {
279  ATH_MSG_ERROR("Maximum of Range::field for phi (" << max << ") is not equal to m_stripMaxEta=" << m_stripMaxEta);
280  return 1;
281  } else
282  m_stripMaxEta = max;
283  }
284  }
285  }
286  }
287 
288  // check whether the current layout contains chamberLayer 1 Identifiers (pre-Run3) in the vector of module Identifiers
289  if (!m_module_vec.empty() && chamberLayer(m_module_vec.at(0)) == 1) m_hasChamLay1 = true;
290  m_init = true;
291  return (status);
292 }
293 
294 inline unsigned int CscIdHelper::moduleHashIdx(const Identifier& id) const{
297  constexpr unsigned int C = s_phiDim;
298  constexpr unsigned int BxC = C*s_etaDim;
299  const int stEta = stationEta(id);
300  return (stationName(id) - m_stationShift)*BxC + (stEta + s_etaDim/2 - (stEta>0))*C + (stationPhi(id) -1);
301 }
302 inline unsigned int CscIdHelper::detEleHashIdx(const Identifier& id) const{
303  return moduleHashIdx(id) *s_mlDim + (chamberLayer(id) -1);
304 }
305 
307 
309  unsigned int hash_max = module_hash_max();
310  for (unsigned int i = 0; i < hash_max; ++i) {
311  const Identifier& id = m_module_vec[i];
312  const unsigned idx = moduleHashIdx(id);
313  if (idx >= m_module_hashes.size() || m_module_hashes[idx] < hash_max){
314  ATH_MSG_FATAL("Failed to assign module hash to "<<show_to_string(id));
315  return 1;
316  }
317  m_module_hashes[idx] = i;
318  }
319 
320  hash_max = detectorElement_hash_max();
321  for (unsigned int i = 0; i < hash_max; ++i) {
322  const Identifier& id = m_detectorElement_vec[i];
323  const unsigned idx = detEleHashIdx(id);
324  if (idx >= m_detectorElement_hashes.size() || m_detectorElement_hashes[idx] < hash_max){
325  ATH_MSG_FATAL("Failed to assign detector hash to "<<show_to_string(id));
326  return 1;
327  }
329  }
330 
331  return 0;
332 }
333 
335  const unsigned int idx = moduleHashIdx(id);
336  if (idx >= m_module_hashes.size()) return 1;
337  hash_id = m_module_hashes[idx];
338  return 0;
339 }
341  const unsigned int idx = detEleHashIdx(id);
342  if (idx >= m_detectorElement_hashes.size()) return 1;
343  hash_id = m_detectorElement_hashes[idx];
344  return 0;
345 }
346 
347 
348 
349 void CscIdHelper::idChannels(const Identifier& id, std::vector<Identifier>& vect) const {
350  vect.clear();
351  Identifier parent = parentID(id);
352  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
353  const Range& range = m_full_channel_range[i];
355  for (const auto & expId : rit) {
356  Identifier child;
357  get_id(expId, child);
358  if (parentID(child) == parent) vect.push_back(child);
359  }
360  }
361 }
362 
364  ExpandedIdentifier expId;
365  IdContext eta_context(expId, 0, m_ETA_INDEX);
366  if (!get_expanded_id(id, expId, &eta_context)) {
367  int result = -999;
368  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
369  const Range& range = m_full_module_range[i];
370  if (range.match(expId)) {
371  const Range::field& eta_field = range[m_ETA_INDEX];
372  if (not eta_field.empty()) {
373  int etamin = eta_field.get_minimum();
374  if (-999 == result) {
375  result = etamin;
376  } else {
377  if (etamin < result) result = etamin;
378  }
379  }
380  }
381  }
382  return (result);
383  }
384  return (999);
385 }
386 
388  ExpandedIdentifier expId;
389  IdContext eta_context(expId, 0, m_ETA_INDEX);
390  if (!get_expanded_id(id, expId, &eta_context)) {
391  int result = -999;
392  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
393  const Range& range = m_full_module_range[i];
394  if (range.match(expId)) {
395  const Range::field& eta_field = range[m_ETA_INDEX];
396  if (not eta_field.empty()) {
397  int etamax = eta_field.get_maximum();
398  if (result < etamax) result = etamax;
399  }
400  }
401  }
402  return (result);
403  }
404  return (-999);
405 }
406 
408  ExpandedIdentifier expId;
409  IdContext phi_context(expId, 0, m_PHI_INDEX);
410  if (!get_expanded_id(id, expId, &phi_context)) {
411  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
412  const Range& range = m_full_module_range[i];
413  if (range.match(expId)) {
414  const Range::field& phi_field = range[m_PHI_INDEX];
415  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
416  }
417  }
418  }
420  return (999);
421 }
422 
424  ExpandedIdentifier expId;
425  IdContext phi_context(expId, 0, m_PHI_INDEX);
426  if (!get_expanded_id(id, expId, &phi_context)) {
427  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
428  const Range& range = m_full_module_range[i];
429  if (range.match(expId)) {
430  const Range::field& phi_field = range[m_PHI_INDEX];
431  if (not phi_field.empty()) { return (phi_field.get_maximum()); }
432  }
433  }
434  }
436  return (-999);
437 }
438 
440  ExpandedIdentifier expId;
441  IdContext chamberLayer_context(expId, 0, m_CHAMBERLAYER_INDEX);
442  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
443  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
444  const Range& range = m_full_channel_range[i];
445  if (range.match(expId)) {
446  const Range::field& phi_field = range[m_CHAMBERLAYER_INDEX];
447  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
448  }
449  }
450  }
452  return (999);
453 }
454 
456  ExpandedIdentifier expId;
457  IdContext chamberLayer_context(expId, 0, m_CHAMBERLAYER_INDEX);
458  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
459  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
460  const Range& range = m_full_channel_range[i];
461  if (range.match(expId)) {
462  const Range::field& phi_field = range[m_CHAMBERLAYER_INDEX];
463  if (not phi_field.empty()) { return (phi_field.get_maximum()); }
464  }
465  }
466  }
468  return (-999);
469 }
470 
471 int CscIdHelper::wireLayerMin(const Identifier& id) const {
472  ExpandedIdentifier expId;
473  IdContext wireLayer_context(expId, 0, m_WIRELAYER_INDEX);
474  if (!get_expanded_id(id, expId, &wireLayer_context)) {
475  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
476  const Range& range = m_full_channel_range[i];
477  if (range.match(expId)) {
478  const Range::field& phi_field = range[m_WIRELAYER_INDEX];
479  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
480  }
481  }
482  }
484  return (999);
485 }
486 
487 int CscIdHelper::wireLayerMax(const Identifier& id) const {
488  ExpandedIdentifier expId;
489  IdContext chamberLayer_context(expId, 0, m_WIRELAYER_INDEX);
490  if (!get_expanded_id(id, expId, &chamberLayer_context)) {
491  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
492  const Range& range = m_full_channel_range[i];
493  if (range.match(expId)) {
494  const Range::field& phi_field = range[m_WIRELAYER_INDEX];
495  if (not phi_field.empty()) { return (phi_field.get_maximum()); }
496  }
497  }
498  }
500  return (-999);
501 }
502 
504  ExpandedIdentifier expId;
505  IdContext measuresPhi_context(expId, 0, m_MEASURESPHI_INDEX);
506  if (!get_expanded_id(id, expId, &measuresPhi_context)) {
507  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
508  const Range& range = m_full_channel_range[i];
509  if (range.match(expId)) {
510  const Range::field& phi_field = range[m_MEASURESPHI_INDEX];
511  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
512  }
513  }
514  }
516  return (999);
517 }
518 
520  ExpandedIdentifier expId;
521  IdContext measuresPhi_context(expId, 0, m_MEASURESPHI_INDEX);
522  if (!get_expanded_id(id, expId, &measuresPhi_context)) {
523  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
524  const Range& range = m_full_channel_range[i];
525  if (range.match(expId)) {
526  const Range::field& phi_field = range[m_MEASURESPHI_INDEX];
527  if (not phi_field.empty()) { return (phi_field.get_maximum()); }
528  }
529  }
530  }
532  return (-999);
533 }
534 
535 int CscIdHelper::stripMin(const Identifier& id) const {
536  ExpandedIdentifier expId;
537  IdContext strip_context = channel_context();
538  if (!get_expanded_id(id, expId, &strip_context)) {
539  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
540  const Range& range = m_full_channel_range[i];
541  if (range.match(expId)) {
542  const Range::field& phi_field = range[m_CHANNEL_INDEX];
543  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
544  }
545  }
546  }
548  return (999);
549 }
550 
551 int CscIdHelper::stripMax(const Identifier& id) const {
552  if (measuresPhi(id))
553  return m_stripMaxPhi;
554  else
555  return m_stripMaxEta;
556 }
557 
559 
560 bool CscIdHelper::valid(const Identifier& id) const {
561  if (!validElement(id)) return false;
562 
563  int cLayer = chamberLayer(id);
564  if ((cLayer < chamberLayerMin(id)) || (cLayer > chamberLayerMax(id))) {
565  ATH_MSG_DEBUG("Invalid chamberLayer=" << cLayer << " chamberLayerMin=" << chamberLayerMin(id)
566  << " chamberLayerMax=" << chamberLayerMax(id));
567  return false;
568  }
569 
570  int wLayer = wireLayer(id);
571  if ((wLayer < wireLayerMin(id)) || (wLayer > wireLayerMax(id))) {
572  ATH_MSG_DEBUG("Invalid wireLayer=" << wLayer << " wireLayerMin=" << wireLayerMin(id) << " wireLayerMax=" << wireLayerMax(id));
573  return false;
574  }
575 
576  int mPhi = measuresPhi(id);
577  if ((mPhi < measuresPhiMin(id)) || (mPhi > measuresPhiMax(id))) {
578  ATH_MSG_DEBUG("Invalid measuresPhi=" << mPhi << " measuresPhiMin=" << measuresPhiMin(id)
579  << " measuresPhiMax=" << measuresPhiMax(id));
580  return false;
581  }
582 
583  int channel = strip(id);
584  if ((channel > stripMax(id)) || (channel < stripMin(id))) {
585  ATH_MSG_DEBUG("Invalid strip=" << channel << " stripMin=" << stripMin(id) << " stripMax=" << stripMax(id));
586  return false;
587  }
588  return true;
589 }
590 bool CscIdHelper::isStNameInTech(const std::string& stationName) const { return stationName[0] == 'C'; }
591 bool CscIdHelper::validElement(const Identifier& id) const {
592  int station = stationName(id);
593  if (!validStation(station)) {
594  ATH_MSG_DEBUG("Invalid stationName=" << stationNameString(station));
595  return false;
596  }
597 
598  int eta = stationEta(id);
599  if ((eta < stationEtaMin(id)) || (eta > stationEtaMax(id)) || (0 == eta)) {
600  ATH_MSG_DEBUG("Invalid stationEta=" << eta << " for stationName=" << stationNameString(station)
601  << " stationEtaMin=" << stationEtaMin(id) << " stationEtaMax=" << stationEtaMax(id));
602  return false;
603  }
604 
605  int phi = stationPhi(id);
606  if ((phi < stationPhiMin(id)) || (phi > stationPhiMax(id))) {
607  ATH_MSG_DEBUG("Invalid stationPhi=" << phi << " for stationName=" << stationNameString(station)
608  << " stationPhiMin=" << stationPhiMin(id) << " stationPhiMax=" << stationPhiMax(id));
609  return false;
610  }
611  return true;
612 }
613 
615 
617  if (!validStation(stationName)) {
618  ATH_MSG_DEBUG("Invalid stationName=" << stationNameString(stationName));
619  return false;
620  }
621  if ((stationEta < stationEtaMin(id)) || (stationEta > stationEtaMax(id)) || (0 == stationEta)) {
622  ATH_MSG_DEBUG("Invalid stationEta=" << stationEta << " for stationName=" << stationNameString(stationName)
623  << " stationEtaMin=" << stationEtaMin(id) << " stationEtaMax=" << stationEtaMax(id));
624  return false;
625  }
626  if ((stationPhi < stationPhiMin(id)) || (stationPhi > stationPhiMax(id))) {
627  ATH_MSG_DEBUG("Invalid stationPhi=" << stationPhi << " for stationName=" << stationNameString(stationName)
628  << " stationPhiMin=" << stationPhiMin(id) << " stationPhiMax=" << stationPhiMax(id));
629  return false;
630  }
631  return true;
632 }
633 
634 bool CscIdHelper::validChannel(const Identifier& id, int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
635  int measuresPhi, int strip) const {
636  if (!validElement(id, stationName, stationEta, stationPhi)) return false;
637 
638  if ((chamberLayer < chamberLayerMin(id)) || (chamberLayer > chamberLayerMax(id))) {
639  ATH_MSG_DEBUG("Invalid chamberLayer=" << chamberLayer << " chamberLayerMin=" << chamberLayerMin(id)
640  << " chamberLayerMax=" << chamberLayerMax(id));
641  return false;
642  }
643  if ((wireLayer < wireLayerMin(id)) || (wireLayer > wireLayerMax(id))) {
644  ATH_MSG_DEBUG("Invalid wireLayer=" << wireLayer << " wireLayerMin=" << wireLayerMin(id) << " wireLayerMax=" << wireLayerMax(id));
645  return false;
646  }
647  if ((measuresPhi < measuresPhiMin(id)) || (measuresPhi > measuresPhiMax(id))) {
648  ATH_MSG_DEBUG("Invalid measuresPhi=" << measuresPhi << " measuresPhiMin=" << measuresPhiMin(id)
649  << " measuresPhiMax=" << measuresPhiMax(id));
650  return false;
651  }
652  if ((strip > stripMax(id)) || (strip < stripMin(id))) {
653  ATH_MSG_DEBUG("Invalid strip=" << strip << " stripMin=" << stripMin(id) << " stripMax=" << stripMax(id));
654  return false;
655  }
656  return true;
657 }
658 
659 // calculate the hash offset
661  m_hashOffset[0][0] = 0;
662  std::string version = m_dict->version();
663 
664  if (version == "H8 2004") {
665  m_hashOffset[0][1] = 1536;
666  m_hashOffset[1][0] = m_hashOffset[0][0];
667  m_hashOffset[1][1] = m_hashOffset[0][1];
668  } else if (version == "CSC Cosmic") {
669  m_hashOffset[0][1] = 3072;
670  m_hashOffset[1][0] = m_hashOffset[0][0];
671  m_hashOffset[1][1] = m_hashOffset[0][1];
672  } else if (version == "P.03" || version == "H8 2003" || version == "H8 2002" || version == "M2.8") {
673  m_hashOffset[0][1] = 27392;
674  m_hashOffset[1][0] = m_hashOffset[0][1] + 3584;
675  m_hashOffset[1][1] = m_hashOffset[0][1] + m_hashOffset[1][0];
676  } else {
677  m_hashOffset[0][1] = 24576;
678  m_hashOffset[1][0] = m_hashOffset[0][1] + 6144;
679  m_hashOffset[1][1] = m_hashOffset[0][1] + m_hashOffset[1][0];
680  }
681  return 0;
682 }
684  // pack fields independently
691  return result;
692 }
694  try {
697  return result;
698  } catch (const std::out_of_range&) { isValid = false; }
699  return Identifier{0};
700 }
701 
702 Identifier CscIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi) const {
703  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi);
704 }
705 Identifier CscIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool& isValid) const {
706  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi, isValid);
707 }
708 
709 Identifier CscIdHelper::elementID(const Identifier& id) const { return parentID(id); }
710 
711 Identifier CscIdHelper::channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi,
712  int strip) const {
713  // pack fields independently
724  return result;
725 }
726 Identifier CscIdHelper::channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi,
727  int strip, bool& isValid) const {
728  try {
731  return result;
732  } catch (const std::out_of_range&) { isValid = false; }
733  return Identifier{0};
734 }
735 
736 Identifier CscIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
737  int measuresPhi, int strip) const {
739 }
740 Identifier CscIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int chamberLayer, int wireLayer,
741  int measuresPhi, int strip, bool& isValid) const {
743 }
744 
745 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip) const {
746  Identifier result(id);
751  return result;
752 }
753 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip, bool& isValid) const {
754  try {
756  isValid = valid(result);
757  return result;
758  } catch (const std::out_of_range&) { isValid = false; }
759  return Identifier{0};
760 }
762 
764  assert(is_csc(id));
765  Identifier result(id);
770  return result;
771 }
772 
773 // Access to components of the ID
774 
775 int CscIdHelper::chamberLayer(const Identifier& id) const { return m_cla_impl.unpack(id); }
776 
777 int CscIdHelper::wireLayer(const Identifier& id) const { return m_lay_impl.unpack(id); }
778 
779 bool CscIdHelper::measuresPhi(const Identifier& id) const { return m_mea_impl.unpack(id); }
780 
781 int CscIdHelper::strip(const Identifier& id) const { return m_str_impl.unpack(id); }
782 
783 int CscIdHelper::channel(const Identifier& id) const { return strip(id); }
784 
786 
788 
790 
792 
794 
796 
798 
800 
802 
804 
806 
808 
810 
812 
814  int cscField = technologyIndex("CSC");
815  if (m_dict) { cscField = csc_field_value(); }
816  return cscField;
817 }
818 
819 int CscIdHelper::sector(const Identifier& id) const { return stationEta(id) * (2 * stationPhi(id) - (stationName(id) - 49) + 1); }
820 
821 int CscIdHelper::gasGap(const Identifier& id) const { return chamberLayer(id); }
CscIdHelper.h
IdDictMgr.h
MuonIdHelper::validStation
bool validStation(int stationName, int technology) const
Definition: MuonIdHelper.cxx:777
MuonIdHelper::stationNameIndex
int stationNameIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:852
CscIdHelper::valid
bool valid(const Identifier &id) const
Public validation of levels.
Definition: CscIdHelper.cxx:560
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:809
IdDictDictionary::build_multirange
MultiRange build_multirange() const
Get MultiRange for full dictionary.
Definition: IdDictDictionary.cxx:290
MuonIdHelper::initLevelsFromDict
int initLevelsFromDict()
Definition: MuonIdHelper.cxx:249
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:255
MuonIdHelper::m_init
bool m_init
Definition: MuonIdHelper.h:339
get_generator_info.result
result
Definition: get_generator_info.py:21
IdDictGroup
Definition: IdDictGroup.h:25
CscIdHelper::ChamberLayerMax
@ ChamberLayerMax
Definition: CscIdHelper.h:209
CscIdHelper::moduleHashIdx
unsigned int moduleHashIdx(const Identifier &id) const
Definition: CscIdHelper.cxx:294
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:19
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:74
MuonIdHelper::technologyIndex
int technologyIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:858
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
IdDictDictionary::version
const std::string & version() const
Dictionary version.
Definition: IdDictDictionary.h:341
IdDictFieldImplementation::show_to_string
std::string show_to_string(void) const
Definition: IdDictFieldImplementation.cxx:32
AtlasDetectorID::muon_field_value
int muon_field_value() const
Definition: AtlasDetectorID.h:615
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:751
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
index
Definition: index.py:1
IdDictDictionary::region
const IdDictRegion & region(size_t i) const
Region at index i.
Definition: IdDictDictionary.h:350
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:183
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:121
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
IdDictDictionary.h
MuonIdHelper::m_sta_impl
IdDictFieldImplementation m_sta_impl
Definition: MuonIdHelper.h:286
DMTest::C
C_v1 C
Definition: C.h:26
CscIdHelper::idChannels
void idChannels(const Identifier &id, std::vector< Identifier > &vect) const
Definition: CscIdHelper.cxx:349
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:805
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
MuonIdHelper::is_csc
bool is_csc(const Identifier &id) const
Definition: MuonIdHelper.cxx:795
IdDictFieldImplementation::pack
void pack(int value, Identifier &id) const
Definition: IdDictFieldImplementation.h:173
IdentifierField::get_maximum
element_type get_maximum() const
Definition: IdentifierField.h:130
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:810
IdDictDictionary::name
const std::string & name() const
Dictionary name.
Definition: IdDictDictionary.h:332
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:872
MuonIdHelper::m_phi_impl
IdDictFieldImplementation m_phi_impl
Definition: MuonIdHelper.h:288
CscIdHelper::measuresPhiMin
static int measuresPhiMin()
Definition: CscIdHelper.cxx:803
CscIdHelper::chamberLayerMin
static int chamberLayerMin()
Definition: CscIdHelper.cxx:795
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:271
CscIdHelper::m_stationShift
unsigned int m_stationShift
Minimal station index found.
Definition: CscIdHelper.h:171
IdDictGroup.h
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:47
CalibDbCompareRT.region_id
region_id
Definition: CalibDbCompareRT.py:67
IdDictRegion
Definition: IdDictRegion.h:20
CscIdHelper::channel
int channel(const Identifier &id) const override
Definition: CscIdHelper.cxx:783
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:789
CscIdHelper::wireLayer
int wireLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:777
CscIdHelper::strip_hash_offsets
int strip_hash_offsets()
Definition: CscIdHelper.cxx:660
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:590
IdDictRegion::implementation
const IdDictFieldImplementation & implementation(size_t i) const
Definition: IdDictRegion.cxx:34
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:114
MuonIdHelper
Definition: MuonIdHelper.h:77
CscIdHelper::parentID
Identifier parentID(const Identifier &id) const
get parent id from channel id
Definition: CscIdHelper.cxx:763
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:787
CscIdHelper::m_str_impl
IdDictFieldImplementation m_str_impl
Definition: CscIdHelper.h:182
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
MuonIdHelper::m_module_vec
id_vec m_module_vec
Definition: MuonIdHelper.h:268
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:634
CscIdHelper::get_module_hash
int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:334
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CscIdHelper::wireLayerMax
static int wireLayerMax()
Definition: CscIdHelper.cxx:801
CscIdHelper::m_stripMaxPhi
unsigned int m_stripMaxPhi
Definition: CscIdHelper.h:219
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
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:276
CscIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: CscIdHelper.cxx:821
MuonIdHelper::m_full_module_range
MultiRange m_full_module_range
Definition: MuonIdHelper.h:266
CscIdHelper::CscIdHelper
CscIdHelper()
Definition: CscIdHelper.cxx:13
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:164
CscIdHelper::StationEtaMin
@ StationEtaMin
Definition: CscIdHelper.h:204
IdDictGroup::regions
const std::vector< IdDictRegion * > & regions()
Definition: IdDictGroup.cxx:46
MuonIdHelper::m_eta_impl
IdDictFieldImplementation m_eta_impl
Definition: MuonIdHelper.h:287
MuonIdHelper::init_hashes
int init_hashes()
Definition: MuonIdHelper.cxx:356
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:285
MuonIdHelper::m_GROUP_INDEX
size_t m_GROUP_INDEX
Definition: MuonIdHelper.h:255
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:201
CscIdHelper::m_lay_impl
IdDictFieldImplementation m_lay_impl
Definition: CscIdHelper.h:180
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:820
CscIdHelper::stationPhiMin
static int stationPhiMin()
Definition: CscIdHelper.cxx:791
IdDictDictionary::get_label_value
int get_label_value(const std::string &field, const std::string &label, int &value) const
Definition: IdDictDictionary.cxx:75
MuonIdHelper::stationNameString
const std::string & stationNameString(const int &index) const
Definition: MuonIdHelper.cxx:864
MuonIdHelper::init_neighbors
int init_neighbors()
Definition: MuonIdHelper.cxx:528
CscIdHelper::init_id_to_hashes
int init_id_to_hashes()
Definition: CscIdHelper.cxx:306
CscIdHelper::sector
int sector(const Identifier &id) const
Definition: CscIdHelper.cxx:819
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:711
RangeIterator.h
MuonIdHelper::m_detectorElement_vec
id_vec m_detectorElement_vec
Definition: MuonIdHelper.h:278
CscIdHelper::m_stripMaxEta
unsigned int m_stripMaxEta
Definition: CscIdHelper.h:220
CscIdHelper::validElement
bool validElement(const Identifier &id) const
Definition: CscIdHelper.cxx:591
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:815
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:758
IdDictDictionary
Definition: IdDictDictionary.h:30
MuonIdHelper::m_ETA_INDEX
size_type m_ETA_INDEX
Definition: MuonIdHelper.h:257
CscIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: CscIdHelper.cxx:683
MuonIdHelper::init_detectorElement_hashes
virtual int init_detectorElement_hashes()
Definition: MuonIdHelper.cxx:402
get_generator_info.version
version
Definition: get_generator_info.py:33
CscIdHelper::stripMin
static int stripMin()
Definition: CscIdHelper.cxx:807
AtlasDetectorID::reinitialize
bool reinitialize(const IdDictMgr &dict_mgr)
Test whether an idhelper should be reinitialized based on the change of tags.
Definition: AtlasDetectorID.cxx:221
IdDictField.h
MuonIdHelper::m_TECHNOLOGY_INDEX
size_type m_TECHNOLOGY_INDEX
Definition: MuonIdHelper.h:259
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
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:365
CscIdHelper::chamberLayerMax
static int chamberLayerMax()
Definition: CscIdHelper.cxx:797
CscIdHelper::strip
int strip(const Identifier &id) const
Definition: CscIdHelper.cxx:781
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:83
MuonIdHelper::resetAndSet
void resetAndSet(const IdDictFieldImplementation &dict, const int new_val, Identifier &id) const
Definition: MuonIdHelper.h:306
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:261
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:289
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:273
CscIdHelper::detEleHashIdx
unsigned int detEleHashIdx(const Identifier &id) const
Definition: CscIdHelper.cxx:302
merge.status
status
Definition: merge.py:16
IdDictRegion.h
CscIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: CscIdHelper.cxx:779
MuonIdHelper::init_channel_hashes
int init_channel_hashes()
Definition: MuonIdHelper.cxx:448
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:799
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
CscIdHelper::get_detectorElement_hash
int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: CscIdHelper.cxx:340
MuonIdHelper::m_PHI_INDEX
size_type m_PHI_INDEX
Definition: MuonIdHelper.h:258
CscIdHelper::stationPhiMax
static int stationPhiMax()
Definition: CscIdHelper.cxx:793
AtlasDetectorID::csc_field_value
int csc_field_value() const
Definition: AtlasDetectorID.h:651
CscIdHelper::chamberLayer
int chamberLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:775
CscIdHelper::StationPhiMax
@ StationPhiMax
Definition: CscIdHelper.h:207
CscIdHelper::cscTechnology
int cscTechnology() const
Utility methods.
Definition: CscIdHelper.cxx:813
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:262
Identifier
Definition: IdentifierFieldParser.cxx:14
MuonIdHelper::m_dict
const IdDictDictionary * m_dict
Definition: MuonIdHelper.h:263