133 std::vector<RefCountedVertexTrack> refTracks = vtx.
tracks();
134 int size = refTracks.size();
141 double energy_total =
sqrt(par(3) * par(3) + par(6) * par(6) + par(5) * par(5) + par(4) * par(4));
143 std::vector<RefCountedVertexTrack>::const_iterator rt_i;
145 for (rt_i = refTracks.begin(); rt_i != refTracks.end(); rt_i++) {
148 double rho = param[0];
149 double theta = param[1];
150 double phi = param[2];
151 double mass = param[5];
153 if ((**rt_i).linearizedTrack()->charge() != 0) {
154 a = -(**rt_i).refittedState()->freeTrajectoryState().parameters().magneticFieldInInverseGeV(vtx.
position()).
z() *
155 (**rt_i).refittedState()->freeTrajectoryState().parameters().charge();
163 jc_el(1, 1) = -a *
cos(phi) / (rho *
rho);
164 jc_el(2, 1) = -a *
sin(phi) / (rho *
rho);
165 jc_el(3, 1) = -a / (rho * rho *
tan(theta));
167 jc_el(3, 2) = -a / (rho *
sin(theta) *
sin(theta));
169 jc_el(1, 3) = -a *
sin(phi) /
rho;
170 jc_el(2, 3) = a *
cos(phi) /
rho;
173 double energy_local =
sqrt(a * a / (rho * rho) * (1 + 1 / (
tan(theta) *
tan(theta))) + mass * mass);
175 jc_el(4, 4) = energy_total * mass / (par(6) * energy_local);
177 jc_el(4, 1) = (-(energy_total / energy_local * a * a / (rho * rho * rho *
sin(theta) *
sin(theta))) +
178 par(3) * a / (rho *
rho) *
cos(phi) + par(4) * a / (rho *
rho) *
sin(phi) +
179 par(5) * a / (rho * rho *
tan(theta))) /
182 jc_el(4, 2) = (-(energy_total / energy_local * a * a / (rho * rho *
sin(theta) *
sin(theta) *
tan(theta))) +
183 par(5) * a / (rho *
sin(theta) *
sin(theta))) /
186 jc_el(4, 3) = (par(3) *
sin(phi) - par(4) *
cos(phi)) * a / (rho * par(6));
188 jac.sub(4, i_int * 4 + 4, jc_el);
192 cov.sub(1, 1, asHepMatrix<7>((**rt_i).fullCovariance()));
195 AlgebraicMatrix fullCovMatrix(asHepMatrix<7>((**rt_i).fullCovariance()));
207 cov.sub(i_int * 4 + 4, i_int * 4 + 4, m_m_cov);
210 cov.sub(1, i_int * 4 + 4, x_p_cov);
211 cov.sub(i_int * 4 + 4, 1, p_x_cov);
217 for (std::vector<RefCountedVertexTrack>::const_iterator rt_j = refTracks.begin(); rt_j != refTracks.end(); rt_j++) {
221 cov.sub(i_int * 4 + 4, j_int * 4 + 4, i_k_cov_m);
222 cov.sub(j_int * 4 + 4, i_int * 4 + 4, i_k_cov_m.T());
232 return jac * cov * jac.T();
std::vector< RefCountedVertexTrack > tracks() const
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
CLHEP::HepMatrix AlgebraicMatrix
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
AlgebraicMatrixMM tkToTkCovariance(const RefCountedVertexTrack t1, const RefCountedVertexTrack t2) const
GlobalPoint position() const
ROOT::Math::SVector< double, 6 > AlgebraicVector6