FEDRA emulsion software from the OPERA Collaboration
EdbAlignmentV.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbAlignmentV
2 #define ROOT_EdbAlignmentV
3 
4 #include "EdbBrick.h"
5 #include "EdbPattern.h"
6 #include "EdbAffine.h"
7 #include "EdbCell1.h"
8 #include "EdbCell2.h"
9 #include "EdbSegCorr.h"
10 
11 //-------------------------------------------------------------------------------------------------
12 class EdbAlignmentV : public TObject
13 {
14  public:
15 
16  Float_t eDVsame[4]; // (dx,dy,dtx,dty) condition for the coinsidence
17 
18  EdbCell2 ePC[2]; // 2-d position cells with patterns segments
19  Float_t eXmarg,eYmarg; // margins for the cell definition
20 
21  TObjArray eS[2]; // "parallel" arrays with the selected combinations of segments
22 
23  Bool_t eUseAffCorr; // if "true" - use eCorrL for corrections
24  EdbSegCorr eCorr[2]; // corrections for side 1 and 2 (v[7]) - the result of the alignment
25  EdbLayer eCorrL[2]; // corrections in form of affine transformations - the final output
26 
27  EdbH1 eH[2][7]; // conditions for the selection procedure for each var of each side
28  // variables: dx,dy,dz, dtx,dty, shr, phi
29  // 0 1 2 3 4 5 6
30 
31  EdbH2 eHxy; // position 2d histo to be used in OptimiseVar2
32 
33  TH1I *eDoubletsRate; // can be filled in FillCombinations()
34 
35  TFile *eOutputFile;
36 
37  public:
38  EdbAlignmentV();
39  virtual ~EdbAlignmentV();
40 
41  // IO, initialization and finalization functions
42  void InitOutputFile(const char *file="report_al.root", const char *option="RECREATE");
43  void CloseOutputFile();
44  void InitHx( int n, float min, float max) { eH[0][0].InitH1(n, min, max); }
45  void InitHy( int n, float min, float max) { eH[0][1].InitH1(n, min, max); }
46  void InitHz( int n, float min, float max) { eH[0][2].InitH1(n, min, max); }
47  void InitHphi( int n, float min, float max) { eH[0][6].InitH1(n, min, max); }
48  void InitHshr0( int n, float min, float max) { eH[0][5].InitH1(n, min, max); }
49  void InitHshr1( int n, float min, float max) { eH[1][5].InitH1(n, min, max); }
50  char *StrDVsame() const {return Form("%7.2f %7.2f %8.5f %8.5f",eDVsame[0],eDVsame[1],eDVsame[2],eDVsame[3]); }
51  Bool_t SideOK(int side);
52  void AssignFlagToS(int flag);
53 
54  // Selector functions
55  bool DefineGuessCell( float xmin1, float xmax1, float ymin1, float ymax1,
56  float xmin2, float xmax2, float ymin2, float ymax2, int np1, int np2, float binOK);
57  void InitPatCellN( EdbCell2 &cell, EdbPattern &pat, int nx, int ny);
58  void InitPatCellBin( int side, EdbPattern &pat, float binx, float biny);
59  void FillCell(int side, EdbPattern &pat); // limits should be already defined
60  void FillCell(int side, TObjArray &pat); // limits should be already defined
61  void FillGuessCell(EdbPattern &p1, EdbPattern &p2, float binOK=1., float offsetMax=2000.);
62  void FillGuessCell(TObjArray &p1, TObjArray &p2, float binOK=1., float offsetMax=2000.);
63  void HDistance(EdbPattern &p1, EdbPattern &p2, float dxMax, float dyMax);
64  int OptimiseVar1(int side, int ivar, EdbH2 *hdxy=0, EdbH2 *hdtxy=0);
65  void OptimiseVar2(int side1, int ivar1, int side2, int ivar2, EdbH2 &h12, EdbH2 *hdxy=0, EdbH2 *hdtxty=0);
66  Int_t Ncoins( float dvlim[4], EdbH2 *hdxy=0, EdbH2 *hdtxty=0, TObjArray *sel1=0, TObjArray *sel2=0 );
67  Bool_t ValidCoinsidence(EdbSegP &s1, EdbSegP &s2, float dvlim[4], float dvfound[4] );
68  Bool_t IsInsideDVsame(EdbSegP &s1, EdbSegP &s2);
69  int FillCombinations();
70  int FillCombinations(float dv[4], float dxMax, float dyMax, bool doFill);
71  int DoubletsFilterOut(int checkview, TH2F *hxy=0, TH2F *htxty=0 );
72  int SelectIsolated();
73  int SelectBestCouple();
74  float CoupleQuality( EdbSegP &s1, EdbSegP &s2 );
75 
76  // Functions applied to the selected parallel arrays
77  Int_t Ncp() {return CheckEqualArr( eS[0], eS[1]); }
78  void AddSegCouple(EdbSegP *s1, EdbSegP *s2) { eS[0].Add(s1); eS[1].Add(s2); }
79  Float_t CalcMeanDiff(int ivar);
80  Float_t CalcMeanDiff2Const(int ivar, int side, float mean);
81  Float_t CalcFractMeanDiff(int ivar, float fraction);
82  Float_t FindDensityPeak(TArrayF &arr, float fraction);
83  Float_t CalcMeanShr(float tmin=0.1, float tmax=2.);
84  Float_t CalcMeanDZ(float tmin=0.1, float tmax=2.);
85  Int_t CalcApplyMeanDiff();
86  Int_t CalcApplyFractMeanDiff();
87  Int_t CalcAffFull();
88 
89  Int_t FindDiff(TObjArray &arr1, TObjArray &arr2, float dvlim[4], float dvfound[4] );
90  Int_t FindCorrDiff(float dvsame[4], int side=0, int nlim=10);
91  float FineCorrZ() { return FineCorrZ(eS[0], eS[1]); }
92  float FineCorrZ(TObjArray &sel1, TObjArray &sel2);
93  float FineCorrPhi(TObjArray &sel1, TObjArray &sel2);
94  static Int_t CheckEqualArr(TObjArray &arr1, TObjArray &arr2);
95 
96  Int_t CalculateAffXYTurn( EdbAffine2D &aff) {return CalculateAffXYTurn( eS[0], eS[1], aff);}
97  Int_t CalculateAffXY( EdbAffine2D &aff) {return CalculateAffXY( eS[0], eS[1], aff);}
98  Int_t CalculateAffTXTY( EdbAffine2D &aff) {return CalculateAffTXTY( eS[0], eS[1], aff);}
99  Int_t CalculateAffXYTurn(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
100  Int_t CalculateAffXYShift(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
101  Int_t CalculateAffXY(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
102  Int_t CalculateAffTXTY(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
103  Int_t CalculateAffTXTYTurn(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
104  Int_t CalculateAffTXTYShift(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff);
105 
106  // functions alpplied to the individual patterns
107  void CorrToCoG(int side, EdbPattern &p);
108  void CorrToCoG(int side, TObjArray &p);
109  void FillThetaHist(int side, EdbH2 &htxy);
110  float Xmin(int side,EdbPattern &p);
111  float Xmax(int side,EdbPattern &p);
112  float Ymin(int side,EdbPattern &p);
113  float Ymax(int side,EdbPattern &p);
114  float Xmin(int side,TObjArray &p);
115  float Xmax(int side,TObjArray &p);
116  float Ymin(int side,TObjArray &p);
117  float Ymax(int side,TObjArray &p);
118  void ApplyLimitsOffset( float &xmin1, float &xmax1, float &xmin2, float &xmax2, float offsetMax);
119 
120  // Correction parameters handling
121 
122  float X( int side, EdbSegP &s) { return eUseAffCorr? eCorrL[side].X(s) : eCorr[side].X(s); }
123  float Y( int side, EdbSegP &s) { return eUseAffCorr? eCorrL[side].Y(s) : eCorr[side].Y(s); }
124  float TX( int side, EdbSegP &s) { return eUseAffCorr? eCorrL[side].TX(s) : eCorr[side].TX(s); }
125  float TY( int side, EdbSegP &s) { return eUseAffCorr? eCorrL[side].TY(s) : eCorr[side].TY(s); }
126  float Var(int side, EdbSegP &s, int ivar) {switch(ivar) {
127  case(0): return X(side,s);
128  case(1): return Y(side,s);
129  case(2): return TX(side,s);
130  case(3): return TY(side,s); } return 0;
131  }
132  float Var(int side, int iseg, int ivar) { return Var(side,*((EdbSegP*)eS[side].UncheckedAt(iseg)),ivar); }
133  void Corr2Aff(EdbLayer &layer);
134  void Corr2Aff(EdbSegCorr &corr, EdbLayer &layer);
135  void PrintCorr();
136 
137  ClassDef(EdbAlignmentV,1) // universal basic alignment class
138 };
139 #endif /* ROOT_EdbAlignmentV */
float min(TClonesArray *t)
Definition: bitview.cxx:275
int max
Definition: check_shower.C:41
Definition: EdbAffine.h:17
Definition: EdbAlignmentV.h:13
float Y(int side, EdbSegP &s)
Definition: EdbAlignmentV.h:123
void InitHz(int n, float min, float max)
Definition: EdbAlignmentV.h:46
static Int_t CheckEqualArr(TObjArray &arr1, TObjArray &arr2)
Definition: EdbAlignmentV.cxx:415
float Var(int side, int iseg, int ivar)
Definition: EdbAlignmentV.h:132
int SelectIsolated()
Definition: EdbAlignmentV.cxx:132
Bool_t SideOK(int side)
Definition: EdbAlignmentV.cxx:405
Int_t Ncp()
Definition: EdbAlignmentV.h:77
float TY(int side, EdbSegP &s)
Definition: EdbAlignmentV.h:125
float Ymin(int side, EdbPattern &p)
Definition: EdbAlignmentV.cxx:1158
int SelectBestCouple()
Definition: EdbAlignmentV.cxx:168
void ApplyLimitsOffset(float &xmin1, float &xmax1, float &xmin2, float &xmax2, float offsetMax)
Definition: EdbAlignmentV.cxx:888
EdbH2 eHxy
Definition: EdbAlignmentV.h:31
virtual ~EdbAlignmentV()
Definition: EdbAlignmentV.cxx:32
char * StrDVsame() const
Definition: EdbAlignmentV.h:50
void CorrToCoG(int side, EdbPattern &p)
Definition: EdbAlignmentV.cxx:456
TFile * eOutputFile
Definition: EdbAlignmentV.h:35
void Corr2Aff(EdbLayer &layer)
Definition: EdbAlignmentV.cxx:1118
void InitPatCellBin(int side, EdbPattern &pat, float binx, float biny)
Definition: EdbAlignmentV.cxx:871
Int_t CalculateAffXYShift(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff)
Definition: EdbAlignmentV.cxx:1044
Float_t FindDensityPeak(TArrayF &arr, float fraction)
Definition: EdbAlignmentV.cxx:604
void InitPatCellN(EdbCell2 &cell, EdbPattern &pat, int nx, int ny)
Definition: EdbAlignmentV.cxx:858
Int_t Ncoins(float dvlim[4], EdbH2 *hdxy=0, EdbH2 *hdtxty=0, TObjArray *sel1=0, TObjArray *sel2=0)
Definition: EdbAlignmentV.cxx:763
void AddSegCouple(EdbSegP *s1, EdbSegP *s2)
Definition: EdbAlignmentV.h:78
Float_t eDVsame[4]
Definition: EdbAlignmentV.h:16
EdbH1 eH[2][7]
Definition: EdbAlignmentV.h:27
Bool_t IsInsideDVsame(EdbSegP &s1, EdbSegP &s2)
Definition: EdbAlignmentV.cxx:73
void InitHphi(int n, float min, float max)
Definition: EdbAlignmentV.h:47
Float_t CalcMeanDiff2Const(int ivar, int side, float mean)
Definition: EdbAlignmentV.cxx:577
Int_t CalculateAffTXTYShift(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff)
Definition: EdbAlignmentV.cxx:1089
Float_t CalcFractMeanDiff(int ivar, float fraction)
Definition: EdbAlignmentV.cxx:592
int OptimiseVar1(int side, int ivar, EdbH2 *hdxy=0, EdbH2 *hdtxy=0)
Definition: EdbAlignmentV.cxx:304
void InitHshr0(int n, float min, float max)
Definition: EdbAlignmentV.h:48
Bool_t ValidCoinsidence(EdbSegP &s1, EdbSegP &s2, float dvlim[4], float dvfound[4])
Definition: EdbAlignmentV.cxx:750
Int_t CalculateAffXY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:97
TH1I * eDoubletsRate
Definition: EdbAlignmentV.h:33
void OptimiseVar2(int side1, int ivar1, int side2, int ivar2, EdbH2 &h12, EdbH2 *hdxy=0, EdbH2 *hdtxty=0)
Definition: EdbAlignmentV.cxx:349
void InitHx(int n, float min, float max)
Definition: EdbAlignmentV.h:44
float FineCorrPhi(TObjArray &sel1, TObjArray &sel2)
Definition: EdbAlignmentV.cxx:490
Int_t CalculateAffTXTYTurn(TObjArray &arr1, TObjArray &arr2, EdbAffine2D &aff)
Definition: EdbAlignmentV.cxx:1074
EdbCell2 ePC[2]
Definition: EdbAlignmentV.h:18
Bool_t eUseAffCorr
Definition: EdbAlignmentV.h:23
void InitHy(int n, float min, float max)
Definition: EdbAlignmentV.h:45
float Xmax(int side, EdbPattern &p)
Definition: EdbAlignmentV.cxx:1146
void AssignFlagToS(int flag)
Definition: EdbAlignmentV.cxx:224
EdbLayer eCorrL[2]
Definition: EdbAlignmentV.h:25
int DoubletsFilterOut(int checkview, TH2F *hxy=0, TH2F *htxty=0)
Definition: EdbAlignmentV.cxx:83
bool DefineGuessCell(float xmin1, float xmax1, float ymin1, float ymax1, float xmin2, float xmax2, float ymin2, float ymax2, int np1, int np2, float binOK)
Definition: EdbAlignmentV.cxx:899
Float_t eYmarg
Definition: EdbAlignmentV.h:19
Float_t CalcMeanDZ(float tmin=0.1, float tmax=2.)
Definition: EdbAlignmentV.cxx:535
void InitHshr1(int n, float min, float max)
Definition: EdbAlignmentV.h:49
Float_t eXmarg
Definition: EdbAlignmentV.h:19
Int_t FindDiff(TObjArray &arr1, TObjArray &arr2, float dvlim[4], float dvfound[4])
Definition: EdbAlignmentV.cxx:723
float Var(int side, EdbSegP &s, int ivar)
Definition: EdbAlignmentV.h:126
Int_t CalculateAffTXTY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:98
Int_t CalculateAffXYTurn(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:96
float X(int side, EdbSegP &s)
Definition: EdbAlignmentV.h:122
float Ymax(int side, EdbPattern &p)
Definition: EdbAlignmentV.cxx:1170
Int_t CalcAffFull()
Definition: EdbAlignmentV.cxx:655
void InitOutputFile(const char *file="report_al.root", const char *option="RECREATE")
Definition: EdbAlignmentV.cxx:55
void FillGuessCell(EdbPattern &p1, EdbPattern &p2, float binOK=1., float offsetMax=2000.)
Definition: EdbAlignmentV.cxx:919
float TX(int side, EdbSegP &s)
Definition: EdbAlignmentV.h:124
int FillCombinations()
Definition: EdbAlignmentV.cxx:234
float Xmin(int side, EdbPattern &p)
Definition: EdbAlignmentV.cxx:1134
float CoupleQuality(EdbSegP &s1, EdbSegP &s2)
Definition: EdbAlignmentV.cxx:205
void FillCell(int side, EdbPattern &pat)
Definition: EdbAlignmentV.cxx:988
void FillThetaHist(int side, EdbH2 &htxy)
Definition: EdbAlignmentV.cxx:212
EdbSegCorr eCorr[2]
Definition: EdbAlignmentV.h:24
void PrintCorr()
Definition: EdbAlignmentV.cxx:40
Float_t CalcMeanDiff(int ivar)
Definition: EdbAlignmentV.cxx:562
TObjArray eS[2]
Definition: EdbAlignmentV.h:21
float FineCorrZ()
Definition: EdbAlignmentV.h:91
void HDistance(EdbPattern &p1, EdbPattern &p2, float dxMax, float dyMax)
Definition: EdbAlignmentV.cxx:793
void CloseOutputFile()
Definition: EdbAlignmentV.cxx:64
Int_t CalcApplyFractMeanDiff()
Definition: EdbAlignmentV.cxx:632
Int_t CalcApplyMeanDiff()
Definition: EdbAlignmentV.cxx:683
Float_t CalcMeanShr(float tmin=0.1, float tmax=2.)
Definition: EdbAlignmentV.cxx:514
Int_t FindCorrDiff(float dvsame[4], int side=0, int nlim=10)
Definition: EdbAlignmentV.cxx:706
EdbAlignmentV()
Definition: EdbAlignmentV.cxx:23
Definition: EdbCell2.h:151
Definition: EdbCell1.h:17
int InitH1(const EdbH1 &h)
Definition: EdbCell1.h:38
Definition: EdbCell2.h:19
Definition: EdbLayer.h:40
float Y() const
Definition: EdbLayer.h:77
float X() const
Definition: EdbLayer.h:76
float TY() const
Definition: EdbLayer.h:80
float TX() const
Definition: EdbLayer.h:79
Definition: EdbPattern.h:280
Definition: EdbSegCorr.h:8
float TX(EdbSegP &s)
Definition: EdbSegCorr.h:34
float X(EdbSegP &s)
Definition: EdbSegCorr.h:25
float Y(EdbSegP &s)
Definition: EdbSegCorr.h:26
float TY(EdbSegP &s)
Definition: EdbSegCorr.h:35
Definition: EdbSegP.h:18
int nx
Definition: emthickness.cpp:60
float fraction
Definition: emthickness.cpp:50
int ny
Definition: emthickness.cpp:62
p
Definition: testBGReduction_AllMethods.C:8
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