ATLAS Offline Software
MuonIdHelperSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <iostream>
8 #include <format>
9 #include <ranges>
10 
11 
12 namespace Muon {
13 
14  MuonIdHelperSvc::MuonIdHelperSvc(const std::string& name, ISvcLocator* svc) :
15  base_class(name, svc) {}
16 
18  ATH_CHECK(m_detStore.retrieve());
19  if (m_hasMDT) ATH_CHECK(m_detStore->retrieve(m_mdtIdHelper));
20  if (m_hasRPC) ATH_CHECK(m_detStore->retrieve(m_rpcIdHelper));
21  if (m_hasTGC) ATH_CHECK(m_detStore->retrieve(m_tgcIdHelper));
22  if (m_hasCSC) ATH_CHECK(m_detStore->retrieve(m_cscIdHelper));
24  if (m_hasMM) ATH_CHECK(m_detStore->retrieve(m_mmIdHelper));
25 
27  using AllHelperArray = std::array<const MuonIdHelper*, 6>;
28  const AllHelperArray allHelpers{m_mdtIdHelper, m_rpcIdHelper, m_tgcIdHelper,
30  AllHelperArray::const_iterator itr = std::ranges::find_if(allHelpers,
31  [](const MuonIdHelper* h){return h != nullptr;});
32  if (itr == allHelpers.end()){
33  ATH_MSG_WARNING("No MuonIdHelper has been created before. Please do not setup the service if no muon layout is loaded");
34  return StatusCode::SUCCESS;
35  }
36  m_primaryHelper = (*itr);
37 
38  std::stringstream techStr{};
39 
40  for (int tech = 0; tech <= m_primaryHelper->technologyNameIndexMax(); ++tech) {
41  std::string name = m_primaryHelper->technologyString(tech);
42 
43  if (name == "MDT") m_technologies.push_back(TechIdx::MDT);
44  if (name == "CSC") m_technologies.push_back(TechIdx::CSCI);
45  if (name == "RPC") m_technologies.push_back(TechIdx::RPC);
46  if (name == "TGC") m_technologies.push_back(TechIdx::TGC);
47  if (name == "STGC") m_technologies.push_back(TechIdx::STGC);
48  if (name == "MM") m_technologies.push_back(TechIdx::MM);
49  techStr<< ", " << tech << " " << name;
50  }
51  ATH_MSG_DEBUG(" Technologies: size " << m_primaryHelper->technologyNameIndexMax()<<" "<<techStr.str());
52 
53  unsigned int nstationsNames = m_primaryHelper->stationNameIndexMax() + 1;
54  m_stationNameData.resize(nstationsNames);
55  for (int i = 0; i <= m_primaryHelper->stationNameIndexMax(); ++i) {
56  std::string name = m_primaryHelper->stationNameString(i);
57  if (name.compare(MuonIdHelper::BAD_NAME) == 0) continue;
58 
60 
61  data.stationName = name;
62  data.isEndcap = m_primaryHelper->isEndcap(i);
63  data.isSmall = m_primaryHelper->isSmall(i);
64 
65  if (data.isEndcap) {
66  if (data.stationName[1] == '1')
67  data.chIndex = ChIdx::EML;
68  else if (data.stationName[1] == '2')
69  data.chIndex = ChIdx::EML;
70  else if (data.stationName[1] == '3')
71  data.chIndex = ChIdx::EML;
72  else if (data.stationName[1] == '4')
73  data.chIndex = ChIdx::EIL;
74 
75  if (data.stationName[1] == 'O') {
76  if (data.stationName[2] == 'L')
77  data.chIndex = ChIdx::EOL;
78  else
79  data.chIndex = ChIdx::EOS;
80  } else if (data.stationName[1] == 'M') {
81  if (data.stationName[2] == 'L')
82  data.chIndex = ChIdx::EML;
83  else
84  data.chIndex = ChIdx::EMS;
85  } else if (data.stationName[1] == 'I') {
86  if (data.stationName[2] == 'L')
87  data.chIndex = ChIdx::EIL;
88  else
89  data.chIndex = ChIdx::EIS;
90  } else if (data.stationName[1] == 'E') {
91  if (data.stationName[0] == 'B') {
92  data.chIndex = ChIdx::BEE;
93  } else {
94  if (data.stationName[2] == 'L')
95  data.chIndex = ChIdx::EEL;
96  else
97  data.chIndex = ChIdx::EES;
98  }
99  } else if (data.stationName[0] == 'C') {
100  if (data.stationName[2] == 'L')
101  data.chIndex = ChIdx::CSL;
102  else
103  data.chIndex = ChIdx::CSS;
104  }
105  if (data.stationName[0] == 'S' || data.stationName[0] == 'M') {
106  if (data.isSmall)
107  data.chIndex = ChIdx::EIS;
108  else
109  data.chIndex = ChIdx::EIL;
110  }
111 
112  } else {
113  if (data.stationName[1] == 'O') {
114  if (data.stationName[2] == 'L')
115  data.chIndex = ChIdx::BOL;
116  else
117  data.chIndex = ChIdx::BOS;
118  } else if (data.stationName[1] == 'M') {
119  if (data.stationName[2] == 'L' || data.stationName[2] == 'E')
120  data.chIndex = ChIdx::BML;
121  else
122  data.chIndex = ChIdx::BMS;
123  } else if (data.stationName[1] == 'I') {
124  if (data.stationName[2] == 'L' || data.stationName[2] == 'M' || data.stationName[2] == 'R')
125  data.chIndex = ChIdx::BIL;
126  else
127  data.chIndex = ChIdx::BIS;
128  }
129  }
130  if (data.chIndex == ChIdx::ChUnknown) {
131  ATH_MSG_ERROR("data.chIndex is negative in MuonIdHelperSvc::initialize ");
132  return StatusCode::FAILURE;
133  }
134  data.stIndex = MuonStationIndex::toStationIndex(data.chIndex);
135 
136  if (msgLvl(MSG::DEBUG)) {
137  msg(MSG::DEBUG) << "Adding station " << i << " " << data.stationName << " ";
138  if (data.isEndcap)
139  msg(MSG::DEBUG) << " Endcap, ";
140  else
141  msg(MSG::DEBUG) << " Barrel, ";
142  if (data.isSmall)
143  msg(MSG::DEBUG) << " Small, ";
144  else
145  msg(MSG::DEBUG) << " Large, ";
146 
148  }
149  }
151  // now, let's check if we are in the inner barrel layer, and if there are RPCs installed
152  // if yes, the MDT chambers must be sMDTs
153  if (m_mdtIdHelper && m_rpcIdHelper) {
155  for (int eta = MdtIdHelper::stationEtaMin(true); eta <= MdtIdHelper::stationEtaMax(true); ++eta) {
156  for (int phi = 1; phi <= 8; ++phi) {
157  // now, let's check if we are in the inner barrel layer, and if there are RPCs installed
158  // if yes, the MDT chambers must be sMDTs
159  // now try to retrieve RPC identifier with the same station name/eta/phi and check if it is valid
160  bool isValid = false;
161  m_rpcIdHelper->elementID(m_BIS_stat, eta, phi, 1, isValid);
162  // last 4 arguments are: doubletR, check, isValid
163  // there is a BI RPC in the same station, thus, this station was already upgraded and sMDTs are present
164  if (!isValid) continue;
165  m_smdt_stat.emplace(m_mdtIdHelper->elementID(m_BIS_stat, eta, phi));
166  }
167  }
168  }
169 
170  std::ranges::for_each(allHelpers, [this](const MuonIdHelper* idHelper){
171  if (!idHelper) return;
172  const TechIdx techIdx = technologyIndex(*idHelper->module_begin());
173  for (auto itr = idHelper->module_begin(); itr != idHelper->module_end(); ++itr) {
174  const int stIdx = static_cast<int>(MuonStationIndex::toStationIndex(chamberIndex(*itr)));
175  m_techPerStation[stIdx].insert(techIdx);
176  }
177  });
178 
179  ATH_MSG_DEBUG("Configured the service with the following flags --- hasMDT: "<< hasMDT()<<" hasRPC: "<<hasRPC()
180  <<" hasTGC"<< hasTGC() << " hasCSC: "<< hasCSC() << " hasSTGC: " << hasSTGC() << " hasMM: " << hasMM() );
181  return StatusCode::SUCCESS;
182  }
183 
184  int MuonIdHelperSvc::gasGap(const Identifier& id) const {
185  if (isRpc(id)) {
186  return m_rpcIdHelper->gasGap(id);
187  } else if (isTgc(id)) {
188  return m_tgcIdHelper->gasGap(id);
189 
190  } else if (isCsc(id)) {
191  return m_cscIdHelper->wireLayer(id);
192 
193  } else if (issTgc(id)) {
194  return m_stgcIdHelper->gasGap(id);
195 
196  } else if (isMM(id)) {
197  return m_mmIdHelper->gasGap(id);
198  } else {
199  return m_mdtIdHelper->channel(id);
200  }
201  return 1;
202  }
203 
204  bool MuonIdHelperSvc::isMuon(const Identifier& id) const {
205  return m_primaryHelper && m_primaryHelper->is_muon(id);
206  }
207  bool MuonIdHelperSvc::isMdt(const Identifier& id) const {
208  return m_mdtIdHelper && m_mdtIdHelper->is_mdt(id);
209  }
210  bool MuonIdHelperSvc::isMM(const Identifier& id) const {
211  return m_mmIdHelper && m_mmIdHelper->is_mm(id);
212  }
213  bool MuonIdHelperSvc::isCsc(const Identifier& id) const {
214  return m_cscIdHelper && m_cscIdHelper->is_csc(id);
215  }
216  bool MuonIdHelperSvc::isRpc(const Identifier& id) const {
217  return m_rpcIdHelper && m_rpcIdHelper->is_rpc(id);
218  }
219 
220  bool MuonIdHelperSvc::isTgc(const Identifier& id) const {
221  return m_tgcIdHelper && m_tgcIdHelper->is_tgc(id);
222  }
223 
224  bool MuonIdHelperSvc::issTgc(const Identifier& id) const {
225  return m_stgcIdHelper && m_stgcIdHelper->is_stgc(id);
226  }
227 
228  const std::set<MuonStationIndex::TechnologyIndex>&
230  assert(static_cast<unsigned>(stIndex) < m_techPerStation.size());
231  return m_techPerStation[static_cast<unsigned>(stIndex)];
232  }
233  bool MuonIdHelperSvc::issMdt(const Identifier& id) const {
234  if (!isMdt(id))
235  return false;
236  if (stationName(id) == m_BIS_stat) {
237  return m_smdt_stat.find(m_mdtIdHelper->elementID(id)) != m_smdt_stat.end();
238  }
239  return m_mdtIdHelper->isBME(id) || m_mdtIdHelper->isBMG(id);
240  }
241 
242  bool MuonIdHelperSvc::hasHPTDC(const Identifier& id) const {
245  // the remaining sMDTs (installed in BI in LS1) all have an HPTDC in Run3
246  // all BME sMDTs have no HPTDC
247  return issMdt(id) && !m_mdtIdHelper->isBME(id);
248  }
249 
250  bool MuonIdHelperSvc::measuresPhi(const Identifier& id) const {
251  if (isRpc(id)) {
252  return m_rpcIdHelper->measuresPhi(id);
253  } else if (isTgc(id)) {
254  return m_tgcIdHelper->measuresPhi(id);
255  } else if (isCsc(id)) {
256  return m_cscIdHelper->measuresPhi(id);
257  } else if (issTgc(id)) {
258  return m_stgcIdHelper->measuresPhi(id);
259  }
260  // MM and MDTs only measure eta
261  return false;
262  }
263 
264  bool MuonIdHelperSvc::isTrigger(const Identifier& id) const {
265  return isRpc(id) || isTgc(id);
266  }
267 
268  bool MuonIdHelperSvc::isEndcap(const Identifier& id) const { return m_primaryHelper->isEndcap(id); }
269 
270  bool MuonIdHelperSvc::isSmallChamber(const Identifier& id) const { return m_primaryHelper->isSmall(id); }
271 
273  if (!id.is_valid() || !isMuon(id)) {
274  if (id.is_valid()) ATH_MSG_WARNING("chamberIndex: invalid ID " << m_primaryHelper->print_to_string(id));
275  return ChIdx::ChUnknown;
276  }
277  return m_stationNameData[stationName(id)].chIndex;
278  }
279 
281  if (!id.is_valid() || !isMuon(id)) {
282  if (id.is_valid()) ATH_MSG_WARNING("stationIndex: invalid ID " << m_primaryHelper->print_to_string(id));
283  return StIdx::StUnknown;
284  }
285  return m_stationNameData[stationName(id)].stIndex;
286  }
287 
289  if (!id.is_valid() || !isMuon(id)) {
290  if (id.is_valid()) ATH_MSG_WARNING("phiIndex: invalid ID " << m_primaryHelper->print_to_string(id));
291  return PhiIdx::PhiUnknown;
292  }
293  if (isMdt(id) || isMM(id)) {
294  ATH_MSG_WARNING("phiIndex: not supported for " << toString(id));
295  return PhiIdx::PhiUnknown;
296  }
297  PhiIdx index{PhiIdx::PhiUnknown};
298  const StIdx stIndex = stationIndex(id);
299  if (stIndex == StIdx::BI) {
300  index = m_rpcIdHelper->doubletR(id) == 1 ? PhiIdx::BI1 : PhiIdx::BI2;
301  } else if (stIndex == StIdx::BM) {
302  index = m_rpcIdHelper->doubletR(id) == 1 ? PhiIdx::BM1 : PhiIdx::BM2;
303  } else if (stIndex == StIdx::BO) {
304  index = m_rpcIdHelper->doubletR(id) == 1 ? PhiIdx::BO1 : PhiIdx::BO2;
305  } else if (stIndex == StIdx::EI) {
306  if (isCsc(id)) {
307  index = PhiIdx::CSC;
308  } else if (isTgc(id)) {
309  index = PhiIdx::T4;
310  } else if (m_stgcIdHelper->multilayer(id) == 1) {
311  index = PhiIdx::STGC1;
312  } else {
313  index = PhiIdx::STGC2;
314  }
315  } else if (stIndex == StIdx::EM) {
316  std::string chamberName = chamberNameString(id);
317  if (chamberName[1] == '1')
318  index = PhiIdx::T1;
319  else if (chamberName[1] == '2')
320  index = PhiIdx::T2;
321  else
322  index = PhiIdx::T3;
323  }
324  return index;
325  }
326 
328  using DetRegIdx = MuonStationIndex::DetectorRegionIndex;
329  if (isEndcap(id)) return stationEta(id) < 0 ? DetRegIdx::EndcapC : DetRegIdx::EndcapA;
330  return DetRegIdx::Barrel;
331  }
332 
335  }
336 
338  if (isMdt(id)) return TechIdx::MDT;
339  if (isCsc(id)) return TechIdx::CSCI;
340  if (isTgc(id)) return TechIdx::TGC;
341  if (isRpc(id)) return TechIdx::RPC;
342  if (issTgc(id)) return TechIdx::STGC;
343  if (isMM(id)) return TechIdx::MM;
344  return TechIdx::TechnologyUnknown;
345  }
346  std::string MuonIdHelperSvc::toString(const Identifier& id) const {
347  if (!id.is_valid()) return " Invalid Identifier";
348  if (isMdt(id)) {
349  return toStringGasGap(id);
350  }
351  const std::string_view phiStr{measuresPhi(id) ? "phi" : "eta"};
352  if (isRpc(id)) {
353  return std::format("{:} {:} channel {:2d}",toStringGasGap(id), measuresPhi(id) ? "phi" : "eta", m_rpcIdHelper->channel(id));
354  } else if (isTgc(id)) {
355  return std::format("{:} {:} channel {:2d}",toStringGasGap(id), measuresPhi(id) ? "phi" : "eta", m_tgcIdHelper->channel(id));
356  } else if (isCsc(id)) {
357  return std::format("{:} {:} channel {:2d}",toStringGasGap(id), measuresPhi(id) ? "phi" : "eta", m_cscIdHelper->channel(id));
358  } else if (isMM(id)) {
359  return std::format("{:} channel {:4d}",toStringGasGap(id), m_mmIdHelper->channel(id));
360  }
361  using sTgcType = sTgcIdHelper::sTgcChannelTypes;
362  const int channelType = m_stgcIdHelper->channelType(id);
363  return std::format("{:} {:} channel {:3d}",toStringGasGap(id),
364  channelType == sTgcType::Strip ? "eta" : channelType == sTgcType::Wire ? "phi" : "pad" ,
365  m_stgcIdHelper->channel(id));
366  }
367 
368  std::string MuonIdHelperSvc::toStringTech(const Identifier& id) const {
370  }
371 
372  std::string MuonIdHelperSvc::chamberNameString(const Identifier& id) const {
374  }
375 
376  std::string MuonIdHelperSvc::toStringStation(const Identifier& id) const {
377  return std::format("{:} {:} eta {:2d} phi {:2d}", toStringTech(id),stationNameString(id),
378  stationEta(id), stationPhi(id));
379  }
380  std::string MuonIdHelperSvc::toStringChamber(const Identifier& id) const {
381  if (!id.is_valid()) {
382  return " Invalid Identifier";
383  }
384  if (isRpc(id)) {
385  return std::format("{:} dbR {:1}", toStringStation(id), m_rpcIdHelper->doubletR(id));
386  }
387  return toStringStation(id);
388  }
389 
390  std::string MuonIdHelperSvc::toStringDetEl(const Identifier& id) const {
391 
392  if (!id.is_valid()) return " Invalid Identifier";
393  if (isMdt(id)) {
394  return std::format("{:} ml {:1d}", toStringChamber(id), m_mdtIdHelper->multilayer(id));
395  } else if (isRpc(id)) {
396  return std::format("{:} dbZ {:21} dbPhi {:1d}", toStringChamber(id), m_rpcIdHelper->doubletZ(id), m_rpcIdHelper->doubletPhi(id));
397  } else if (isTgc(id)) {
398  return toStringChamber(id);
399  }
400  int ml{0};
401  if (isCsc(id)) {
402  ml = m_cscIdHelper->chamberLayer(id);
403  } else if (isMM(id)) {
404  ml = m_mmIdHelper->multilayer(id);
405  } else {
406  ml = m_stgcIdHelper->multilayer(id);
407  }
408  return std::format("{:} chlay {:1d}",toStringChamber(id), ml);
409  }
410 
411  std::string MuonIdHelperSvc::toStringGasGap(const Identifier& id) const {
412  if (!id.is_valid()) return " Invalid Identifier";
413  if (isMdt(id)) {
414  return std::format("{:} lay {:1d} tube {:1d}", toStringDetEl(id),m_mdtIdHelper->tubeLayer(id), m_mdtIdHelper->tube(id));
415  } else if (isRpc(id) || isTgc(id)) {
416  return std::format("{:} gap {:1d}", toStringDetEl(id), gasGap(id));
417  }
418  return std::format("{:} lay {:1d}", toStringDetEl(id), gasGap(id));
419  }
420 
422  Identifier chId;
423  // use phi hits on segment
424  if (isTgc(id)) {
425  chId = m_tgcIdHelper->elementID(id);
426  } else if (isRpc(id)) {
427  chId = m_rpcIdHelper->elementID(id);
428  } else if (isMM(id)) {
429  chId = m_mmIdHelper->elementID(id);
430  } else if (issTgc(id)) {
431  chId = m_stgcIdHelper->elementID(id);
432  } else if (isCsc(id)) {
433  chId = m_cscIdHelper->channelID(id, 2, 1, 1, 1);
434  } else if (isMdt(id)) {
435  chId = m_mdtIdHelper->elementID(id);
436  }
437  return chId;
438  }
439 
441  // use phi hits on segment
442  if (isTgc(id)) {
443  return m_tgcIdHelper->elementID(id);
444  } else if (isRpc(id)) {
445  return m_rpcIdHelper->channelID(id, m_rpcIdHelper->doubletZ(id), m_rpcIdHelper->doubletPhi(id), 1, false, 1);
446  } else if (isCsc(id)) {
447  return m_cscIdHelper->channelID(id, 2, 1, 1, 1);
448  } else if (issTgc(id)) {
449  return m_stgcIdHelper->channelID(id, m_stgcIdHelper->multilayer(id), 1, sTgcIdHelper::sTgcChannelTypes::Strip, 1);
450  } else if (isMM(id)) {
451  return m_mmIdHelper->channelID(id, m_mmIdHelper->multilayer(id), 1, 1);
452  }
453  return m_mdtIdHelper->channelID(id, m_mdtIdHelper->multilayer(id), 1, 1);
454  }
455 
457  // use phi hits on segment
458  if (isTgc(id)) {
460  } else if (isRpc(id)) {
463  } else if (isCsc(id)) {
465  m_cscIdHelper->measuresPhi(id), 1);
466  } else if (isMM(id)) {
468  } else if (issTgc(id)) {
471  }
473  return id;
474  }
475 
477  // use phi hits on segment
478  if (isTgc(id)) {
479  return m_tgcIdHelper->channelID(id, m_tgcIdHelper->gasGap(id), false, 1);
480 
481  } else if (isRpc(id)) {
483  m_rpcIdHelper->gasGap(id), false, 1);
484 
485  } else if (isCsc(id)) {
487  } else if (isMM(id)) {
489 
490  } else if (issTgc(id)) {
492  sTgcIdHelper::sTgcChannelTypes::Strip, 1);
493 
494  }
496  }
497 
499  if (!id.is_valid()) {
500  ATH_MSG_WARNING("stationPhi: invalid ID");
501  return 0;
502  }
503  if (isRpc(id)) {
504  return m_rpcIdHelper->stationPhi(id);
505  } else if (isTgc(id)) {
506  return m_tgcIdHelper->stationPhi(id);
507  } else if (isMdt(id)) {
508  return m_mdtIdHelper->stationPhi(id);
509  } else if (isCsc(id)) {
510  return m_cscIdHelper->stationPhi(id);
511  } else if (issTgc(id)) {
512  return m_stgcIdHelper->stationPhi(id);
513  } else if (isMM(id)) {
514  return m_mmIdHelper->stationPhi(id);
515  }
516  return 0;
517  }
518 
520  if (!id.is_valid()) {
521  ATH_MSG_WARNING("stationEta: invalid ID");
522  return 0;
523  }
524  if (isRpc(id)) {
525  return m_rpcIdHelper->stationEta(id);
526  } else if (isTgc(id)) {
527  return m_tgcIdHelper->stationEta(id);
528  } else if (isMdt(id)) {
529  return m_mdtIdHelper->stationEta(id);
530  } else if (isCsc(id)) {
531  return m_cscIdHelper->stationEta(id);
532  } else if (issTgc(id)) {
533  return m_stgcIdHelper->stationEta(id);
534  } else if (isMM(id)) {
535  return m_mmIdHelper->stationEta(id);
536  }
537  return 0;
538  }
539 
541  if (!id.is_valid()) {
542  ATH_MSG_WARNING("stationName: invalid ID");
543  return 0;
544  }
545  if (isRpc(id)) {
546  return m_rpcIdHelper->stationName(id);
547  } else if (isTgc(id)) {
548  return m_tgcIdHelper->stationName(id);
549  } else if (isMdt(id)) {
550  return m_mdtIdHelper->stationName(id);
551  } else if (isCsc(id)) {
552  return m_cscIdHelper->stationName(id);
553  } else if (issTgc(id)) {
554  return m_stgcIdHelper->stationName(id);
555  } else if (isMM(id)) {
556  return m_mmIdHelper->stationName(id);
557  }
558  return 0;
559  }
560 
562  if (!id.is_valid()) {
563  ATH_MSG_WARNING("stationRegion: invalid ID");
564  return 0;
565  }
566  if (isRpc(id)) {
567  return m_rpcIdHelper->stationRegion(id);
568  } else if (isTgc(id)) {
569  return m_tgcIdHelper->stationRegion(id);
570  } else if (isMdt(id)) {
571  return m_mdtIdHelper->stationRegion(id);
572  } else if (isCsc(id)) {
573  return m_cscIdHelper->stationRegion(id);
574  } else if (issTgc(id)) {
575  return m_stgcIdHelper->stationRegion(id);
576  } else if (isMM(id)) {
577  return m_mmIdHelper->stationRegion(id);
578  }
579  return 0;
580  }
581 
582  int MuonIdHelperSvc::sector(const Identifier& id) const {
583  // TGC has different segmentation, return 0 for the moment
584  if (isTgc(id)) {
585  auto initTgcSectorMapping = [&]() -> std::vector<int>* {
586  std::vector<int>* mapping = nullptr;
587  StatusCode sc = m_detStore->retrieve(mapping, "TGC_SectorMapping");
588  if (sc.isFailure() || !mapping) {
589  ATH_MSG_WARNING("sector: failed to retrieve TGC sector mapping");
590  return nullptr;
591  }
592  ATH_MSG_DEBUG("sector: retrieve TGC sector mapping " << mapping->size());
593  return mapping;
594  };
595  static const std::vector<int> tgcSectorMapping = *initTgcSectorMapping();
596 
599  if (hash >= tgcSectorMapping.size()) {
600  ATH_MSG_WARNING("sector: TGC not yet supported");
601  return 0;
602  }
603  return tgcSectorMapping[hash];
604  }
605  int sect = 2 * stationPhi(id);
606  if (!isSmallChamber(id)) --sect;
607  return sect;
608  }
609 
610  bool MuonIdHelperSvc::hasRPC() const { return m_rpcIdHelper != nullptr; }
611  bool MuonIdHelperSvc::hasTGC() const { return m_tgcIdHelper != nullptr; }
612  bool MuonIdHelperSvc::hasMDT() const { return m_mdtIdHelper != nullptr; }
613  bool MuonIdHelperSvc::hasCSC() const { return m_hasCSC; }
614  bool MuonIdHelperSvc::hasSTGC() const { return m_hasSTGC; }
615  bool MuonIdHelperSvc::hasMM() const { return m_hasMM; }
616 
617  std::string MuonIdHelperSvc::stationNameString(const Identifier& id) const {
618  const int station = stationName(id);
619  if (isMdt(id)) return m_mdtIdHelper->stationNameString(station);
620  else if (isRpc(id)) return m_rpcIdHelper->stationNameString(station);
621  else if (isTgc(id)) return m_tgcIdHelper->stationNameString(station);
622  else if (isMM(id)) return m_mmIdHelper->stationNameString(station);
623  else if (issTgc(id)) return m_stgcIdHelper->stationNameString(station);
624  else if (isCsc(id)) return m_cscIdHelper->stationNameString(station);
625  return "UNKNOWN";
626  }
627  inline IdentifierHash MuonIdHelperSvc::moduleHash(const MuonIdHelper& idHelper, const Identifier& id) const{
629  if (idHelper.get_module_hash(id, hash) ||
630  static_cast<unsigned int>(hash) >= idHelper.module_hash_max()){
631  ATH_MSG_VERBOSE("Failed to deduce module hash "<<toString(id));
632  }
633  return hash;
634  }
635  inline IdentifierHash MuonIdHelperSvc::detElementHash(const MuonIdHelper& idHelper, const Identifier& id) const{
637  if (idHelper.get_detectorElement_hash(id, hash) ||
638  static_cast<unsigned int>(hash)>= idHelper.detectorElement_hash_max()) {
639  ATH_MSG_VERBOSE("Failed to deduce detector element hash "<<toString(id));
640  }
641  return hash;
642  }
644  if (isMdt(id)) return moduleHash(*m_mdtIdHelper, id);
645  else if (isRpc(id)) return moduleHash(*m_rpcIdHelper, id);
646  else if (isTgc(id)) return moduleHash(*m_tgcIdHelper, id);
647  else if (isMM(id)) return moduleHash(*m_mmIdHelper, id);
648  else if (issTgc(id)) return moduleHash(*m_stgcIdHelper, id);
649  else if (isCsc(id)) return moduleHash(*m_cscIdHelper, id);
650  ATH_MSG_WARNING("moduleHash(): No muon Identifier "<<id);
651  return IdentifierHash{};
652  }
654  if (isMdt(id)) return detElementHash(*m_mdtIdHelper, id);
655  else if (isRpc(id)) return detElementHash(*m_rpcIdHelper, id);
656  else if (isTgc(id)) return detElementHash(*m_tgcIdHelper, id);
657  else if (isMM(id)) return detElementHash(*m_mmIdHelper, id);
658  else if (issTgc(id)) return detElementHash(*m_stgcIdHelper, id);
659  else if (isCsc(id)) return detElementHash(*m_cscIdHelper, id);
660  ATH_MSG_WARNING("detElementHash(): No muon Identifier "<<id);
661  return IdentifierHash{};
662  }
663 
664 } // namespace Muon
MdtIdHelper::isBMG
bool isBMG(const Identifier &id) const
is this a BMG chamber
Definition: MdtIdHelper.cxx:734
MuonIdHelper::is_muon
bool is_muon(const Identifier &id) const
Definition: MuonIdHelper.cxx:779
BIS
@ BIS
Definition: RegSelEnums.h:11
Muon::MuonStationIndex::chName
static const std::string & chName(ChIndex index)
convert ChIndex into a string
Definition: MuonStationIndex.cxx:157
MdtIdHelper::multilayer
int multilayer(const Identifier &id) const
Access to components of the ID.
Definition: MdtIdHelper.cxx:722
Muon::MuonIdHelperSvc::m_mmIdHelper
const MmIdHelper * m_mmIdHelper
Definition: MuonIdHelperSvc.h:187
TGC
@ TGC
Definition: RegSelEnums.h:33
Muon::MuonIdHelperSvc::initialize
virtual StatusCode initialize() override
AlgTool initilize.
Definition: MuonIdHelperSvc.cxx:17
Muon::MuonIdHelperSvc::isTgc
virtual bool isTgc(const Identifier &id) const override
returns whether this is a TGC Identifier or not
Definition: MuonIdHelperSvc.cxx:220
MuonIdHelper::stationNameIndex
int stationNameIndex(const std::string &name) const
Definition: MuonIdHelper.cxx:842
sTgcIdHelper::multilayer
int multilayer(const Identifier &id) const
Definition: sTgcIdHelper.cxx:1017
Muon::MuonStationIndex::toStationIndex
static StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
Definition: MuonStationIndex.cxx:43
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
STGC
@ STGC
Definition: RegSelEnums.h:39
MuonIdHelper::stationRegion
int stationRegion(const Identifier &id) const
Definition: MuonIdHelper.cxx:711
CSS
@ CSS
Definition: ParabolaCscClusterFitter.h:25
BIL
@ BIL
Definition: RegSelEnums.h:10
Muon::MuonIdHelperSvc::m_hasSTGC
Gaudi::Property< bool > m_hasSTGC
Definition: MuonIdHelperSvc.h:196
MdtIdHelper::stationEtaMin
static int stationEtaMin(bool barrel)
Access to min and max of level ranges.
Definition: MdtIdHelper.cxx:740
MuonIdHelper::is_rpc
bool is_rpc(const Identifier &id) const
Definition: MuonIdHelper.cxx:788
Muon::MuonIdHelperSvc::m_hasMDT
Gaudi::Property< bool > m_hasMDT
Definition: MuonIdHelperSvc.h:192
vtune_athena.format
format
Definition: vtune_athena.py:14
Muon::MuonIdHelperSvc::m_rpcIdHelper
const RpcIdHelper * m_rpcIdHelper
Sub detector specific IdHelpers.
Definition: MuonIdHelperSvc.h:183
TgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: TgcIdHelper.cxx:642
Muon::MuonIdHelperSvc::stationName
virtual int stationName(const Identifier &id) const override
Return stationName for all technologies.
Definition: MuonIdHelperSvc.cxx:540
RpcIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi, int doubletR) const
Definition: RpcIdHelper.cxx:801
Muon::MuonIdHelperSvc::layerIndex
virtual MuonStationIndex::LayerIndex layerIndex(const Identifier &id) const override
calculate layer index from Identifier
Definition: MuonIdHelperSvc.cxx:333
Muon::MuonIdHelperSvc::toString
virtual std::string toString(const Identifier &id) const override
print all fields to string
Definition: MuonIdHelperSvc.cxx:346
MuonIdHelper::is_mdt
bool is_mdt(const Identifier &id) const
Definition: MuonIdHelper.cxx:782
RpcIdHelper::doubletZ
int doubletZ(const Identifier &id) const
Definition: RpcIdHelper.cxx:1061
index
Definition: index.py:1
sTgcIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int channel) const
Definition: sTgcIdHelper.cxx:886
Muon::MuonIdHelperSvc::isCsc
virtual bool isCsc(const Identifier &id) const override
returns whether this is a CSC Identifier or not
Definition: MuonIdHelperSvc.cxx:213
MuonIdHelper::detectorElement_hash_max
size_type detectorElement_hash_max() const
Definition: MuonIdHelper.h:186
Muon::MuonIdHelperSvc::m_primaryHelper
const MuonIdHelper * m_primaryHelper
Definition: MuonIdHelperSvc.h:190
Muon::MuonIdHelperSvc::m_hasRPC
Gaudi::Property< bool > m_hasRPC
Definition: MuonIdHelperSvc.h:193
xAOD::L2MuonParameters::BEE
@ BEE
BEE measurement point.
Definition: TrigMuonDefs.h:24
sTgcIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
returns measuresPhi
Definition: sTgcIdHelper.cxx:1025
Muon::MuonIdHelperSvc::chamberIndex
virtual MuonStationIndex::ChIndex chamberIndex(const Identifier &id) const override
calculate chamber index from Identifier
Definition: MuonIdHelperSvc.cxx:272
Muon::MuonStationIndex::LayerIndex
LayerIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:38
RpcIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: RpcIdHelper.cxx:1067
Muon::MuonIdHelperSvc::stationNameString
virtual std::string stationNameString(const Identifier &id) const override
Return the station name string for all technologies.
Definition: MuonIdHelperSvc.cxx:617
Muon::MuonIdHelperSvc::isEndcap
virtual bool isEndcap(const Identifier &id) const override
returns whether this is an endcap Identifier or not
Definition: MuonIdHelperSvc.cxx:268
MM
@ MM
Definition: RegSelEnums.h:38
MuonIdHelper::is_csc
bool is_csc(const Identifier &id) const
Definition: MuonIdHelper.cxx:785
MdtIdHelper::tubeLayer
int tubeLayer(const Identifier &id) const
Definition: MdtIdHelper.cxx:724
Muon::MuonIdHelperSvc::isSmallChamber
virtual bool isSmallChamber(const Identifier &id) const override
returns whether this is a small chamber, always returns true for TGCs
Definition: MuonIdHelperSvc.cxx:270
MuonIdHelper::technologyString
const std::string & technologyString(const int &index) const
Definition: MuonIdHelper.cxx:861
Muon::MuonIdHelperSvc::m_BIS_stat
int m_BIS_stat
Definition: MuonIdHelperSvc.h:215
Muon::MuonIdHelperSvc::sector
virtual int sector(const Identifier &id) const override
return sector number 1-16, odd=large, even=small
Definition: MuonIdHelperSvc.cxx:582
MuonIdHelper::module_end
const_id_iterator module_end() const
Definition: MuonIdHelper.cxx:756
Muon::MuonIdHelperSvc::m_detStore
ServiceHandle< StoreGateSvc > m_detStore
Definition: MuonIdHelperSvc.h:199
Muon::MuonIdHelperSvc::m_stgcIdHelper
const sTgcIdHelper * m_stgcIdHelper
Definition: MuonIdHelperSvc.h:188
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:800
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
RpcIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int doubletR, int doubletZ, int doubletPhi, int gasGap, int measuresPhi, int strip) const
Definition: RpcIdHelper.cxx:939
sTgcIdHelper::sTgcChannelTypes
sTgcChannelTypes
Definition: sTgcIdHelper.h:190
Muon
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition: TrackSystemController.h:45
BOL
@ BOL
Definition: RegSelEnums.h:14
MuonIdHelper::stationNameIndexMax
int stationNameIndexMax() const
Definition: MuonIdHelper.cxx:820
Muon::MuonStationIndex::PhiIndex
PhiIndex
enum to classify the different phi layers in the muon spectrometer
Definition: MuonStationIndex.h:31
find_tgc_unfilled_channelids.mapping
mapping
Definition: find_tgc_unfilled_channelids.py:17
TgcIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: TgcIdHelper.cxx:647
MuonIdHelperSvc.h
Muon::MuonIdHelperSvc::m_stationNameData
std::vector< StationNameData > m_stationNameData
Definition: MuonIdHelperSvc.h:212
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
DetType::Barrel
@ Barrel
Definition: DetType.h:14
CscIdHelper::channel
int channel(const Identifier &id) const override
Definition: CscIdHelper.cxx:778
MuonIdHelper::is_tgc
bool is_tgc(const Identifier &id) const
Definition: MuonIdHelper.cxx:791
MmIdHelper::multilayer
int multilayer(const Identifier &id) const
Definition: MmIdHelper.cxx:796
Muon::MuonIdHelperSvc::m_hasMM
Gaudi::Property< bool > m_hasMM
Definition: MuonIdHelperSvc.h:197
RpcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: RpcIdHelper.cxx:1065
MuonIdHelper::isSmall
bool isSmall(const Identifier &id) const
Definition: MuonIdHelper.cxx:831
Muon::MuonIdHelperSvc::isMM
virtual bool isMM(const Identifier &id) const override
returns whether this is a MM Identifier or not
Definition: MuonIdHelperSvc.cxx:210
TgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: TgcIdHelper.cxx:649
Muon::MuonIdHelperSvc::stationPhi
virtual int stationPhi(const Identifier &id) const override
Return stationPhi for all technologies.
Definition: MuonIdHelperSvc.cxx:498
Muon::MuonIdHelperSvc::chamberId
virtual Identifier chamberId(const Identifier &id) const override
create a chamber ID
Definition: MuonIdHelperSvc.cxx:421
CscIdHelper::wireLayer
int wireLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:772
MuonIdHelper::is_stgc
bool is_stgc(const Identifier &id) const
Definition: MuonIdHelper.cxx:794
Muon::MuonIdHelperSvc::regionIndex
virtual MuonStationIndex::DetectorRegionIndex regionIndex(const Identifier &id) const override
calculate detector region index from Identifier
Definition: MuonIdHelperSvc.cxx:327
Muon::MuonIdHelperSvc::m_mdtIdHelper
const MdtIdHelper * m_mdtIdHelper
Definition: MuonIdHelperSvc.h:186
Muon::MuonIdHelperSvc::issTgc
virtual bool issTgc(const Identifier &id) const override
returns whether this is a sTGC Identifier or not
Definition: MuonIdHelperSvc.cxx:224
Muon::MuonIdHelperSvc::toStringGasGap
virtual std::string toStringGasGap(const Identifier &id) const override
print all fields up to gas gap to string
Definition: MuonIdHelperSvc.cxx:411
MuonIdHelper
Definition: MuonIdHelper.h:80
sTgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: sTgcIdHelper.cxx:1027
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Ringer::EM
@ EM
Definition: CaloRingsDefs.h:19
Muon::MuonIdHelperSvc::m_hasCSC
Gaudi::Property< bool > m_hasCSC
Definition: MuonIdHelperSvc.h:195
RpcIdHelper::doubletR
int doubletR(const Identifier &id) const
Definition: RpcIdHelper.cxx:1059
Muon::MuonIdHelperSvc::layerId
virtual Identifier layerId(const Identifier &id) const override
create a layer ID, returns tube id for the MDTs
Definition: MuonIdHelperSvc.cxx:456
Muon::MuonIdHelperSvc::MuonIdHelperSvc
MuonIdHelperSvc(const std::string &name, ISvcLocator *svc)
default AlgService constructor
Definition: MuonIdHelperSvc.cxx:14
lumiFormat.i
int i
Definition: lumiFormat.py:85
MdtIdHelper::stationEtaMax
static int stationEtaMax(bool barrel)
Definition: MdtIdHelper.cxx:748
Muon::MuonIdHelperSvc::hasHPTDC
virtual bool hasHPTDC(const Identifier &id) const override
returns whether this Identifier belongs to an MDT with HPTDC or not NOTE that in Run4,...
Definition: MuonIdHelperSvc.cxx:242
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MdtIdHelper::channel
int channel(const Identifier &id) const override
Definition: MdtIdHelper.cxx:736
Muon::MuonIdHelperSvc::isMdt
virtual bool isMdt(const Identifier &id) const override
returns whether this is a MDT Identifier or not
Definition: MuonIdHelperSvc.cxx:207
Muon::MuonIdHelperSvc::detElId
virtual Identifier detElId(const Identifier &id) const override
create a detector element ID
Definition: MuonIdHelperSvc.cxx:440
TgcIdHelper::get_module_hash
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: TgcIdHelper.cxx:234
Muon::MuonIdHelperSvc::isTrigger
virtual bool isTrigger(const Identifier &id) const override
returns whether trigger chamber id or not
Definition: MuonIdHelperSvc.cxx:264
MuonIdHelper::get_module_hash
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const
Definition: MuonIdHelper.cxx:99
sTgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: sTgcIdHelper.cxx:1020
Muon::MuonIdHelperSvc::technologiesInStation
virtual const std::set< MuonStationIndex::TechnologyIndex > & technologiesInStation(MuonStationIndex::StIndex stIndex) const override
Recieve all technologies in a station.
Definition: MuonIdHelperSvc.cxx:229
MdtIdHelper::tube
int tube(const Identifier &id) const
Definition: MdtIdHelper.cxx:726
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonIdHelper::get_detectorElement_hash
virtual int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const
Definition: MuonIdHelper.cxx:120
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
Muon::MuonStationIndex::toLayerIndex
static LayerIndex toLayerIndex(ChIndex index)
convert ChIndex into LayerIndex
Definition: MuonStationIndex.cxx:56
MuonIdHelper::is_mm
bool is_mm(const Identifier &id) const
Definition: MuonIdHelper.cxx:797
Muon::MuonIdHelperSvc::hasCSC
bool hasCSC() const override
Definition: MuonIdHelperSvc.cxx:613
Muon::MuonIdHelperSvc::m_tgcIdHelper
const TgcIdHelper * m_tgcIdHelper
Definition: MuonIdHelperSvc.h:184
MuonIdHelper::technologyNameIndexMax
int technologyNameIndexMax() const
Definition: MuonIdHelper.cxx:822
Muon::MuonIdHelperSvc::hasTGC
bool hasTGC() const override
Definition: MuonIdHelperSvc.cxx:611
Muon::MuonIdHelperSvc::isRpc
virtual bool isRpc(const Identifier &id) const override
returns whether this is a RPC Identifier or not
Definition: MuonIdHelperSvc.cxx:216
Muon::MuonIdHelperSvc::m_techPerStation
std::array< std::set< TechIdx >, static_cast< int >StIdx::StIndexMax)> m_techPerStation
Array holding which technologies are there per station.
Definition: MuonIdHelperSvc.h:218
TgcIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: TgcIdHelper.cxx:556
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:810
Muon::MuonStationIndex::DetectorRegionIndex
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:47
Muon::MuonIdHelperSvc::m_hasTGC
Gaudi::Property< bool > m_hasTGC
Definition: MuonIdHelperSvc.h:194
RpcIdHelper::channel
int channel(const Identifier &id) const override
Definition: RpcIdHelper.cxx:1071
MuonIdHelper::stationNameString
const std::string & stationNameString(const int &index) const
Definition: MuonIdHelper.cxx:854
AtlasDetectorID::print_to_string
std::string print_to_string(Identifier id, const IdContext *context=0) const
or provide the printout in string form
Definition: AtlasDetectorID.cxx:655
Muon::MuonIdHelperSvc::stationEta
virtual int stationEta(const Identifier &id) const override
Return stationEta for all technologies.
Definition: MuonIdHelperSvc.cxx:519
Muon::MuonIdHelperSvc::gasGapId
virtual Identifier gasGapId(const Identifier &id) const override
create a gasGap ID (will return layer Id for MDTs)
Definition: MuonIdHelperSvc.cxx:476
MmIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: MmIdHelper.cxx:706
Muon::MuonIdHelperSvc::detElementHash
virtual IdentifierHash detElementHash(const Identifier &id) const override
Returns the detector element hash associated to an Identifier.
Definition: MuonIdHelperSvc.cxx:653
Muon::MuonIdHelperSvc::toStringTech
virtual std::string toStringTech(const Identifier &id) const override
print all fields up to technology to string
Definition: MuonIdHelperSvc.cxx:368
RPC
@ RPC
Definition: RegSelEnums.h:32
CscIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip) const
Definition: CscIdHelper.cxx:706
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
MdtIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int tubeLayer, int tube) const
Definition: MdtIdHelper.cxx:659
Muon::MuonIdHelperSvc::stationIndex
virtual MuonStationIndex::StIndex stationIndex(const Identifier &id) const override
calculate station index from Identifier
Definition: MuonIdHelperSvc.cxx:280
Muon::MuonIdHelperSvc::chamberNameString
virtual std::string chamberNameString(const Identifier &id) const override
print chamber name to string
Definition: MuonIdHelperSvc.cxx:372
Muon::MuonIdHelperSvc::stationRegion
virtual int stationRegion(const Identifier &id) const override
Return stationRegion for all technologies.
Definition: MuonIdHelperSvc.cxx:561
Muon::MuonIdHelperSvc::measuresPhi
virtual bool measuresPhi(const Identifier &id) const override
returns whether channel measures phi or not
Definition: MuonIdHelperSvc.cxx:250
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:805
Muon::MuonIdHelperSvc::isMuon
virtual bool isMuon(const Identifier &id) const override
returns whether this is a Muon Identifier or not
Definition: MuonIdHelperSvc.cxx:204
Muon::MuonIdHelperSvc::technologyIndex
virtual MuonStationIndex::TechnologyIndex technologyIndex(const Identifier &id) const override
calculate layer index from Identifier
Definition: MuonIdHelperSvc.cxx:337
Muon::MuonIdHelperSvc::issMdt
virtual bool issMdt(const Identifier &id) const override
returns whether this is a sMDT Identifier or not
Definition: MuonIdHelperSvc.cxx:233
Muon::MuonIdHelperSvc::toStringDetEl
virtual std::string toStringDetEl(const Identifier &id) const override
print all fields up to detector element to string
Definition: MuonIdHelperSvc.cxx:390
MuonIdHelper::module_hash_max
size_type module_hash_max() const
the maximum hash value
Definition: MuonIdHelper.cxx:748
MdtIdHelper::isBME
bool isBME(const Identifier &id) const
is this a BME chamber
Definition: MdtIdHelper.cxx:732
MuonIdHelper::isEndcap
bool isEndcap(const Identifier &id) const
Definition: MuonIdHelper.cxx:827
sTgcIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: sTgcIdHelper.cxx:856
Muon::MuonIdHelperSvc::hasMDT
bool hasMDT() const override
Definition: MuonIdHelperSvc.cxx:612
MdtIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: MdtIdHelper.cxx:630
DeMoScan.index
string index
Definition: DeMoScan.py:364
MmIdHelper::channel
int channel(const Identifier &id) const override
Definition: MmIdHelper.cxx:800
h
MmIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: MmIdHelper.cxx:798
BML
@ BML
Definition: RegSelEnums.h:12
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
Muon::MuonIdHelperSvc::m_smdt_stat
std::unordered_set< Identifier > m_smdt_stat
Definition: MuonIdHelperSvc.h:216
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
BMS
@ BMS
Definition: RegSelEnums.h:13
DEBUG
#define DEBUG
Definition: page_access.h:11
Muon::MuonIdHelperSvc::m_cscIdHelper
const CscIdHelper * m_cscIdHelper
Definition: MuonIdHelperSvc.h:185
Muon::MuonStationIndex::ChIndex
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Definition: MuonStationIndex.h:15
Muon::MuonIdHelperSvc::moduleHash
virtual IdentifierHash moduleHash(const Identifier &id) const override
Returns the module hash associated to an Identifier.
Definition: MuonIdHelperSvc.cxx:643
Muon::MuonIdHelperSvc::hasSTGC
bool hasSTGC() const override
Definition: MuonIdHelperSvc.cxx:614
Muon::MuonStationIndex::stName
static const std::string & stName(StIndex index)
convert StIndex into a string
Definition: MuonStationIndex.cxx:141
Muon::MuonIdHelperSvc::toStringStation
virtual std::string toStringStation(const Identifier &id) const override
print all fields up to stationName to string
Definition: MuonIdHelperSvc.cxx:376
TgcIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int gasGap, int isStrip, int channel) const
Definition: TgcIdHelper.cxx:583
Muon::MuonStationIndex::StIndex
StIndex
enum to classify the different station layers in the muon spectrometer
Definition: MuonStationIndex.h:23
Muon::MuonIdHelperSvc::hasRPC
bool hasRPC() const override
Definition: MuonIdHelperSvc.cxx:610
CSC
@ CSC
Definition: RegSelEnums.h:34
CscIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: CscIdHelper.cxx:774
Muon::MuonIdHelperSvc::phiIndex
virtual MuonStationIndex::PhiIndex phiIndex(const Identifier &id) const override
calculate phi index from Identifier (not supported for MDT hits)
Definition: MuonIdHelperSvc.cxx:288
Muon::MuonIdHelperSvc::toStringChamber
virtual std::string toStringChamber(const Identifier &id) const override
print all fields up to chamber to string
Definition: MuonIdHelperSvc.cxx:380
CSL
@ CSL
Definition: ParabolaCscClusterFitter.h:25
MuonIdHelper::module_begin
const_id_iterator module_begin() const
Iterators over full set of ids.
Definition: MuonIdHelper.cxx:754
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
Muon::MuonIdHelperSvc::m_technologies
std::vector< TechIdx > m_technologies
Definition: MuonIdHelperSvc.h:213
Muon::MuonIdHelperSvc::hasMM
bool hasMM() const override
Definition: MuonIdHelperSvc.cxx:615
BOS
@ BOS
Definition: RegSelEnums.h:15
MmIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const
Definition: MmIdHelper.cxx:736
Muon::MuonStationIndex::TechnologyIndex
TechnologyIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:54
sTgcIdHelper::channelType
int channelType(const Identifier &id) const
Definition: sTgcIdHelper.cxx:1022
Muon::MuonIdHelperSvc::StationNameData
Definition: MuonIdHelperSvc.h:205
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
CscIdHelper::chamberLayer
int chamberLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:770
MDT
@ MDT
Definition: RegSelEnums.h:31
Muon::MuonIdHelperSvc::gasGap
virtual int gasGap(const Identifier &id) const override
returns gas gap: gasGap for RPC + TGC, wireLayer for CSC, tube for MDT
Definition: MuonIdHelperSvc.cxx:184
RpcIdHelper::doubletPhi
int doubletPhi(const Identifier &id) const
Definition: RpcIdHelper.cxx:1063
MuonIdHelper::BAD_NAME
static const std::string BAD_NAME
Definition: MuonIdHelper.h:224
Identifier
Definition: IdentifierFieldParser.cxx:14
Muon::MuonStationIndex::technologyName
static const std::string & technologyName(TechnologyIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:209