FEDRA emulsion software from the OPERA Collaboration
EdbAlignment Class Reference

#include <EdbAlignment.h>

Inheritance diagram for EdbAlignment:
Collaboration diagram for EdbAlignment:

Public Member Functions

 EdbAlignment ()
 
 ~EdbAlignment ()
 

Static Public Member Functions

static int Calculate (const TObjArray &segarr1, const TObjArray &segarr2, EdbAffine2D &aff)
 
static int Calculate (TArrayF &X1, TArrayF &Y1, TArrayF &X2, TArrayF &Y2, EdbAffine2D &aff)
 
static int CalculateM (const TObjArray &segarr1, const TObjArray &segarr2, EdbAffine2D &aff, int flag=0)
 
static float DTX (const TObjArray &segarr1, const TObjArray &segarr2)
 
static float DTY (const TObjArray &segarr1, const TObjArray &segarr2)
 
static float DVAR (const TObjArray &segarr1, const TObjArray &segarr2, int ivar)
 
static float DX (const TObjArray &segarr1, const TObjArray &segarr2)
 
static float DY (const TObjArray &segarr1, const TObjArray &segarr2)
 
static void MakeAff (Double_t X0, Double_t Y0, Double_t dX, Double_t dY, Double_t dPhi, EdbAffine2D &aff)
 

Constructor & Destructor Documentation

◆ EdbAlignment()

EdbAlignment::EdbAlignment ( )
inline
17{}

◆ ~EdbAlignment()

EdbAlignment::~EdbAlignment ( )
inline
18{}

Member Function Documentation

◆ Calculate() [1/2]

int EdbAlignment::Calculate ( const TObjArray &  segarr1,
const TObjArray &  segarr2,
EdbAffine2D aff 
)
static

aff applied to pattern 1 gives pattern 2

53{
55 int n = Min( segarr1.GetEntries(), segarr2.GetEntries() );
56 if(n<1) return 0;
57 TArrayF X1(n), Y1(n), X2(n), Y2(n);
58 for(int i=0; i<n; i++) {
59 X1[i] = ((EdbSegP *)segarr1.At(i))->X();
60 Y1[i] = ((EdbSegP *)segarr1.At(i))->Y();
61 X2[i] = ((EdbSegP *)segarr2.At(i))->X();
62 Y2[i] = ((EdbSegP *)segarr2.At(i))->Y();
63 }
64 return Calculate( X1,Y1, X2,Y2, aff );
65}
static int Calculate(const TObjArray &segarr1, const TObjArray &segarr2, EdbAffine2D &aff)
Definition: EdbAlignment.cxx:52
Definition: EdbSegP.h:21
Double_t X
Definition: tlg2couples.C:76
Double_t Y
Definition: tlg2couples.C:76
Float_t X2
Definition: testChi2Ordering.C:24

◆ Calculate() [2/2]

int EdbAlignment::Calculate ( TArrayF &  X1,
TArrayF &  Y1,
TArrayF &  X2,
TArrayF &  Y2,
EdbAffine2D aff 
)
static

this function do not use the matrix inversion for the precision reasons aff applied to pattern 1 gives pattern 2

69{
72
73 int n = Min( X1.GetSize(), X2.GetSize() );
74 if(n<1) return 0;
75
76 Double_t dX = 0, dY=0, dPhi=0;
77 Double_t X0 = 0, Y0=0;
78
79 for(int i=0; i<n; i++) {
80 dX += X2[i] - X1[i];
81 dY += Y2[i] - Y1[i];
82 X0 += X1[i];
83 Y0 += Y1[i];
84 }
85 dX /= n; dY /= n; X0 /= n; Y0 /= n;
86
87 if(n<2) return n;
88
89 Double_t x1 = 0, y1=0, x2=0, y2=0;
90 Double_t R=0, r=0;
91 for(int i=0; i<n; i++) {
92 x1 = X1[i] -X0;
93 y1 = Y1[i] -Y0;
94 x2 = X2[i] -X0 -dX;
95 y2 = Y2[i] -Y0 -dY;
96
97 r = Sqrt(x1*x1+y1*y1);
98 dPhi += (ATan2(-y2,-x2) - ATan2(-y1,-x1)) * r;
99 R += r;
100 }
101 dPhi /= R;
102
103 MakeAff(X0,Y0, dX,dY, dPhi, aff);
104
105 printf("X0,Y0 = %f %f dX,dY= %f %f dPhi = %f\n",X0,Y0,dX,dY,dPhi);
106 return n;
107}
brick X0
Definition: RecDispMC.C:112
static void MakeAff(Double_t X0, Double_t Y0, Double_t dX, Double_t dY, Double_t dPhi, EdbAffine2D &aff)
Definition: EdbAlignment.cxx:110
void r(int rid=2)
Definition: test.C:201

◆ CalculateM()

int EdbAlignment::CalculateM ( const TObjArray &  segarr1,
const TObjArray &  segarr2,
EdbAffine2D aff,
int  flag = 0 
)
static

interface to the matrix procedure

37{
39 int n = Min( segarr1.GetEntries(), segarr2.GetEntries() );
40 if(n<1) return 0;
41 TArrayF X1(n), Y1(n), X2(n), Y2(n);
42 for(int i=0; i<n; i++) {
43 X1[i] = ((EdbSegP *)segarr1.At(i))->X();
44 Y1[i] = ((EdbSegP *)segarr1.At(i))->Y();
45 X2[i] = ((EdbSegP *)segarr2.At(i))->X();
46 Y2[i] = ((EdbSegP *)segarr2.At(i))->Y();
47 }
48 return aff.Calculate( n, X1.fArray,Y1.fArray, X2.fArray,Y2.fArray , flag);
49}
Int_t Calculate(EdbPointsBox2D *b1, EdbPointsBox2D *b2)
Definition: EdbAffine.cxx:231

◆ DTX()

static float EdbAlignment::DTX ( const TObjArray &  segarr1,
const TObjArray &  segarr2 
)
inlinestatic
23{ return DVAR(segarr1,segarr2,3); }
static float DVAR(const TObjArray &segarr1, const TObjArray &segarr2, int ivar)

◆ DTY()

static float EdbAlignment::DTY ( const TObjArray &  segarr1,
const TObjArray &  segarr2 
)
inlinestatic
24{ return DVAR(segarr1,segarr2,4); }

◆ DVAR()

static float EdbAlignment::DVAR ( const TObjArray &  segarr1,
const TObjArray &  segarr2,
int  ivar 
)
static

◆ DX()

static float EdbAlignment::DX ( const TObjArray &  segarr1,
const TObjArray &  segarr2 
)
inlinestatic
21{ return DVAR(segarr1,segarr2,1); }

◆ DY()

static float EdbAlignment::DY ( const TObjArray &  segarr1,
const TObjArray &  segarr2 
)
inlinestatic
22{ return DVAR(segarr1,segarr2,2); }

◆ MakeAff()

void EdbAlignment::MakeAff ( Double_t  X0,
Double_t  Y0,
Double_t  dX,
Double_t  dY,
Double_t  dPhi,
EdbAffine2D aff 
)
static
111{
112 aff.Reset();
113 aff.Rotate(dPhi);
114 Double_t x1new = X0*Cos(dPhi)-Y0*Sin(dPhi);
115 Double_t y1new = X0*Sin(dPhi)+Y0*Cos(dPhi);
116 aff.ShiftX(X0-x1new+dX);
117 aff.ShiftY(Y0-y1new+dY);
118}
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
void Reset()
Definition: EdbAffine.cxx:72
void Rotate(float angle)
Definition: EdbAffine.cxx:354

The documentation for this class was generated from the following files: