#ifndef DataFormats_SiStripDetId_PXFDetId_H #define DataFormats_SiStripDetId_PXFDetId_H #include #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" /** * Det identifier class for the PixelEndcap */ class PXFDetId; std::ostream& operator<<(std::ostream& os,const PXFDetId& id); class PXFDetId : public DetId { public: /** Constructor of a null id */ PXFDetId(); /** Constructor from a raw value */ PXFDetId(uint32_t rawid); /**Construct from generic DetId */ PXFDetId(const DetId& id); PXFDetId(uint32_t side, uint32_t disk, uint32_t blade, uint32_t panel, uint32_t module) : DetId(DetId::Tracker,PixelSubdetector::PixelEndcap){ id_ |= (side& sideMask_) << sideStartBit_ | (disk& diskMask_) << diskStartBit_ | (blade& bladeMask_) << bladeStartBit_ | (panel& panelMask_) << panelStartBit_ | (module& moduleMask_) << moduleStartBit_ ; } /// positive or negative id unsigned int side() const{ return int((id_>>sideStartBit_) & sideMask_); } /// disk id unsigned int disk() const{ return int((id_>>diskStartBit_) & diskMask_); } /// blade id unsigned int blade() const { return ((id_>>bladeStartBit_) & bladeMask_) ;} /// panel id unsigned int panel() const { return ((id_>>panelStartBit_) & panelMask_) ;} /// det id unsigned int module() const { return ((id_>>moduleStartBit_) & moduleMask_) ;} private: /// two bits would be enough, but we could use the number "0" as a wildcard static const unsigned int sideStartBit_= 23; static const unsigned int diskStartBit_= 16; static const unsigned int bladeStartBit_= 10; static const unsigned int panelStartBit_= 8; static const unsigned int moduleStartBit_= 2; /// two bits would be enough, but we could use the number "0" as a wildcard static const unsigned int sideMask_= 0x3; static const unsigned int diskMask_= 0xF; static const unsigned int bladeMask_= 0x3F; static const unsigned int panelMask_= 0x3; static const unsigned int moduleMask_= 0x3F; }; #endif