FEDRA emulsion software from the OPERA Collaboration
EdbCell2.h
Go to the documentation of this file.
1#ifndef ROOT_EdbCell2
2#define ROOT_EdbCell2
5
11
12#include "TObject.h"
13#include "TH1.h"
14#include "TH2.h"
15#include "TObjArray.h"
16#include "EdbCell1.h"
17
19class EdbH2 : public TObject {
20
21 protected:
22
23 Int_t eN[2];
24 Float_t eMin[2];
25 Float_t eMax[2];
26 Float_t eBin[2];
27
28 Int_t eNcell;
29 Int_t *eNC;
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
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 void SetBin(int ix, int iy, int n) { if(Jcell(ix,iy)>-1) eNC[Jcell(ix,iy)] = n; }
91 void SetBin(int j, int n) { if(j>-1||j<eNcell) eNC[j] = n; }
92
93 Long_t Integral();
94 Long_t Integral(int iv[2], int ir[2]);
95
96 Float_t Mean() { return 1.*Integral()/eNcell; }
97
98 TH1I *DrawSpectrum( const char *name="plot1d", const char *title="EdbH2 DrawSpectrun");
99 TH2F *DrawH2( const char *name="plot2d", const char *title="EdbH2plot2D");
100
101 ClassDef(EdbH2,2) // fast 2-dim histogram class (used as a basis for EdbCell2)
102};
103
105class EdbPeak2 : public EdbH2 {
106
107 public:
108 Int_t eNpeaks;
109 TArrayF ePeak; //
110 TArrayF eMean3; //
111 TArrayF eMean; //
112 Float_t eNorm;
113
114 public:
116 EdbPeak2( const EdbH2 &h ) : EdbH2( h ) { InitPeaks(10); }
118
119 void Delete();
120 void Init(const EdbH2 &h, int npeaks=10);
121 void Print();
122 void InitPeaks( int npeaks);
123 int FindPeak( int iv[2]);
124 int FindPeak( float v[2]);
125 int FindPeak( float &x, float &y);
126 float FindPeak9( float &x, float &y);
127 float FindGlobalPeak(float &x, float &y, float ratio=0.1);
128 float ProbPeak();
129 float ProbPeak(float &x, float &y);
130 float ProbPeak(int iv[2], int ir[2]);
131 int WipePeak(int iv[2], int ir[2]);
132 int ProbPeaks(int npeak);
133 int ProbPeaks(int npeak, int ir[2]);
134 float EstimatePeakVolume(int ipeak);
135 float EstimatePeakVolumeSafe(int ipeak);
136 float EstimatePeakMeanPosition(int iv[2], int ir[2], float &x, float &y);
137 float Smooth(Option_t *option="k5a");
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
144 ClassDef(EdbPeak2,1) // peak analyser for EdbH2
145};
146
148class EdbCell2 : public EdbH2 {
149
150 private:
151
152 Int_t eCellLim;
153 Int_t eCapacity;
154 TObject **epO;
155 TObject ***epC;
156
157 public:
158 EdbCell2();
159 EdbCell2( const EdbCell2 &cell ) { Set0(); Copy(cell); }
160 ~EdbCell2();
161
162 //virtual void Streamer(TBuffer &R__b);
163 void Set0();
164 void Copy( const EdbCell2 &cell);
165 void InitEPC();
166 int CellLim() { return eCellLim; }
167 int InitCell( EdbCell2 &c ) { return InitCell(c.NX(),c.Xmin(),c.Xmax(),c.NY(),c.Ymin(),c.Ymax(), c.CellLim() ); }
168 int InitCell(int nx, float minx, float maxx, int ny, float miny, float maxy, int maxpercell );
169 int InitCell(int maxpercell, int n[2], float min[2], float max[2] );
170 void Delete();
171 void Reset() {CleanCells(); Delete();}
172
173 bool AddObject( float v[2], TObject *obj ) { return AddObject(v[0],v[1],obj); }
174 bool AddObject( float x, float y, TObject *obj );
175 bool AddObject( int ix, int iy, TObject *obj );
176 bool AddObject( int j, TObject *obj );
177
178 int SelectObjects(TObjArray &arr);
179 int SelectObjects(int min[2], int max[2], TObjArray &arr);
180 int SelectObjects(float min[2], float max[2], TObjArray &arr);
181 int SelectObjectsCJ(int j, int ir, TObjArray &arr) {
182 int iv[2] = { IX(j), IY(j) };
183 int irr[2] = { ir, ir };
184 return SelectObjectsC(iv, irr, arr);
185 }
186 int SelectObjectsC(int iv[2], int ir[2], TObjArray &arr);
187 int SelectObjectsC(float v[2], int ir[2], TObjArray &arr) {
188 int iv[2] = { IX(v[0]), IY(v[1]) };
189 return SelectObjectsC(iv, ir, arr);
190 }
191 int SelectObjectsC(float v[2], float r, TObjArray &arr) {
192 int ir[2] = { (int)(r/Xbin()) + 1, (int)(r/Ybin()) + 1 };
193 return SelectObjectsC(v, ir, arr);
194 };
195 TObject *GetObject(float x, float y, int ientr) const { return GetObject( Jcell(x,y), ientr); }
196 TObject *GetObject(int ix, int iy, int ientr) const { return GetObject( Jcell(ix,iy), ientr); }
197 TObject *GetObject(int j, int ientr) const {
198 if(j>=0&&j<eNcell&&ientr>=0&&ientr<eCellLim) return epC[j][ientr];
199 else return 0;
200 }
201 void PrintStat();
202
203 ClassDef(EdbCell2,2) // class to group 2-dim objects
204};
205
206
207#endif /* EdbCell2 */
float min(TClonesArray *t)
Definition: bitview.cxx:275
class to group 2-dim objects
Definition: EdbCell2.h:148
int CellLim()
Definition: EdbCell2.h:166
int SelectObjectsCJ(int j, int ir, TObjArray &arr)
Definition: EdbCell2.h:181
TObject *** epC
[eNcell] pointers to cells
Definition: EdbCell2.h:155
int SelectObjects(TObjArray &arr)
Definition: EdbCell2.cpp:738
Int_t eCellLim
max number of entries into one cell (for memory allocation)
Definition: EdbCell2.h:152
EdbCell2(const EdbCell2 &cell)
Definition: EdbCell2.h:159
TObject ** epO
[eCapasity] array of the pointers to objects
Definition: EdbCell2.h:154
void Copy(const EdbCell2 &cell)
Definition: EdbCell2.cpp:628
int SelectObjectsC(float v[2], int ir[2], TObjArray &arr)
Definition: EdbCell2.h:187
Int_t eCapacity
eNcell*eCellLim
Definition: EdbCell2.h:153
void Delete()
Definition: EdbCell2.cpp:588
void Set0()
Definition: EdbCell2.cpp:573
void Reset()
Definition: EdbCell2.h:171
TObject * GetObject(int ix, int iy, int ientr) const
Definition: EdbCell2.h:196
int InitCell(EdbCell2 &c)
Definition: EdbCell2.h:167
TObject * GetObject(float x, float y, int ientr) const
Definition: EdbCell2.h:195
int SelectObjectsC(int iv[2], int ir[2], TObjArray &arr)
Definition: EdbCell2.cpp:707
EdbCell2()
Definition: EdbCell2.cpp:567
void InitEPC()
Definition: EdbCell2.cpp:620
~EdbCell2()
Definition: EdbCell2.cpp:582
TObject * GetObject(int j, int ientr) const
Definition: EdbCell2.h:197
bool AddObject(float v[2], TObject *obj)
Definition: EdbCell2.h:173
int SelectObjectsC(float v[2], float r, TObjArray &arr)
Definition: EdbCell2.h:191
void PrintStat()
Definition: EdbCell2.cpp:674
fast 2-dim histogram class (used as a basis for EdbCell1)
Definition: EdbCell1.h:17
fast 2-dim histogram class (used as a basis for EdbCell2)
Definition: EdbCell2.h:19
int Jcell(float v[2]) const
Definition: EdbCell2.h:59
Int_t * eNC
[eNcell] number of objects/cell
Definition: EdbCell2.h:29
void SetBin(int j, int n)
Definition: EdbCell2.h:91
int Ncell() const
Definition: EdbCell2.h:49
int MaxBin()
Definition: EdbCell2.cpp:234
float XmaxA(float level=0)
Definition: EdbCell2.cpp:162
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]
min
Definition: EdbCell2.h:24
void CleanCells()
Definition: EdbCell2.cpp:114
float Xj(int j) const
Definition: EdbCell2.h:62
EdbH1 * ProjectionY()
Definition: EdbCell2.cpp:149
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:132
void SetBin(int ix, int iy, int n)
Definition: EdbCell2.h:90
float Ybin() const
Definition: EdbCell2.h:78
int Jcell(int ix, int iy) const
Definition: EdbCell2.h:57
void Set0()
Definition: EdbCell2.cpp:30
float Yj(int j) const
Definition: EdbCell2.h:63
float XminA(float level=0)
Definition: EdbCell2.cpp:157
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:172
Float_t eBin[2]
bin size
Definition: EdbCell2.h:26
~EdbH2()
Definition: EdbCell2.cpp:62
void Copy(const EdbH2 &h)
Definition: EdbCell2.cpp:45
Float_t Mean()
Definition: EdbCell2.h:96
void Delete()
Definition: EdbCell2.cpp:68
int IX(float x) const
Definition: EdbCell2.h:52
Long_t Integral()
Definition: EdbCell2.cpp:216
float Xbin() const
Definition: EdbCell2.h:77
int InitH2(const EdbH2 &h)
Definition: EdbCell2.cpp:78
TH1I * DrawSpectrum(const char *name="plot1d", const char *title="EdbH2 DrawSpectrun")
Definition: EdbCell2.cpp:178
Int_t eNcell
eNx*eNy
Definition: EdbCell2.h:28
EdbH1 * ProjectionX()
Definition: EdbCell2.cpp:141
int NY() const
Definition: EdbCell2.h:51
TH2F * DrawH2(const char *name="plot2d", const char *title="EdbH2plot2D")
Definition: EdbCell2.cpp:187
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]
divisions
Definition: EdbCell2.h:23
Float_t eMax[2]
max
Definition: EdbCell2.h:25
EdbH2()
Definition: EdbCell2.cpp:24
float YminA(float level=0)
Definition: EdbCell2.cpp:167
void PrintStat()
Definition: EdbCell2.cpp:199
int Bin(int iv[2]) const
Definition: EdbCell2.h:82
int Bin(float x, float y) const
Definition: EdbCell2.h:80
peak analyser for EdbH2
Definition: EdbCell2.h:105
float Mean3(int i=0) const
Definition: EdbCell2.h:141
TArrayF eMean
Definition: EdbCell2.h:111
float EstimatePeakMeanPosition(int iv[2], int ir[2], float &x, float &y)
Definition: EdbCell2.cpp:354
float Ymean()
Definition: EdbCell2.cpp:437
float EstimatePeakVolume(int ipeak)
Definition: EdbCell2.cpp:414
Int_t eNpeaks
number of found peaks
Definition: EdbCell2.h:108
Float_t eNorm
the norm-factor in case of the smoothing applied
Definition: EdbCell2.h:112
int ProbPeaks(int npeak)
Definition: EdbCell2.cpp:296
void Init(const EdbH2 &h, int npeaks=10)
Definition: EdbCell2.cpp:250
TArrayF ePeak
Definition: EdbCell2.h:109
float EstimatePeakVolumeSafe(int ipeak)
Definition: EdbCell2.cpp:406
~EdbPeak2()
Definition: EdbCell2.h:117
float FindGlobalPeak(float &x, float &y, float ratio=0.1)
Definition: EdbCell2.cpp:453
float Mean(int i=0) const
Definition: EdbCell2.h:142
float Xmean()
Definition: EdbCell2.cpp:421
void Print()
Definition: EdbCell2.cpp:268
int WipePeak(int iv[2], int ir[2])
Definition: EdbCell2.cpp:333
TArrayF eMean3
Definition: EdbCell2.h:110
void InitPeaks(int npeaks)
Definition: EdbCell2.cpp:258
int FindPeak(int iv[2])
Definition: EdbCell2.cpp:369
float Peak(int i=0) const
Definition: EdbCell2.h:140
float ProbPeak()
Definition: EdbCell2.cpp:287
EdbPeak2()
Definition: EdbCell2.h:115
float Smooth(Option_t *option="k5a")
Definition: EdbCell2.cpp:475
EdbPeak2(const EdbH2 &h)
Definition: EdbCell2.h:116
void Delete()
Definition: EdbCell2.cpp:243
float FindPeak9(float &x, float &y)
Definition: EdbCell2.cpp:345
int max
Definition: check_shower.C:41
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
void r(int rid=2)
Definition: test.C:201