FEDRA emulsion software from the OPERA Collaboration
EdbDistortion.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbDistortion
2 #define ROOT_EdbDistortion
4 // //
5 // EdbDistortion - use overlapped frames as "cormtx" //
6 // //
8 #include "TObject.h"
9 #include "TFile.h"
10 #include "TEnv.h"
11 #include "TNtuple.h"
12 #include "EdbCell2.h"
13 #include "EdbRun.h"
14 
15 //______________________________________________________________________________
16 class EdbClDist : public TObject {
17 public:
18  Float_t eX,eY,eZ; // cluster coords in view RS
19  Float_t eXv,eYv; // view coords
20  Int_t eView;
21  Int_t eFrame;
22  Short_t eIsCenter;
23 
24  EdbClDist(){};
25  EdbClDist(float x,float y,float z, float xv,float yv, int view, int frame, short i, short j)
26  { eX=x; eY=y; eZ=z; eXv=xv; eYv=yv; eView=view; eFrame=frame;}
27  virtual ~EdbClDist(){}
28 
29  ClassDef(EdbClDist,1) // service structure for views correction
30 };
31 
32 //______________________________________________________________________________
33 class EdbDistortionMap : public TObject
34 {
35 private:
36  float eXpix, eYpix; // camera pixel size in microns
37  int eNXpix, eNYpix; // camera matrix size in pixels
38  EdbCell2 eMap; // view divided into cells [microns space]
39 
40 public:
42  virtual ~EdbDistortionMap(){}
43 
44  void InitMap(int nxpix,int nypix, float xpix, float ypix, float stepX, float stepY);
45  void SetDX( int j, double dx );
46  void SetDY( int j, double dy );
47  void AddDX( int j, double dx );
48  void AddDY( int j, double dy );
49  void Fill(float x, float y, float dx, float dy);
50  void Norm();
51  double DX(int j) const;
52  double DY(int j) const;
53  int Bin(int j) const {return eMap.Bin(j);}
54  int Jcell(float x, float y) const {return eMap.Jcell(x,y);}
55 
56  float StepX() {return eMap.Xbin();}
57  float StepY() {return eMap.Ybin();}
58 
59  void Add(const EdbDistortionMap &map, float k=1.);
60  void Substract(const EdbDistortionMap &map) { Add(map,-1.); }
61  void Scale(const float k);
62 
63  TH2F *GetH2dX(const char *name="hdx");
64  TH2F *GetH2dY(const char *name="hdy");
65  void PutH2dX( const TH2F &h2 );
66  void PutH2dY( const TH2F &h2 );
67  void Smooth(int n=1, Option_t *opt="k5a");
68 
69  void DrawCorrMap(TFile *file=0, const char *name=0);
70  void ReadMatrix2Map(const char *file);
71  void GenerateCorrectionMatrix(const char *file);
72  void ApplyCorr(EdbClDist &c);
73  void Save(TFile *f, const char *suffix="");
74 
75  ClassDef(EdbDistortionMap,1) // distortion map for the views correction
76 };
77 
78 //______________________________________________________________________________
79 class EdbDistortionCorr : public TObject {
80 private:
81  int eNClMin; // minimal number of clusters inside grain to be used for corrections
82  float eR2CenterMax; // the maximal distance to the matrix center for the reference cluster
83  int eNCenterMin; // the minimal number of cluster appearance in the central region
84  float eRmax; // acceptance for clusters matching
85 
86  TClonesArray eCl; // array of EdbClDist objects
87  TClonesArray eGr; // array of EdbSegment objects (cluster "clouds" in this case)
88  EdbCell2 eGMap; // map of grains (EdbSegments)
89  EdbDistortionMap eCorrMap; // map of corrections (differential)
90  EdbDistortionMap eCorrMap0; // input map of corrections
91  EdbDistortionMap eCorrMapTot; // eCorrMap+eCorrMap0
92 
93  float eXpix, eYpix; // pixel size in microns
94  int eNXpix, eNYpix; // camera matrix size in pixels
95  int eDirX, eDirY; // microscope steps directions {-1, 0, 1}
96 
99 
100 public:
101  TFile *eOutputFile;
102  bool eDumpGr; // if(1) dump grains tree
103  float eAreaMin, eAreaMax; // clusters Area limits
104  float eVolumeMin, eVolumeMax; // clusters Volume limits
105 
106 public:
108  virtual ~EdbDistortionCorr(){}
109 
110  void InitGMap();
111  void InitCorrMap();
112 
113  void ReadClusters( const char *fname, TClonesArray &arr );
114  void AddCluster( EdbClDist *c );
115 
117  void CalculateGrRefMean();
118  void CalculateCorr();
119  void SaveCorrMap();
120  void GenerateCorrectionMatrix(bool do_add);
121  void SetPar(TEnv &env);
122  void SetPixelSize(float xpix, float ypix) { eXpix=xpix; eYpix=ypix; }
123  void CutGrRef();
124 
125  TNtuple *DumpGr(const char *name);
126 
127  void MakeDistortionMap(const char *fname, TEnv &env, const char *usefile=0, const char *addfile=0);
128  int MakeViewDirectionList( EdbRun &run, int dirx, int diry, TArrayI &entries );
129 
130  void Print();
131 
132  ClassDef(EdbDistortionCorr,1) //
133 };
134 
135 #endif /* ROOT_EdbDistortion */
FILE * f
Definition: RecDispMC.C:150
Definition: EdbCell2.h:151
Definition: EdbDistortion.h:16
EdbClDist()
Definition: EdbDistortion.h:24
Short_t eIsCenter
Definition: EdbDistortion.h:22
Float_t eXv
Definition: EdbDistortion.h:19
Float_t eZ
Definition: EdbDistortion.h:18
EdbClDist(float x, float y, float z, float xv, float yv, int view, int frame, short i, short j)
Definition: EdbDistortion.h:25
virtual ~EdbClDist()
Definition: EdbDistortion.h:27
Int_t eFrame
Definition: EdbDistortion.h:21
Int_t eView
Definition: EdbDistortion.h:20
Float_t eYv
Definition: EdbDistortion.h:19
Float_t eY
Definition: EdbDistortion.h:18
Float_t eX
Definition: EdbDistortion.h:18
Definition: EdbDistortion.h:79
TClonesArray eGr
Definition: EdbDistortion.h:87
float eYpix
Definition: EdbDistortion.h:93
int eNYpix
Definition: EdbDistortion.h:94
int eDirX
Definition: EdbDistortion.h:95
float eRmax
Definition: EdbDistortion.h:84
float eCorrectionMatrixStepX
Definition: EdbDistortion.h:97
float eVolumeMax
Definition: EdbDistortion.h:104
float eCorrectionMatrixStepY
Definition: EdbDistortion.h:98
bool eDumpGr
Definition: EdbDistortion.h:102
void CalculateCorr()
Definition: EdbDistortion.cxx:198
float eAreaMax
Definition: EdbDistortion.h:103
int eNXpix
Definition: EdbDistortion.h:94
void CalculateGrRefMean()
Definition: EdbDistortion.cxx:133
void Print()
Definition: EdbDistortion.cxx:230
void CutGrRef()
Definition: EdbDistortion.cxx:161
float eVolumeMin
Definition: EdbDistortion.h:104
EdbDistortionMap eCorrMapTot
Definition: EdbDistortion.h:91
EdbCell2 eGMap
Definition: EdbDistortion.h:88
float eR2CenterMax
Definition: EdbDistortion.h:82
void SaveCorrMap()
Definition: EdbDistortion.cxx:217
EdbDistortionMap eCorrMap
Definition: EdbDistortion.h:89
TNtuple * DumpGr(const char *name)
Definition: EdbDistortion.cxx:174
int MakeViewDirectionList(EdbRun &run, int dirx, int diry, TArrayI &entries)
Definition: EdbDistortion.cxx:251
void ReadClusters(const char *fname, TClonesArray &arr)
Definition: EdbDistortion.cxx:290
EdbDistortionMap eCorrMap0
Definition: EdbDistortion.h:90
void SetPixelSize(float xpix, float ypix)
Definition: EdbDistortion.h:122
void MakeDistortionMap(const char *fname, TEnv &env, const char *usefile=0, const char *addfile=0)
Definition: EdbDistortion.cxx:323
int eDirY
Definition: EdbDistortion.h:95
void InitGMap()
Definition: EdbDistortion.cxx:96
int eNCenterMin
Definition: EdbDistortion.h:83
TClonesArray eCl
Definition: EdbDistortion.h:86
float eXpix
Definition: EdbDistortion.h:93
TFile * eOutputFile
Definition: EdbDistortion.h:101
void GenerateCorrectionMatrix(bool do_add)
virtual ~EdbDistortionCorr()
Definition: EdbDistortion.h:108
void InitCorrMap()
Definition: EdbDistortion.cxx:88
void SetPar(TEnv &env)
Definition: EdbDistortion.cxx:54
int eNClMin
Definition: EdbDistortion.h:81
void AddCluster(EdbClDist *c)
Definition: EdbDistortion.cxx:106
float eAreaMin
Definition: EdbDistortion.h:103
Definition: EdbDistortion.h:34
int Jcell(float x, float y) const
Definition: EdbDistortion.h:54
int Bin(int j) const
Definition: EdbDistortion.h:53
void Save(TFile *f, const char *suffix="")
Definition: EdbDistortion.cxx:367
int eNXpix
Definition: EdbDistortion.h:37
void Smooth(int n=1, Option_t *opt="k5a")
Definition: EdbDistortion.cxx:547
void GenerateCorrectionMatrix(const char *file)
Definition: EdbDistortion.cxx:665
float eXpix
Definition: EdbDistortion.h:36
EdbCell2 eMap
Definition: EdbDistortion.h:38
float StepY()
Definition: EdbDistortion.h:57
void DrawCorrMap(TFile *file=0, const char *name=0)
Definition: EdbDistortion.cxx:379
TH2F * GetH2dY(const char *name="hdy")
Definition: EdbDistortion.cxx:603
void Fill(float x, float y, float dx, float dy)
Definition: EdbDistortion.cxx:489
void AddDY(int j, double dy)
Definition: EdbDistortion.cxx:528
void ReadMatrix2Map(const char *file)
Definition: EdbDistortion.cxx:447
void Scale(const float k)
Definition: EdbDistortion.cxx:627
EdbDistortionMap()
Definition: EdbDistortion.h:41
void InitMap(int nxpix, int nypix, float xpix, float ypix, float stepX, float stepY)
Definition: EdbDistortion.cxx:636
double DY(int j) const
Definition: EdbDistortion.cxx:540
void Add(const EdbDistortionMap &map, float k=1.)
Definition: EdbDistortion.cxx:614
float StepX()
Definition: EdbDistortion.h:56
int eNYpix
Definition: EdbDistortion.h:37
void ApplyCorr(EdbClDist &c)
Definition: EdbDistortion.cxx:355
void PutH2dY(const TH2F &h2)
Definition: EdbDistortion.cxx:576
void Substract(const EdbDistortionMap &map)
Definition: EdbDistortion.h:60
float eYpix
Definition: EdbDistortion.h:36
void PutH2dX(const TH2F &h2)
Definition: EdbDistortion.cxx:560
void AddDX(int j, double dx)
Definition: EdbDistortion.cxx:522
TH2F * GetH2dX(const char *name="hdx")
Definition: EdbDistortion.cxx:592
void SetDY(int j, double dy)
Definition: EdbDistortion.cxx:516
virtual ~EdbDistortionMap()
Definition: EdbDistortion.h:42
void Norm()
Definition: EdbDistortion.cxx:499
void SetDX(int j, double dx)
Definition: EdbDistortion.cxx:510
double DX(int j) const
Definition: EdbDistortion.cxx:534
float Ybin() const
Definition: EdbCell2.h:78
int Jcell(int ix, int iy) const
Definition: EdbCell2.h:57
float Xbin() const
Definition: EdbCell2.h:77
int Bin(float x, float y) const
Definition: EdbCell2.h:80
Definition: EdbRun.h:74
TH1F * h2
Definition: energy.C:19
EdbRun * run
Definition: check_raw.C:38
const char * opt
Definition: mc2raw.cxx:42
const char * fname
Definition: mc2raw.cxx:41
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
TFile * file
Definition: write_pvr.C:3