Go to the documentation of this file.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 GCC11_FINAL : 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
00025
00027 virtual DetId goNorth(const DetId& id) const {
00028 return incrementIy(ESDetId(id));
00029 }
00030 virtual std::vector<DetId> north(const DetId& id) const
00031 {
00032 ESDetId nextId= goNorth(id);
00033 std::vector<DetId> vNeighborsDetId;
00034 if (! (nextId==ESDetId(0)))
00035 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00036 return vNeighborsDetId;
00037 }
00038
00040 virtual DetId goSouth(const DetId& id) const {
00041 return decrementIy(ESDetId(id));
00042 }
00043 virtual std::vector<DetId> south(const DetId& id) const
00044 {
00045 ESDetId nextId= goSouth(id);
00046 std::vector<DetId> vNeighborsDetId;
00047 if (! (nextId==ESDetId(0)))
00048 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00049 return vNeighborsDetId;
00050 }
00051
00053 virtual DetId goEast(const DetId& id) const {
00054 return incrementIx(ESDetId(id));
00055 }
00056 virtual std::vector<DetId> east(const DetId& id) const
00057 {
00058 ESDetId nextId=goEast(id);
00059 std::vector<DetId> vNeighborsDetId;
00060 if (! (nextId==ESDetId(0)))
00061 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00062 return vNeighborsDetId;
00063 }
00064
00066 virtual DetId goWest(const DetId& id) const {
00067 return decrementIx(ESDetId(id));
00068 }
00069 virtual std::vector<DetId> west(const DetId& id) const
00070 {
00071 ESDetId nextId=goWest(id);
00072 std::vector<DetId> vNeighborsDetId;
00073 if (! (nextId==ESDetId(0)))
00074 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00075 return vNeighborsDetId;
00076 }
00077
00078 virtual DetId goUp(const DetId& id) const {
00079 return incrementIz(ESDetId(id));
00080 }
00081 virtual std::vector<DetId> up(const DetId& id) const
00082 {
00083 ESDetId nextId=goUp(id);
00084 std::vector<DetId> vNeighborsDetId;
00085 if (! (nextId==ESDetId(0)))
00086 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00087 return vNeighborsDetId;
00088 }
00089
00090 virtual DetId goDown(const DetId& id) const {
00091 return decrementIz(ESDetId(id));
00092 }
00093 virtual std::vector<DetId> down(const DetId& id) const
00094 {
00095 ESDetId nextId=goDown(id);
00096 std::vector<DetId> vNeighborsDetId;
00097 if (! (nextId==ESDetId(0)))
00098 vNeighborsDetId.push_back(DetId(nextId.rawId()));
00099 return vNeighborsDetId;
00100 }
00101
00102 private:
00103
00105 ESDetId incrementIx(const ESDetId& id) const ;
00106
00108 ESDetId decrementIx(const ESDetId& id) const ;
00109
00111 ESDetId incrementIy(const ESDetId& id) const ;
00112
00114 ESDetId decrementIy(const ESDetId& id) const;
00115
00117 ESDetId incrementIz(const ESDetId& id) const;
00118
00120 ESDetId decrementIz(const ESDetId& id) const;
00121
00122 edm::ESHandle<CaloGeometry> theGeom_;
00123 };
00124
00125 #endif
00126
00127
00128
00129
00130
00131