00001 #ifndef GEOMETRY_CALOTOPOLOGY_ECALPRESHOWERTOPOLOGY_H 00002 #define GEOMETRY_CALOTOPOLOGY_ECALPRESHOWERTOPOLOGY_H 1 00003 00004 #include "DataFormats/EcalDetId/interface/ESDetId.h" 00005 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" 00006 #include "Geometry/CaloGeometry/interface/CaloGeometry.h" 00007 #include "FWCore/Framework/interface/ESHandle.h" 00008 #include <vector> 00009 #include <iostream> 00010 00011 class EcalPreshowerTopology : public CaloSubdetectorTopology { 00012 00013 public: 00015 EcalPreshowerTopology() : theGeom_(0) {}; 00016 00018 virtual ~EcalPreshowerTopology() { } 00019 00021 EcalPreshowerTopology(edm::ESHandle<CaloGeometry> theGeom) : theGeom_(theGeom) 00022 { 00023 } 00024 00026 virtual std::vector<DetId> north(const DetId& id) const 00027 { 00028 ESDetId nextId=incrementIy(ESDetId(id)); 00029 std::vector<DetId> vNeighborsDetId; 00030 if (! (nextId==ESDetId(0))) 00031 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00032 return vNeighborsDetId; 00033 } 00034 00036 virtual std::vector<DetId> south(const DetId& id) const 00037 { 00038 ESDetId nextId=decrementIy(ESDetId(id)); 00039 std::vector<DetId> vNeighborsDetId; 00040 if (! (nextId==ESDetId(0))) 00041 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00042 return vNeighborsDetId; 00043 } 00044 00046 virtual std::vector<DetId> east(const DetId& id) const 00047 { 00048 ESDetId nextId=incrementIx(ESDetId(id)); 00049 std::vector<DetId> vNeighborsDetId; 00050 if (! (nextId==ESDetId(0))) 00051 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00052 return vNeighborsDetId; 00053 } 00054 00056 virtual std::vector<DetId> west(const DetId& id) const 00057 { 00058 ESDetId nextId=decrementIx(ESDetId(id)); 00059 std::vector<DetId> vNeighborsDetId; 00060 if (! (nextId==ESDetId(0))) 00061 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00062 return vNeighborsDetId; 00063 } 00064 00065 virtual std::vector<DetId> up(const DetId& id) const 00066 { 00067 ESDetId nextId=incrementIz(ESDetId(id)); 00068 std::vector<DetId> vNeighborsDetId; 00069 if (! (nextId==ESDetId(0))) 00070 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00071 return vNeighborsDetId; 00072 } 00073 00074 virtual std::vector<DetId> down(const DetId& id) const 00075 { 00076 ESDetId nextId=decrementIz(ESDetId(id)); 00077 std::vector<DetId> vNeighborsDetId; 00078 if (! (nextId==ESDetId(0))) 00079 vNeighborsDetId.push_back(DetId(nextId.rawId())); 00080 return vNeighborsDetId; 00081 } 00082 00083 private: 00084 00086 ESDetId incrementIx(const ESDetId& id) const ; 00087 00089 ESDetId decrementIx(const ESDetId& id) const ; 00090 00092 ESDetId incrementIy(const ESDetId& id) const ; 00093 00095 ESDetId decrementIy(const ESDetId& id) const; 00096 00098 ESDetId incrementIz(const ESDetId& id) const; 00099 00101 ESDetId decrementIz(const ESDetId& id) const; 00102 00103 edm::ESHandle<CaloGeometry> theGeom_; 00104 }; 00105 00106 #endif 00107 00108 00109 00110 00111 00112