4 #include <Math/SVector.h>
5 #include <Math/SMatrix.h>
6 #include <Math/MatrixFunctions.h>
21 static inline double sqr(
double arg) {
return arg *
arg; }
23 using namespace ROOT::Math;
25 typedef SVector<double, 4> Vector4;
26 typedef SVector<double, 2> Vector2;
28 typedef SMatrix<double, 4, 4, MatRepSym<double, 4> > Matrix4S;
29 typedef SMatrix<double, 3, 3, MatRepSym<double, 3> > Matrix3S;
30 typedef SMatrix<double, 2, 2, MatRepSym<double, 2> > Matrix2S;
31 typedef SMatrix<double, 4, 4> Matrix44;
32 typedef SMatrix<double, 4, 2> Matrix42;
33 typedef SMatrix<double, 2, 4> Matrix24;
34 typedef SMatrix<double, 2, 3> Matrix23;
35 typedef SMatrix<double, 2, 2> Matrix22;
42 Matrix2S measErr, measPredErr;
50 using namespace ROOT::Math;
63 measToLocal(0, 0) = - dz *
x;
64 measToLocal(0, 1) = - dz *
y;
65 measToLocal(0, 2) = 1.;
66 measToLocal(1, 0) =
y;
67 measToLocal(1, 1) = -
x;
83 residual[0] =
point.z() - pred.
z() - dz *
lip;
84 residual[1] = pred.
ip() -
tip;
90 double &
ndof,
double &chi2)
const
92 using namespace ROOT::Math;
94 KalmanState kalmanState(pred, state);
96 if (state.
weight() < 1.0e-3)
100 Matrix2S invErr = kalmanState.measPredErr +
101 (1.0 / state.
weight()) * kalmanState.measErr;
102 if (!invErr.Invert())
106 Matrix42 gain = pred.
covariance() * Transpose(kalmanState.h) * invErr;
109 Vector4 newPred = pred.
prediction() + (gain * kalmanState.residual);
110 Matrix44 tmp44 = SMatrixIdentity();
111 tmp44 = (tmp44 - gain * kalmanState.h) * pred.
covariance();
112 Matrix4S newError(tmp44.LowerBlock());
115 Matrix22 tmp22 = SMatrixIdentity();
116 tmp22 = tmp22 - kalmanState.h * gain;
117 Vector2 filtRes = tmp22 * kalmanState.residual;
118 tmp22 *= kalmanState.measErr;
119 Matrix2S filtResErr(tmp22.LowerBlock());
120 if (!filtResErr.Invert())
123 ndof += state.
weight() * 2.;
124 chi2 += state.
weight() * Similarity(filtRes, filtResErr);
132 double &
ndof,
double &chi2,
133 bool withPredError)
const
135 using namespace ROOT::Math;
137 KalmanState kalmanState(pred, state);
143 Matrix2S invErr = kalmanState.measErr;
145 invErr += kalmanState.measPredErr;
146 if (!invErr.Invert()) {
152 chi2 = Similarity(kalmanState.residual, invErr);
Sin< T >::type sin(const T &t)
GhostTrackPrediction update(const GhostTrackPrediction &pred, const GhostTrackState &state, double &ndof, double &chi2) const
T x() const
Cartesian x coordinate.
Cos< T >::type cos(const T &t)
if(c.getParameter< edm::InputTag >("puppiValueMap").label().size()!=0)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
void contribution(const GhostTrackPrediction &pred, const GhostTrackState &state, double &ndof, double &chi2, bool withPredError=false) const
const Vector & prediction() const
const Error & covariance() const
Square< F >::type sqr(const F &f)
CovarianceMatrix cartesianCovariance() const
GlobalPoint globalPosition() const
*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