CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CaloSubdetectorTopology.h
Go to the documentation of this file.
1 #ifndef TOPOLOGY_CALOTOPOLOGY_CALOSUBDETECTORTOPOLOGY_H
2 #define TOPOLOGY_CALOTOPOLOGY_CALOSUBDETECTORTOPOLOGY_H 1
3 
4 
8 
9 #include <vector>
10 
12 
22 public:
28  virtual bool valid(const DetId& /*id*/) const { return false; };
30  virtual unsigned int detId2denseId(const DetId& /*id*/) const { return 0; }
32  virtual DetId denseId2detId(unsigned int /*denseid*/) const { return DetId(0); }
34  virtual unsigned int ncells() const { return 1; }
36  virtual int topoVersion() const { return 0; }
38  virtual bool denseIdConsistent(int topoVer) const { return topoVer==topoVersion(); }
39 
41  virtual std::vector<DetId> east(const DetId& id) const = 0;
43  virtual std::vector<DetId> west(const DetId& id) const = 0;
45  virtual std::vector<DetId> north(const DetId& id) const = 0;
47  virtual std::vector<DetId> south(const DetId& id) const = 0;
49  virtual std::vector<DetId> up(const DetId& id) const = 0;
51  virtual std::vector<DetId> down(const DetId& id) const = 0;
52 
53  // interface valid for most subdetectors
54  // see for instance RecoCaloTools/Navigation/interface/CaloNavigator.h
55  virtual DetId goEast(const DetId& id) const {
56  std::vector<DetId> ids = east(id);
57  return ids.empty() ? DetId() : ids[0];
58  }
59  virtual DetId goWest(const DetId& id) const {
60  std::vector<DetId> ids = west(id);
61  return ids.empty() ? DetId() : ids[0];
62  }
63  virtual DetId goNorth(const DetId& id) const {
64  std::vector<DetId> ids = north(id);
65  return ids.empty() ? DetId() : ids[0];
66  }
67  virtual DetId goSouth(const DetId& id) const {
68  std::vector<DetId> ids = south(id);
69  return ids.empty() ? DetId() : ids[0];
70  }
71  virtual DetId goUp(const DetId& id) const {
72  std::vector<DetId> ids = up(id);
73  return ids.empty() ? DetId() : ids[0];
74  }
75  virtual DetId goDown(const DetId& id) const {
76  std::vector<DetId> ids = down(id);
77  return ids.empty() ? DetId() : ids[0];
78  }
79 
80 
82  virtual std::vector<DetId> getNeighbours(const DetId& id, const CaloDirection& dir) const
83  {
84  std::vector<DetId> aNullVector;
85  switch(dir)
86  {
87  case NONE:
88  return aNullVector;
89  break;
90  case SOUTH:
91  return south(id);
92  break;
93  case NORTH:
94  return north(id);
95  break;
96  case EAST:
97  return east(id);
98  break;
99  case WEST:
100  return west(id);
101  break;
102  default:
103  throw cms::Exception("getNeighboursError") << "Unsopported direction";
104  }
105  return aNullVector;
106  }
107 
109  virtual std::vector<DetId> getWindow(const DetId& id, const int& northSouthSize, const int& eastWestSize) const;
110 
112  virtual std::vector<DetId> getAllNeighbours(const DetId& id) const
113  {
114  return getWindow(id,3,3);
115  }
116 
117  protected:
118  typedef std::pair<int,int> Coordinate;
119 
120  struct CellInfo
121  {
122  bool visited;
123 
125 
126  CellInfo() :
127  visited(false)
128  {
129  }
130 
131  CellInfo(bool a_visited, const DetId &a_cell) :
132  visited(a_visited),
133  cell(a_cell)
134  {
135  }
136  };
137 
138  inline Coordinate getNeighbourIndex(const Coordinate &coord, const CaloDirection& dir) const
139  {
140  switch (dir)
141  {
142  case NORTH: return Coordinate(coord.first,coord.second + 1);
143  case SOUTH: return Coordinate(coord.first,coord.second - 1);
144 
145  case EAST: return Coordinate(coord.first + 1,coord.second);
146  case WEST: return Coordinate(coord.first - 1,coord.second);
147 
148  default:
149  throw cms::Exception("getWindowError") << "Unsopported direction";
150  }
151  }
152 
153 };
154 
155 
156 #endif
virtual DetId goSouth(const DetId &id) const
virtual DetId goWest(const DetId &id) const
virtual DetId denseId2detId(unsigned int) const
return a linear packed id
virtual std::vector< DetId > getNeighbours(const DetId &id, const CaloDirection &dir) const
virtual std::vector< DetId > getAllNeighbours(const DetId &id) const
std::pair< int, int > Coordinate
virtual int topoVersion() const
return a version which identifies the given topology
virtual std::vector< DetId > west(const DetId &id) const =0
virtual ~CaloSubdetectorTopology()
virtual destructor
virtual DetId goEast(const DetId &id) const
virtual unsigned int detId2denseId(const DetId &) const
return a linear packed id
virtual DetId goUp(const DetId &id) const
virtual unsigned int ncells() const
return a count of valid cells (for dense indexing use)
CellInfo(bool a_visited, const DetId &a_cell)
virtual DetId goNorth(const DetId &id) const
Coordinate getNeighbourIndex(const Coordinate &coord, const CaloDirection &dir) const
virtual std::vector< DetId > north(const DetId &id) const =0
virtual DetId goDown(const DetId &id) const
Definition: DetId.h:20
virtual std::vector< DetId > up(const DetId &id) const =0
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
virtual bool valid(const DetId &) const
is this detid present in the Topology?
virtual bool denseIdConsistent(int topoVer) const
return whether this topology is consistent with the numbering in the given topology ...
virtual std::vector< DetId > south(const DetId &id) const =0
dbl *** dir
Definition: mlp_gen.cc:35
CaloDirection
Codes the local directions in the cell lattice.
Definition: CaloDirection.h:9
CaloSubdetectorTopology()
standard constructor
virtual std::vector< DetId > east(const DetId &id) const =0
virtual std::vector< DetId > down(const DetId &id) const =0