00001 #ifndef DATAFORMATS_CALOTOWERS_CALOTOWERDETID_H 00002 #define DATAFORMATS_CALOTOWERS_CALOTOWERDETID_H 1 00003 00004 #include "DataFormats/DetId/interface/DetId.h" 00005 00014 class CaloTowerDetId : public DetId { 00015 public: 00017 CaloTowerDetId(); 00019 explicit CaloTowerDetId(uint32_t rawid); 00021 CaloTowerDetId(int tower_ieta, int tower_iphi); 00023 CaloTowerDetId(const DetId& id); 00025 CaloTowerDetId& operator=(const DetId& id); 00026 00028 int zside() const { return (id_&0x2000)?(1):(-1); } 00030 int ietaAbs() const { return (id_>>7)&0x3f; } 00032 int ieta() const { return zside()*ietaAbs(); } 00034 int iphi() const; 00035 00036 static const int SubdetId = 1; 00037 00038 static bool validDetId( int ie , int ip ) ; 00039 00040 uint32_t denseIndex() const ; 00041 00042 static CaloTowerDetId detIdFromDenseIndex( uint32_t din ) ; 00043 00044 static bool validDenseIndex( uint32_t din ) { return ( din < kSizeForDenseIndexing ) ; } 00045 00046 enum { kMaxIEta = 41 , 00047 kMaxIPhi = 72 , 00048 kBarNPhi = kMaxIPhi , 00049 kEndNPhi = kMaxIPhi/2 , 00050 kForNPhi = kMaxIPhi/4 , 00051 kBarIEta = 20 , 00052 kEndIEta = 39 , 00053 kForIEta = kMaxIEta , 00054 kBarNEta = kBarIEta , 00055 kEndNEta = kEndIEta - kBarNEta , 00056 kForNEta = kForIEta - kEndIEta , 00057 kBarNTot = kBarNPhi*kBarNEta , 00058 kEndNTot = kEndNPhi*kEndNEta , 00059 kForNTot = kForNPhi*kForNEta , 00060 kAllNTot = kBarNTot + kEndNTot + kForNTot , 00061 kNIndex = 2*kAllNTot } ; 00062 00063 enum { kSizeForDenseIndexing = kNIndex } ; 00064 00065 }; 00066 00067 std::ostream& operator<<(std::ostream&, const CaloTowerDetId& id); 00068 00069 #endif