85 HepVector aOrigin( 10, 0 );
86 HepVector aInfit( 10, 0 );
87 HepSymMatrix VaOrigin( 10, 0 );
88 HepSymMatrix VaInfit( 10, 0 );
90 aOrigin.sub( 8, m_vpar_primary.Vx() );
92 VaOrigin.sub( 8, m_vpar_primary.Evx() );
93 HepVector ctOrigin( 1, 0 );
94 HepVector ctInfit( 1, 0 );
95 HepSymMatrix Vct( 1, 0 );
99 std::vector<double>
chisq;
102 for (
int it = 0; it < m_niter; it++ )
104 HepMatrix D( 3, 10, 0 );
105 HepLorentzVector
p4par = HepLorentzVector( aInfit[0], aInfit[1], aInfit[2], aInfit[3] );
106 HepMatrix E( 3, 1, 0 );
121 d[0] = aInfit[7] - aInfit[4] + ctInfit[0] *
p4par.px() /
p4par.m();
122 d[1] = aInfit[8] - aInfit[5] + ctInfit[0] *
p4par.py() /
p4par.m();
123 d[2] = aInfit[9] - aInfit[6] + ctInfit[0] *
p4par.pz() /
p4par.m();
130 m_vpar_secondary.Vx() );
145 d[0] = aInfit[7] - aInfit[4] +
p4par.px() / a *
sin( a * ctInfit[0] /
p4par.m() ) +
147 d[1] = aInfit[8] - aInfit[5] +
p4par.py() / a *
sin( a * ctInfit[0] /
p4par.m() ) -
149 d[2] = aInfit[9] - aInfit[6] + ctInfit[0] *
p4par.pz() /
p4par.m();
152 HepSymMatrix VD( 3, 0 );
153 HepVector dela0( 10, 0 );
154 HepVector lambda0( 3, 0 );
155 HepVector delct( 1, 0 );
156 HepVector lambda( 3, 0 );
159 VD = ( VaOrigin.similarity( D ) ).inverse( ifail );
160 dela0 = aOrigin - aInfit;
161 lambda0 = VD * ( D * dela0 + d );
162 Vct = ( VD.similarity( E.T() ) ).inverse( ifail );
163 delct = -( Vct * E.T() ) * lambda0;
164 ctInfit = ctInfit + delct;
165 lambda = lambda0 + ( VD * E ) * delct;
166 aInfit = aOrigin - ( VaOrigin * D.T() ) * lambda;
167 chi2 = dot( lambda, D * dela0 + d );
168 VaInfit = VaOrigin - ( VD.similarity( D.T() ) ).similarity( VaOrigin );
169 VaInfit = VaInfit + ( ( ( Vct.similarity( E ) ).similarity( VD ) ).similarity( D.T() ) )
170 .similarity( VaOrigin );
172 chisq.push_back( chi2 );
177 if ( fabs( delchi ) < m_chiter )
break;
180 if ( chi2 < 0 || chi2 > m_chicut )
return okfit;
182 HepLorentzVector
p4par = HepLorentzVector( aInfit[0], aInfit[1], aInfit[2], aInfit[3] );
184 m_ctau_error = sqrt( Vct[0][0] );
185 m_lxyz = ctInfit[0] *
p4par.rho() /
p4par.m();
186 m_lxyz_error = sqrt( Vct[0][0] ) *
p4par.rho() /
p4par.m();
189 for (
int i = 0; i < 3; i++ ) m_crxyz[i] = aInfit[4 + i];
191 HepSymMatrix Ew( 7, 0 );
192 for (
int i = 0; i < 7; i++ )
195 for (
int j = 0; j < 7; j++ ) { Ew[i][j] = VaInfit[i][j]; }