3 #include <Math/SMatrix.h>
4 #include <Math/MatrixFunctions.h>
20 inline double sqr(
double arg) {
return arg *
arg; }
22 typedef ROOT::Math::SMatrix<double, 3, 4> Matrix34;
23 typedef ROOT::Math::SMatrix<double, 4, 5> Matrix45;
24 typedef ROOT::Math::SMatrix<double, 5, 4> Matrix54;
25 typedef ROOT::Math::SMatrix<double, 4, 6> Matrix46;
26 typedef ROOT::Math::SMatrix<double, 6, 4> Matrix64;
27 typedef ROOT::Math::SMatrix<double, 6, 6, ROOT::Math::MatRepSym<double, 6> > Matrix6S;
50 double rho2 = pred[2] * pred[2] + 1.;
54 jacobian(0, 1) = pred[0] * pred[2];
57 jacobian(2, 1) = rho2;
60 return ROOT::Math::Similarity(jacobian, error.
matrix());
72 double perp2 = direction.perp2();
74 double tip = priorPosition.y() * dir.x() - priorPosition.x() * dir.y();
75 double l = priorPosition.x() * dir.x() + priorPosition.y() * dir.y();
83 jacobian(0, 0) = -dir.x() * dir.z();
84 jacobian(1, 0) = -dir.y();
85 jacobian(0, 1) = -dir.y() * dir.z();
86 jacobian(1, 1) = dir.x();
88 jacobian(0, 3) = -dir.z() * priorPosition.x();
89 jacobian(1, 3) = priorPosition.y();
90 jacobian(3, 3) = -dir.y();
91 jacobian(0, 4) = -dir.z() * priorPosition.y();
92 jacobian(1, 4) = -priorPosition.x();
93 jacobian(3, 4) = dir.x();
98 origCov.Place_at(priorError.
matrix_new(), 0, 0);
101 covariance_ = ROOT::Math::Similarity(jacobian, origCov);
110 double dTheta = std::cosh((
double)direction.eta()) * coneRadius;
112 double r2 = direction.mag2();
114 double perp = direction.perp();
115 double P = direction.x() /
perp;
116 double p = direction.y() /
perp;
117 double T = direction.z() /
r;
119 double h2 = dTheta * dTheta;
120 double d2 = coneRadius * coneRadius;
122 GlobalError cov(r2 * (T*T * P*P * h2 + t*t * p*p * d2),
123 r2 * p*P * (T*T * h2 - t*t * d2),
124 r2 * (T*T * p*p * h2 + t*t * P*P * d2),
129 init(priorPosition, priorError, direction, cov);
136 prediction_(
convert(trajectory)),
137 covariance_(
convert(prediction_, error))
147 covariance_(
convert(prediction_, track.covariance()))
158 jacobian(0, 3) = -y * lambda - x *
ip();
160 jacobian(1, 3) = x * lambda - y *
ip();
164 return ROOT::Math::Similarity(jacobian,
covariance());
174 jacobian(0, 3) = -y * lambda - x *
ip();
176 jacobian(1, 3) = x * lambda - y *
ip();
183 return ROOT::Math::Similarity(jacobian,
covariance());
194 double rho2I = 1. /
rho2();
198 jacobian(1, 2) = rho2I;
201 jacobian(4, 0) = rhoI;
202 jacobian(4, 2) = -
z() * rhoI *
cotTheta() * rho2I;
const GlobalPoint origin() const
ROOT::Math::SMatrix< double, 4, 4, ROOT::Math::MatRepSym< double, 4 > > Error
double lambda(const GlobalPoint &point) const
Sin< T >::type sin(const T &t)
FreeTrajectoryState fts(const MagneticField *fieldProvider) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
const AlgebraicSymMatrix33 & matrix_new() const
GlobalTrajectoryParameters globalTrajectory(const MagneticField *fieldProvider) const
GlobalVector momentum() const
Cos< T >::type cos(const T &t)
void init(const GlobalPoint &priorPosition, const GlobalError &priorError, const GlobalVector &direction, const GlobalError &directionError)
Tan< T >::type tan(const T &t)
math::XYZPoint Point
point in the space
CurvilinearTrajectoryError curvilinearError() const
CartesianError cartesianError(double lambda=0.) const
GlobalPoint position() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalVector
vector in glovbal coordinate system
Track track(double ndof=0., double chi2=0.) const
T perp2() const
Squared magnitude of transverse component.
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalPoint
point in global coordinate system
T perp() const
Magnitude of transverse component.
const Error & covariance() const
const AlgebraicSymMatrix55 & matrix() const
Square< F >::type sqr(const F &f)
ROOT::Math::SVector< double, 4 > Vector
math::XYZVector Vector
spatial vector
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
GlobalError positionError(double lambda=0.) const
const GlobalVector direction() const