24 #ifndef genfit_RKTrackRep_h
25 #define genfit_RKTrackRep_h
44 memset(state7_, 0x00, 7*
sizeof(
double));
57 memset(jac7_, 0,
sizeof(
M7x7));
58 memset(noise7_, 0,
sizeof(
M7x7));
84 bool stopAtBoundary =
false,
85 bool calcJacobianNoise =
false)
const;
90 const TVector3& linePoint,
91 const TVector3& lineDirection,
92 bool stopAtBoundary =
false,
93 bool calcJacobianNoise =
false)
const;
96 const TVector3&
point,
97 bool stopAtBoundary =
false,
98 bool calcJacobianNoise =
false)
const {
99 return extrapToPoint(state, point, NULL, stopAtBoundary, calcJacobianNoise);
103 const TVector3&
point,
104 const TMatrixDSym& G,
105 bool stopAtBoundary =
false,
106 bool calcJacobianNoise =
false)
const {
107 return extrapToPoint(state, point, &G, stopAtBoundary, calcJacobianNoise);
112 const TVector3& linePoint = TVector3(0.,0.,0.),
113 const TVector3& lineDirection = TVector3(0.,0.,1.),
114 bool stopAtBoundary =
false,
115 bool calcJacobianNoise =
false)
const;
119 const TVector3&
point = TVector3(0.,0.,0.),
120 bool stopAtBoundary =
false,
121 bool calcJacobianNoise =
false)
const;
125 bool stopAtBoundary =
false,
126 bool calcJacobianNoise =
false)
const;
150 std::vector<genfit::MatStep>
getSteps()
const;
178 bool varField =
true,
179 bool calcOnlyLastRowOfJ =
false)
const;
189 const TVector3&
point,
190 const TMatrixDSym* G = NULL,
191 bool stopAtBoundary =
false,
192 bool calcJacobianNoise =
false)
const;
200 void calcJ_pM_5x7(
M5x7& J_pM,
const TVector3& U,
const TVector3& V,
const M1x3& pTilde,
double spu)
const;
209 void calcJ_Mp_7x5(
M7x5& J_Mp,
const TVector3& U,
const TVector3& V,
const TVector3&
W,
const M1x3& A)
const;
212 const M1x7& destState7,
const DetPlane& destPlane)
const;
234 M1x7* J_MMT_unprojected_lastRow,
235 double& coveredDistance,
238 M7x7& noiseProjection,
240 bool onlyOneStep =
false,
241 bool calcOnlyLastRowOfJ =
false)
const;
246 const double& charge,
250 TVector3
pocaOnLine(
const TVector3& linePoint,
251 const TVector3& lineDirection,
252 const TVector3&
point)
const;
270 bool fillExtrapSteps,
271 TMatrixDSym* cov =
nullptr,
272 bool onlyOneStep =
false,
273 bool stopAtBoundary =
false,
274 double maxStep = 1.E99)
const;
310 #endif // genfit_RKTrackRep_h
double getTime(const StateOnPlane &state) const
Get the time corresponding to the StateOnPlane. Extrapolation.
virtual void setPosMomErr(MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TVector3 &posErr, const TVector3 &momErr) const
Set position and momentum and error of state.
double momMag(const M1x7 &state7) const
M7x7 noiseProjection_
noise matrix of the last extrapolation
boost::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.
virtual double extrapToPoint(StateOnPlane &state, const TVector3 &point, const TMatrixDSym *G=NULL, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
virtual AbsTrackRep * clone() const
Clone the trackRep.
virtual void getPosMom(const StateOnPlane &state, TVector3 &pos, TVector3 &mom) const
Get cartesian position and momentum vector of a state.
virtual double extrapolateToPoint(StateOnPlane &state, const TVector3 &point, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to the POCA to a point, and returns the extrapolation length and...
std::vector< RKStep > RKSteps_
state where the last extrapolation has ended
virtual void getForwardJacobianAndNoise(TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const
Get the jacobian and noise matrix of the last extrapolation.
void checkCache(const StateOnPlane &state, const SharedPlanePtr *plane) const
void setTime(StateOnPlane &state, double time) const
Set time at which the state was defined.
bool RKutta(const M1x4 &SU, const DetPlane &plane, double charge, double mass, M1x7 &state7, M7x7 *jacobianT, M1x7 *J_MMT_unprojected_lastRow, double &coveredDistance, double &flightTime, bool &checkJacProj, M7x7 &noiseProjection, StepLimits &limits, bool onlyOneStep=false, bool calcOnlyLastRowOfJ=false) const
Propagates the particle through the magnetic field.
Simple struct containing MaterialProperties and stepsize in the material.
TVector3 pocaOnLine(const TVector3 &linePoint, const TVector3 &lineDirection, const TVector3 &point) const
Helper to store different limits on the stepsize for the RKTRackRep.
virtual void setChargeSign(StateOnPlane &state, double charge) const
Set the sign of the charge according to charge.
virtual double getMomMag(const StateOnPlane &state) const
get the magnitude of the momentum in GeV.
Abstract base class for a track representation.
StateOnPlane with additional covariance matrix.
unsigned int cachePos_
use cached RKSteps_ for extrapolation
virtual void setPosMom(StateOnPlane &state, const TVector3 &pos, const TVector3 &mom) const
Set position and momentum of state.
virtual double extrapolateToPoint(StateOnPlane &state, const TVector3 &point, const TMatrixDSym &G, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to the POCA to a point in the metric of G, and returns the extrapolation lengt...
void transformM7P(const M7x7 &in7x7, const M1x7 &state7, MeasuredStateOnPlane &state) const
virtual double getRadiationLenght() const
Get the accumulated X/X0 (path / radiation length) of the material crossed in the last extrapolation...
virtual TVector3 getPos(const StateOnPlane &state) const
Get the cartesian position of a state.
unsigned int getDim() const
Get the dimension of the state vector used by the track representation.
virtual double getMomVar(const MeasuredStateOnPlane &state) const
get the variance of the absolute value of the momentum .
virtual void getBackwardJacobianAndNoise(TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const
Get the jacobian and noise matrix of the last extrapolation if it would have been done in opposite di...
void setSpu(StateOnPlane &state, double spu) const
A state with arbitrary dimension defined in a DetPlane.
virtual double getCharge(const StateOnPlane &state) const
Get the (fitted) charge of a state. This is not always equal the pdg charge (e.g. if the charge sign ...
virtual double extrapolateToPlane(StateOnPlane &state, const SharedPlanePtr &plane, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to plane, and returns the extrapolation length and, via reference, the extrapolated state.
virtual double getQop(const StateOnPlane &state) const
Get charge over momentum.
void transformPM7(const MeasuredStateOnPlane &state, M7x7 &out7x7) const
virtual TMatrixDSym get6DCov(const MeasuredStateOnPlane &state) const
Get the 6D covariance.
void calcJ_pM_5x7(M5x7 &J_pM, const TVector3 &U, const TVector3 &V, const M1x3 &pTilde, double spu) const
std::vector< ExtrapStep > ExtrapSteps_
virtual TVector3 getMom(const StateOnPlane &state) const
Get the cartesian momentum vector of a state.
double estimateStep(const M1x7 &state7, const M1x4 &SU, const DetPlane &plane, const double &charge, double &relMomLoss, StepLimits &limits) const
virtual double extrapolateBy(StateOnPlane &state, double step, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state by step (cm) and returns the extrapolation length and, via reference...
TMatrixD fJacobian_
steps made in Extrap during last extrapolation
double RKPropagate(M1x7 &state7, M7x7 *jacobian, M1x3 &SA, double S, bool varField=true, bool calcOnlyLastRowOfJ=false) const
The actual Runge Kutta propagation.
void calcForwardJacobianAndNoise(const M1x7 &startState7, const DetPlane &startPlane, const M1x7 &destState7, const DetPlane &destPlane) const
virtual bool isSame(const AbsTrackRep *other)
check if other is of same type (e.g. RKTrackRep) and has same pdg code.
int RKStepsFXStart_
RungeKutta steps made in the last extrapolation.
void transformPM6(const MeasuredStateOnPlane &state, M6x6 &out6x6) const
virtual bool isSameType(const AbsTrackRep *other)
check if other is of same type (e.g. RKTrackRep).
void calcJ_Mp_7x5(M7x5 &J_Mp, const TVector3 &U, const TVector3 &V, const TVector3 &W, const M1x3 &A) const
virtual void setPosMomCov(MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TMatrixDSym &cov6x6) const
Set position, momentum and covariance of state.
StateOnPlane lastEndState_
state where the last extrapolation has started
virtual double extrapolateToLine(StateOnPlane &state, const TVector3 &linePoint, const TVector3 &lineDirection, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to the POCA to a line, and returns the extrapolation length and...
virtual double extrapolateToLine(StateOnPlane &state, const TVector3 &linePoint, const TVector3 &lineDirection, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the POCA to a line, and returns the extrapolation length and...
double Extrap(const DetPlane &startPlane, const DetPlane &destPlane, double charge, double mass, bool &isAtBoundary, M1x7 &state7, double &flightTime, bool fillExtrapSteps, TMatrixDSym *cov=nullptr, bool onlyOneStep=false, bool stopAtBoundary=false, double maxStep=1.E99) const
Handles propagation and material effects.
StateOnPlane lastStartState_
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) ...
void transformM6P(const M6x6 &in6x6, const M1x7 &state7, MeasuredStateOnPlane &state) const
virtual void getPosMomCov(const MeasuredStateOnPlane &state, TVector3 &pos, TVector3 &mom, TMatrixDSym &cov) const
Translates MeasuredStateOnPlane into 3D position, momentum and 6x6 covariance.
virtual double extrapolateToCylinder(StateOnPlane &state, double radius, const TVector3 &linePoint=TVector3(0., 0., 0.), const TVector3 &lineDirection=TVector3(0., 0., 1.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to the cylinder surface, and returns the extrapolation length and...
virtual void setQop(StateOnPlane &state, double qop) const
Set charge/momentum.
double getSpu(const StateOnPlane &state) const
const TVectorD & getState() const
std::vector< genfit::MatStep > getSteps() const
Get stepsizes and material properties of crossed materials of the last extrapolation.
void getState5(StateOnPlane &state, const M1x7 &state7) const
TMatrixT< double > TMatrixD
virtual double extrapolateToSphere(StateOnPlane &state, double radius, const TVector3 &point=TVector3(0., 0., 0.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Extrapolates the state to the sphere surface, and returns the extrapolation length and...
void getState7(const StateOnPlane &state, M1x7 &state7) const