00001 #ifndef GEOMETRY_CALOTOPOLOGY_HCALTOPOLOGY_H 00002 #define GEOMETRY_CALOTOPOLOGY_HCALTOPOLOGY_H 1 00003 00004 #include <vector> 00005 #include "DataFormats/HcalDetId/interface/HcalDetId.h" 00006 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" 00007 00024 class HcalTopology : public CaloSubdetectorTopology { 00025 public: 00026 HcalTopology(bool h2_mode=false); 00027 00029 void exclude(const HcalDetId& id); 00031 void excludeSubdetector(HcalSubdetector subdet); 00033 int exclude(HcalSubdetector subdet, int ieta1, int ieta2, int iphi1, int iphi2, int depth1=1, int depth2=4); 00034 00036 virtual bool valid(const HcalDetId& id) const; 00038 virtual std::vector<DetId> east(const DetId& id) const; 00040 virtual std::vector<DetId> west(const DetId& id) const; 00042 virtual std::vector<DetId> north(const DetId& id) const; 00044 virtual std::vector<DetId> south(const DetId& id) const; 00046 virtual std::vector<DetId> up(const DetId& id) const; 00048 virtual std::vector<DetId> down(const DetId& id) const; 00049 00051 int incIEta(const HcalDetId& id, HcalDetId neighbors[2]) const; 00053 int decIEta(const HcalDetId& id, HcalDetId neighbors[2]) const; 00055 bool incIPhi(const HcalDetId& id, HcalDetId &neighbor) const; 00057 bool decIPhi(const HcalDetId& id, HcalDetId &neighbor) const; 00059 bool incrementDepth(HcalDetId& id) const; 00060 00061 int firstHBRing() const {return firstHBRing_;} 00062 int lastHBRing() const {return lastHBRing_;} 00063 int firstHERing() const {return firstHERing_;} 00064 int lastHERing() const {return lastHERing_;} 00065 int firstHFRing() const {return firstHFRing_;} 00066 int lastHFRing() const {return lastHFRing_;} 00067 int firstHORing() const {return firstHORing_;} 00068 int lastHORing() const {return lastHORing_;} 00069 00070 int firstHEDoublePhiRing() const {return firstHEDoublePhiRing_;} 00071 int firstHFQuadPhiRing() const { return firstHFQuadPhiRing_; } 00072 int firstHETripleDepthRing() const {return firstHETripleDepthRing_;} 00073 int singlePhiBins() const {return singlePhiBins_;} 00074 int doublePhiBins() const {return doublePhiBins_;} 00075 00077 void depthBinInformation(HcalSubdetector subdet, int etaRing, 00078 int & nDepthBins, int & startingBin) const; 00079 00081 int nPhiBins(int etaRing) const; 00082 00083 private: 00085 int incAIEta(const HcalDetId& id, HcalDetId neighbors[2]) const; 00087 int decAIEta(const HcalDetId& id, HcalDetId neighbors[2]) const; 00088 00090 bool validRaw(const HcalDetId& id) const; 00091 00092 std::vector<HcalDetId> exclusionList_; 00093 bool excludeHB_, excludeHE_, excludeHO_, excludeHF_; 00094 00095 bool h2mode_; 00096 bool isExcluded(const HcalDetId& id) const; 00097 00098 const int firstHBRing_; 00099 const int lastHBRing_; 00100 const int firstHERing_; 00101 const int lastHERing_; 00102 const int firstHFRing_; 00103 const int lastHFRing_; 00104 const int firstHORing_; 00105 const int lastHORing_; 00106 00107 const int firstHEDoublePhiRing_; 00108 const int firstHFQuadPhiRing_; 00109 const int firstHETripleDepthRing_; 00110 const int singlePhiBins_; 00111 const int doublePhiBins_; 00112 }; 00113 00114 00115 #endif