FairRoot/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 
15 
16 namespace SensorGrid {
17 
18 // ======================
19 // = Next steps: =
20 // ======================
21 //
22 // - add similar counting like pixel number, but for dead time entity ... 0%
23 // - add pixel iteration (return number and position) ... to test
24 //
25 
26 // Compute number of pixels in
27 // a Grid and number them as:
28 // pixel_number_offset + ix + iy*cells_per_row
29 
30 
31 struct PixelInfo {
33  int grid_id;
36 };
37 
38 
40 
46 public:
49  { }
50  virtual ~SensorGridBase() {}
51  void SetUserColumnOffset(int ofs) { user_col_offset = ofs; }
52  void SetUserRowOffset(int ofs) { user_row_offset = ofs; }
53  void LockGrid(bool lock); // Function for the user to lock the root grid - will trigger enumeration.
54  bool IsLocked() { return locked; }
55 
57  virtual bool PositionToPixel(const double & x, const double & y, PixelInfo & pixel_info) const = 0;
58  virtual bool PixelToPosition(PixelInfo & pixel_info, double & x, double & y) const = 0;
59 
60  virtual bool NextPixel(double & x, double & y, PixelInfo & pixel_number) const; // Pixel enumeration
61 
62 protected:
63  virtual void EnumerateGrids(int & id, int & pixel_offset) = 0; // used to enumerate grids and pixel offsets.
64  virtual void LockChilds(bool ) {} // used to forward lock to children // lock//[R.K.03/2017] unused variable(s)
66 
67  // Proxys to method in siblings through base class:
68  void EnumerateGridsProxy(SensorGridBase* b, int & grid_id, int & pixel_number) { b->EnumerateGrids(grid_id, pixel_number); }
69  void LockChildsProxy(SensorGridBase* b, bool lock) { b->LockChilds(lock); }
70 
71 
72 protected:
78  bool locked;
79 };
80 
81 
83 class BasicGrid : public SensorGridBase {
84 public:
85  BasicGrid();
86  BasicGrid(const double & x_min, const double & x_width, const double & x_pitch, int n_x,
87  const double & y_min, const double & y_width, const double & y_pitch, int n_y);
88  virtual ~BasicGrid();
89 
90  void SetXDivision(const double & x_min, const double & x_width, const double & x_pitch, int n_x );
91  void SetYDivision(const double & y_min, const double & y_width, const double & y_pitch, int n_y );
92 
93  virtual bool PositionToPixel(const double & x, const double & y, PixelInfo & pixel_info) const;
94  virtual bool PixelToPosition(PixelInfo & pixel_info, double & x, double & y) const ;
95 
96  virtual void EnumerateGrids(int & id, int & pixel_offset);
97 
98 protected:
101  int n_x, n_y;
102  double x_max, y_max;
103 };
104 
105 
108 public:
109  MultipleGrids();
110  virtual ~MultipleGrids();
111 
112  void AddGrid(SensorGridBase* grid ); // Policy: this instance will take over the ownership of grid. Do not use the grid in userspace.
113 
114  virtual void EnumerateGrids(int & id, int & pixel_offset);
115 
116  virtual bool PositionToPixel(const double & x, const double & y, PixelInfo & pixel_info) const;
117  virtual bool PixelToPosition(PixelInfo & pixel_number, double & x, double & y) const ;
118 
119 protected:
120  virtual void LockChilds(bool lock);
121 
122  std::vector<SensorGridBase*> grids;
123 };
124 
125 }
126 #endif
127 
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)
virtual void EnumerateGrids(int &id, int &pixel_offset)
TTree * b
Common base class for sensor grids.
virtual bool PixelToPosition(PixelInfo &pixel_number, double &x, double &y) const
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.
virtual void EnumerateGrids(int &id, int &pixel_offset)
void EnumerateGridsProxy(SensorGridBase *b, int &grid_id, int &pixel_number)
TVector3 offset(2, 0, 0)
A grid to group other grids or to create nested grids.
virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const =0
void LockGrid(bool lock)
Lock the grid:
virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const
virtual bool PositionToPixel(const double &x, const double &y, PixelInfo &pixel_info) const
Convert a hit position to a pixel number.
virtual bool PixelToPosition(PixelInfo &pixel_info, double &x, double &y) const
Compute the center-position of a pixel on this grid and update the pixel_info structure.
void SetXDivision(const double &x_min, const double &x_width, const double &x_pitch, int n_x)
virtual void LockChilds(bool)
virtual bool PixelToPosition(PixelInfo &pixel_info, double &x, double &y) const =0
void SetPixelNumberOffset(int offset)
Double_t x
virtual bool NextPixel(double &x, double &y, PixelInfo &pixel_number) const
Return information of the next pixel (pixel iteration)
virtual void LockChilds(bool lock)
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
Double_t y
void AddGrid(SensorGridBase *grid)
std::vector< SensorGridBase * > grids
void LockChildsProxy(SensorGridBase *b, bool lock)
void SetYDivision(const double &y_min, const double &y_width, const double &y_pitch, int n_y)