CMS 3D CMS Logo

RPCGeomServ.cc

Go to the documentation of this file.
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 

Generated on Tue Jun 9 17:37:32 2009 for CMSSW by  doxygen 1.5.4