CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GsfVertexWeightCalculator.cc
Go to the documentation of this file.
3 
4 #include <cfloat>
5 
7  const RefCountedLinearizedTrackState track, double cov) const
8 {
9  double previousWeight = oldVertex.weightInMixture() * track->weightInMixture();
10  // Jacobians
11  const AlgebraicMatrixN3 & a = track->positionJacobian();
12  const AlgebraicMatrixNM & b = track->momentumJacobian();
13 
14  //track information
15  AlgebraicVectorN trackParameters = track->predictedStateParameters();
16  AlgebraicSymMatrixNN trackParametersError = track->predictedStateError();
17  //vertex information
18  AlgebraicSymMatrix33 oldVertexError = oldVertex.error().matrix_new();
19  AlgebraicSymMatrix33 oldVertexWeight = oldVertex.weight().matrix_new();
20  //Vertex position
21  GlobalPoint oldVertexPosition = oldVertex.position();
22  AlgebraicVector3 oldVertexCoord;
23  oldVertexCoord[0] = oldVertexPosition.x();
24  oldVertexCoord[1] = oldVertexPosition.y();
25  oldVertexCoord[2] = oldVertexPosition.z();
26 
27  // prior momentum information
28  AlgebraicVector3 priorMomentum = track->predictedStateMomentumParameters();
29 
30  AlgebraicSymMatrix33 priorMomentumCov;
31  priorMomentumCov(0,0) = 1.0E-9;
32  priorMomentumCov(1,1) = 1.0E-6;
33  priorMomentumCov(2,2) = 1.0E-6;
34  priorMomentumCov *= cov;
35 
36  AlgebraicVectorN diff = trackParameters - track->constantTerm() -
37  a*oldVertexCoord -b*priorMomentum;
38  track->checkParameters(diff);
39  AlgebraicSymMatrixNN sigmaM = trackParametersError +
40  ROOT::Math::Similarity(a,oldVertexError) +
41  ROOT::Math::Similarity(b,priorMomentumCov);
42 
43  double sigmaDet;
44  sigmaM.Det(sigmaDet);
45  int ifail = ! sigmaM.Invert();
46  if(ifail != 0) {
47  edm::LogWarning("GsfVertexWeightCalculator") << "S matrix inversion failed";
48  return -1.;
49  }
50 
51 
52  double chi = ROOT::Math::Similarity(diff,sigmaM);; //SigmaM is now inverted !!!
53  double weight = pow(2. * M_PI, -0.5 * 5) * sqrt(1./sigmaDet) * exp(-0.5 * chi);
54 
55  if (std::isnan(weight) || sigmaDet<=0.) {
56  edm::LogWarning("GsfVertexWeightCalculator") << "Weight is NaN";
57  return -1.;
58  }
59 
60  return weight*previousWeight;
61 
62 }
LinearizedTrackState< 5 >::AlgebraicMatrixNM AlgebraicMatrixNM
T y() const
Definition: PV3DBase.h:57
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
GlobalPoint position() const
Definition: VertexState.h:29
const AlgebraicSymMatrix33 & matrix_new() const
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
double weightInMixture() const
Definition: VertexState.h:49
bool isnan(float x)
Definition: math.h:13
T sqrt(T t)
Definition: SSEVec.h:28
T z() const
Definition: PV3DBase.h:58
ROOT::Math::SVector< double, 3 > AlgebraicVector3
double calculate(const VertexState &oldVertex, const RefCountedLinearizedTrackState track, double cov) const
GlobalWeight weight() const
Definition: VertexState.h:39
LinearizedTrackState< 5 >::AlgebraicMatrixN3 AlgebraicMatrixN3
#define M_PI
Definition: BFit3D.cc:3
LinearizedTrackState< 5 >::AlgebraicSymMatrixNN AlgebraicSymMatrixNN
double b
Definition: hdecay.h:120
LinearizedTrackState< 5 >::AlgebraicVectorN AlgebraicVectorN
double a
Definition: hdecay.h:121
GlobalError error() const
Definition: VertexState.h:34
T x() const
Definition: PV3DBase.h:56
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40