CMS 3D CMS Logo

TOBDetId.h

Go to the documentation of this file.
00001 #ifndef DataFormats_SiStripDetId_TOBDetId_H
00002 #define DataFormats_SiStripDetId_TOBDetId_H
00003 
00004 #include <ostream>
00005 #include <vector>
00006 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h"
00007 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00008 
00012 class TOBDetId;
00013 
00014 std::ostream& operator<<(std::ostream& os,const TOBDetId& id);
00015 
00016 class TOBDetId : public SiStripDetId {
00017  public:
00019   TOBDetId();
00021   TOBDetId(uint32_t rawid);
00023   TOBDetId(const DetId& id); 
00024   
00025   TOBDetId(uint32_t layer,
00026            uint32_t rod_fw_bw,
00027            uint32_t rod,
00028            uint32_t module,
00029            uint32_t ster) : SiStripDetId(DetId::Tracker,StripSubdetector::TOB){
00030     id_ |= (layer& layerMask_) << layerStartBit_ |
00031       (rod_fw_bw& rod_fw_bwMask_) << rod_fw_bwStartBit_ |
00032       (rod& rodMask_) << rodStartBit_ |
00033       (module& moduleMask_) << moduleStartBit_ |
00034       (ster& sterMask_) << sterStartBit_ ;
00035   }
00036   
00037   
00039   unsigned int layer() const{
00040     return int((id_>>layerStartBit_) & layerMask_);
00041   }
00042   
00044 
00049   std::vector<unsigned int> rod() const
00050     { std::vector<unsigned int> num;
00051     num.push_back(((id_>>rod_fw_bwStartBit_) & rod_fw_bwMask_));
00052     num.push_back(((id_>>rodStartBit_) & rodMask_));
00053     return num ;}
00054   
00056   unsigned int module() const 
00057     { return ((id_>>moduleStartBit_)& moduleMask_) ;}
00058   
00060   bool isDoubleSide() const;
00061   
00063   bool isZPlusSide() const
00064   { return (!isZMinusSide());}
00065   
00067   bool isZMinusSide() const
00068   { return (rod()[0] == 1);}
00069   
00071   unsigned int layerNumber() const
00072   { return layer();}
00073   
00075   unsigned int rodNumber() const
00076   { return rod()[1];}
00077   
00079   unsigned int moduleNumber() const
00080   { return module();}
00081   
00083   bool isRPhi()
00084   { return (stereo() == 0 && !isDoubleSide());}
00085   
00087   bool isStereo()
00088   { return (stereo() != 0 && !isDoubleSide());}
00089   
00090 private:
00092   static const unsigned int layerStartBit_=     14;
00093   static const unsigned int rod_fw_bwStartBit_= 12;
00094   static const unsigned int rodStartBit_=       5;
00095   static const unsigned int moduleStartBit_=    2;
00096   static const unsigned int sterStartBit_=      0;
00098   
00099   static const unsigned int layerMask_=       0x7;
00100   static const unsigned int rod_fw_bwMask_=   0x3;
00101   static const unsigned int rodMask_=         0x7F;
00102   static const unsigned int moduleMask_=      0x7;
00103   static const unsigned int sterMask_=        0x3;
00104 };
00105 
00106 
00107 #endif

Generated on Tue Jun 9 17:31:46 2009 for CMSSW by  doxygen 1.5.4