ATLAS Offline Software
MmIdHelper.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 
14 
15 /*******************************************************************************/
16 // Constructor/Destructor
17 MmIdHelper::MmIdHelper() : MuonIdHelper("MmIdHelper", "mm") {
18  m_module_hashes.fill(-1);
19  m_detectorElement_hashes.fill(-1);
20 }
21 /*******************************************************************************/
22 // Initialize dictionary
24  int status = 0;
25 
26  // Check whether this helper should be reinitialized
27  if (!reinitialize(dict_mgr)) {
28  ATH_MSG_INFO("Request to reinitialize not satisfied - tags have not changed");
29  return (0);
30  } else {
31  ATH_MSG_DEBUG("(Re)initialize ");
32  }
33 
34  // init base object
36  if (AtlasDetectorID::initialize_from_dictionary(dict_mgr)) return 1;
37 
38  // Register version of the MuonSpectrometer dictionary
39  if (register_dict_tag(dict_mgr, "MuonSpectrometer")) return 1;
40 
41  m_dict = dict_mgr.find_dictionary("MuonSpectrometer");
42  if (!m_dict) {
43  ATH_MSG_ERROR(" initialize_from_dict - cannot access MuonSpectrometer dictionary ");
44  return 1;
45  }
46 
47  // Initialize some of the field indices
48  if (initLevelsFromDict()) return 1;
49 
50  int index = technologyIndex("MM");
51  if (index == -1) {
52  ATH_MSG_DEBUG("initLevelsFromDict - there are no MM entries in the dictionary! ");
53  return 0;
54  }
55 
56  IdDictField* field = m_dict->find_field("mmMultilayer");
57  if (field) {
58  m_DETECTORELEMENT_INDEX = field->index();
59  } else {
60  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'mmMultilayer' field ");
61  status = 1;
62  }
63 
64  field = m_dict->find_field("mmGasGap");
65  if (field) {
66  m_GASGAP_INDEX = field->index();
67  } else {
68  ATH_MSG_ERROR("initLevelsFromDict - unable to find 'mmGasGap' field ");
69  status = 1;
70  }
71 
72  field = m_dict->find_field("mmChannel");
73  if (field) {
74  m_CHANNEL_INDEX = field->index();
75  } else {
76  ATH_MSG_ERROR("initLevelsFromDict - unable to find mmChannel' field ");
77  status = 1;
78  }
79 
80  // reinitialize the module ndex
82 
83  // save an index to the first region of MM
84  IdDictGroup* mmGroup = m_dict->find_group("mm");
85  if (!mmGroup) {
86  ATH_MSG_ERROR("Cannot find mm group");
87  } else {
88  m_GROUP_INDEX = mmGroup->regions()[0]->index();
89  }
90 
91  const IdDictRegion& region = m_dict->region(m_GROUP_INDEX);
98 
99  ATH_MSG_DEBUG(" MicroMegas 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  << " multilayer " << m_mplet_impl.show_to_string()
106  << std::endl
107  << " gasgap " << m_gap_impl.show_to_string() << std::endl
108  << " channel " << m_cha_impl.show_to_string());
109 
110  //
111  // Build multirange for the valid set of identifiers
112  //
113 
114  // Find value for the field MuonSpectrometer
115  int muonField = -1;
116  const IdDictDictionary* atlasDict = dict_mgr.find_dictionary("ATLAS");
117  if (atlasDict->get_label_value("subdet", "MuonSpectrometer", muonField)) {
118  ATH_MSG_ERROR("Could not get value for label 'MuonSpectrometer' of field 'subdet' in dictionary " << atlasDict->name());
119  return 1;
120  }
121 
122  // Build MultiRange down to "technology" for all (muon) regions
124  region_id.add(muonField);
125  Range prefix;
126  MultiRange muon_range = m_dict->build_multirange(region_id, prefix, "technology");
127  if (muon_range.size() > 0) {
128  ATH_MSG_INFO("MultiRange built successfully to Technology: "
129  << "MultiRange size is " << muon_range.size());
130  } else {
131  ATH_MSG_ERROR("Muon MultiRange is empty");
132  }
133 
134  // Build MultiRange down to "detector element" for all mdt regions
135  ExpandedIdentifier detectorElement_region;
136  detectorElement_region.add(muonField);
137  Range detectorElement_prefix;
138  MultiRange muon_detectorElement_range = m_dict->build_multirange(detectorElement_region, detectorElement_prefix, "mmMultilayer");
139  if (muon_detectorElement_range.size() > 0) {
140  ATH_MSG_INFO("MultiRange built successfully to detector element: "
141  << "Multilayer MultiRange size is " << muon_detectorElement_range.size());
142  } else {
143  ATH_MSG_ERROR("Muon MicroMegas detector element MultiRange is empty");
144  }
145 
146  // Build MultiRange down to "channel" for all MM regions
147  ExpandedIdentifier mm_region;
148  mm_region.add(muonField);
149  Range mm_prefix;
150  MultiRange muon_channel_range = m_dict->build_multirange(mm_region, mm_prefix, "mmChannel");
151  if (muon_channel_range.size() > 0) {
152  ATH_MSG_INFO("MultiRange built successfully to channel: "
153  << "MultiRange size is " << muon_channel_range.size());
154  } else {
155  ATH_MSG_ERROR("Muon MultiRange is empty for channels");
156  }
157 
158  // build MicroMegas module ranges
159  // Find the regions that have a "technology field" that matches the MM and save them
160  int mmField = -1;
161  status = m_dict->get_label_value("technology", "MM", mmField);
162 
163  for (int i = 0; i < (int)muon_range.size(); ++i) {
164  const Range& range = muon_range[i];
165  if (range.fields() > m_TECHNOLOGY_INDEX) {
167  if (field.match((ExpandedIdentifier::element_type)mmField)) {
169  ATH_MSG_DEBUG("field size is " << (int)range.cardinality() << " field index = " << i);
170  }
171  }
172  }
173 
174  for (int j = 0; j < (int)muon_detectorElement_range.size(); ++j) {
175  const Range& range = muon_detectorElement_range[j];
176  if (range.fields() > m_TECHNOLOGY_INDEX) {
178  if (field.match((ExpandedIdentifier::element_type)mmField)) {
180  ATH_MSG_DEBUG("detector element field size is " << (int)range.cardinality() << " field index = " << j);
181  }
182  }
183  }
184 
185  for (int j = 0; j < (int)muon_channel_range.size(); ++j) {
186  const Range& range = muon_channel_range[j];
187  if (range.fields() > m_TECHNOLOGY_INDEX) {
189  if (field.match((ExpandedIdentifier::element_type)mmField)) {
191  ATH_MSG_DEBUG("channel field size is " << (int)range.cardinality() << " field index = " << j);
192  }
193  }
194  }
195 
196  // test to see that the multi range is not empty
197  if (m_full_module_range.size() == 0) {
198  ATH_MSG_ERROR("MicroMegas MultiRange ID is empty for modules");
199  status = 1;
200  }
201 
202  // test to see that the detector element multi range is not empty
203  if (m_full_detectorElement_range.size() == 0) {
204  ATH_MSG_ERROR("MicroMegas MultiRange ID is empty for detector elements");
205  status = 1;
206  }
207 
208  // test to see that the multi range is not empty
209  if (m_full_channel_range.size() == 0) {
210  ATH_MSG_ERROR("MicroMegas MultiRange ID is empty for channels");
211  status = 1;
212  }
213 
214  // Setup the hash tables for MicroMegas
215  ATH_MSG_INFO("Initializing MicroMegas hash indices ... ");
216  status = init_hashes();
217  status = init_detectorElement_hashes(); // same as module hash
219 
220  // Setup hash tables for finding neighbors
221  ATH_MSG_INFO("Initializing MicroMegas hash indices for finding neighbors ... ");
223 
224  m_init = true;
225  return (status);
226 } // end MmIdHelper::initialize_from_dictionary
227 /*******************************************************************************/
228 
229 inline unsigned int MmIdHelper::moduleHashIdx(const Identifier& id) const{
232  constexpr unsigned int C = s_phiDim;
233  constexpr unsigned int BxC = C*s_etaDim;
234  const int stEta = stationEta(id);
235  return (stationName(id) - m_stationShift)*BxC + (stEta + s_etaDim/2 - (stEta>0))*C + (stationPhi(id) -1);
236 }
237 inline unsigned int MmIdHelper::detEleHashIdx(const Identifier& id) const{
238  return moduleHashIdx(id) *s_mlDim + (multilayer(id) -1);
239 }
240 
243  unsigned int hash_max = module_hash_max();
244  for (unsigned int i = 0; i < hash_max; ++i) {
245  const Identifier& id = m_module_vec[i];
246  const unsigned idx = moduleHashIdx(id);
247  if (idx >= m_module_hashes.size() || m_module_hashes[idx] < hash_max){
248  ATH_MSG_FATAL("Failed to assign module hash to "<<show_to_string(id));
249  return 1;
250  }
251  m_module_hashes[idx] = i;
252  }
253 
254  hash_max = detectorElement_hash_max();
255  for (unsigned int i = 0; i < hash_max; ++i) {
256  const Identifier& id = m_detectorElement_vec[i];
257  const unsigned idx = detEleHashIdx(id);
258  if (idx >= m_detectorElement_hashes.size() || m_detectorElement_hashes[idx] < hash_max){
259  ATH_MSG_FATAL("Failed to assign detector hash to "<<show_to_string(id));
260  return 1;
261  }
263  }
264  return 0;
265 } // end MmIdHelper::init_id_to_hashes()
266 /*******************************************************************************/
267 int MmIdHelper::get_module_hash(const Identifier& id, IdentifierHash& hash_id) const {
268  const unsigned int idx = moduleHashIdx(id);
269  if (idx >= m_module_hashes.size()) return 1;
270  hash_id = m_module_hashes[idx];
271  return 0;
272 } // end MmIdHelper::get_module_hash
273 /*******************************************************************************/
275  const unsigned int idx = detEleHashIdx(id);
276  if (idx >= m_detectorElement_hashes.size()) return 1;
277  hash_id = m_detectorElement_hashes[idx];
278  return 0;
279  // return get_module_hash(id, hash_id);
280 }
281 /*******************************************************************************/
283  assert(is_mm(channelID));
285  // m_mplet_impl.reset(result);
288  return result;
289 }
290 /*******************************************************************************/
291 Identifier MmIdHelper::multilayerID(const Identifier& moduleID, int multilayer) const {
292  Identifier result(moduleID);
294  return result;
295 }
296 Identifier MmIdHelper::multilayerID(const Identifier& moduleID, int multilayer, bool& isValid) const {
297  try {
298  const Identifier result = multilayerID(moduleID, multilayer);
300  return result;
301  } catch (const std::out_of_range&) { isValid = false; }
302  return Identifier{0};
303 }
304 /*******************************************************************************/
306  int pcbNb = std::abs(stationEta)==1 ? pcb : pcb-5;
307  return (pcbNb-1)*1024+1;
308 }
309 Identifier MmIdHelper::pcbID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int pcb) const {
310  int chnl = getFirstPcbChnl(stationEta, pcb);
312 }
313 Identifier MmIdHelper::pcbID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int pcb, bool& isValid) const {
314  int chnl = getFirstPcbChnl(stationEta, pcb);
316 }
317 Identifier MmIdHelper::pcbID(const std::string& stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int pcb) const {
318  int chnl = getFirstPcbChnl(stationEta, pcb);
320 }
321 Identifier MmIdHelper::pcbID(const std::string& stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int pcb, bool& isValid) const {
322  int chnl = getFirstPcbChnl(stationEta, pcb);
324 }
326  int chnl = getFirstPcbChnl(stationEta(channelId), pcb);
328 }
329 Identifier MmIdHelper::pcbID(const Identifier& channelId, int pcb, bool& isValid) const {
330  int chnl = getFirstPcbChnl(stationEta(channelId), pcb);
332 }
334  int chnl = channel(channelId);
335  // PCB counts from 1-8. PCBs 1-5 are in abs(stationEta)==1 and PCBs 6-8 in abs(stationEta)==2
336  // each PCB consists of 1024 readout strips (strip number in athena is counting from 1 therefore chnl -1)
337  int pcb = (chnl-1)/1024+1 + (std::abs(stationEta(channelId))==2 ? 5:0); // int division should round downwards
338  return pcbID(channelId, pcb);
339 }
340 /*******************************************************************************/
342  int radiusNb = std::abs(stationEta)==1 ? radius : radius-10;
343  return radiusNb*512+1;
344 }
345 Identifier MmIdHelper::febID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int radius) const {
346  int chnl = getFirstRadiusChnl(stationEta, radius);
348 }
349 Identifier MmIdHelper::febID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int radius, bool& isValid) const {
350  int chnl = getFirstRadiusChnl(stationEta, radius);
352 }
353 Identifier MmIdHelper::febID(const std::string& stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int radius) const {
354  int chnl = getFirstRadiusChnl(stationEta, radius);
356 }
357 Identifier MmIdHelper::febID(const std::string& stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int radius, bool& isValid) const {
358  int chnl = getFirstRadiusChnl(stationEta, radius);
360 }
364 }
368 }
370  int chnl = channel(channelId);
371  // radius counts from 0-15. Radii 0-9 are in abs(stationEta)==1 and radii 10-15 in abs(stationEta)==2
372  // each radius consists of 512 readout strips (strip number in athena is counting from 1 therefore chnl -1)
373  int radius = (chnl-1)/512 + (std::abs(stationEta(channelId))==2 ? 10:0); // int division should round downwards
374  return febID(channelId, radius);
375 }
376 /*******************************************************************************/
377 void MmIdHelper::idChannels(const Identifier& id, std::vector<Identifier>& vect) const {
378  vect.clear();
379  Identifier parent = parentID(id);
380  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
381  const Range& range = m_full_channel_range[i];
383  for (const auto & expId : rit) {
384  Identifier child;
385  get_id(expId, child);
386  if (parentID(child) == parent) vect.push_back(child);
387  }
388  }
389 }
390 /*******************************************************************************/
392  int result = -999;
393  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
394  const Range& range = m_full_module_range[i];
395  if (range.match(expId)) {
396  const Range::field& eta_field = range[m_ETA_INDEX];
397  if (not eta_field.empty()) {
398  int etamin = eta_field.get_minimum();
399  if (-999 == result) {
400  result = etamin;
401  } else {
402  if (etamin < result) result = etamin;
403  }
404  }
405  }
406  }
407  return (result);
408 } // end MmIdHelper::stationEtaMin
409 /*******************************************************************************/
410 int MmIdHelper::stationEtaMin(const Identifier& id) const {
411  ExpandedIdentifier expId;
412  IdContext eta_context(expId, 0, m_ETA_INDEX);
413  if (!get_expanded_id(id, expId, &eta_context)) {
414  return stationEtaMin(expId);
415  }
416  return (999); // default
417 } // end MmIdHelper::stationEtaMin
418 /*******************************************************************************/
420  int result = -999;
421  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
422  const Range& range = m_full_module_range[i];
423  if (range.match(expId)) {
424  const Range::field& eta_field = range[m_ETA_INDEX];
425  if (not eta_field.empty()) {
426  int etamax = eta_field.get_maximum();
427  if (result < etamax) result = etamax;
428  }
429  }
430  }
431  return (result);
432 } // end MmIdHelper::stationEtaMax
433 /*******************************************************************************/
434 int MmIdHelper::stationEtaMax(const Identifier& id) const {
435  ExpandedIdentifier expId;
436  IdContext eta_context(expId, 0, m_ETA_INDEX);
437  if (!get_expanded_id(id, expId, &eta_context)) {
438  return stationEtaMax(expId);
439  }
440  return (-999);
441 } // end MmIdHelper::stationEtaMax
442 /*******************************************************************************/
444  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
445  const Range& range = m_full_module_range[i];
446  if (range.match(expId)) {
447  const Range::field& phi_field = range[m_PHI_INDEX];
448  if (not phi_field.empty()) { return (phi_field.get_minimum()); }
449  }
450  }
451  // Failed to find the min
452  return (999);
453 }
454 /*******************************************************************************/
455 int MmIdHelper::stationPhiMin(const Identifier& id) const {
456  ExpandedIdentifier expId;
457  IdContext phi_context(expId, 0, m_PHI_INDEX);
458 
459  if (!get_expanded_id(id, expId, &phi_context)) {
460  return stationPhiMin(expId);
461  }
462  // Failed to find the min
463  return (999);
464 }
465 /*******************************************************************************/
467  for (unsigned int i = 0; i < m_full_module_range.size(); ++i) {
468  const Range& range = m_full_module_range[i];
469  if (range.match(expId)) {
470  const Range::field& phi_field = range[m_PHI_INDEX];
471  if (not phi_field.empty()) { return (phi_field.get_maximum()); }
472  }
473  }
474  // Failed to find the max
475  return (-999);
476 }
477 /*******************************************************************************/
478 int MmIdHelper::stationPhiMax(const Identifier& id) const {
479  ExpandedIdentifier expId;
480  IdContext phi_context(expId, 0, m_PHI_INDEX);
481 
482  if (!get_expanded_id(id, expId, &phi_context)) {
483  return stationPhiMax(expId);
484  }
485  // Failed to find the max
486  return (-999);
487 }
488 /*******************************************************************************/
490  ExpandedIdentifier expId;
491  IdContext context = technology_context();
492  if (!get_expanded_id(id, expId, &context)) {
493  int result = -999;
494  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
495  const Range& range = m_full_channel_range[i];
496  if (range.match(expId)) {
497  const Range::field& multilayer_field = range[m_DETECTORELEMENT_INDEX];
498  if (not multilayer_field.empty()) {
499  int multilayermax = multilayer_field.get_maximum();
500  if (result < multilayermax) result = multilayermax;
501  }
502  }
503  }
504  return (result);
505  }
506  return (-999);
507 }
508 /*******************************************************************************/
510  int result = -999;
511  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
512  const Range& range = m_full_channel_range[i];
513  if (range.match(expId)) {
514  const Range::field& multilayer_field = range[m_DETECTORELEMENT_INDEX];
515  if (not multilayer_field.empty()) {
516  int multilayermin = multilayer_field.get_minimum();
517  if (-999 == result) {
518  result = multilayermin;
519  } else {
520  if (multilayermin < result) result = multilayermin;
521  }
522  }
523  }
524  }
525  return (result);
526 }
527 /*******************************************************************************/
528 int MmIdHelper::multilayerMin(const Identifier& id) const {
529  ExpandedIdentifier expId;
530  IdContext multilayer_context(expId, 0, m_DETECTORELEMENT_INDEX);
531  if (!get_expanded_id(id, expId, &multilayer_context)) {
532  return multilayerMin(expId);
533  }
534  return (999);
535 }
536 /*******************************************************************************/
538  int result = -999;
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& multilayer_field = range[m_DETECTORELEMENT_INDEX];
543  if (not multilayer_field.empty()) {
544  int multilayermax = multilayer_field.get_maximum();
545  if (result < multilayermax) result = multilayermax;
546  }
547  }
548  }
549  return (result);
550 }
551 /*******************************************************************************/
552 int MmIdHelper::multilayerMax(const Identifier& id) const {
553  ExpandedIdentifier expId;
554  IdContext multilayer_context(expId, 0, m_DETECTORELEMENT_INDEX);
555  if (!get_expanded_id(id, expId, &multilayer_context)) {
556  return multilayerMax(expId);
557  }
558  return (-999);
559 }
560 /*******************************************************************************/
561 int MmIdHelper::gasGapMin(const ExpandedIdentifier& expId) const {
562  int result = -999;
563  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
564  const Range& range = m_full_channel_range[i];
565  if (range.match(expId)) {
566  const Range::field& gasgap_field = range[m_GASGAP_INDEX];
567  if (not gasgap_field.empty()) {
568  int gasgapmin = gasgap_field.get_minimum();
569  if (-999 == result) {
570  result = gasgapmin;
571  } else {
572  if (gasgapmin < result) result = gasgapmin;
573  }
574  }
575  }
576  }
577  return (result);
578 }
579 /*******************************************************************************/
580 int MmIdHelper::gasGapMin(const Identifier& id) const {
581  ExpandedIdentifier expId;
582  IdContext gasgap_context(expId, 0, m_GASGAP_INDEX);
583  if (!get_expanded_id(id, expId, &gasgap_context)) {
584  return gasGapMin(expId);
585  }
586  return (999);
587 }
588 /*******************************************************************************/
589 int MmIdHelper::gasGapMax(const ExpandedIdentifier& expId) const {
590  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
591  const Range& range = m_full_channel_range[i];
592  if (range.match(expId)) {
593  const Range::field& gasgap_field = range[m_GASGAP_INDEX];
594  if (not gasgap_field.empty()) { return (gasgap_field.get_maximum()); }
595  }
596  }
597  // Failed to find the max
598  return (-999);
599 }
600 /*******************************************************************************/
601 int MmIdHelper::gasGapMax(const Identifier& id) const {
602  ExpandedIdentifier expId;
603  IdContext gasgap_context(expId, 0, m_GASGAP_INDEX);
604  if (!get_expanded_id(id, expId, &gasgap_context)) {
605  return gasGapMax(expId);
606  }
607  // Failed to find the max
608  return (-999);
609 }
610 /*******************************************************************************/
612  int result = -999;
613  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
614  const Range& range = m_full_channel_range[i];
615  if (range.match(expId)) {
616  const Range::field& channel_field = range[m_CHANNEL_INDEX];
617  if (not channel_field.empty()) {
618  int channelmin = channel_field.get_minimum();
619  if (-999 == result) {
620  result = channelmin;
621  } else {
622  if (channelmin < result) result = channelmin;
623  }
624  }
625  }
626  }
627  return (result);
628 }
629 /*******************************************************************************/
630 int MmIdHelper::channelMin(const Identifier& id) const {
631  ExpandedIdentifier expId;
633  if (!get_expanded_id(id, expId, &channel_context)) {
634  return channelMin(expId);
635  }
636  return (999);
637 }
638 /*******************************************************************************/
640  int result = -999;
641  for (unsigned int i = 0; i < m_full_channel_range.size(); ++i) {
642  const Range& range = m_full_channel_range[i];
643  if (range.match(expId)) {
644  const Range::field& channel_field = range[m_CHANNEL_INDEX];
645  if (not channel_field.empty()) {
646  int channelmax = channel_field.get_maximum();
647  if (result < channelmax) result = channelmax;
648  }
649  }
650  }
651  return (result);
652 }
653 /*******************************************************************************/
654 int MmIdHelper::channelMax(const Identifier& id) const {
655  ExpandedIdentifier expId;
657  if (!get_expanded_id(id, expId, &channel_context)) {
658  return channelMax(expId);
659  }
660  return (-999);
661 }
662 /*******************************************************************************/
663 // validation of levels
664 bool MmIdHelper::valid(const Identifier& id) const {
665  return validChannel(id,
666  stationName(id), stationEta(id), stationPhi(id),
667  multilayer(id), gasGap(id), channel(id));
668 } // end MmIdHelper::valid
669 /*******************************************************************************/
670 bool MmIdHelper::isStNameInTech(const std::string& stationName) const { return stationName[0] == 'M'; }
671 bool MmIdHelper::validElement(const Identifier& id) const {
672  ExpandedIdentifier expId;
673  IdContext context(expId, 0, m_PHI_INDEX);
674  if (get_expanded_id(id, expId, &context)) {
675  return false;
676  }
677  return validElement (expId, stationName(id), stationEta(id), stationPhi(id));
678 } // end MmIdHelper::validElement
679 /*******************************************************************************/
680 // Private validation of levels
682  if (!validStation(stationName)) {
683  ATH_MSG_DEBUG("Invalid stationName=" << stationNameString(stationName));
684  return false;
685  }
686  if (stationEta < stationEtaMin(expId) || stationEta > stationEtaMax(expId)) {
687  ATH_MSG_DEBUG("Invalid stationEta=" << stationEta << " for stationName=" << stationNameString(stationName)
688  << " stationIndex=" << stationName << " stationEtaMin=" << stationEtaMin(expId)
689  << " stationEtaMax=" << stationEtaMax(expId));
690  return false;
691  }
692  if (stationPhi < stationPhiMin(expId) || stationPhi > stationPhiMax(expId)) {
693  ATH_MSG_DEBUG("Invalid stationPhi=" << stationPhi << " for stationName=" << stationNameString(stationName)
694  << " stationIndex=" << stationName << " stationPhiMin=" << stationPhiMin(expId)
695  << " stationPhiMax=" << stationPhiMax(expId));
696  return false;
697  }
698  return true;
699 } // end MmIdHelper::validElement
700 /*******************************************************************************/
701 // Check values down to readout channel level
702 bool MmIdHelper::validChannel(const Identifier& id, int stationName, int stationEta, int stationPhi, int multilayer, int gasGap,
703  int channel) const {
704  ExpandedIdentifier expId;
705  IdContext context(expId, 0, m_CHANNEL_INDEX);
706  if (get_expanded_id(id, expId, &context)) {
707  return false;
708  }
709 
710  if (!validElement(expId, stationName, stationEta, stationPhi)) return false;
711 
712  if ((multilayer < multilayerMin(expId)) || (multilayer > multilayerMax(expId))) {
713  ATH_MSG_DEBUG("Invalid multilayer=" << multilayer << " multilayerMin=" << multilayerMin(expId)
714  << " multilayerMax=" << multilayerMax(expId));
715  return false;
716  }
717 
718  if (gasGap < gasGapMin(expId) || gasGap > gasGapMax(expId)) {
719  ATH_MSG_DEBUG("Invalid gasGap=" << gasGap << " gasGapMin=" << gasGapMin(expId) << " gasGapMax=" << gasGapMax(expId));
720  return false;
721  }
722  if (channel < channelMin(expId) || channel > channelMax(expId)) {
723  ATH_MSG_DEBUG("Invalid channel=" << channel << " channelMin=" << channelMin(expId) << " channelMax=" << channelMax(expId));
724  return false;
725  }
726  return true;
727 } // end MmIdHelper::validChannel
728  /*******************************************************************************/
729  // Construct ID from components
730 
732  // pack fields independently
739  return result;
740 }
742  try {
744  ExpandedIdentifier expId;
745  IdContext context(expId, 0, m_PHI_INDEX);
746  if (get_expanded_id(result, expId, &context)) {
747  isValid = false;
748  }
749  else {
751  }
752  return result;
753  } catch (const std::out_of_range&) { isValid = false; }
754  return Identifier{0};
755 }
756 
757 /*******************************************************************************/
758 Identifier MmIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi) const {
759  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi);
760 }
761 Identifier MmIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool& isValid) const {
762  return elementID(stationNameIndex(stationNameStr), stationEta, stationPhi, isValid);
763 }
764 
765 /*******************************************************************************/
766 Identifier MmIdHelper::elementID(const Identifier& id) const { return parentID(id); }
767 /*******************************************************************************/
768 Identifier MmIdHelper::channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const {
769  // pack fields independently
779  return result;
780 }
782  bool& isValid) const {
783  try{
786  return result;
787  } catch (const std::out_of_range&) { isValid = false; }
788  return Identifier{0};
789 }
790 /*******************************************************************************/
791 Identifier MmIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int multilayer, int gasGap, int channel,
792  bool& isValid) const {
794 }
795 Identifier MmIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int multilayer, int gasGap,
796  int channel) const {
798 }
799 
800 /*******************************************************************************/
801 Identifier MmIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channel) const {
802  Identifier result{id};
806  return result;
807 }
808 Identifier MmIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channel, bool& isValid) const {
809  try {
811  isValid = valid(result);
812  return result;
813  } catch (const std::out_of_range&) { isValid = false; }
814  return Identifier{0};
815 }
816 /*******************************************************************************/
817 // get parent id from strip or gang identifier
819  assert(is_mm(id));
820  Identifier result(id);
824  return result;
825 }
826 /*******************************************************************************/
827 // Access to components of the ID
828 int MmIdHelper::multilayer(const Identifier& id) const { return m_mplet_impl.unpack(id); }
829 /*******************************************************************************/
830 int MmIdHelper::gasGap(const Identifier& id) const { return m_gap_impl.unpack(id); }
831 /*******************************************************************************/
832 int MmIdHelper::channel(const Identifier& id) const { return m_cha_impl.unpack(id); }
833 /*******************************************************************************/
834 // Access to min and max of level ranges
836 /*******************************************************************************/
838 /*******************************************************************************/
840 /*******************************************************************************/
842 /*******************************************************************************/
844 /*******************************************************************************/
846 /*******************************************************************************/
848 /*******************************************************************************/
849 bool MmIdHelper::isStereo(const Identifier& id) const {
850  bool isStereo = false;
851  int ml = multilayer(id);
852  int gg = gasGap(id);
853  if ((ml == 1 && gg > 2) || (ml == 2 && gg < 3)) isStereo = true;
854  return isStereo;
855 }
856 /*******************************************************************************/
857 bool MmIdHelper::measuresPhi(const Identifier& /*id*/) const { return false; }
858 /*******************************************************************************/
860 /*******************************************************************************/
862 /*******************************************************************************/
864 /*******************************************************************************/
867  int mmField = technologyIndex("MM");
868  if (m_dict) { mmField = mm_field_value(); }
869  return mmField;
870 }
871 /*******************************************************************************/
872 bool MmIdHelper::LargeSector(int stationName) const { return ('L' == stationNameString(stationName)[2]); }
873 /*******************************************************************************/
874 bool MmIdHelper::SmallSector(int stationName) const { return ('S' == stationNameString(stationName)[2]); }
875 /*******************************************************************************/
876 // Nektar: Modified for MicroMegas, but is almost certainly wrong
877 int MmIdHelper::sectorType(const std::string& stationName, int stationEta) {
878  if ('L' == stationName[2]) {
879  return (abs(stationEta) + 1);
880  } else if ('S' == stationName[2]) {
881  return (abs(stationEta) + 12);
882  }
883  assert(0);
884  return -1;
885 }
886 /*******************************************************************************/
888  std::string name = stationNameString(stationName);
889  return sectorType(name, stationEta);
890 }
MmIdHelper::MultilayerMin
@ MultilayerMin
Definition: MmIdHelper.h:225
IdDictMgr.h
MuonIdHelper::validStation
bool validStation(int stationName, int technology) const
Definition: MuonIdHelper.cxx:777
MmIdHelper::s_etaDim
static constexpr unsigned int s_etaDim
-2, -1 , 1, 2
Definition: MmIdHelper.h:183
MuonIdHelper::stationNameIndex
int stationNameIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:852
MmIdHelper::stationPhiMin
static int stationPhiMin()
Definition: MmIdHelper.cxx:839
ConstRangeIterator
Definition: RangeIterator.h:46
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:161
IdDictDictionary::build_multirange
MultiRange build_multirange() const
Get MultiRange for full dictionary.
Definition: IdDictDictionary.cxx:290
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
AtlasDetectorID::mm_field_value
int mm_field_value() const
Definition: AtlasDetectorID.h:663
MuonIdHelper::initLevelsFromDict
int initLevelsFromDict()
Definition: MuonIdHelper.cxx:249
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
MmIdHelper::get_module_hash
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: MmIdHelper.cxx:267
get_generator_info.result
result
Definition: get_generator_info.py:21
IdDictGroup
Definition: IdDictGroup.h:25
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
MmIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: MmIdHelper.cxx:857
AtlasDetectorID::setMessageSvc
virtual void setMessageSvc(IMessageSvc *msgSvc) override
Definition: AtlasDetectorID.cxx:491
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
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MmIdHelper::MmIdHelper
MmIdHelper()
Definition: MmIdHelper.cxx:17
MmIdHelper::stationPhiMax
static int stationPhiMax()
Definition: MmIdHelper.cxx:841
MmIdHelper::s_mlDim
static constexpr unsigned int s_mlDim
2 multilayer
Definition: MmIdHelper.h:187
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
MmIdHelper::getFirstPcbChnl
static int getFirstPcbChnl(int stationEta, int pcb)
Definition: MmIdHelper.cxx:305
dumpTgcDigiDeadChambers.stationName
dictionary stationName
Definition: dumpTgcDigiDeadChambers.py:30
MuonIdHelper::channel_context
IdContext channel_context() const
id for channel
Definition: MuonIdHelper.cxx:751
MmIdHelper::ChannelMin
@ ChannelMin
Definition: MmIdHelper.h:229
index
Definition: index.py:1
IdDictDictionary::region
const IdDictRegion & region(size_t i) const
Region at index i.
Definition: IdDictDictionary.h:350
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
MmIdHelper::validElement
bool validElement(const Identifier &id) const
Definition: MmIdHelper.cxx:671
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
MmIdHelper::channelMax
static int channelMax()
Definition: MmIdHelper.cxx:863
MuonIdHelper::m_sta_impl
IdDictFieldImplementation m_sta_impl
Definition: MuonIdHelper.h:286
DMTest::C
C_v1 C
Definition: C.h:26
MmIdHelper::febID
Identifier febID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int radius) const
Definition: MmIdHelper.cxx:345
ExpandedIdentifier::add
void add(element_type value)
Append a value into a new field.
MmIdHelper::StationPhiMax
@ StationPhiMax
Definition: MmIdHelper.h:224
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
MmIdHelper::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: MmIdHelper.cxx:670
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
MmIdHelper::get_detectorElement_hash
virtual int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: MmIdHelper.cxx:274
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:878
MuonIdHelper::m_phi_impl
IdDictFieldImplementation m_phi_impl
Definition: MuonIdHelper.h:288
MmIdHelper::SmallSector
bool SmallSector(int stationName) const
Definition: MmIdHelper.cxx:874
MmIdHelper::GasGapMin
@ GasGapMin
Definition: MmIdHelper.h:227
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
MmIdHelper::detEleHashIdx
unsigned int detEleHashIdx(const Identifier &id) const
Definition: MmIdHelper.cxx:237
IdDictGroup.h
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
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
MmIdHelper::multilayer
int multilayer(const Identifier &id) const
Definition: MmIdHelper.cxx:828
IdDictFieldImplementation::reset
void reset(Identifier &id) const
Definition: IdDictFieldImplementation.h:183
MmIdHelper::m_gap_impl
IdDictFieldImplementation m_gap_impl
Definition: MmIdHelper.h:204
IdDictRegion::implementation
const IdDictFieldImplementation & implementation(size_t i) const
Definition: IdDictRegion.cxx:34
MmIdHelper::multilayerID
Identifier multilayerID(const Identifier &channeldID) const
Definition: MmIdHelper.cxx:282
IdDictMgr
Definition: IdDictMgr.h:15
MmIdHelper::StationEtaMin
@ StationEtaMin
Definition: MmIdHelper.h:221
IdDictDictionary::find_group
IdDictGroup * find_group(const std::string &group_name) const
Definition: IdDictDictionary.cxx:115
IdDictMgr::find_dictionary
IdDictDictionary * find_dictionary(const std::string &name) const
Access dictionary by name.
Definition: IdDictMgr.cxx:124
MuonIdHelper
Definition: MuonIdHelper.h:77
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
MmIdHelper::m_mplet_impl
IdDictFieldImplementation m_mplet_impl
Definition: MmIdHelper.h:203
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MmIdHelper::ChannelMax
@ ChannelMax
Definition: MmIdHelper.h:230
MmIdHelper::multilayerMax
static int multilayerMax()
Definition: MmIdHelper.cxx:845
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
MmIdHelper.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
MuonIdHelper::m_full_detectorElement_range
MultiRange m_full_detectorElement_range
Definition: MuonIdHelper.h:276
MmIdHelper::gasGapMax
static int gasGapMax()
Definition: MmIdHelper.cxx:859
MmIdHelper::m_GASGAP_INDEX
size_type m_GASGAP_INDEX
Definition: MmIdHelper.h:201
MmIdHelper::m_cha_impl
IdDictFieldImplementation m_cha_impl
Definition: MmIdHelper.h:205
MuonIdHelper::m_full_module_range
MultiRange m_full_module_range
Definition: MuonIdHelper.h:266
MmIdHelper::m_detectorElement_hashes
std::array< unsigned int, s_detHashDim > m_detectorElement_hashes
Definition: MmIdHelper.h:193
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
MmIdHelper::MultilayerMax
@ MultilayerMax
Definition: MmIdHelper.h:226
MuonIdHelper::is_mm
bool is_mm(const Identifier &id) const
Definition: MuonIdHelper.cxx:807
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:121
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
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
MmIdHelper::moduleHashIdx
unsigned int moduleHashIdx(const Identifier &id) const
Definition: MmIdHelper.cxx:229
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:820
MmIdHelper::mmTechnology
int mmTechnology() const
Utility methods.
Definition: MmIdHelper.cxx:866
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
MmIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: MmIdHelper.cxx:731
MultiRange
A MultiRange combines several Ranges.
Definition: MultiRange.h:17
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MmIdHelper::parentID
Identifier parentID(const Identifier &id) const
Definition: MmIdHelper.cxx:818
RangeIterator.h
MuonIdHelper::m_detectorElement_vec
id_vec m_detectorElement_vec
Definition: MuonIdHelper.h:278
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
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
MmIdHelper::StationEtaMax
@ StationEtaMax
Definition: MmIdHelper.h:222
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
MmIdHelper::StationPhiMin
@ StationPhiMin
Definition: MmIdHelper.h:223
MuonIdHelper::init_detectorElement_hashes
virtual int init_detectorElement_hashes()
Definition: MuonIdHelper.cxx:402
MmIdHelper::init_id_to_hashes
int init_id_to_hashes()
Definition: MmIdHelper.cxx:241
MmIdHelper::stationEtaMin
static int stationEtaMin()
Definition: MmIdHelper.cxx:835
MmIdHelper::s_phiDim
static constexpr unsigned int s_phiDim
8 phi station
Definition: MmIdHelper.h:185
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
MmIdHelper::initialize_from_dictionary
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
Definition: MmIdHelper.cxx:23
MmIdHelper::channel
int channel(const Identifier &id) const override
Definition: MmIdHelper.cxx:832
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
MmIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: MmIdHelper.cxx:830
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
MultiRange::size
size_type size() const
Definition: MultiRange.cxx:70
MmIdHelper::channelMin
static int channelMin()
Definition: MmIdHelper.cxx:861
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
MmIdHelper::pcbID
Identifier pcbID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int pcb) const
Definition: MmIdHelper.cxx:309
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
MmIdHelper::LargeSector
bool LargeSector(int stationName) const
Definition: MmIdHelper.cxx:872
MuonIdHelper::m_DETECTORELEMENT_INDEX
size_type m_DETECTORELEMENT_INDEX
Definition: MuonIdHelper.h:261
MmIdHelper::stationEtaMax
static int stationEtaMax()
Definition: MmIdHelper.cxx:837
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
MmIdHelper::getFirstRadiusChnl
static int getFirstRadiusChnl(int stationEta, int pcb)
Definition: MmIdHelper.cxx:341
MmIdHelper::validChannel
bool validChannel(const Identifier &id, int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const
Definition: MmIdHelper.cxx:702
merge.status
status
Definition: merge.py:16
IdDictRegion.h
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
MmIdHelper::idChannels
void idChannels(const Identifier &id, std::vector< Identifier > &vect) const
Definition: MmIdHelper.cxx:377
MmIdHelper::valid
bool valid(const Identifier &id) const
Definition: MmIdHelper.cxx:664
LArCellBinning.etamin
etamin
Definition: LArCellBinning.py:137
ExpandedIdentifier::element_type
int element_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:106
MmIdHelper::m_module_hashes
std::array< unsigned int, s_modHashDim > m_module_hashes
Definition: MmIdHelper.h:192
MmIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const
Definition: MmIdHelper.cxx:768
MmIdHelper::isStereo
bool isStereo(const Identifier &id) const
Definition: MmIdHelper.cxx:849
MmIdHelper::m_stationShift
unsigned int m_stationShift
Minimal station index found.
Definition: MmIdHelper.h:198
MmIdHelper::GasGapMax
@ GasGapMax
Definition: MmIdHelper.h:228
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
MuonIdHelper::m_PHI_INDEX
size_type m_PHI_INDEX
Definition: MuonIdHelper.h:258
MmIdHelper::multilayerMin
static int multilayerMin()
Definition: MmIdHelper.cxx:843
MuonIdHelper::technology_context
IdContext technology_context() const
access to IdContext's which define which levels or fields are contained in the Muon id
Definition: MuonIdHelper.cxx:736
MmIdHelper::sectorType
static int sectorType(const std::string &stationName, int stationEta)
Definition: MmIdHelper.cxx:877
MmIdHelper::numberOfMultilayers
int numberOfMultilayers(const Identifier &id) const
Definition: MmIdHelper.cxx:489
MmIdHelper::gasGapMin
static int gasGapMin()
Definition: MmIdHelper.cxx:847
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