34 HepSymMatrix Wc(2, 0);
36 Wc[0][1] = Wc[1][0] = err[0][3];
38 Wc = Wc.inverse(ifail);
40 HepVector p0(3, 0), v0(3, 0);
41 double pxy = 1./fabs(helix[2]);
42 p0[0] = 0 - pxy*
sin(helix[1]);
43 p0[1] = pxy*
cos(helix[1]);
44 p0[2] = pxy * helix[4];
45 v0[0] = helix[0]*
cos(helix[1]);
46 v0[1] = helix[0]*
sin(helix[1]);
52 int charge = (helix[2]>0 ? +1 :-1);
53 double a =
alpha * bField * charge;
54 double T0 = sqrt((p0[0]+a*p0[1])*(p0[0]+a*p0[1])+(p0[1]-a*p0[0])*(p0[1]-a*p0[0]));
56 HepMatrix Dc(2, 3, 0);
57 Dc[0][0] = (p0[1] - a*v0[0])/T0;
58 Dc[0][1] = 0 - (p0[0] + a*v0[1])/T0;
59 Dc[1][0] = 0 - (p0[2]/T0) * (p0[0] + a*v0[1])/T0;
60 Dc[1][1] = 0 - (p0[2]/T0) * (p0[1] - a*v0[0])/T0;
66 HepSymMatrix DTWD(3, 0);
67 DTWD = Wc.similarity(Dc.T());
73 m_DTWD.push_back(DTWD);
78 bool fitResult =
false;
81 HepSymMatrix total_DTWD(3, 0);
82 HepVector total_xp(3, 0);
84 for(
int i = 0; i < m_DTWD.size(); i++) {
85 total_DTWD += m_DTWD[i];
86 total_xp += m_DTWD[i]*m_xp[i];
88 m_Vx = total_DTWD.inverse(ifail) * total_xp;
89 m_Evx = total_DTWD.inverse(ifail);
92 for(
int i = 0; i < m_xp.size(); i++) {
93 double chi2 = (m_DTWD[i].similarity((m_xp[i] - m_Vx).T()))[0][0];