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