File indexing completed on 2024-07-24 04:45:12
0001 #ifndef PerigeeMultiLTS_H
0002 #define PerigeeMultiLTS_H
0003
0004 #include "RecoVertex/VertexPrimitives/interface/LinearizedTrackState.h"
0005 #include "RecoVertex/VertexTools/interface/LinearizedTrackStateFactory.h"
0006 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
0007 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
0008 #include <vector>
0009
0010
0011
0012
0013
0014 class PerigeeMultiLTS : public LinearizedTrackState<5> {
0015 public:
0016 typedef ReferenceCountingPointer<LinearizedTrackState<5> > RefCountedLinearizedTrackState;
0017
0018
0019
0020
0021 friend class MultiPerigeeLTSFactory;
0022
0023
0024
0025
0026
0027
0028 RefCountedLinearizedTrackState stateWithNewLinearizationPoint(const GlobalPoint& newLP) const override;
0029
0030
0031
0032
0033 const GlobalPoint& linearizationPoint() const override { return theLinPoint; }
0034
0035 reco::TransientTrack track() const override { return theTrack; }
0036
0037
0038
0039
0040
0041 const TrajectoryStateOnSurface state() const { return theTSOS; }
0042
0043
0044
0045
0046 const AlgebraicVectorN& constantTerm() const override;
0047
0048
0049
0050
0051 const AlgebraicMatrixN3& positionJacobian() const override;
0052
0053
0054
0055
0056 const AlgebraicMatrixNM& momentumJacobian() const override;
0057
0058
0059
0060
0061 const AlgebraicVectorN& parametersFromExpansion() const override;
0062
0063
0064
0065
0066
0067 const TrajectoryStateClosestToPoint& predictedState() const;
0068
0069
0070
0071
0072 AlgebraicVectorN predictedStateParameters() const override;
0073
0074
0075
0076
0077 AlgebraicVectorM predictedStateMomentumParameters() const override;
0078
0079
0080
0081
0082
0083 AlgebraicSymMatrixNN predictedStateWeight(int& error) const override;
0084
0085
0086
0087
0088 AlgebraicSymMatrixNN predictedStateError() const override;
0089
0090
0091
0092
0093 AlgebraicSymMatrixMM predictedStateMomentumError() const override;
0094
0095 TrackCharge charge() const override { return theCharge; }
0096
0097 bool hasError() const override;
0098
0099 bool operator==(const LinearizedTrackState<5>& other) const override;
0100
0101
0102
0103
0104 RefCountedRefittedTrackState createRefittedTrackState(const GlobalPoint& vertexPosition,
0105 const AlgebraicVectorM& vectorParameters,
0106 const AlgebraicSymMatrixOO& covarianceMatrix) const override;
0107
0108 AlgebraicVector5 refittedParamFromEquation(const RefCountedRefittedTrackState& theRefittedState) const override;
0109
0110 void inline checkParameters(AlgebraicVector5& parameters) const override;
0111
0112
0113
0114
0115
0116 double weightInMixture() const override { return theTSOS.weight(); }
0117
0118
0119
0120
0121
0122 std::vector<ReferenceCountingPointer<LinearizedTrackState<5> > > components() const override { return ltComp; }
0123
0124 private:
0125
0126
0127
0128
0129
0130
0131 PerigeeMultiLTS(const GlobalPoint& linP, const reco::TransientTrack& track, const TrajectoryStateOnSurface& tsos);
0132
0133
0134
0135 void prepareCollapsedState() const;
0136
0137 GlobalPoint theLinPoint;
0138 reco::TransientTrack theTrack;
0139
0140 const TrajectoryStateOnSurface theTSOS;
0141 std::vector<RefCountedLinearizedTrackState> ltComp;
0142 mutable RefCountedLinearizedTrackState collapsedStateLT;
0143 LinearizedTrackStateFactory theLTSfactory;
0144 TrackCharge theCharge;
0145 mutable bool collapsedStateAvailable;
0146 };
0147
0148 #endif