File indexing completed on 2024-07-24 04:45:12
0001 #ifndef LinearizedTrackState_H
0002 #define LinearizedTrackState_H
0003
0004
0005
0006 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
0007 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0008 #include "DataFormats/TrajectoryState/interface/TrackCharge.h"
0009 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
0010
0011 #define SMATRIX_USE_CONSTEXPR
0012 #include "Math/SMatrix.h"
0013
0014 #include "RecoVertex/VertexPrimitives/interface/RefittedTrackState.h"
0015 #include <vector>
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 template <unsigned int N>
0036 class LinearizedTrackState : public ReferenceCounted {
0037 public:
0038 typedef ROOT::Math::SVector<double, N> AlgebraicVectorN;
0039 typedef ROOT::Math::SVector<double, N - 2> AlgebraicVectorM;
0040 typedef ROOT::Math::SMatrix<double, N, 3, ROOT::Math::MatRepStd<double, N, 3> > AlgebraicMatrixN3;
0041 typedef ROOT::Math::SMatrix<double, N, N - 2, ROOT::Math::MatRepStd<double, N, N - 2> > AlgebraicMatrixNM;
0042 typedef ROOT::Math::SMatrix<double, N - 2, 3, ROOT::Math::MatRepStd<double, N - 2, 3> > AlgebraicMatrixM3;
0043 typedef ROOT::Math::SMatrix<double, N, N, ROOT::Math::MatRepSym<double, N> > AlgebraicSymMatrixNN;
0044 typedef ROOT::Math::SMatrix<double, N - 2, N - 2, ROOT::Math::MatRepSym<double, N - 2> > AlgebraicSymMatrixMM;
0045 typedef ROOT::Math::SMatrix<double, N + 1, N + 1, ROOT::Math::MatRepSym<double, N + 1> > AlgebraicSymMatrixOO;
0046
0047 typedef ReferenceCountingPointer<RefittedTrackState<N> > RefCountedRefittedTrackState;
0048
0049 ~LinearizedTrackState() override {}
0050
0051
0052
0053
0054
0055 virtual ReferenceCountingPointer<LinearizedTrackState<N> > stateWithNewLinearizationPoint(
0056 const GlobalPoint& newLP) const = 0;
0057
0058
0059
0060 virtual const GlobalPoint& linearizationPoint() const = 0;
0061
0062
0063
0064
0065 virtual const AlgebraicVectorN& constantTerm() const = 0;
0066
0067
0068
0069
0070 virtual const AlgebraicMatrixN3& positionJacobian() const = 0;
0071
0072
0073
0074
0075 virtual const AlgebraicMatrixNM& momentumJacobian() const = 0;
0076
0077
0078
0079 virtual const AlgebraicVectorN& parametersFromExpansion() const = 0;
0080
0081
0082
0083
0084 virtual AlgebraicVectorN predictedStateParameters() const = 0;
0085
0086
0087
0088
0089 virtual AlgebraicVectorM predictedStateMomentumParameters() const = 0;
0090
0091
0092
0093
0094
0095 virtual AlgebraicSymMatrixNN predictedStateWeight(int& error) const = 0;
0096
0097
0098
0099
0100 virtual AlgebraicSymMatrixMM predictedStateMomentumError() const = 0;
0101
0102
0103
0104
0105 virtual AlgebraicSymMatrixNN predictedStateError() const = 0;
0106
0107 virtual bool hasError() const = 0;
0108
0109 virtual TrackCharge charge() const = 0;
0110
0111
0112
0113
0114
0115 virtual bool operator==(const LinearizedTrackState<N>& other) const = 0;
0116
0117
0118
0119
0120 virtual RefCountedRefittedTrackState createRefittedTrackState(const GlobalPoint& vertexPosition,
0121 const AlgebraicVectorM& vectorParameters,
0122 const AlgebraicSymMatrixOO& covarianceMatrix) const = 0;
0123
0124
0125
0126
0127 virtual AlgebraicVectorN refittedParamFromEquation(const RefCountedRefittedTrackState& theRefittedState) const = 0;
0128
0129 virtual inline void checkParameters(AlgebraicVectorN& parameters) const {}
0130
0131 virtual double weightInMixture() const = 0;
0132
0133 virtual std::vector<ReferenceCountingPointer<LinearizedTrackState<N> > > components() const = 0;
0134
0135 virtual reco::TransientTrack track() const = 0;
0136
0137 virtual bool isValid() const { return true; }
0138 };
0139
0140 #endif