CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrajectoryStateCombiner.cc
Go to the documentation of this file.
3 
5 
7 TrajectoryStateCombiner::combine(const TSOS& Tsos1, const TSOS& Tsos2) const {
8 
9  auto pzSign = Tsos1.localParameters().pzSign();
10  AlgebraicVector5 && x1 = Tsos1.localParameters().vector();
11  AlgebraicVector5 && x2 = Tsos2.localParameters().vector();
12  const AlgebraicSymMatrix55 &C1 = (Tsos1.localError().matrix());
13  const AlgebraicSymMatrix55 &C2 = (Tsos2.localError().matrix());
14 
15  AlgebraicSymMatrix55 && Csum = C1 + C2;
16  bool ok = invertPosDefMatrix(Csum);
17  AlgebraicMatrix55 && K = C1*Csum;
18 
19  if(!ok) {
20  if (! (C1(0,0) == 0.0 && C2(0,0) == 0.0) )//do not make noise about obviously bad input
21  edm::LogWarning("MatrixInversionFailure")
22  <<"the inversion of the combined error matrix failed. Impossible to get a combined state."
23  <<"\nmatrix 1:"<<C1
24  <<"\nmatrix 2:"<<C2;
25  return TSOS();
26  }
27 
28  AlgebraicVector5 && xcomb = x1 + K*(x2 - x1);
29  //AlgebraicSymMatrix55 Ccomb; Ccomb.assign(K*C2);
30  AlgebraicSymMatrix55 && Ccomb = (AlgebraicMatrix55(K*C2)).LowerBlock();
31 
32  return TSOS( LocalTrajectoryParameters(xcomb, pzSign),
33  LocalTrajectoryError(Ccomb), Tsos1.surface(),
34  &(Tsos1.globalParameters().magneticField())
35  );
36 }
TrajectoryStateOnSurface TSOS
const LocalTrajectoryParameters & localParameters() const
TSOS combine(const TSOS &pTsos1, const TSOS &pTsos2) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
AlgebraicVector5 vector() const
const SurfaceType & surface() const
bool invertPosDefMatrix(ROOT::Math::SMatrix< T, N, N, ROOT::Math::MatRepSym< T, N > > &m)
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
ROOT::Math::SVector< double, 5 > AlgebraicVector5
const GlobalTrajectoryParameters & globalParameters() const
const MagneticField & magneticField() const
float pzSign() const
Sign of the z-component of the momentum in the local frame.
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55