Go to the documentation of this file.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