FEDRA emulsion software from the OPERA Collaboration
EdbRunAccess.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbRunAccess
2 #define ROOT_EdbRunAccess
3 
5 // //
6 // EdbRunAccess //
7 // //
8 // OPERA data Run Access helper class //
9 // //
11 #include "TH2F.h"
12 #include "TGraph2D.h"
13 #include "TCut.h"
14 #include "EdbRun.h"
15 #include "EdbCell2.h"
16 #include "EdbPattern.h"
17 #include "EdbLayer.h"
18 #include "EdbSegmentCut.h"
19 #include "EdbScanCond.h"
20 
21 //______________________________________________________________________________
22 class EdbRunAccess : public TObject {
23 
24  public:
25  Int_t eAFID; // if =1 - use affine transformations of the fiducial marks
26  Int_t eCLUST; // 1-use clusters, 0 - do not
27  Bool_t eUseExternalSurface; // if true - set segment position corrisponding to the very external cluster
28 
29  Bool_t eDoViewAnalysis; // fill or not the histograms for optional view analysis
30  EdbH2 eHViewXY[3]; // XY segments distribution in a view local coords
31  Bool_t eInvertSides; // 0 -do nothing, 1-invert sides
32  Int_t eWeightAlg; // 0-puls, 1 - density(former eUseDensityAsW), 2-Likelyhood (eSigmaX)
33  //eUseDensityAsW; // in case of LASSO tracking possible to use eSigmaY as eW
34 
35  Bool_t eUseDensityAsW; // in case of LASSO tracking possible to use eSigmaY as eW
36  // re-taken in by FWM 13072016 (otherwithe compilatiion error in libScan EdbRunAccess)
37 
38  Int_t eDoImageCorr; // apply or not pix/mic correction when read data (default is 0)
39  EdbAffine2D eImageCorr[3]; // include pix/micron corr, shift, rotation of microscope image
40  // side 0(dummy), 1, 2
41 
42  Int_t eDoImageMatrixCorr; // apply image correction matrix
43  EdbCell2 eCorrMap[3]; // map of corrections for sides 0(dummy), 1,2
44 
45  TCut eHeaderCut; // header cut to be applied in run initialization
46  Int_t eTracking; // to test tracking alorithm: -1-ignored(def),0/1 - trackings to accept
47 
48  TGraph2D *eGraphZ[4];
49  TGraph2D *eGraphDZ[3];
50 
51  private:
52  TString eRunFileName;
53  EdbRun *eRun; // pointer to the run to be accessed
54 
55  EdbAffine2D *eAffStage2Abs; // affine transformation extracted from Marks (if AFID=11)
56 
57  Int_t eFirstArea;
58  Int_t eLastArea;
59  Int_t eNareas;
61 
62  EdbLayer *eLayers[3]; // base(0),up(1),down(2) layers
64  TObjArray *eCuts[3]; // arrays of cuts to be applied to segments
65  EdbPattern *eVP[3]; // base/up/down side patterns (0,1,2) with
66  // the views coordinates inside
67 
68  Float_t eCutGR; // grain cut (chi)
69 
70  Float_t eXmin,eXmax,eYmin,eYmax; //run limits
71 
72  Float_t eXstep[3];
73  Float_t eYstep[3];
74  Float_t eViewXmin[3], eViewXmax[3];
75  Float_t eViewYmin[3], eViewYmax[3];
76 
77  TObjArray *eViewCorr;
78  Float_t eScoreCut[2]; // score cut for segments selection (a,b)
79 
80  public:
83  EdbRunAccess(const char *fname);
84  virtual ~EdbRunAccess();
85 
86  EdbSegment *GetRawSegmentN( int vid, int sid, int rs=0);
87  EdbSegment *GetRawSegment( int vid, int sid, int rs=0 );
88  EdbSegment *GetRawSegment( EdbView &v, int sid, int rs=0 );
89  void ApplyCorrections( const EdbView &view, EdbSegment &s, const int rs );
90  void ReadVAfile();
91 
92  void Set0();
93  void SetImageCorrection(int side, const char *str);
94  void SetImageCorrectionAff(int side, const char *str);
95  void ReadImageMatrixCorrection(int side, const char *file);
96  void ReadImageMatrixCorrection(EdbCell2 &map, const char *file);
97  void ClearCuts();
98  bool InitRun(const char *runfile=0, bool do_update=false);
99  bool InitRunFromRWC(char *rwcname, bool bAddRWD=true, const char* options="");
100  bool AddRWDToRun(char *rwdname, const char* options="");
101  void Print();
102  void PrintStat();
103  void GuessNviewsPerArea();
104 
105  void ApplyImageMatrixCorr(int side, float &x, float &y);
106 
107  Int_t GetNareas() { return eNareas; }
108  Int_t GetNviewsPerArea() { return eNviewsPerArea; }
109 
110  void CheckRunLine();
111  int Check0Views(EdbPattern &pat, int thres=1);
112  int CheckEmptyViews(EdbPattern &pat);
113  float CheckMeanSegsPerView(EdbPattern &pat);
114  void CheckViewStep();
115  void CheckViewStep(int ud);
116  TH2F *CheckUpDownOffsets();
117  void CheckViewSize();
118  void SetScoreCut(const char *cut) { float a,b; sscanf(cut,"%f %f",&a,&b); SetScoreCut(a,b); }
119  void SetScoreCut(float a, float b) { eScoreCut[0]=a; eScoreCut[1]=b; }
120  float GetScoreA() const { return eScoreCut[0]; }
121  float GetScoreB() const { return eScoreCut[1]; }
122 
123  EdbRun *GetRun() const {return eRun;}
124  EdbLayer *GetMakeLayer(int id);
126  { if(eLayers[id]) return (EdbLayer *)eLayers[id]; else return 0; }
127 
128  int FillVP();
129  EdbPattern *GetVP(int ud) const { if(ud>-1&&ud<3) return eVP[ud]; else return 0; }
130 
131  int FirstArea() const { return eFirstArea;}
132  int LastArea() const { return eLastArea;}
133 
134  //return the entries of views in the run tree:
135 
136  int GetVolumeArea(EdbPatternsVolume &vol, int area);
137  int GetVolumeData(EdbPatternsVolume &vol, int nviews, TArrayI &srt, int &nrej);
138 
139  int GetViewsArea(int ud, TArrayI &entr, int area,
140  float &xmin, float &xmax, float &ymin, float &ymax );
141  int GetViewsArea(int ud, TArrayI &entr,
142  float xmin, float xmax, float ymin, float ymax );
143  int GetViewsAreaMarg(int ud, TArrayI &entr, int area, float xmarg, float ymarg);
144 
145  int GetViewsXY(int ud, TArrayI &entr, float x, float y, float r=200.);
146  int GetEntryXY(int ud, float x, float y);
148 
149  int GetPatternXYcut(EdbSegP &s, int side, EdbPattern &pat, float dr, float dt);
150  int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200);
151  int GetPatternData(EdbPattern &pat, int side, int nviews, TArrayI &srt, int &nrej);
152  int GetPatternDataForPrediction( int id, int side, EdbPattern &pat );
153  int GetPatternView( EdbPattern &pat, int side, int entry, int &nrej );
154 
155  bool AcceptRawSegment(EdbView *view, int ud, EdbSegP &segP, int side, int entry);
156 
157  int ViewSide(const EdbView *view) const;
158  float ViewX(const EdbView *view) const {return view->GetXview();} // todo
159  float ViewY(const EdbView *view) const {return view->GetYview();} // todo
160 
161  float SegmentWeight(const EdbSegment &s);
162 
163  bool PassCuts(int ud, EdbSegment &seg);
164  int NCuts(int ud) {
165  if(!eCuts[ud]) return 0;
166  return eCuts[ud]->GetEntriesFast();
167  }
168 
169  bool SetSegmentAtExternalSurface( EdbSegment *seg, int side );
170  float GetRawSegmentPix( EdbSegment *seg );
171  float CalculateSegmentChi2( EdbSegment *seg, float sx, float sy, float sz );
172 
173  void AddSegmentCut(int xi, const char *cutline );
174  void AddSegmentCut(int ud, int xi, float var[10]);
175  void AddSegmentCut(int ud, int xi, float min[5], float max[5]);
176  EdbSegmentCut *GetCut(int ud, int i)
177  { return (EdbSegmentCut *)(eCuts[ud]->UncheckedAt(i)); }
178  float GetCutGR() const {return eCutGR;}
179 
180  void SetCond(int ud, EdbScanCond &cond) {
181  if(ud<0) return;
182  if(ud>2) return;
183  if(eCond[ud]) delete (eCond[ud]);
184  (eCond[ud]) = new EdbScanCond(cond);
185  }
186 
187  EdbScanCond *GetMakeCond(int ud) {return 0;} //TODO?
189  { if(eCond[ud]) return (EdbScanCond *)eCond[ud]; else return 0; }
190 
191  float OverlapX(int ud) {return (ud>0&&ud<3)? (eViewXmax[ud]-eViewXmin[ud] - eXstep[ud]): 0.; }
192  float OverlapY(int ud) {return (ud>0&&ud<3)? (eViewYmax[ud]-eViewYmin[ud] - eYstep[ud]): 0.; }
193 
194  bool CopyRawDataXY( float x0, float y0, float dR, const char *file );
195 
196  void SetCutLeft( int ud, float wmin );
197  void SetCutRight( int ud, float wmin );
198  void SetCutTop( int ud, float wmin );
199  void SetCutBottom( int ud, float wmin );
200 
201  void FillDZMaps();
202 
203  ClassDef(EdbRunAccess,2) // helper class for access to the run data
204 };
205 
206 #endif /* ROOT_EdbRunAccess */
207 
TLegendEntry * entry
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:130
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
void a()
Definition: check_aligned.C:59
float min(TClonesArray *t)
Definition: bitview.cxx:275
TCut cut
Definition: check_shower.C:6
int max
Definition: check_shower.C:41
Definition: EdbAffine.h:17
Definition: EdbCell2.h:151
Definition: EdbCell2.h:19
Definition: EdbLayer.h:40
Definition: EdbPattern.h:280
Definition: EdbPattern.h:348
Definition: EdbRunAccess.h:22
int GetViewsArea(int ud, TArrayI &entr, int area, float &xmin, float &xmax, float &ymin, float &ymax)
Definition: EdbRunAccess.cxx:621
void SetCond(int ud, EdbScanCond &cond)
Definition: EdbRunAccess.h:180
void SetCutRight(int ud, float wmin)
Definition: EdbRunAccess.cxx:225
void ClearCuts()
Definition: EdbRunAccess.cxx:95
bool SetSegmentAtExternalSurface(EdbSegment *seg, int side)
Definition: EdbRunAccess.cxx:1297
Int_t eDoImageMatrixCorr
Definition: EdbRunAccess.h:42
EdbLayer * GetLayer(int id)
Definition: EdbRunAccess.h:125
Float_t eViewXmin[3]
Definition: EdbRunAccess.h:74
float ViewX(const EdbView *view) const
Definition: EdbRunAccess.h:158
void ApplyImageMatrixCorr(int side, float &x, float &y)
Definition: EdbRunAccess.cxx:1054
EdbSegmentCut * GetCut(int ud, int i)
Definition: EdbRunAccess.h:176
bool InitRun(const char *runfile=0, bool do_update=false)
Definition: EdbRunAccess.cxx:112
float GetScoreA() const
Definition: EdbRunAccess.h:120
void ReadVAfile()
Definition: EdbRunAccess.cxx:207
Bool_t eInvertSides
Definition: EdbRunAccess.h:31
Float_t eViewYmin[3]
Definition: EdbRunAccess.h:75
void SetImageCorrectionAff(int side, const char *str)
Definition: EdbRunAccess.cxx:1035
TGraph2D * eGraphDZ[3]
keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view
Definition: EdbRunAccess.h:49
int GetVolumeData(EdbPatternsVolume &vol, int nviews, TArrayI &srt, int &nrej)
Definition: EdbRunAccess.cxx:459
int CheckEmptyViews(EdbPattern &pat)
Definition: EdbRunAccess.cxx:830
void Print()
Definition: EdbRunAccess.cxx:103
Int_t eFirstArea
Definition: EdbRunAccess.h:57
bool InitRunFromRWC(char *rwcname, bool bAddRWD=true, const char *options="")
Definition: EdbRunAccess.cxx:247
void SetCutTop(int ud, float wmin)
Definition: EdbRunAccess.cxx:232
EdbH2 eHViewXY[3]
Definition: EdbRunAccess.h:30
Int_t eDoImageCorr
Definition: EdbRunAccess.h:38
EdbLayer * eLayers[3]
Definition: EdbRunAccess.h:62
EdbRun * eRun
Definition: EdbRunAccess.h:53
TObjArray * eCuts[3]
Definition: EdbRunAccess.h:64
EdbSegment * GetRawSegmentN(int vid, int sid, int rs=0)
Definition: EdbRunAccess.cxx:1226
float CalculateSegmentChi2(EdbSegment *seg, float sx, float sy, float sz)
Definition: EdbRunAccess.cxx:1191
void SetScoreCut(float a, float b)
Definition: EdbRunAccess.h:119
int FillVP()
Definition: EdbRunAccess.cxx:882
int GetVolumeXY(EdbSegP &s, EdbPatternsVolume &vol)
Definition: EdbRunAccess.cxx:332
void Set0()
Definition: EdbRunAccess.cxx:61
EdbPattern * eVP[3]
Definition: EdbRunAccess.h:65
EdbScanCond * GetCond(int ud)
Definition: EdbRunAccess.h:188
bool AcceptRawSegment(EdbView *view, int ud, EdbSegP &segP, int side, int entry)
Definition: EdbRunAccess.cxx:1066
Int_t GetNviewsPerArea()
Definition: EdbRunAccess.h:108
TObjArray * eViewCorr
Definition: EdbRunAccess.h:77
Int_t GetNareas()
Definition: EdbRunAccess.h:107
int ViewSide(const EdbView *view) const
Definition: EdbRunAccess.cxx:448
int GetViewsXY(int ud, TArrayI &entr, float x, float y, float r=200.)
Definition: EdbRunAccess.cxx:288
int Check0Views(EdbPattern &pat, int thres=1)
Definition: EdbRunAccess.cxx:810
void ApplyCorrections(const EdbView &view, EdbSegment &s, const int rs)
Definition: EdbRunAccess.cxx:1235
int GetPatternData(EdbPattern &pat, int side, int nviews, TArrayI &srt, int &nrej)
Definition: EdbRunAccess.cxx:507
float CheckMeanSegsPerView(EdbPattern &pat)
Definition: EdbRunAccess.cxx:802
int LastArea() const
Definition: EdbRunAccess.h:132
virtual ~EdbRunAccess()
Definition: EdbRunAccess.cxx:42
void SetScoreCut(const char *cut)
Definition: EdbRunAccess.h:118
void SetImageCorrection(int side, const char *str)
Definition: EdbRunAccess.cxx:1017
Float_t eYmin
Definition: EdbRunAccess.h:70
int GetPatternView(EdbPattern &pat, int side, int entry, int &nrej)
Definition: EdbRunAccess.cxx:545
EdbScanCond * eCond[3]
Definition: EdbRunAccess.h:63
void FillDZMaps()
Definition: EdbRunAccess.cxx:1410
void ReadImageMatrixCorrection(int side, const char *file)
Definition: EdbRunAccess.cxx:963
Int_t eLastArea
Definition: EdbRunAccess.h:58
void CheckViewStep()
Definition: EdbRunAccess.cxx:844
EdbScanCond * GetMakeCond(int ud)
Definition: EdbRunAccess.h:187
EdbAffine2D eImageCorr[3]
Definition: EdbRunAccess.h:39
TGraph2D * eGraphZ[4]
Definition: EdbRunAccess.h:48
TString eRunFileName
keep the base/layer1/layer2 thickness calculated using eZ1/eZ2/eZ3/eZ4 for each view
Definition: EdbRunAccess.h:52
float OverlapX(int ud)
Definition: EdbRunAccess.h:191
EdbCell2 eCorrMap[3]
Definition: EdbRunAccess.h:43
Int_t eNviewsPerArea
Definition: EdbRunAccess.h:60
Float_t eXmin
Definition: EdbRunAccess.h:70
bool PassCuts(int ud, EdbSegment &seg)
Definition: EdbRunAccess.cxx:1171
Bool_t eUseDensityAsW
Definition: EdbRunAccess.h:35
Int_t eCLUST
Definition: EdbRunAccess.h:26
float GetCutGR() const
Definition: EdbRunAccess.h:178
float GetScoreB() const
Definition: EdbRunAccess.h:121
void CheckViewSize()
Definition: EdbRunAccess.cxx:1363
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1317
Float_t eXstep[3]
Definition: EdbRunAccess.h:72
float ViewY(const EdbView *view) const
Definition: EdbRunAccess.h:159
int NCuts(int ud)
Definition: EdbRunAccess.h:164
Float_t eYmax
Definition: EdbRunAccess.h:70
Int_t eAFID
Definition: EdbRunAccess.h:25
Int_t eTracking
Definition: EdbRunAccess.h:46
EdbLayer * GetMakeLayer(int id)
Definition: EdbRunAccess.cxx:280
int GetViewsAreaMarg(int ud, TArrayI &entr, int area, float xmarg, float ymarg)
Definition: EdbRunAccess.cxx:671
int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
Definition: EdbRunAccess.cxx:382
bool AddRWDToRun(char *rwdname, const char *options="")
Definition: EdbRunAccess.cxx:262
Bool_t eDoViewAnalysis
Definition: EdbRunAccess.h:29
int GetVolumeArea(EdbPatternsVolume &vol, int area)
Definition: EdbRunAccess.cxx:400
int FirstArea() const
Definition: EdbRunAccess.h:131
Bool_t eUseExternalSurface
Definition: EdbRunAccess.h:27
Float_t eViewXmax[3]
Definition: EdbRunAccess.h:74
Int_t eNareas
Definition: EdbRunAccess.h:59
float SegmentWeight(const EdbSegment &s)
Definition: EdbRunAccess.cxx:1046
int GetPatternXYcut(EdbSegP &s, int side, EdbPattern &pat, float dr, float dt)
Definition: EdbRunAccess.cxx:356
EdbRun * GetRun() const
Definition: EdbRunAccess.h:123
Float_t eScoreCut[2]
corrections obtained from the views alignment
Definition: EdbRunAccess.h:78
float OverlapY(int ud)
Definition: EdbRunAccess.h:192
bool CopyRawDataXY(float x0, float y0, float dR, const char *file)
Definition: EdbRunAccess.cxx:1343
EdbPattern * GetVP(int ud) const
Definition: EdbRunAccess.h:129
TH2F * CheckUpDownOffsets()
Definition: EdbRunAccess.cxx:1376
void SetCutLeft(int ud, float wmin)
Definition: EdbRunAccess.cxx:218
void GuessNviewsPerArea()
Definition: EdbRunAccess.cxx:168
Float_t eYstep[3]
Definition: EdbRunAccess.h:73
Float_t eViewYmax[3]
Definition: EdbRunAccess.h:75
int GetEntryXY(int ud, float x, float y)
Definition: EdbRunAccess.cxx:309
TCut eHeaderCut
Definition: EdbRunAccess.h:45
Float_t eCutGR
Definition: EdbRunAccess.h:68
void SetCutBottom(int ud, float wmin)
Definition: EdbRunAccess.cxx:239
Int_t eWeightAlg
Definition: EdbRunAccess.h:32
float GetRawSegmentPix(EdbSegment *seg)
Definition: EdbRunAccess.cxx:1281
void CheckRunLine()
Definition: EdbRunAccess.cxx:746
int GetPatternDataForPrediction(int id, int side, EdbPattern &pat)
Definition: EdbRunAccess.cxx:576
void PrintStat()
Definition: EdbRunAccess.cxx:708
EdbAffine2D * eAffStage2Abs
Definition: EdbRunAccess.h:55
EdbSegment * GetRawSegment(int vid, int sid, int rs=0)
Definition: EdbRunAccess.cxx:1274
Float_t eXmax
Definition: EdbRunAccess.h:70
Definition: EdbRun.h:74
Definition: EdbScanCond.h:10
Definition: EdbSegP.h:18
Definition: EdbSegmentCut.h:6
Definition: EdbSegment.h:61
Definition: EdbView.h:134
Float_t GetXview() const
Definition: EdbView.h:193
Float_t GetYview() const
Definition: EdbView.h:194
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63
EdbRun * run
Definition: check_raw.C:38
const char * fname
Definition: mc2raw.cxx:41
UInt_t id
Definition: tlg2pattern.C:118
void r(int rid=2)
Definition: test.C:201
EdbSegP * s
Definition: tlg2pattern.C:32
TFile * file
Definition: write_pvr.C:3