FEDRA emulsion software from the OPERA Collaboration
EdbCell2.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbCell2
2 #define ROOT_EdbCell2
3 
5 // //
6 // EdbCell2 //
7 // //
8 // class to group 2-dim objects for the fast access //
9 // //
11 
12 #include "TObject.h"
13 #include "TH1.h"
14 #include "TH2.h"
15 #include "TObjArray.h"
16 #include "EdbCell1.h"
17 
18 //__________________________________________________________________________
19 class EdbH2 : public TObject {
20 
21  protected:
22 
23  Int_t eN[2]; // divisions
24  Float_t eMin[2]; // min
25  Float_t eMax[2]; // max
26  Float_t eBin[2]; // bin size
27 
28  Int_t eNcell; // eNx*eNy
29  Int_t *eNC; //[eNcell] number of objects/cell
30 
31  public:
32  EdbH2();
33  EdbH2(int nx, float minx, float maxx, int ny, float miny, float maxy) { Set0(); InitH2(nx, minx, maxx, ny, miny, maxy); }
34  EdbH2( const EdbH2 &h );
35  ~EdbH2();
36 
37  void Set0();
38  void Copy( const EdbH2 &h );
39 
40  int InitH2( const EdbH2 &h );
41  int InitH2(int n[2], float min[2], float max[2]);
42  int InitH2(int nx, float minx, float maxx, int ny, float miny, float maxy);
43  void CleanCells();
44  void PrintStat();
45  void Delete();
46 
47  int DiscardHighCells(int nmax);
48 
49  int Ncell() const {return eN[0]*eN[1];}
50  int NX() const {return eN[0];}
51  int NY() const {return eN[1];}
52  int IX(float x) const {return (int)((x-eMin[0])/eBin[0]); }
53  int IY(float y) const {return (int)((y-eMin[1])/eBin[1]); }
54  int IX(int jcell) const {return jcell%eN[0]; }
55  int IY(int jcell) const {return jcell/eN[0]; }
56  //int Jcell(int ix, int iy) const {if(ix>0&&ix<eN[0]&&iy>0&&iy<eN[1]) return iy*eN[0]+ix; else return -1;}
57  int Jcell(int ix, int iy) const {if(ix>=0&&ix<eN[0]&&iy>=0&&iy<eN[1]) return iy*eN[0]+ix; else return -1;}
58  int Jcell(float x, float y) const {return Jcell( IX(x), IY(y)); }
59  int Jcell(float v[2]) const {return Jcell(IX(v[0]),IY(v[1])); }
60  float X(int ix) const {return eMin[0]+eBin[0]*(ix+0.5);}
61  float Y(int iy) const {return eMin[1]+eBin[1]*(iy+0.5);}
62  float Xj(int j) const {return X(IX(j));}
63  float Yj(int j) const {return Y(IY(j));}
64  float Xmin() const {return eMin[0];}
65  float Xmax() const {return eMax[0];}
66  float Ymin() const {return eMin[1];}
67  float Ymax() const {return eMax[1];}
68 
69  float XminA(float level=0);
70  float XmaxA(float level=0);
71  float YminA(float level=0);
72  float YmaxA(float level=0);
73 
74  EdbH1 *ProjectionX();
75  EdbH1 *ProjectionY();
76 
77  float Xbin() const {return eBin[0];}
78  float Ybin() const {return eBin[1];}
79 
80  int Bin(float x, float y) const {return (Jcell(x,y)>-1)? eNC[Jcell(x,y)] : 0; }
81  int Bin(int ix, int iy) const {return (Jcell(ix,iy)>-1)? eNC[Jcell(ix,iy)] : 0; }
82  int Bin(int iv[2]) const {return Bin(iv[0],iv[1]);}
83  int Bin(int j) const {if(j>-1||j<eNcell) return eNC[j]; else return 0; }
84 
85  int MaxBin();
86 
87  void AddBin(int jcell, int n) { if(jcell>=0&&jcell<eNcell) eNC[jcell]+=n; }
88  int Fill(float x, float y) { return Fill(x,y,1); }
89  int Fill(float x, float y, int n);
90  int Fill(int j, int n=1);
91  void SetBin(int ix, int iy, int n) { if(Jcell(ix,iy)>-1) eNC[Jcell(ix,iy)] = n; }
92  void SetBin(int j, int n) { if(j>-1||j<eNcell) eNC[j] = n; }
93 
94  Long_t Integral();
95  Long_t Integral(int iv[2], int ir[2]);
96  Float_t Mean() { return 1.*Integral()/eNcell; }
97  TH1I *DrawSpectrum( const char *name="plot1d", const char *title="EdbH2 DrawSpectrum");
98  TH2F *DrawH2( const char *name="plot2d", const char *title="EdbH2plot2D");
99 
100  ClassDef(EdbH2,2) // fast 2-dim histogram class (used as a basis for EdbCell2)
101 };
102 
103 //__________________________________________________________________________
104 class EdbPeak2 : public EdbH2 {
105 
106  public:
107  Int_t eNpeaks; // number of found peaks
108  TArrayF ePeak; //
109  TArrayF eMean3; //
110  TArrayF eMean; //
111  Float_t eNorm; // the norm-factor to be applied in case of smoothing
112  TArrayF eXpeak; //
113  TArrayF eYpeak; //
114 
115  public:
116  EdbPeak2() { InitPeaks(10); }
117  EdbPeak2( const EdbH2 &h ) : EdbH2( h ) { InitPeaks(10); }
119 
120  void Delete();
121  void Init(const EdbH2 &h, int npeaks=10);
122  void Print();
123  void InitPeaks( int npeaks);
124  int FindPeak( int iv[2]);
125  int FindPeak( float v[2]);
126  int FindPeak( float &x, float &y);
127  float FindPeak9( float &x, float &y);
128  float FindGlobalPeak(float &x, float &y, float ratio=0.1);
129  float ProbPeak();
130  float ProbPeak(float &x, float &y);
131  float ProbPeak(int iv[2], int ir[2]);
132  int WipePeak(int iv[2], int ir[2]);
133  int ProbPeaks(int npeak);
134  int ProbPeaks(int npeak, int ir[2]);
135  float EstimatePeakVolume(int ipeak);
136  float EstimatePeakVolumeSafe(int ipeak);
137  float EstimatePeakMeanPosition(int iv[2], int ir[2], float &x, float &y, int mean=0);
138  float Xmean();
139  float Ymean();
140  float Peak(int i=0) const { if(i>=0&&i<eNpeaks) return ePeak[i]; else return -1; }
141  float Mean3(int i=0) const { if(i>=0&&i<eNpeaks) return eMean3[i]; else return -1; }
142  float Mean(int i=0) const { if(i>=0&&i<eNpeaks) return eMean[i]; else return -1; }
143  float Smooth(Option_t *option="k5a");
144  TH1F *DrawSpectrumN( const char *name="spectrumN", const char *title="EdbH2 DrawSpectrum");
145  TH2F *DrawH2N( const char *name="xyN", const char *title="EdbH2plot2D");
146 
147  ClassDef(EdbPeak2,2) // peak analyser for EdbH2
148 };
149 
150 //__________________________________________________________________________
151 class EdbCell2 : public EdbH2 {
152 
153  private:
154 
155  Int_t eCellLim; // max number of entries into one cell (for memory allocation)
156  Int_t eCapacity; // eNcell*eCellLim
157  TObject **epO; //[eCapasity] array of the pointers to objects
158  TObject ***epC;
159 
160  public:
161  EdbCell2();
162  EdbCell2( const EdbCell2 &cell ) { Set0(); Copy(cell); }
163  ~EdbCell2();
164 
165  //virtual void Streamer(TBuffer &R__b);
166  void Set0();
167  void Copy( const EdbCell2 &cell);
168  void InitEPC();
169  int CellLim() { return eCellLim; }
170  int InitCell( EdbCell2 &c ) { return InitCell(c.NX(),c.Xmin(),c.Xmax(),c.NY(),c.Ymin(),c.Ymax(), c.CellLim() ); }
171  int InitCell(int nx, float minx, float maxx, int ny, float miny, float maxy, int maxpercell );
172  int InitCell(int maxpercell, int n[2], float min[2], float max[2] );
173  void Delete();
174  void Reset() {CleanCells(); Delete();}
175 
176  bool AddObject( float v[2], TObject *obj ) { return AddObject(v[0],v[1],obj); }
177  bool AddObject( float x, float y, TObject *obj );
178  bool AddObject( int ix, int iy, TObject *obj );
179  bool AddObject( int j, TObject *obj );
180  int AddObjectOverlap(float x, float y, float dx, float dy, TObject *obj);
181 
182  int SelectObjects(TObjArray &arr);
183  int SelectObjects(int min[2], int max[2], TObjArray &arr);
184  int SelectObjects(float min[2], float max[2], TObjArray &arr);
185  int SelectObjectsCJ(int j, int ir, TObjArray &arr) {
186  int iv[2] = { IX(j), IY(j) };
187  int irr[2] = { ir, ir };
188  return SelectObjectsC(iv, irr, arr);
189  }
190  int SelectObjectsC(int iv[2], int ir[2], TObjArray &arr);
191  int SelectObjectsC(float v[2], int ir[2], TObjArray &arr) {
192  int iv[2] = { IX(v[0]), IY(v[1]) };
193  return SelectObjectsC(iv, ir, arr);
194  }
195  int SelectObjectsC(float v[2], float r, TObjArray &arr) {
196  int ir[2] = { (int)(r/Xbin()) + 1, (int)(r/Ybin()) + 1 };
197  return SelectObjectsC(v, ir, arr);
198  };
199  TObject *GetObject(float x, float y, int ientr) const { return GetObject( Jcell(x,y), ientr); }
200  TObject *GetObject(int ix, int iy, int ientr) const { return GetObject( Jcell(ix,iy), ientr); }
201  TObject *GetObject(int j, int ientr) const {
202  if(j>=0&&j<eNcell&&ientr>=0&&ientr<eCellLim) return epC[j][ientr];
203  else return 0;
204  }
205  void PrintStat();
206 
207  ClassDef(EdbCell2,2) // class to group 2-dim objects
208 };
209 
210 
211 #endif /* EdbCell2 */
float min(TClonesArray *t)
Definition: bitview.cxx:275
int max
Definition: check_shower.C:41
Definition: EdbCell2.h:151
int CellLim()
Definition: EdbCell2.h:169
int SelectObjectsCJ(int j, int ir, TObjArray &arr)
Definition: EdbCell2.h:185
TObject *** epC
Definition: EdbCell2.h:158
int SelectObjects(TObjArray &arr)
Definition: EdbCell2.cpp:797
Int_t eCellLim
Definition: EdbCell2.h:155
EdbCell2(const EdbCell2 &cell)
Definition: EdbCell2.h:162
TObject ** epO
Definition: EdbCell2.h:157
void Copy(const EdbCell2 &cell)
Definition: EdbCell2.cpp:665
int AddObjectOverlap(float x, float y, float dx, float dy, TObject *obj)
Definition: EdbCell2.cpp:732
int SelectObjectsC(float v[2], int ir[2], TObjArray &arr)
Definition: EdbCell2.h:191
Int_t eCapacity
Definition: EdbCell2.h:156
void Delete()
Definition: EdbCell2.cpp:625
void Set0()
Definition: EdbCell2.cpp:610
TObject * GetObject(int j, int ientr) const
Definition: EdbCell2.h:201
void Reset()
Definition: EdbCell2.h:174
int InitCell(EdbCell2 &c)
Definition: EdbCell2.h:170
int SelectObjectsC(int iv[2], int ir[2], TObjArray &arr)
Definition: EdbCell2.cpp:766
EdbCell2()
[eNcell] pointers to cells
Definition: EdbCell2.cpp:604
void InitEPC()
Definition: EdbCell2.cpp:657
~EdbCell2()
Definition: EdbCell2.cpp:619
TObject * GetObject(float x, float y, int ientr) const
Definition: EdbCell2.h:199
TObject * GetObject(int ix, int iy, int ientr) const
Definition: EdbCell2.h:200
bool AddObject(float v[2], TObject *obj)
Definition: EdbCell2.h:176
int SelectObjectsC(float v[2], float r, TObjArray &arr)
Definition: EdbCell2.h:195
void PrintStat()
Definition: EdbCell2.cpp:711
Definition: EdbCell1.h:17
Definition: EdbCell2.h:19
int Jcell(float v[2]) const
Definition: EdbCell2.h:59
Int_t * eNC
Definition: EdbCell2.h:29
void SetBin(int j, int n)
Definition: EdbCell2.h:92
int Ncell() const
Definition: EdbCell2.h:49
int MaxBin()
Definition: EdbCell2.cpp:244
float XmaxA(float level=0)
Definition: EdbCell2.cpp:172
TH1I * DrawSpectrum(const char *name="plot1d", const char *title="EdbH2 DrawSpectrum")
Definition: EdbCell2.cpp:188
EdbH2(int nx, float minx, float maxx, int ny, float miny, float maxy)
Definition: EdbCell2.h:33
float X(int ix) const
Definition: EdbCell2.h:60
float Xmax() const
Definition: EdbCell2.h:65
Float_t eMin[2]
Definition: EdbCell2.h:24
void CleanCells()
Definition: EdbCell2.cpp:115
float Xj(int j) const
Definition: EdbCell2.h:62
EdbH1 * ProjectionY()
Definition: EdbCell2.cpp:159
int NX() const
Definition: EdbCell2.h:50
float Ymin() const
Definition: EdbCell2.h:66
int Jcell(float x, float y) const
Definition: EdbCell2.h:58
int DiscardHighCells(int nmax)
Definition: EdbCell2.cpp:142
void SetBin(int ix, int iy, int n)
Definition: EdbCell2.h:91
float Ybin() const
Definition: EdbCell2.h:78
int Jcell(int ix, int iy) const
Definition: EdbCell2.h:57
void Set0()
Definition: EdbCell2.cpp:31
float Yj(int j) const
Definition: EdbCell2.h:63
float XminA(float level=0)
Definition: EdbCell2.cpp:167
float Y(int iy) const
Definition: EdbCell2.h:61
int IX(int jcell) const
Definition: EdbCell2.h:54
int IY(int jcell) const
Definition: EdbCell2.h:55
void AddBin(int jcell, int n)
Definition: EdbCell2.h:87
float YmaxA(float level=0)
Definition: EdbCell2.cpp:182
Float_t eBin[2]
Definition: EdbCell2.h:26
~EdbH2()
Definition: EdbCell2.cpp:63
void Copy(const EdbH2 &h)
Definition: EdbCell2.cpp:46
Float_t Mean()
Definition: EdbCell2.h:96
void Delete()
Definition: EdbCell2.cpp:69
int IX(float x) const
Definition: EdbCell2.h:52
Long_t Integral()
Definition: EdbCell2.cpp:226
float Xbin() const
Definition: EdbCell2.h:77
int InitH2(const EdbH2 &h)
Definition: EdbCell2.cpp:79
Int_t eNcell
Definition: EdbCell2.h:28
EdbH1 * ProjectionX()
Definition: EdbCell2.cpp:151
int NY() const
Definition: EdbCell2.h:51
TH2F * DrawH2(const char *name="plot2d", const char *title="EdbH2plot2D")
Definition: EdbCell2.cpp:197
float Xmin() const
Definition: EdbCell2.h:64
int Bin(int j) const
Definition: EdbCell2.h:83
int IY(float y) const
Definition: EdbCell2.h:53
float Ymax() const
Definition: EdbCell2.h:67
int Fill(float x, float y)
Definition: EdbCell2.h:88
int Bin(int ix, int iy) const
Definition: EdbCell2.h:81
Int_t eN[2]
Definition: EdbCell2.h:23
Float_t eMax[2]
Definition: EdbCell2.h:25
EdbH2()
Definition: EdbCell2.cpp:25
float YminA(float level=0)
Definition: EdbCell2.cpp:177
void PrintStat()
Definition: EdbCell2.cpp:209
int Bin(int iv[2]) const
Definition: EdbCell2.h:82
int Bin(float x, float y) const
Definition: EdbCell2.h:80
Definition: EdbCell2.h:104
float Mean3(int i=0) const
Definition: EdbCell2.h:141
TArrayF eMean
Definition: EdbCell2.h:110
float Ymean()
Definition: EdbCell2.cpp:566
TH1F * DrawSpectrumN(const char *name="spectrumN", const char *title="EdbH2 DrawSpectrum")
Definition: EdbCell2.cpp:343
float EstimatePeakVolume(int ipeak)
Definition: EdbCell2.cpp:543
Int_t eNpeaks
Definition: EdbCell2.h:107
Float_t eNorm
Definition: EdbCell2.h:111
TArrayF eXpeak
Definition: EdbCell2.h:112
int ProbPeaks(int npeak)
Definition: EdbCell2.cpp:420
void Init(const EdbH2 &h, int npeaks=10)
Definition: EdbCell2.cpp:372
TArrayF ePeak
Definition: EdbCell2.h:108
float EstimatePeakVolumeSafe(int ipeak)
Definition: EdbCell2.cpp:535
TArrayF eYpeak
Definition: EdbCell2.h:113
float EstimatePeakMeanPosition(int iv[2], int ir[2], float &x, float &y, int mean=0)
Definition: EdbCell2.cpp:482
~EdbPeak2()
Definition: EdbCell2.h:118
float FindGlobalPeak(float &x, float &y, float ratio=0.1)
Definition: EdbCell2.cpp:582
float Mean(int i=0) const
Definition: EdbCell2.h:142
float Xmean()
Definition: EdbCell2.cpp:550
void Print()
Definition: EdbCell2.cpp:392
int WipePeak(int iv[2], int ir[2])
Definition: EdbCell2.cpp:461
TArrayF eMean3
Definition: EdbCell2.h:109
void InitPeaks(int npeaks)
Definition: EdbCell2.cpp:380
int FindPeak(int iv[2])
Definition: EdbCell2.cpp:498
float Peak(int i=0) const
Definition: EdbCell2.h:140
TH2F * DrawH2N(const char *name="xyN", const char *title="EdbH2plot2D")
Definition: EdbCell2.cpp:353
float ProbPeak()
Definition: EdbCell2.cpp:411
EdbPeak2()
Definition: EdbCell2.h:116
float Smooth(Option_t *option="k5a")
Definition: EdbCell2.cpp:252
EdbPeak2(const EdbH2 &h)
Definition: EdbCell2.h:117
void Delete()
Definition: EdbCell2.cpp:365
float FindPeak9(float &x, float &y)
Definition: EdbCell2.cpp:473
int nx
Definition: emthickness.cpp:60
int ny
Definition: emthickness.cpp:62
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
void r(int rid=2)
Definition: test.C:201