Go to the documentation of this file.00001 #ifndef LinearizedTrackState_H
00002 #define LinearizedTrackState_H
00003
00004
00005
00006
00007 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00008 #include "TrackingTools/TrajectoryState/interface/CopyUsingClone.h"
00009 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00010 #include "DataFormats/TrajectoryState/interface/TrackCharge.h"
00011 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00012 #include "Math/SMatrix.h"
00013 #include "DataFormats/CLHEP/interface/Migration.h"
00014
00015 #include "RecoVertex/VertexPrimitives/interface/RefittedTrackState.h"
00016 #include <vector>
00017
00036 template <unsigned int N>
00037 class LinearizedTrackState : public ReferenceCounted {
00038
00039 public:
00040
00041 typedef ROOT::Math::SVector<double,N> AlgebraicVectorN;
00042 typedef ROOT::Math::SVector<double,N-2> AlgebraicVectorM;
00043 typedef ROOT::Math::SMatrix<double,N,3,ROOT::Math::MatRepStd<double,N,3> > AlgebraicMatrixN3;
00044 typedef ROOT::Math::SMatrix<double,N,N-2,ROOT::Math::MatRepStd<double,N,N-2> > AlgebraicMatrixNM;
00045 typedef ROOT::Math::SMatrix<double,N-2,3,ROOT::Math::MatRepStd<double,N-2,3> > AlgebraicMatrixM3;
00046 typedef ROOT::Math::SMatrix<double,N,N,ROOT::Math::MatRepSym<double,N> > AlgebraicSymMatrixNN;
00047 typedef ROOT::Math::SMatrix<double,N-2,N-2,ROOT::Math::MatRepSym<double,N-2> > AlgebraicSymMatrixMM;
00048 typedef ROOT::Math::SMatrix<double,N+1,N+1,ROOT::Math::MatRepSym<double,N+1> > AlgebraicSymMatrixOO;
00049
00050 typedef ReferenceCountingPointer<RefittedTrackState<N> > RefCountedRefittedTrackState;
00051
00052 virtual ~LinearizedTrackState(){}
00053
00058 virtual ReferenceCountingPointer<LinearizedTrackState<N> > stateWithNewLinearizationPoint
00059 (const GlobalPoint & newLP) const = 0;
00060
00063 virtual const GlobalPoint & linearizationPoint() const = 0;
00064
00068 virtual const AlgebraicVectorN & constantTerm() const = 0;
00069
00073 virtual const AlgebraicMatrixN3 & positionJacobian() const = 0;
00074
00078 virtual const AlgebraicMatrixNM & momentumJacobian() const = 0;
00079
00082 virtual const AlgebraicVectorN & parametersFromExpansion() const = 0;
00083
00087 virtual AlgebraicVectorN predictedStateParameters() const = 0;
00088
00092 virtual AlgebraicVectorM predictedStateMomentumParameters() const = 0;
00093
00098 virtual AlgebraicSymMatrixNN predictedStateWeight(int & error) const = 0;
00099
00103 virtual AlgebraicSymMatrixMM predictedStateMomentumError() const = 0;
00104
00108 virtual AlgebraicSymMatrixNN predictedStateError() const = 0;
00109
00110 virtual bool hasError() const = 0;
00111
00112 virtual TrackCharge charge() const = 0;
00113
00116
00117
00118 virtual bool operator ==(LinearizedTrackState<N> & other) const = 0;
00119
00123 virtual RefCountedRefittedTrackState createRefittedTrackState(
00124 const GlobalPoint & vertexPosition,
00125 const AlgebraicVectorM & vectorParameters,
00126 const AlgebraicSymMatrixOO & covarianceMatrix) const = 0;
00127
00131 virtual AlgebraicVectorN refittedParamFromEquation(
00132 const RefCountedRefittedTrackState & theRefittedState) const = 0;
00133
00134 virtual inline void checkParameters(AlgebraicVectorN & parameters) const
00135 {}
00136
00137 virtual double weightInMixture() const = 0;
00138
00139 virtual std::vector< ReferenceCountingPointer<LinearizedTrackState<N> > > components()
00140 const = 0;
00141
00142 virtual reco::TransientTrack track() const = 0;
00143
00144 virtual bool isValid() const { return true; }
00145 };
00146
00147 #endif