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 
16 class TTree;
17 class EdbView;
18 
19 //______________________________________________________________________________
20 class EdbViewCell : public TObject {
21 
22 public:
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:
53  EdbViewCell();
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 //______________________________________________________________________________
102 class EdbViewRec : public EdbViewDef {
103 public:
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 
111 private:
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 
187 public:
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();
226  int RefillSegment(EdbSegment &s);
227  int RefitSegments(int wkey=0);
228 
229  int ReconstructGrains();
230  int ReconstructSegments();
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
TTree * t
Definition: check_shower.C:4
Definition: EdbCluster.h:19
Float_t eZ
Definition: EdbCluster.h:25
Int_t eFrame
Definition: EdbCluster.h:28
Float_t eY
Definition: EdbCluster.h:24
Float_t eX
Definition: EdbCluster.h:23
Definition: EdbSegment.h:61
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
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
EdbCluster ** GetCell(int j) const
Definition: EdbViewRec.h:95
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
Definition: EdbView.h:134
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63
void vd(const char *dsname, EdbVertexRec *evr)
Definition: emvtx.cpp:62
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31
EdbSegP * s
Definition: tlg2pattern.C:32
TFile * file
Definition: write_pvr.C:3