#include <EdbAlignment.h>
|
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) |
|
◆ EdbAlignment()
EdbAlignment::EdbAlignment |
( |
| ) |
|
|
inline |
◆ ~EdbAlignment()
EdbAlignment::~EdbAlignment |
( |
| ) |
|
|
inline |
◆ 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();
62 Y2[i] = ((
EdbSegP *)segarr2.At(i))->
Y();
63 }
65}
static int Calculate(const TObjArray &segarr1, const TObjArray &segarr2, EdbAffine2D &aff)
Definition: EdbAlignment.cxx:52
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++) {
81 dY += Y2[i] - Y1[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;
91 for(int i=0; i<n; i++) {
93 y1 = Y1[i] -Y0;
95 y2 = Y2[i] -Y0 -dY;
96
97 r = Sqrt(x1*x1+y1*y1);
98 dPhi += (ATan2(-y2,-x2) - ATan2(-y1,-x1)) *
r;
100 }
101 dPhi /= R;
102
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();
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{
114 Double_t x1new =
X0*Cos(dPhi)-Y0*Sin(dPhi);
115 Double_t y1new =
X0*Sin(dPhi)+Y0*Cos(dPhi);
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: