00001 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h" 00002 #include "DataFormats/MuonDetId/interface/RPCDetId.h" 00003 #include <sstream> 00004 #include <iomanip> 00005 00006 RPCGeomServ::RPCGeomServ::RPCGeomServ(const RPCDetId& id) : 00007 _id(&id), _n(""), _t(-99), _z(true), _a(true) 00008 {} 00009 00010 00011 RPCGeomServ::~RPCGeomServ() 00012 {} 00013 00014 00015 std::string 00016 RPCGeomServ::name() 00017 { 00018 00019 if (_n.size()<1){ 00020 std::string buf; 00021 00022 00023 if (_id->region()==0){ 00024 buf="W"; 00025 { 00026 std::stringstream os; 00027 os << std::setw(2)<<std::setfill('+')<<_id->ring() 00028 <<std::setfill(' ')<<"_"; 00029 buf += os.str(); 00030 } 00031 00032 { 00033 std::stringstream os; 00034 os <<"RB"<<_id->station(); 00035 if (_id->station()<=2) 00036 if (_id->layer()==1) 00037 os<<"in"; 00038 else 00039 os<<"out"; 00040 //os<<"_"; 00041 buf += os.str(); 00042 } 00043 00044 00045 { 00046 std::stringstream os; 00047 // os <<"S"<<std::setw(2)<<std::setfill('0') 00048 // <<_id->sector()<<std::setfill(' '); 00049 if (_id->station()>2){ 00050 00051 if (_id->sector()== 4 && _id->station()==4){ 00052 if ( _id->subsector()==1){ 00053 os<<"--"; 00054 } 00055 else if ( _id->subsector()==2){ 00056 os <<"-+"; 00057 } 00058 else if ( _id->subsector()==3){ 00059 os <<"+-"; 00060 } 00061 else if ( _id->subsector()==4){ 00062 os <<"++"; 00063 } 00064 } 00065 else { 00066 if (_id->subsector()==1) 00067 os <<"-"; 00068 else 00069 os <<"+"; 00070 } 00071 } 00072 00073 00074 00075 os<<"_"; 00076 os <<"S"<<std::setw(2)<<std::setfill('0') 00077 <<_id->sector()<<std::setfill(' '); 00078 os<<"_"; 00079 buf += os.str(); 00080 } 00081 { 00082 std::stringstream os; 00083 if (_id->roll()==1) 00084 os<<"Backward"; 00085 else if (_id->roll() == 3) 00086 os<<"Forward"; 00087 else if (_id->roll() == 2) 00088 os <<"Middle"; 00089 buf += os.str(); 00090 } 00091 } 00092 else { 00093 buf="RE"; 00094 00095 { 00096 std::stringstream os; 00097 os << std::setw(2)<<std::setfill('+')<<_id->station()*_id->region() 00098 <<std::setfill(' ')<<"_"; 00099 buf += os.str(); 00100 } 00101 00102 { 00103 std::stringstream os; 00104 os <<"R"<<_id->ring()<<"_"; 00105 os <<"S"<<std::setw(2)<<std::setfill('0')<<_id->sector(); 00106 os <<"_CH"<<std::setw(2)<<std::setfill('0')<<this->segment(); 00107 buf += os.str(); 00108 } 00109 00110 { 00111 buf += "_"; 00112 std::stringstream os; 00113 if (_id->roll()==1) 00114 os<<"A"; 00115 else if (_id->roll() == 2) 00116 os<<"B"; 00117 else if (_id->roll() == 3) 00118 os <<"C"; 00119 else if (_id->roll() == 4) 00120 os <<"D"; 00121 buf += os.str(); 00122 } 00123 } 00124 _n=buf; 00125 } 00126 return _n; 00127 } 00128 00129 int 00130 RPCGeomServ::eta_partition() 00131 { 00132 if (_t<-90){ 00133 if (_id->region() == 0 ){ 00134 if (this->inverted()) { 00135 _t = 3*(_id->ring())+ (3-_id->roll())-1; 00136 }else{ 00137 _t = 3*(_id->ring())+ _id->roll()-2; 00138 } 00139 }else{ 00140 _t = _id->region() * (3*(3-_id->ring()) + _id->roll() + 7); 00141 } 00142 } 00143 return _t; 00144 } 00145 00146 int 00147 RPCGeomServ::chambernr() 00148 { 00149 00150 // Station1 00151 if( _id->station() ==1) { 00152 00153 // in 00154 if(_id->layer() ==1) { 00155 00156 if(_id->roll()==1) 00157 _cnr = 1; 00158 else 00159 _cnr = 2; 00160 } 00161 //out 00162 else 00163 { 00164 if(_id->roll()==1) 00165 _cnr = 3; 00166 else 00167 _cnr = 4; 00168 00169 } 00170 } 00171 00172 00173 //Station 2 00174 if (_id->station()==2) { 00175 00176 //in 00177 if(_id->layer()==1) { 00178 00179 if(_id->roll()==1) 00180 _cnr = 5; 00181 if(_id->roll()==3) 00182 _cnr=6; 00183 if(_id->roll()==2) 00184 _cnr=7; 00185 } 00186 //out 00187 else { 00188 00189 if(_id->roll()==2) 00190 00191 _cnr=7; 00192 00193 if(_id->roll()==1) 00194 _cnr=8; 00195 if(_id->roll()==3) 00196 _cnr=9; 00197 00198 } 00199 } 00200 00201 //RB3- RB3+ 00202 if(_id->station()==3) 00203 { 00204 if(_id->subsector()==1) { 00205 00206 if(_id->roll()==1) 00207 _cnr=10; 00208 else 00209 _cnr=11; 00210 } 00211 else { 00212 00213 if(_id->roll()==1) 00214 _cnr=12; 00215 else 00216 _cnr=13; 00217 } 00218 00219 } 00220 00221 //RB4 00222 if(_id->station()==4) { 00223 00224 if (_id->sector()== 4) { 00225 00226 if ( _id->subsector()==1){ 00227 00228 if(_id->roll()==1) 00229 _cnr=14; 00230 else 00231 _cnr=15; 00232 00233 } 00234 00235 if ( _id->subsector()==2){ 00236 00237 if(_id->roll()==1) 00238 _cnr=16; 00239 else 00240 _cnr=17; 00241 00242 } 00243 00244 if ( _id->subsector()==3) { 00245 00246 if(_id->roll()==1) 00247 _cnr=18; 00248 else 00249 _cnr=19; 00250 } 00251 00252 if ( _id->subsector()==4){ 00253 00254 if(_id->roll()==1) 00255 _cnr=20; 00256 else 00257 _cnr=21; 00258 00259 } 00260 00261 } 00262 00263 else 00264 00265 { 00266 if(_id->subsector()==1) { 00267 00268 if(_id->roll()==1) 00269 _cnr=14; 00270 else 00271 _cnr=15; 00272 } 00273 else { 00274 00275 if(_id->roll()==1) 00276 _cnr=16; 00277 else 00278 _cnr=17; 00279 } 00280 } 00281 } 00282 00283 00284 // _cnr=10; 00285 return _cnr; 00286 00287 } 00288 00289 00290 int 00291 RPCGeomServ::segment(){ 00292 int seg=0; 00293 int nsec=36; 00294 int nsub=6; 00295 if ( _id->ring()==1 && _id->station() > 1) { 00296 nsub=3; 00297 nsec=18; 00298 } 00299 seg =_id->subsector()+nsub*(_id->sector()-1)+1; 00300 if(seg==nsec+1)seg=1; 00301 return seg; 00302 } 00303 00304 bool 00305 RPCGeomServ::inverted() 00306 { 00307 // return !(this->zpositive() && this->aclockwise()); 00308 return !(this->zpositive()); 00309 } 00310 00311 00312 bool 00313 RPCGeomServ::zpositive() 00314 { 00315 if (_id->region()==0 && _t<-90 ){ 00316 if (_id->ring()<0){ 00317 _z=false; 00318 } 00319 if (_id->ring()==0){ 00320 if (_id->sector() == 1 || _id->sector() == 4 || 00321 _id->sector() == 5 || _id->sector() == 8 || 00322 _id->sector() == 9 || _id->sector() == 12){ 00323 _z=false; 00324 } 00325 } 00326 } 00327 00328 return _z; 00329 } 00330 00331 bool 00332 RPCGeomServ::aclockwise() 00333 { 00334 if (_id->region()==0 && _t<-90 ){ 00335 if (_id->ring() > 0){ 00336 if (_id->layer()==2){ 00337 _a=false; 00338 } 00339 }else if(_id->ring() <0){ 00340 if (_id->layer()==1){ 00341 _a=false; 00342 } 00343 }else if(_id->ring() ==0) { 00344 if ((_id->sector() == 1 || _id->sector() == 4 || 00345 _id->sector() == 5 || _id->sector() == 8 || 00346 _id->sector() == 9 || _id->sector() == 12) && _id->layer()==1) 00347 _a=false; 00348 else if ((_id->sector() == 2 || _id->sector() == 3 || 00349 _id->sector() == 6 || _id->sector() == 7 || 00350 _id->sector() == 10|| _id->sector() == 11) && _id->layer()==2) 00351 _a=false; 00352 } 00353 } 00354 return _a; 00355 } 00356 00357 00358 00359 00360 00361 RPCGeomServ::RPCGeomServ() : _id(0), _n(""), _t (-99), _z(false), _a(false) 00362 {} 00363 00364