CMS 3D CMS Logo

RPCTBMuon.cc

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------
00002 #include "L1Trigger/RPCTrigger/interface/RPCTBMuon.h"
00003 #ifndef _STAND_ALONE
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005 #endif // _STAND_ALONE
00006 #include "L1Trigger/RPCTrigger/interface/RPCException.h"
00007 
00008 #include <sstream>
00009 #include <iomanip>
00010 #include <iostream>
00011 
00012 using namespace std;
00013 //---------------------------------------------------------------------------
00014 RPCTBMuon::RPCTBMuon(): RPCMuon() {
00015     m_Killed = false;
00016 
00017     m_GBData = 0;
00018 
00019     m_EtaAddress = 0;
00020     m_PhiAddress = 0;
00021 }
00022 //---------------------------------------------------------------------------
00023 RPCTBMuon::RPCTBMuon(int ptCode, int quality, int sign,
00024                          int patternNum, unsigned short firedPlanes):
00025     RPCMuon(ptCode, quality, sign, patternNum, firedPlanes) 
00026 {
00027     m_Killed = false;
00028 
00029     m_GBData = 0;
00030 
00031     m_EtaAddress = 0;
00032     m_PhiAddress = 0;
00033     
00034     m_muonBitsType = mbtUnset;
00035 }
00036 
00037 RPCTBMuon::RPCTBMuon(int ptCode, int quality, int sign, MuonBitsType muonBitsType):
00038     RPCMuon(ptCode, quality, sign, 0, 0)  {
00039     m_Killed = false;
00040 
00041     m_GBData = 0;
00042 
00043     m_EtaAddress = 0;
00044     m_PhiAddress = 0;
00045     
00046     m_muonBitsType = muonBitsType;
00047 }
00048 
00055 std::string RPCTBMuon::printDebugInfo(int debugFormat) const {
00056 
00057   std::ostringstream sDebugInfo;
00058   if (debugFormat==1){  // Human readable
00059 
00060     sDebugInfo << "TBMuon: code: " << getPtCode()
00061                << " etaAddr: " << getEtaAddr()
00062                << " phiAddr: " << getPhiAddr()
00063                << " sgAddr: " << getSegmentAddr()
00064                << " scAddr: " << getSectorAddr()
00065                << " gbData: " << getGBData();
00066 
00067   }
00068   else {        //technicall
00069    sDebugInfo << "TBMuon pt "<< getPtCode() 
00070               <<   " ql " <<getQuality() 
00071               <<   " sgn " << getSign()
00072               <<   " tw " << getTower()
00073               <<   " sc " << getLogSector()
00074               <<   " sg " << getLogSegment()
00075               <<   " phi " << getPhiAddr()
00076               <<   " eta " << getEtaAddr()
00077               <<   " gbD " <<  getGBData()
00078               <<   " bits " << toBits(mbtFSBOut);
00079   }
00080 
00081   return sDebugInfo.str();
00082 
00083 }
00084 //---------------------------------------------------------------------------
00085 // Simple setters and getters
00086 
00088 int RPCTBMuon::getCode() const {  return (m_Quality<<6 | m_PtCode << 1 | m_Sign ); }
00089 
00091 void RPCTBMuon::setCode(int code) {
00092     m_Quality = (code & (3<<5))>>5;
00093     m_PtCode = code & 31;
00094 }
00095 
00096 
00097 void RPCTBMuon::setPhiAddr(int phiAddr) { m_PhiAddress = phiAddr;}
00098 
00099 void RPCTBMuon::setSectorAddr(int sectorAddr){ m_PhiAddress = m_PhiAddress | sectorAddr<<4;}
00100 
00101 void RPCTBMuon::setEtaAddr(int etaAddr) { m_EtaAddress = etaAddr;}
00102   
00103 void RPCTBMuon::setAddress(int etaAddr, int phiAddr) { 
00104      m_EtaAddress = etaAddr;
00105      m_PhiAddress = phiAddr;
00106 }
00107 
00108 void RPCTBMuon::setAddress(int tbNumber, int tbTower, int phiAddr) {
00109     m_EtaAddress = (tbNumber<<2) | tbTower;
00110     m_PhiAddress = phiAddr;
00111 }
00112 
00113 void RPCTBMuon::setGBData(unsigned int gbData) {
00114         m_GBData = gbData;
00115 }
00116 
00117 int RPCTBMuon::getEtaAddr() const { return m_EtaAddress; }
00118 
00119 int RPCTBMuon::getPhiAddr() const { return m_PhiAddress; }
00120 
00121 int RPCTBMuon::getSegmentAddr() const { return m_PhiAddress & 15; }
00122 
00123 int RPCTBMuon::getSectorAddr() const { return (m_PhiAddress & 0xF0)>>4; }
00124 
00125 int RPCTBMuon::getContinSegmAddr() const { return getSectorAddr()*12 + getSegmentAddr();}
00126 
00127 void RPCTBMuon::setCodeAndPhiAddr(int code, int phiAddr) {
00128     setCode(code);
00129     m_PhiAddress = phiAddr;
00130 }
00131 
00132 void RPCTBMuon::setCodeAndEtaAddr(int code, int etaAddr) {
00133     setCode(code);
00134     m_EtaAddress = etaAddr;
00135 }
00136   
00137 int RPCTBMuon::getGBData() const { return m_GBData;}
00138 
00139 std::string RPCTBMuon::getGBDataBitStr() const {
00140     std::string str = "00";
00141     if (m_GBData == 1)
00142       str = "01";
00143     else if (m_GBData == 2)
00144       str = "10";
00145     else if (m_GBData == 3)
00146       str = "11";
00147     return str;  
00148 }
00149 
00150 void RPCTBMuon::setGBDataKilledFirst() { m_GBData = m_GBData | 1;}
00151 
00152 void RPCTBMuon::setGBDataKilledLast() { m_GBData = m_GBData | 2; }
00153 
00154 bool RPCTBMuon::gBDataKilledFirst() const { return (m_GBData & 1);}
00155 
00156 bool RPCTBMuon::gBDataKilledLast() const { return (m_GBData & 2);}
00157 
00158 
00159 //---------------------------------------------------------------------------
00160 void RPCTBMuon::kill() { m_Killed = true; }
00161 
00164 bool RPCTBMuon::wasKilled() const {
00165     if(m_PtCode > 0 && m_Killed)
00166       return true;
00167     else return false;
00168 }
00169 
00172 bool RPCTBMuon::isLive() const {
00173     if(m_PtCode > 0 && !m_Killed)
00174       return true;
00175     else return false;
00176 }
00177 
00178 //---------------------------------------------------------------------------
00179 #ifndef _STAND_ALONE
00180 RPCTBMuon::RPCTBMuon(const RPCPacMuon& pacMuon):
00181     RPCMuon(pacMuon) 
00182 {
00183     m_Killed = false;
00184 
00185     m_GBData = 0;
00186 
00187     m_EtaAddress = 0;
00188     m_PhiAddress = 0;
00189 }
00190 #endif //_STAND_ALONE
00191 //---------------------------------------------------------------------------
00192 
00193 unsigned int RPCTBMuon::toBits(RPCTBMuon::MuonBitsType muonBitsType) const {
00194   if (muonBitsType == mbtPACOut) {
00195     return PACOut::toBits(*this);
00196   }
00197   else if (muonBitsType == mbtTBSortOut) {
00198     return TBOut::toBits(*this);
00199   }
00200   else if (muonBitsType == mbtTCSortOut) {
00201     return TCOut::toBits(*this);
00202   }
00203   else if (muonBitsType == mbtHSBOut) {
00204     return HSBOut::toBits(*this);
00205   }
00206   else if (muonBitsType == mbtFSBOut) {
00207     return FSBOut::toBits(*this);
00208   }
00209   else {
00210     throw RPCException("unknown value of muonBitsType");
00211     //edm::LogError("RPCTrigger")<<"unknown value of where: " + where;
00212   } 
00213   return 0;
00214 }
00215 
00216 void RPCTBMuon::fromBits(RPCTBMuon::MuonBitsType muonBitsType, unsigned int value) {
00217   if (muonBitsType == mbtPACOut) {
00218     PACOut::fromBits(*this, value);
00219   } 
00220   else if (muonBitsType == mbtTBSortOut) {
00221     TBOut::fromBits(*this, value);
00222   } 
00223   else if (muonBitsType == mbtTCSortOut) {
00224     TCOut::fromBits(*this, value);
00225   } 
00226   else if (muonBitsType == mbtHSBOut) {
00227     HSBOut::fromBits(*this, value);
00228   } 
00229   else if (muonBitsType == mbtFSBOut) {
00230     FSBOut::fromBits(*this, value);
00231   }
00232   else {
00233     RPCException("unknown value of muonBitsType");
00234     //edm::LogError("RPCTrigger")<< "unknown value of where: " + where;
00235   }
00236 }
00237 
00238 void RPCTBMuon::PACOut::fromBits(RPCTBMuon& muon, unsigned int value) {
00239   unsigned int shift = 0;
00240   muon.m_Sign       = (value & (m_signBitsMask<<shift))  >> shift;  shift += m_signBitsCnt;  
00241   muon.m_PtCode     = (value & (m_ptBitsMask<<shift))    >> shift;  shift += m_ptBitsCnt;
00242   muon.m_Quality    = (value & (m_qualBitsMask<<shift))  >> shift;  shift += m_qualBitsCnt;
00243 }
00244 
00245 unsigned int RPCTBMuon::PACOut::toBits(const RPCTBMuon& muon) {
00246   unsigned int value = 0;
00247   unsigned int shift = 0;
00248   value =         (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00249   value = value | (muon.m_PtCode<<shift);     shift += m_ptBitsCnt;
00250   value = value | (muon.m_Quality<<shift);    shift += m_qualBitsCnt;
00251    
00252   return value;
00253 }
00254 
00255 //-----------------------
00256 void RPCTBMuon::TBOut::fromBits(RPCTBMuon& muon, unsigned int value) {
00257   unsigned int shift = 0;
00258   muon.m_Sign       = (value & (m_signBitsMask<<shift))  >> shift;  shift += m_signBitsCnt;  
00259   muon.m_PtCode     = (value & (m_ptBitsMask<<shift))    >> shift;  shift += m_ptBitsCnt;
00260   muon.m_Quality    = (value & (m_qualBitsMask<<shift))  >> shift;  shift += m_qualBitsCnt;
00261   muon.m_PhiAddress = (value & (m_phiBitsMask<<shift))   >> shift;  shift += m_phiBitsCnt;
00262   muon.m_EtaAddress = (value & (m_etaBitsMask<<shift))   >> shift;  shift += m_etaBitsCnt;
00263   muon.m_GBData     = (value & (m_gbDataBitsMask<<shift))>> shift;  shift += m_gbDataBitsCnt;       
00264 }
00265 
00266 unsigned int RPCTBMuon::TBOut::toBits(const RPCTBMuon& muon) {
00267   unsigned int value = 0;
00268   unsigned int shift = 0;
00269   value =         (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00270   value = value | (muon.m_PtCode<<shift);     shift += m_ptBitsCnt;
00271   value = value | (muon.m_Quality<<shift);    shift += m_qualBitsCnt;
00272   value = value | (muon.m_PhiAddress<<shift); shift += m_phiBitsCnt;
00273   value = value | (muon.m_EtaAddress<<shift); shift += m_etaBitsCnt; 
00274   value = value | (muon.m_GBData<<shift);     shift += m_gbDataBitsCnt;
00275   return value;
00276 }
00277 
00278 //-----------------------
00279 void RPCTBMuon::TCOut::fromBits(RPCTBMuon& muon, unsigned int value) {
00280   unsigned int shift = 0;
00281   muon.m_Sign       = (value & (m_signBitsMask<<shift))  >> shift;  shift += m_signBitsCnt; 
00282   muon.m_PtCode     = (value & (m_ptBitsMask<<shift))    >> shift;  shift += m_ptBitsCnt;
00283   muon.m_Quality    = (value & (m_qualBitsMask<<shift))  >> shift;  shift += m_qualBitsCnt;
00284   muon.m_PhiAddress = (value & (m_phiBitsMask<<shift))   >> shift;  shift += m_phiBitsCnt;
00285   muon.m_EtaAddress = (value & (m_etaBitsMask<<shift))   >> shift;  shift += m_etaBitsCnt;
00286   muon.m_GBData     = (value & (m_gbDataBitsMask<<shift))>> shift;  shift += m_gbDataBitsCnt;     
00287 }
00288 
00289 unsigned int RPCTBMuon::TCOut::toBits(const RPCTBMuon& muon) {
00290   unsigned int value = 0;
00291   unsigned int shift = 0;
00292   value =         (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00293   value = value | (muon.m_PtCode<<shift);     shift += m_ptBitsCnt;
00294   value = value | (muon.m_Quality<<shift);    shift += m_qualBitsCnt;
00295   value = value | (muon.m_PhiAddress<<shift); shift += m_phiBitsCnt;  
00296   value = value | (muon.m_EtaAddress<<shift); shift += m_etaBitsCnt; 
00297   value = value | (muon.m_GBData<<shift);     shift += m_gbDataBitsCnt;
00298   return value;
00299 }
00300 //-------------------------------
00301 
00302 unsigned int RPCTBMuon::HSBOut::toBits(const RPCTBMuon& muon) {
00303   unsigned int value = 0;
00304 
00305   unsigned int shift = 0;
00306   value = value | (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00307  // value = (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00308   value = value | (muon.m_PtCode<<shift);     shift += m_ptBitsCnt;
00309   value = value | (muon.m_Quality<<shift);    shift += m_qualBitsCnt;
00310   value = value | (muon.m_PhiAddress<<shift); shift += m_phiBitsCnt;
00311   value = value | (muon.m_EtaAddress<<shift); shift += m_etaBitsCnt; 
00312    
00313   return value;
00314 }
00315 
00316 void RPCTBMuon::HSBOut::fromBits(RPCTBMuon& muon, unsigned int value) {
00317   unsigned int shift = 0;
00318   muon.m_Sign       = (value & (m_signBitsMask<<shift)) >> shift;  shift += m_signBitsCnt;
00319   muon.m_PtCode     = (value & (m_ptBitsMask<<shift))   >> shift;  shift += m_ptBitsCnt;
00320   muon.m_Quality    = (value & (m_qualBitsMask<<shift)) >> shift;  shift += m_qualBitsCnt;
00321   muon.m_PhiAddress = (value & (m_phiBitsMask<<shift))  >> shift;  shift += m_phiBitsCnt;
00322   muon.m_EtaAddress = (value & (m_etaBitsMask<<shift))  >> shift;  shift += m_etaBitsCnt;
00323 }
00324 
00325 unsigned int RPCTBMuon::FSBOut::toBits(const RPCTBMuon& muon) {
00326   unsigned int value = 0;
00327         
00328   unsigned int shift = 0;
00329   //bita are reversed, to be zero when cable not connected
00330   unsigned int ptCode =  (~(muon.m_PtCode)) & m_ptBitsMask; 
00331   unsigned int quality = (~(muon.m_Quality)) & m_qualBitsMask;
00332 
00333   value = value |  muon.m_PhiAddress;         shift += m_phiBitsCnt;    
00334   value = value | (ptCode<<shift);            shift += m_ptBitsCnt;
00335   value = value | (quality<<shift);           shift += m_qualBitsCnt;
00336   
00337   //+1 beacouse H/F bits, unused in RPC:
00338   value = value | (muon.m_EtaAddress<<shift); shift += m_etaBitsCnt + 1; 
00339   value = value | (muon.m_Sign<<shift);       shift += m_signBitsCnt;
00340   
00341   return value;
00342 }
00343 
00344 void RPCTBMuon::FSBOut::fromBits(RPCTBMuon& muon, unsigned int value) {
00345   unsigned int shift = 0;
00346   muon.m_PhiAddress =  value &  m_phiBitsMask;                     shift += m_phiBitsCnt;
00347   muon.m_PtCode     = (value & (m_ptBitsMask<<shift))   >> shift;  shift += m_ptBitsCnt;
00348   muon.m_Quality    = (value & (m_qualBitsMask<<shift)) >> shift;  shift += m_qualBitsCnt;
00349   
00350   //+1 beacouse H/F bits, unused in RPC:
00351   muon.m_EtaAddress = (value & (m_etaBitsMask<<shift))  >> shift;  shift += m_etaBitsCnt + 1; 
00352   muon.m_Sign       = (value & (m_signBitsMask<<shift)) >> shift;  shift += m_signBitsCnt; 
00353   
00354   muon.m_PtCode = (~(muon.m_PtCode)) & m_ptBitsMask;
00355   muon.m_Quality = (~(muon.m_Quality)) & m_qualBitsMask;
00356 }
00357 
00358 
00359 std::string RPCTBMuon::toString(int format) const {
00360   ostringstream ostr;
00361   if(format == 0) {
00362          ostr<<"qu "<<m_Quality<<", pt "<<setw(2)<<m_PtCode<<", sig "<<m_Sign
00363          <<", phi "<<setw(3)<<m_PhiAddress<<", eta "<<setw(2)<<m_EtaAddress;
00364   }
00365   else if( format == 1) {
00366         ostr<<" "<<m_Quality<<" "<<setw(2)<<m_PtCode<<" "<<m_Sign
00367         <<" "<<setw(3)<<m_PhiAddress<<" "<<setw(2)<<m_EtaAddress;
00368   }    
00369   else if( format == 2) {
00370         ostr<<" "<<m_Quality<<" "<<setw(2)<<m_PtCode<<" "<<m_Sign;
00371   }    
00372   
00373   return ostr.str();
00374 }

Generated on Tue Jun 9 17:40:25 2009 for CMSSW by  doxygen 1.5.4