ATLAS Offline Software
MuonChamberNameConverter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include <cstdlib>
7 #include <sstream>
8 #include <vector>
9 #include <iostream>
10 
11 //Function converting from ATHENA identifier int StationName,int StationEta, int StationPhi, std::string ChamberType
12 //to the (hopefully) corresponding Hardware chamber name.Works only for Barrel MDTs (for the moment)
13 std::string convertChamberName(int ChamberName , int ChamberEta , int ChamberPhi , const std::string& ChamberType) {
14 
15  //Input values
16  int Name_int = ChamberName;
17  int Eta_int = ChamberEta;
18  int Phi_int = ChamberPhi;
19  //add type
20  //"MDT","CSC","TGC" go in the same loop while
21  //"RPC" go to a different loop due to the same
22  //naming with "MDT"
23  const std::string& Type=ChamberType;
24 
25 
26  //Set string variables
27  std::string Name_string;
28  std::string Eta_string;
29  std::string Phi_string;
30 
31  //Vector setting the chamber eta, phi range
32  //Elements:
33  // limit eta , forbiden eta , min phi , max phi , allowed phi1 , allowed phi2
34  std::vector<int> limits;
35 
36 
37  if (Type=="MDT" || Type=="CSC" || Type=="TGC"){
38  //Switch from ATHENA int name to Hardware string name
39  switch (Name_int)
40  {
41  // identifier : harware name : limit eta : forbiden eta : min phi : max phi : allowed phi1 : allowed phi2 : long/short
42  case 0 : Name_string = "BIL"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(5); limits.push_back(7); limits.push_back(-100); limits.push_back(1); break;
43  case 1 : Name_string = "BIS"; limits.push_back(8); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
44  case 2 : Name_string = "BML"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
45  case 3 : Name_string = "BMS"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(5); limits.push_back(8); limits.push_back(-100); limits.push_back(-1); break;
46  case 4 : Name_string = "BOL"; limits.push_back(7); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
47  case 5 : Name_string = "BOS"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(5); limits.push_back(8); limits.push_back(-100); limits.push_back(-1); break;
48  case 6 : Name_string = "BEE"; limits.push_back(2); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
49  case 7 : Name_string = "BIR"; limits.push_back(6); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(8); limits.push_back(1); break;
50  case 8 : Name_string = "BMF"; limits.push_back(3); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
51  case 9 : Name_string = "BOF"; limits.push_back(4); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
52  case 10 : Name_string = "BOG"; limits.push_back(4); limits.push_back(-100); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
53  case 11 : Name_string = "BOH_DOES_NOT_EXIST!"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
54  case 12 : Name_string = "EIC_DOES_NOT_EXIST!"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
55  case 13 : Name_string = "EIL"; limits.push_back(5); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
56  case 14 : Name_string = "EEL"; limits.push_back(2); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
57  case 15 : Name_string = "EES"; limits.push_back(2); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
58  case 16 : Name_string = "EMC_DOES_NOT_EXIST!"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
59  case 17 : Name_string = "EML"; limits.push_back(5); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
60  case 18 : Name_string = "EMS"; limits.push_back(5); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
61  case 19 : Name_string = "EOC_DOES_NOT_EXIST!"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
62  case 20 : Name_string = "EOL"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
63  case 21 : Name_string = "EOS"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
64 
65  // TGC part implemented by Masaya Ishino (Masaya.Ishino@cern.ch)
66  // TGC start ; harware name ; limit eta ; forbiden eta ; min phi ; max phi ; allowed phi1 ; allowed phi2 ; long/short
67  case 41 : Name_string = "T1F"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(24); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
68  case 42 : Name_string = "T1E"; limits.push_back(4); limits.push_back(0); limits.push_back(1); limits.push_back(48); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
69  case 43 : Name_string = "T2F"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(24); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
70  case 44 : Name_string = "T2E"; limits.push_back(5); limits.push_back(0); limits.push_back(1); limits.push_back(48); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
71  case 45 : Name_string = "T3F"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(24); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
72  case 46 : Name_string = "T3E"; limits.push_back(5); limits.push_back(0); limits.push_back(1); limits.push_back(48); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
73  case 47 : Name_string = "T4F"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(24); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
74  case 48 : Name_string = "T4E"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(21); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
75  // TGC end
76 
77  case 49 : Name_string = "EIS"; limits.push_back(2); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
78  case 50 : Name_string = "CSS"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(-1); break;
79  case 51 : Name_string = "CSL"; limits.push_back(1); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
80  case 52 : Name_string = "BIM"; limits.push_back(5); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(8); limits.push_back(1); break;
81  case 53 : Name_string = "BME"; limits.push_back(1); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(7); limits.push_back(7); limits.push_back(-1); break;
82  case 54 : Name_string = "BMG"; limits.push_back(3); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
83  default : Name_string = "WrongName"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100);
84  }
85  } else if (Type=="RPC") {
86  switch (Name_int)
87  {
88  case 2 : Name_string = "BML"; limits.push_back(7); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
89  case 3 : Name_string = "BMS"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(5); limits.push_back(8); limits.push_back(-100); limits.push_back(-1); break;
90  case 4 : Name_string = "BOL"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(8); limits.push_back(-100); limits.push_back(-100); limits.push_back(1); break;
91  case 5 : Name_string = "BOS"; limits.push_back(6); limits.push_back(0); limits.push_back(1); limits.push_back(5); limits.push_back(8); limits.push_back(-100); limits.push_back(-1); break;
92  case 8 : Name_string = "BMF"; limits.push_back(3); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
93  case 9 : Name_string = "BOF"; limits.push_back(4); limits.push_back(0); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
94  case 10 : Name_string = "BOG"; limits.push_back(4); limits.push_back(-100); limits.push_back(100); limits.push_back(-100); limits.push_back(6); limits.push_back(7); limits.push_back(-1); break;
95  default : Name_string = "WrongName"; limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100); limits.push_back(-100);
96  }
97  } else {Name_string = "WrongName";}
98 
99  //Convert ATHENA int eta to correct side and eta Hardware index
100  if (Eta_int>=-limits[0] && Eta_int<=limits[0] && Eta_int!=limits[1]){
101  if(Eta_int>0){
102  if (Name_int==9){//exception of the BOG,BOF alternating eta
103  Eta_int=(2*Eta_int)-1;
104  }
105  if (Name_int==10){//exception of the BOG,BOF alternating eta
106  Eta_int=2*Eta_int;
107  }
108  if (Name_int==54){//exception of the BMG
109  Eta_int=2*Eta_int;
110  }
111  std::stringstream eta_inttostring;
112  std::string eta_str;
113  eta_inttostring << Eta_int;
114  eta_inttostring >> eta_str;
115  Eta_string += eta_str;
116  Eta_string += "A";
117  }
118 
119  if (Eta_int<0){
120  if (Name_int==9){//exception of the BOG,BOF alternating eta
121  Eta_int=(2*Eta_int)+1;
122  }
123  if (Name_int==10){//exception of the BOG,BOF alternating eta
124  Eta_int=2*Eta_int;
125  }
126  if (Name_int==54){//exception of the BMG alternating eta
127  Eta_int=2*Eta_int;
128  }
129  std::stringstream eta_inttostring;
130  std::string eta_str;
131  eta_inttostring << std::abs(Eta_int);
132  eta_inttostring >> eta_str;
133  Eta_string += eta_str;
134  Eta_string += "C";
135 
136  }
137 
138  if (Eta_int==0) {
139  std::stringstream eta_inttostring;
140  std::string eta_str;
141  eta_inttostring << Eta_int;
142  eta_inttostring >> eta_str;
143  Eta_string += eta_str;
144  Eta_string += "B";
145  }
146  } else {Eta_string="WrongEta";}
147 
148  //Convert ATHENA int phi to correct phi Hardware index (taking into account Long/Short case)
149  // check correct phi_index
150  if ((Phi_int>=limits[2] && Phi_int<=limits[3]) || Phi_int==limits[4] || Phi_int==limits[5]) {
151  if (Type=="TGC") {
152  std::stringstream phi_inttostring;
153  std::string phi_str;
154  phi_inttostring << Phi_int;
155  phi_inttostring >> phi_str;
156  Phi_string = std::move(phi_str) ;
157  } else { // for Type ==TGC
158  if (limits[6]==1) {//Long chamber
159  Phi_int = (2*Phi_int)-1;
160  std::stringstream phi_inttostring;
161  std::string phi_str;
162  phi_inttostring << Phi_int;
163  phi_inttostring >> phi_str;
164  if (Phi_int<10) {
165  Phi_string = "0"+phi_str;
166  } else {
167  Phi_string = std::move(phi_str);
168  }
169  }
170  if (limits[6]==-1) {//Short chamber
171  Phi_int = 2*Phi_int;
172  std::stringstream phi_inttostring;
173  std::string phi_str;
174  phi_inttostring << Phi_int;
175  phi_inttostring >> phi_str;
176  if (Phi_int<10){
177  Phi_string = "0"+phi_str;
178  } else {Phi_string = std::move(phi_str);}
179  }
180  } // end of else ; MDT / RPC
181  } else {
182  Phi_string="WrongPhi";
183  }
184 
185  //Return full Hardware name
186  Name_string += Eta_string;
187  Name_string += Phi_string;
188  limits.clear();
189  return Name_string;
190 }
convertChamberName
std::string convertChamberName(int ChamberName, int ChamberEta, int ChamberPhi, const std::string &ChamberType)
Definition: MuonChamberNameConverter.cxx:13
MuonChamberNameConverter.h
xAODType
Definition: ObjectType.h:13
python.CaloAddPedShiftConfig.default
default
Definition: CaloAddPedShiftConfig.py:43