File indexing completed on 2023-03-17 11:23:25
0001 #ifndef ParticleKinematicLinearizedTrackState_H
0002 #define ParticleKinematicLinearizedTrackState_H
0003
0004 #include "RecoVertex/VertexPrimitives/interface/LinearizedTrackState.h"
0005 #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicParticle.h"
0006 #include "RecoVertex/VertexPrimitives/interface/RefittedTrackState.h"
0007 #include "RecoVertex/KinematicFitPrimitives/interface/PerigeeKinematicState.h"
0008 #include "RecoVertex/KinematicFitPrimitives/interface/TransientTrackKinematicStateBuilder.h"
0009 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
0010 #include "DataFormats/CLHEP/interface/Migration.h"
0011 #include "RecoVertex/KinematicFitPrimitives/interface/Matrices.h"
0012
0013 class ParticleKinematicLinearizedTrackState : public LinearizedTrackState<6> {
0014 public:
0015 friend class ParticleKinematicLinearizedTrackStateFactory;
0016 typedef ReferenceCountingPointer<LinearizedTrackState<6> > RefCountedLinearizedTrackState;
0017
0018 ParticleKinematicLinearizedTrackState() { jacobiansAvailable = false; }
0019
0020
0021
0022
0023
0024 ReferenceCountingPointer<LinearizedTrackState<6> > stateWithNewLinearizationPoint(
0025 const GlobalPoint& newLP) const override;
0026
0027
0028
0029
0030 const GlobalPoint& linearizationPoint() const override { return theLinPoint; }
0031
0032
0033
0034
0035 const AlgebraicVector6& constantTerm() const override;
0036
0037
0038
0039
0040 const AlgebraicMatrix63& positionJacobian() const override;
0041
0042
0043
0044
0045 const AlgebraicMatrix64& momentumJacobian() const override;
0046
0047
0048
0049 const AlgebraicVector6& parametersFromExpansion() const override;
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 AlgebraicVector6 predictedStateParameters() const override;
0060
0061
0062
0063
0064 AlgebraicVectorM predictedStateMomentumParameters() const override;
0065
0066
0067
0068
0069 AlgebraicSymMatrix44 predictedStateMomentumError() const override;
0070
0071
0072
0073
0074 AlgebraicSymMatrix66 predictedStateWeight(int& error) const override;
0075
0076
0077
0078
0079 AlgebraicSymMatrix66 predictedStateError() const override;
0080
0081
0082
0083
0084
0085
0086 TrackCharge charge() const override;
0087
0088 RefCountedKinematicParticle particle() const;
0089
0090 bool operator==(LinearizedTrackState<6>& other) const override;
0091
0092 bool hasError() const override;
0093
0094 RefCountedRefittedTrackState createRefittedTrackState(const GlobalPoint& vertexPosition,
0095 const AlgebraicVectorM& vectorParameters,
0096 const AlgebraicSymMatrix77& covarianceMatrix) const override;
0097
0098
0099
0100
0101 AlgebraicVectorN refittedParamFromEquation(const RefCountedRefittedTrackState& theRefittedState) const override;
0102
0103 inline void checkParameters(AlgebraicVectorN& parameters) const override;
0104
0105 double weightInMixture() const override;
0106
0107 std::vector<ReferenceCountingPointer<LinearizedTrackState<6> > > components() const override;
0108
0109 reco::TransientTrack track() const override;
0110
0111 private:
0112
0113
0114
0115 ParticleKinematicLinearizedTrackState(const GlobalPoint& linP, RefCountedKinematicParticle& prt)
0116 : theLinPoint(linP),
0117 part(prt),
0118 jacobiansAvailable(false),
0119 theCharge(prt->currentState().particleCharge()),
0120 impactPointAvailable(false)
0121
0122 {}
0123
0124
0125
0126
0127 void computeJacobians() const;
0128
0129
0130
0131 void computeChargedJacobians() const;
0132
0133
0134
0135
0136 void computeNeutralJacobians() const;
0137
0138 GlobalPoint theLinPoint;
0139 RefCountedKinematicParticle part;
0140 TransientTrackKinematicStateBuilder builder;
0141
0142 mutable bool errorAvailable;
0143 mutable bool jacobiansAvailable;
0144 mutable AlgebraicMatrix63 thePositionJacobian;
0145 mutable AlgebraicMatrix64 theMomentumJacobian;
0146 mutable PerigeeKinematicState thePredState;
0147 mutable AlgebraicVector6 theConstantTerm;
0148 mutable AlgebraicVector6 theExpandedParams;
0149
0150 TrackCharge theCharge;
0151
0152 mutable bool impactPointAvailable;
0153 };
0154 #endif