FEDRA emulsion software from the OPERA Collaboration
EdbViewRec.h
Go to the documentation of this file.
1#ifndef ROOT_EdbViewRec
2#define ROOT_EdbViewRec
3
5// //
6// EdbViewRec - Generation of one microscope view //
7// //
9#include "TArrayF.h"
10#include "TArrayI.h"
11#include "TArrayC.h"
12
13#include "EdbView.h"
14#include "EdbViewDef.h"
15
16class TTree;
17class EdbView;
18
19//______________________________________________________________________________
20class EdbViewCell : public TObject {
21
22public:
23 Float_t eXmin,eXmax;
24 Float_t eYmin,eYmax;
25 Float_t eZmin,eZmax;
26 Float_t eBinZ; // the distance between layers: eBinZ = (eZmax-eZmin)/eNfr
27 Float_t eBinX; // bin along x
28 Float_t eBinY; // bin along y
29 Int_t eNfr; // number of frames (to be setted!)
30
31 Int_t eNx; // "raw" - divisions along x
32 Int_t eNy; // "column" - divisions along y
33 Int_t eNcellXY; // eNx*eNy
34 Int_t eNcell; // eNfr*eNx*eNy
35 Int_t eNcl; // total number of clusters
36
37 Int_t eIFZ; // cell filling flag: if IFZ=0 (default) use c->eFrame else use c->eZ
38
39
40 Int_t *eNC;
41
42 private:
43 Int_t eNcellsLim; // max number of cells (need for memory allocation)
44 Int_t eCellLim; // max number of clusters/cell
45
48 Int_t *eFrame;
49
50 Int_t eNeib[9]; // 3x3 neighborhood
51
52 public:
54 virtual ~EdbViewCell();
55
56 void SetLimits( float xmin, float xmax, float ymin, float ymax, float zmin, float zmax )
57 { eXmin=xmin; eXmax=xmax; eYmin=ymin; eYmax=ymax; eZmin=zmin; eZmax=zmax; }
58 void SetBin( float binx, float biny, float binz=-1)
59 {eBinX=binx; eBinY=biny; eBinZ=binz;}
60 void SetCellLimits(int ncell, int ncl) { eNcellsLim=ncell; eCellLim=ncl; }
61
62 void SetNfr(int nfr, float zmin, float zmax, int ifz=0);
63 void CalcN();
64 void InitMem();
65 void Init();
66
68 {
69 int j;
70 if(!eIFZ) j = Jcell(c->eX,c->eY,c->eFrame);
71 else j = Jcell(c->eX,c->eY,c->eZ);
72 printf("j=%d eNC[j]=%d\n", j, eNC[j]);
73 if( j<0 || j>eNcellsLim ) return 0;
74 if( eNC[j] >= eCellLim ) return 0;
75 epCell[j][eNC[j]] = c;
76 eNC[j]++;
77 return 1;
78 }
79
80 int FillCell( TClonesArray &v );
81 void CleanCell();
82 void Delete();
83
84 void CalcStat();
85
86 int IXcell(float x) const {return (int)((x-eXmin)/eBinX); }
87 int IYcell(float y) const {return (int)((y-eYmin)/eBinY); }
88 int JcellXY(float x, float y) const {return IYcell(y)*eNx+IXcell(x); }
89 int Jcell(float x, float y, int ifr ) const {return eFrame[ifr] + IYcell(y)*eNx+IXcell(x); }
90 int Jcell(float x, float y, float z ) const {return TMath::Nint((z-eZmin)/eBinZ)*eNcellXY + IYcell(y)*eNx+IXcell(x);}
91 int Jcell(int ixy, int ifr) const {return eFrame[ifr]+ixy;}
92 int Jcell(int ix, int iy, int ifr) const {return eFrame[ifr]+iy*eNx + ix;}
93 int Jneib(int i) const {return eNeib[i];}
94
95 EdbCluster **GetCell(int j) const {return epCell[j];}
96
97 void Print();
98 ClassDef(EdbViewCell,1) // service class for view reconstruction
99};
100
101//______________________________________________________________________________
102class EdbViewRec : public EdbViewDef {
103public:
104
105 bool eAddGrainsToView; // if true: save grains to eView as a segments
106 bool eDoGrainsProcessing; // if true: when reconstruct segments first find grains ->(eGCla)
107 bool eCheckSeedThres; // if true: use adaptive seeds threshold (based on eNseedMax)
108 bool ePropagateToBase; // if true: segments are propagated to base position
109 Float_t eGrainNbin; // acceptance for grain preprocessing = eGrainNbin*eGrainSX(Y)
110
111private:
113
114 Int_t eNgrMax; // grains limit (for mem alloc)
115 Int_t eNsegMax; // segments limit (for mem alloc)
116
120
121 // TClonesArray *eGSeg; //! [eNgrMax] array of grains represented as segments
122 TClonesArray *eG;
123
124 TClonesArray *eGCla;
125 TClonesArray *eCL;
126
127 TClonesArray *eSA;
128
129 Int_t eClMinA; // rejected cl->eArea < eClMinA (image noise)
130 Int_t eClMaxA; // rejected cl->eArea > eClMaxA (blobs)
131
132 //--------grains rec-----------
133 Int_t eNgr; // grains counter
134 TTree *eGrainsTree;
135 int eNclGrMin; // min number of clusters/grain for saving it
136 int eNclGrMax; // max number of clusters/grain for consider it a single grain
137
138//-----------segments rec--------
139
140 Float_t eDZmin; // minimal dz - should be in agreement with eStepFrom
141 Float_t eThetaLim; // absolute theta limit
142
143 Int_t eStep; // frame step size for seed search: default=1
144 Int_t eStepFrom; // low limit (ifr) for seed search
145 Int_t eStepTo; // upper limit (ifr) for seed search
146
147 Int_t eSeedThres0; // default threshold for the seed puls
148 TArrayI eSeedThres; // thresholds[enT] for the seed puls
149 TArrayF eR; // R(it) limits definition (may be setted manually?)
150 Int_t enSeedsLim; // limit for the number of seeds
151 Short_t eSeedLim; // limit for the number of clusters/seed
152 Int_t eNseedMax0; // starting limit for the good seeds (segments) to be processed
153 TArrayI eNseedMax; // [enT] limit for the good seeds (segments) to be processed
154 Int_t ePulsMin; // min threshold for the segment puls
155 Int_t ePulsMax; // max threshold for the segment puls
156 Float_t eSigmaMin; // min and max values for segment acceptance
157 Float_t eSigmaMax;
158
159 Float_t eZcenter; // estimated center of the emulsion layer (for segments rec)
160
161 Int_t enT; // number of Theta divisions
162 TArrayI enP; // number of Phi divisions [enT]
163 Int_t enPtot; // total number of phi divisions
164 TArrayI enY; // number of Y divisions [enPtot]
165 Int_t enYtot; // total number of Y divisions
166 TArrayI enX; // number of X divisions [enYtot]
167 Int_t enXtot; // total number of X divisions
168
169 TArrayF eTheta; // theta(it) mean value
170 //TArrayF esT; // step of Theta divisions [enT]
171 TArrayF esP; // step of Phi divisions [enT]
172 TArrayF esY; // step of Y divisions [enPtot]
173 TArrayF esX; // step of X divisions [enYtot]
174
175 Short_t ****epT;
176 Short_t ***epP;
177 Short_t **epY;
178 Short_t *ehX;
179
182 Float_t eDmax; // max distance inside the view (diameter)
183 Float_t eFact; // occupancy correction factor
184 Float_t eRmax; // limit for coupling (3-dim)
185//----------------------
186
187public:
188 EdbViewRec();
190 virtual ~EdbViewRec();
191
192 void SetPrimary();
193 bool Init();
194 void SetNclGrLim(int mincl, int maxcl) { eNclGrMin=mincl; eNclGrMax=maxcl; }
195 void SetPulsThres(int minp, int maxp=500) { ePulsMin=minp; ePulsMax=maxp; }
196 void SetSigmaThres(float smin, float smax) { eSigmaMin=smin; eSigmaMax=smax; }
197 void SetNgrMax0(Int_t ngr) {eNgrMax=ngr;}
198 void SetAddGrainsToView(bool yesno) {eAddGrainsToView=yesno;}
199 void InitR();
200 bool SetView(EdbView *v);
201 void SetClThres(int mina, int maxa) { eClMinA=mina; eClMaxA=maxa; }
202 void SetSeedsLim( int nseedslim=100000, int seedlim=48 ) { enSeedsLim=nseedslim; eSeedLim=seedlim; }
203 int SetStep(int sfrom, int sto, int step=1) { eStepFrom=sfrom; eStepTo=sto; eStep=step; return (sto-sfrom)/step; }
204 void SetRmax(float rmax) { eRmax=rmax; }
205 void SetThetaLim(float t) { eThetaLim=t; }
206 void SetNSeedMax0(int n) { eNseedMax0=n; }
207 void SetNSeedMax(int nt, int th[]) { if(nt>0){ enT=nt; eNseedMax.Set(nt,th);} };
208 void SetSeedThres0(Short_t mins) { eSeedThres0=mins;}
209 void SetSeedThres(int nt, int th[]) { if(nt>0){ enT=nt; eSeedThres.Set(nt,th);} };
210
211 void ResetClustersSeg();
212 int FindGrains(int option=0);
213 static int FitSegment(EdbSegment &s, int wkey=0);
214 static int FitSegmentToCl(EdbSegment &s, EdbCluster &c, int wkey=0);
215 float CalculateSegmentChi2( EdbSegment &seg, float sx, float sy, float sz );
216 int CheckFramesShift();
217 void InitGrainsTree(const char *file="grains.root");
218 int FillGrainsTree();
219
220 int FindSeeds();
221 int CheckSeedThres();
222 bool GoodSegment( EdbSegment &s, int wkey=0 );
223 float Chi2Seg( EdbSegment &s1, EdbSegment &s2 );
224 int SelectSegments();
225 int MergeSegments();
227 int RefitSegments(int wkey=0);
228
229 int ReconstructGrains();
231 bool SaveToOutputView(EdbView &vout, int do_h=1, int do_c=2, int do_s=2, int do_tr=0, int do_f=2);
232
233 float SThetaGr(float theta, float phi, float dz, float sx, float sy, float sz);
234 float SPhiGr(float theta, float phi, float dz, float sx, float sy, float sz);
235
236 ClassDef(EdbViewRec,1) // Generation of one microscope view
237};
238
239#endif /* ROOT_EdbViewRec */
brick dz
Definition: RecDispMC.C:107
Definition: EdbCluster.h:19
Float_t eZ
cluster coordinates in pixels(?)
Definition: EdbCluster.h:25
Int_t eFrame
frame index
Definition: EdbCluster.h:28
Float_t eY
cluster coordinates in pixels(?)
Definition: EdbCluster.h:24
Float_t eX
cluster coordinates in pixels(?)
Definition: EdbCluster.h:23
segment of the track
Definition: EdbSegment.h:63
Definition: EdbViewRec.h:20
Int_t eNeib[9]
index of the first cell of the frame in epCell array
Definition: EdbViewRec.h:50
Int_t * eNC
Definition: EdbViewRec.h:40
Int_t eNx
Definition: EdbViewRec.h:31
Float_t eBinY
Definition: EdbViewRec.h:28
Float_t eZmin
Definition: EdbViewRec.h:25
Float_t eBinX
Definition: EdbViewRec.h:27
int JcellXY(float x, float y) const
Definition: EdbViewRec.h:88
Float_t eBinZ
Definition: EdbViewRec.h:26
void SetLimits(float xmin, float xmax, float ymin, float ymax, float zmin, float zmax)
Definition: EdbViewRec.h:56
void Print()
Definition: EdbViewRec.cxx:153
void InitMem()
Definition: EdbViewRec.cxx:91
Int_t eNfr
Definition: EdbViewRec.h:29
void Init()
Definition: EdbViewRec.cxx:105
Int_t eNcellsLim
[eNcell] number of clusters/cell
Definition: EdbViewRec.h:43
void SetCellLimits(int ncell, int ncl)
Definition: EdbViewRec.h:60
Float_t eYmax
Definition: EdbViewRec.h:24
int Jcell(int ix, int iy, int ifr) const
Definition: EdbViewRec.h:92
void Delete()
Definition: EdbViewRec.cxx:50
EdbCluster ** GetCell(int j) const
Definition: EdbViewRec.h:95
Float_t eYmin
Definition: EdbViewRec.h:24
Float_t eZmax
Definition: EdbViewRec.h:25
Int_t eNcell
Definition: EdbViewRec.h:34
int Jcell(float x, float y, float z) const
Definition: EdbViewRec.h:90
EdbCluster ** epC
Definition: EdbViewRec.h:46
EdbViewCell()
Definition: EdbViewRec.cxx:27
Float_t eXmax
Definition: EdbViewRec.h:23
Int_t eNy
Definition: EdbViewRec.h:32
int Jcell(float x, float y, int ifr) const
Definition: EdbViewRec.h:89
int IYcell(float y) const
Definition: EdbViewRec.h:87
Int_t eIFZ
Definition: EdbViewRec.h:37
Int_t * eFrame
pointers to cells [eNcellsLim]
Definition: EdbViewRec.h:48
virtual ~EdbViewCell()
Definition: EdbViewRec.cxx:43
void SetNfr(int nfr, float zmin, float zmax, int ifz=0)
Definition: EdbViewRec.cxx:73
int Jcell(int ixy, int ifr) const
Definition: EdbViewRec.h:91
Float_t eXmin
Definition: EdbViewRec.h:23
void CalcN()
Definition: EdbViewRec.cxx:59
int AddCluster(EdbCluster *c)
Definition: EdbViewRec.h:67
Int_t eCellLim
Definition: EdbViewRec.h:44
int FillCell(TClonesArray &v)
Definition: EdbViewRec.cxx:121
int Jneib(int i) const
Definition: EdbViewRec.h:93
int IXcell(float x) const
Definition: EdbViewRec.h:86
void CalcStat()
Definition: EdbViewRec.cxx:145
Int_t eNcl
Definition: EdbViewRec.h:35
EdbCluster *** epCell
pointers to clusters [eNcellsLim*eCellLim]
Definition: EdbViewRec.h:47
void CleanCell()
Definition: EdbViewRec.cxx:115
Int_t eNcellXY
Definition: EdbViewRec.h:33
void SetBin(float binx, float biny, float binz=-1)
Definition: EdbViewRec.h:58
Definition: EdbViewDef.h:12
Definition: EdbViewRec.h:102
bool ePropagateToBase
Definition: EdbViewRec.h:108
Short_t eSeedLim
Definition: EdbViewRec.h:151
Float_t eSigmaMax
Definition: EdbViewRec.h:157
void SetClThres(int mina, int maxa)
Definition: EdbViewRec.h:201
int MergeSegments()
Definition: EdbViewRec.cxx:1068
int SelectSegments()
Definition: EdbViewRec.cxx:905
float SThetaGr(float theta, float phi, float dz, float sx, float sy, float sz)
Definition: EdbViewRec.cxx:394
TArrayI enP
Definition: EdbViewRec.h:162
EdbViewRec()
Definition: EdbViewRec.cxx:166
Float_t eRmax
Definition: EdbViewRec.h:184
Short_t ** epY
[enPtot] - pointers to the first y[ip]
Definition: EdbViewRec.h:177
int eNclGrMax
Definition: EdbViewRec.h:136
Int_t ePulsMax
Definition: EdbViewRec.h:155
TClonesArray * eGCla
pointer to eView->GetSegments() or to eGSeg as the output for grain search
Definition: EdbViewRec.h:124
Float_t eGrainNbin
Definition: EdbViewRec.h:109
int ReconstructGrains()
Definition: EdbViewRec.cxx:455
EdbViewCell eVCC
pointer to eVCC or eVCG
Definition: EdbViewRec.h:118
void InitGrainsTree(const char *file="grains.root")
Definition: EdbViewRec.cxx:858
void SetAddGrainsToView(bool yesno)
Definition: EdbViewRec.h:198
TClonesArray * eSA
pointer to eView->GetClusters() or to eGCla as the input for tracking
Definition: EdbViewRec.h:127
bool GoodSegment(EdbSegment &s, int wkey=0)
Definition: EdbViewRec.cxx:950
bool SaveToOutputView(EdbView &vout, int do_h=1, int do_c=2, int do_s=2, int do_tr=0, int do_f=2)
Definition: EdbViewRec.cxx:508
Int_t enPtot
Definition: EdbViewRec.h:163
void SetNclGrLim(int mincl, int maxcl)
Definition: EdbViewRec.h:194
TArrayF esP
Definition: EdbViewRec.h:171
TTree * eGrainsTree
Definition: EdbViewRec.h:134
Int_t eStep
Definition: EdbViewRec.h:143
Float_t eZcenter
Definition: EdbViewRec.h:159
int FindSeeds()
Definition: EdbViewRec.cxx:1194
TArrayI eNseedMax
Definition: EdbViewRec.h:153
void SetPulsThres(int minp, int maxp=500)
Definition: EdbViewRec.h:195
Int_t eNsegMax
Definition: EdbViewRec.h:115
Int_t ePulsMin
Definition: EdbViewRec.h:154
int SetStep(int sfrom, int sto, int step=1)
Definition: EdbViewRec.h:203
TArrayF eTheta
Definition: EdbViewRec.h:169
void InitR()
Definition: EdbViewRec.cxx:382
void SetSeedThres0(Short_t mins)
Definition: EdbViewRec.h:208
virtual ~EdbViewRec()
Definition: EdbViewRec.cxx:173
int ReconstructSegments()
Definition: EdbViewRec.cxx:472
Float_t eDmax
pointers to clusters
Definition: EdbViewRec.h:182
EdbView * eView
Definition: EdbViewRec.h:112
static int FitSegment(EdbSegment &s, int wkey=0)
Definition: EdbViewRec.cxx:728
void SetThetaLim(float t)
Definition: EdbViewRec.h:205
EdbViewRec(EdbViewDef &vd)
Definition: EdbViewRec.h:189
int FindGrains(int option=0)
Definition: EdbViewRec.cxx:567
Int_t enT
Definition: EdbViewRec.h:161
EdbViewCell * eVC
Definition: EdbViewRec.h:117
Float_t eThetaLim
Definition: EdbViewRec.h:141
Float_t eFact
Definition: EdbViewRec.h:183
Int_t enSeedsLim
Definition: EdbViewRec.h:150
void SetNSeedMax(int nt, int th[])
Definition: EdbViewRec.h:207
TArrayF esY
Definition: EdbViewRec.h:172
void SetSeedsLim(int nseedslim=100000, int seedlim=48)
Definition: EdbViewRec.h:202
Int_t eNgr
Definition: EdbViewRec.h:133
Short_t *** epP
[enT] - pointers to the first phi[it]
Definition: EdbViewRec.h:176
TClonesArray * eG
cells with grains
Definition: EdbViewRec.h:122
Int_t eClMaxA
Definition: EdbViewRec.h:130
void SetRmax(float rmax)
Definition: EdbViewRec.h:204
void SetSigmaThres(float smin, float smax)
Definition: EdbViewRec.h:196
EdbCluster ** epC
pointers to seeds list
Definition: EdbViewRec.h:181
EdbViewCell eVCG
cells with raw clusters
Definition: EdbViewRec.h:119
int RefillSegment(EdbSegment &s)
Definition: EdbViewRec.cxx:972
bool eCheckSeedThres
Definition: EdbViewRec.h:107
int RefitSegments(int wkey=0)
Definition: EdbViewRec.cxx:1038
void SetPrimary()
Definition: EdbViewRec.cxx:198
float CalculateSegmentChi2(EdbSegment &seg, float sx, float sy, float sz)
Definition: EdbViewRec.cxx:815
TArrayI eSeedThres
Definition: EdbViewRec.h:148
static int FitSegmentToCl(EdbSegment &s, EdbCluster &c, int wkey=0)
Definition: EdbViewRec.cxx:776
Short_t * ehX
[enYtot] - pointers to the first x[iy]
Definition: EdbViewRec.h:178
Int_t enYtot
Definition: EdbViewRec.h:165
Int_t eNseedMax0
Definition: EdbViewRec.h:152
TArrayI enX
Definition: EdbViewRec.h:166
TArrayF esX
Definition: EdbViewRec.h:173
int CheckSeedThres()
Definition: EdbViewRec.cxx:1132
void ResetClustersSeg()
Definition: EdbViewRec.cxx:557
Int_t eNgrMax
pointer to the input view currently in processing
Definition: EdbViewRec.h:114
int eNclGrMin
debug tree
Definition: EdbViewRec.h:135
int CheckFramesShift()
Definition: EdbViewRec.cxx:678
Int_t eStepFrom
Definition: EdbViewRec.h:144
Float_t eSigmaMin
Definition: EdbViewRec.h:156
Float_t eDZmin
Definition: EdbViewRec.h:140
Int_t eClMinA
pointer to array of segments (output of tracking)
Definition: EdbViewRec.h:129
Int_t eStepTo
Definition: EdbViewRec.h:145
bool Init()
Definition: EdbViewRec.cxx:267
Int_t eSeedThres0
Definition: EdbViewRec.h:147
bool SetView(EdbView *v)
Definition: EdbViewRec.cxx:413
void SetSeedThres(int nt, int th[])
Definition: EdbViewRec.h:209
int FillGrainsTree()
Definition: EdbViewRec.cxx:876
EdbCluster *** epS
[enXtot] - phase histogram
Definition: EdbViewRec.h:180
bool eAddGrainsToView
Definition: EdbViewRec.h:105
Short_t **** epT
Definition: EdbViewRec.h:175
bool eDoGrainsProcessing
Definition: EdbViewRec.h:106
TClonesArray * eCL
[eNgrMax] array of grains represented as clusters
Definition: EdbViewRec.h:125
void SetNSeedMax0(int n)
Definition: EdbViewRec.h:206
TArrayF eR
Definition: EdbViewRec.h:149
void SetNgrMax0(Int_t ngr)
Definition: EdbViewRec.h:197
float Chi2Seg(EdbSegment &s1, EdbSegment &s2)
Definition: EdbViewRec.cxx:1126
float SPhiGr(float theta, float phi, float dz, float sx, float sy, float sz)
Definition: EdbViewRec.cxx:403
Int_t enXtot
Definition: EdbViewRec.h:167
TArrayI enY
Definition: EdbViewRec.h:164
Base scanning data object: entry into Run tree.
Definition: EdbView.h:134
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
void vd(int trmin=2, float amin=.0)
Definition: check_vertex.C:217
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30
TFile * file
Definition: write_pvr.C:3