ATLAS Offline Software
Loading...
Searching...
No Matches
MuonChamberNameConverter.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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)
13std::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 {
98 Name_string = "WrongName";
99 limits.insert(limits.end(), 6, -100);
100 }
101 //if its a "WrongName", 'limits' has to have at least six entries
102 //in the following statements (for eta, then phi checks)
103 //Convert ATHENA int eta to correct side and eta Hardware index
104 if (Eta_int>=-limits[0] && Eta_int<=limits[0] && Eta_int!=limits[1]){
105 if(Eta_int>0){
106 if (Name_int==9){//exception of the BOG,BOF alternating eta
107 Eta_int=(2*Eta_int)-1;
108 }
109 if (Name_int==10){//exception of the BOG,BOF alternating eta
110 Eta_int=2*Eta_int;
111 }
112 if (Name_int==54){//exception of the BMG
113 Eta_int=2*Eta_int;
114 }
115 std::stringstream eta_inttostring;
116 std::string eta_str;
117 eta_inttostring << Eta_int;
118 eta_inttostring >> eta_str;
119 Eta_string += eta_str;
120 Eta_string += "A";
121 }
122
123 if (Eta_int<0){
124 if (Name_int==9){//exception of the BOG,BOF alternating eta
125 Eta_int=(2*Eta_int)+1;
126 }
127 if (Name_int==10){//exception of the BOG,BOF alternating eta
128 Eta_int=2*Eta_int;
129 }
130 if (Name_int==54){//exception of the BMG alternating eta
131 Eta_int=2*Eta_int;
132 }
133 std::stringstream eta_inttostring;
134 std::string eta_str;
135 eta_inttostring << std::abs(Eta_int);
136 eta_inttostring >> eta_str;
137 Eta_string += eta_str;
138 Eta_string += "C";
139
140 }
141
142 if (Eta_int==0) {
143 std::stringstream eta_inttostring;
144 std::string eta_str;
145 eta_inttostring << Eta_int;
146 eta_inttostring >> eta_str;
147 Eta_string += eta_str;
148 Eta_string += "B";
149 }
150 } else {Eta_string="WrongEta";}
151
152 //Convert ATHENA int phi to correct phi Hardware index (taking into account Long/Short case)
153 // check correct phi_index
154 if ((Phi_int>=limits[2] && Phi_int<=limits[3]) || Phi_int==limits[4] || Phi_int==limits[5]) {
155 if (Type=="TGC") {
156 std::stringstream phi_inttostring;
157 std::string phi_str;
158 phi_inttostring << Phi_int;
159 phi_inttostring >> phi_str;
160 Phi_string = std::move(phi_str) ;
161 } else { // for Type ==TGC
162 if (limits[6]==1) {//Long chamber
163 Phi_int = (2*Phi_int)-1;
164 std::stringstream phi_inttostring;
165 std::string phi_str;
166 phi_inttostring << Phi_int;
167 phi_inttostring >> phi_str;
168 if (Phi_int<10) {
169 Phi_string = "0"+phi_str;
170 } else {
171 Phi_string = std::move(phi_str);
172 }
173 }
174 if (limits[6]==-1) {//Short chamber
175 Phi_int = 2*Phi_int;
176 std::stringstream phi_inttostring;
177 std::string phi_str;
178 phi_inttostring << Phi_int;
179 phi_inttostring >> phi_str;
180 if (Phi_int<10){
181 Phi_string = "0"+phi_str;
182 } else {Phi_string = std::move(phi_str);}
183 }
184 } // end of else ; MDT / RPC
185 } else {
186 Phi_string="WrongPhi";
187 }
188
189 //Return full Hardware name
190 Name_string += Eta_string;
191 Name_string += Phi_string;
192 limits.clear();
193 return Name_string;
194}
std::string convertChamberName(int ChamberName, int ChamberEta, int ChamberPhi, const std::string &ChamberType)