PandaRoot
PndDiscSensorGrid.h
Go to the documentation of this file.
1 //-------------------------------------------------------------------------
2 // Author: Oliver Merle (Oliver.Merle@exp2.physik.uni-giessen.de)
3 // Changes: Mustafa Schmidt (Mustafa.A.Schmidt@physik.uni-giessen.de)
4 // Date: 30.11.2015
5 // Description: Definition of sensor grid
6 //-------------------------------------------------------------------------
7 
8 #ifndef SENSOR_GRID_HH_
9 #define SENSOR_GRID_HH_
10 
11 #include <vector>
12 //#include <tr1/memory>
13 
14 namespace SensorGrid {
15 
16 // ======================
17 // = Next steps: =
18 // ======================
19 //
20 // - add similar counting like pixel number, but for dead time entity ... 0%
21 // - add pixel iteration (return number and position) ... to test
22 //
23 
24 // Compute number of pixels in
25 // a Grid and number them as:
26 // pixel_number_offset + ix + iy*cells_per_row
27 
28 struct PixelInfo {
30  int grid_id;
33 };
34 
36 
42  public:
43  SensorGridBase() : pixel_number_offset(0), user_row_offset(0), user_col_offset(0), number_of_pixels(0), locked(false) {}
44  virtual ~SensorGridBase() {}
45  void SetUserColumnOffset(int ofs) { user_col_offset = ofs; }
46  void SetUserRowOffset(int ofs) { user_row_offset = ofs; }
47  void LockGrid(bool lock); // Function for the user to lock the root grid - will trigger enumeration.
48  bool IsLocked() { return locked; }
49 
50  int GetNumberOfPixels() { return number_of_pixels; }
51  virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const = 0;
52  virtual bool PixelToPosition(PixelInfo &pixel_info, double &x, double &y) const = 0;
53 
54  virtual bool NextPixel(double &x, double &y, PixelInfo &pixel_number) const; // Pixel enumeration
55 
56  protected:
57  virtual void EnumerateGrids(int &id, int &pixel_offset) = 0; // used to enumerate grids and pixel offsets.
58  virtual void LockChilds(bool) {} // used to forward lock to children // lock//[R.K.03/2017] unused variable(s)
59  void SetPixelNumberOffset(int offset) { pixel_number_offset = offset; }
60 
61  // Proxys to method in siblings through base class:
62  void EnumerateGridsProxy(SensorGridBase *b, int &grid_id, int &pixel_number) { b->EnumerateGrids(grid_id, pixel_number); }
63  void LockChildsProxy(SensorGridBase *b, bool lock) { b->LockChilds(lock); }
64 
65  protected:
71  bool locked;
72 };
73 
75 class BasicGrid : public SensorGridBase {
76  public:
77  BasicGrid();
78  BasicGrid(const double &x_min, const double &x_width, const double &x_pitch, int n_x, const double &y_min, const double &y_width, const double &y_pitch, int n_y);
79  virtual ~BasicGrid();
80 
81  void SetXDivision(const double &x_min, const double &x_width, const double &x_pitch, int n_x);
82  void SetYDivision(const double &y_min, const double &y_width, const double &y_pitch, int n_y);
83 
84  virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const;
85  virtual bool PixelToPosition(PixelInfo &pixel_info, double &x, double &y) const;
86 
87  virtual void EnumerateGrids(int &id, int &pixel_offset);
88 
89  protected:
90  double x_min, x_width, x_pitch, x_width_over_two_pitch;
91  double y_min, y_width, y_pitch, y_width_over_two_pitch;
92  int n_x, n_y;
93  double x_max, y_max;
94 };
95 
97 class MultipleGrids : public SensorGridBase {
98  public:
99  MultipleGrids();
100  virtual ~MultipleGrids();
101 
102  void AddGrid(SensorGridBase *grid); // Policy: this instance will take over the ownership of grid. Do not use the grid in userspace.
103 
104  virtual void EnumerateGrids(int &id, int &pixel_offset);
105 
106  virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const;
107  virtual bool PixelToPosition(PixelInfo &pixel_number, double &x, double &y) const;
108 
109  protected:
110  virtual void LockChilds(bool lock);
111 
112  std::vector<SensorGridBase *> grids;
113 };
114 
115 } // namespace SensorGrid
116 #endif
bool locked
The total number of pixels in this grid (or its childs)
int user_row_offset
The pixel number of the first pixel in this grid (or its childs)
Common base class for sensor grids.
std::vector< SensorGridBase * > grids
int number_of_pixels
user prowided offset to add to column on grid value in PixelInfo
A generic regular pixel grid with dead space between cells.
void EnumerateGridsProxy(SensorGridBase *b, int &grid_id, int &pixel_number)
A grid to group other grids or to create nested grids.
virtual void LockChilds(bool)
void SetPixelNumberOffset(int offset)
int user_col_offset
user prowided offset to add to row on grid value in PixelInfo
virtual void EnumerateGrids(int &id, int &pixel_offset)=0
void LockChildsProxy(SensorGridBase *b, bool lock)