Belle II Software  release-08-01-10
RKTrackRep Class Reference

AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) More...

#include <RKTrackRep.h>

Inheritance diagram for RKTrackRep:
Collaboration diagram for RKTrackRep:

Public Member Functions

 RKTrackRep (int pdgCode, char propDir=0)
 
virtual AbsTrackRepclone () const override
 Clone the trackRep.
 
virtual double extrapolateToPlane (StateOnPlane &state, const SharedPlanePtr &plane, bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state to plane, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateToLine (StateOnPlane &state, const TVector3 &linePoint, const TVector3 &lineDirection, bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state to the POCA to a line, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateToPoint (StateOnPlane &state, const TVector3 &point, bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state to the POCA to a point, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateToPoint (StateOnPlane &state, const TVector3 &point, const TMatrixDSym &G, bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state to the POCA to a point in the metric of G, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
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 override
 Extrapolates the state to the cylinder surface, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateToCone (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 override
 Extrapolates the state to the cone surface, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateToSphere (StateOnPlane &state, double radius, const TVector3 &point=TVector3(0., 0., 0.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state to the sphere surface, and returns the extrapolation length and, via reference, the extrapolated state. More...
 
virtual double extrapolateBy (StateOnPlane &state, double step, bool stopAtBoundary=false, bool calcJacobianNoise=false) const override
 Extrapolates the state by step (cm) and returns the extrapolation length and, via reference, the extrapolated state. More...
 
unsigned int getDim () const override
 Get the dimension of the state vector used by the track representation.
 
virtual TVector3 getPos (const StateOnPlane &state) const override
 Get the cartesian position of a state.
 
virtual TVector3 getMom (const StateOnPlane &state) const override
 Get the cartesian momentum vector of a state.
 
virtual void getPosMom (const StateOnPlane &state, TVector3 &pos, TVector3 &mom) const override
 Get cartesian position and momentum vector of a state.
 
virtual double getMomMag (const StateOnPlane &state) const override
 get the magnitude of the momentum in GeV.
 
virtual double getMomVar (const MeasuredStateOnPlane &state) const override
 get the variance of the absolute value of the momentum .
 
virtual TMatrixDSym get6DCov (const MeasuredStateOnPlane &state) const override
 Get the 6D covariance.
 
virtual void getPosMomCov (const MeasuredStateOnPlane &state, TVector3 &pos, TVector3 &mom, TMatrixDSym &cov) const override
 Translates MeasuredStateOnPlane into 3D position, momentum and 6x6 covariance.
 
virtual double getCharge (const StateOnPlane &state) const override
 Get the (fitted) charge of a state. More...
 
virtual double getQop (const StateOnPlane &state) const override
 Get charge over momentum.
 
double getSpu (const StateOnPlane &state) const
 
double getTime (const StateOnPlane &state) const override
 Get the time corresponding to the StateOnPlane. Extrapolation.
 
virtual void getForwardJacobianAndNoise (TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const override
 Get the jacobian and noise matrix of the last extrapolation.
 
virtual void getBackwardJacobianAndNoise (TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const override
 Get the jacobian and noise matrix of the last extrapolation if it would have been done in opposite direction.
 
std::vector< genfit::MatStepgetSteps () const override
 Get stepsizes and material properties of crossed materials of the last extrapolation.
 
virtual double getRadiationLenght () const override
 Get the accumulated X/X0 (path / radiation length) of the material crossed in the last extrapolation.
 
virtual void setPosMom (StateOnPlane &state, const TVector3 &pos, const TVector3 &mom) const override
 Set position and momentum of state.
 
virtual void setPosMom (StateOnPlane &state, const TVectorD &state6) const override
 Set position and momentum of state.
 
virtual void setPosMomErr (MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TVector3 &posErr, const TVector3 &momErr) const override
 Set position and momentum and error of state.
 
virtual void setPosMomCov (MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TMatrixDSym &cov6x6) const override
 Set position, momentum and covariance of state.
 
virtual void setPosMomCov (MeasuredStateOnPlane &state, const TVectorD &state6, const TMatrixDSym &cov6x6) const override
 Set position, momentum and covariance of state.
 
virtual void setChargeSign (StateOnPlane &state, double charge) const override
 Set the sign of the charge according to charge.
 
virtual void setQop (StateOnPlane &state, double qop) const override
 Set charge/momentum.
 
void setSpu (StateOnPlane &state, double spu) const
 
void setTime (StateOnPlane &state, double time) const override
 Set time at which the state was defined.
 
virtual double RKPropagate (M1x7 &state7, M7x7 *jacobian, M1x3 &SA, double S, bool varField=true, bool calcOnlyLastRowOfJ=false) const
 The actual Runge Kutta propagation. More...
 
virtual bool isSameType (const AbsTrackRep *other) override
 check if other is of same type (e.g. RKTrackRep).
 
virtual bool isSame (const AbsTrackRep *other) override
 check if other is of same type (e.g. RKTrackRep) and has same pdg code.
 
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, via reference, the extrapolated state. More...
 
virtual double extrapolateToLine (StateOnPlane &state, const TVector3 &point1, const TVector3 &point2, TVector3 &poca, TVector3 &dirInPoca, TVector3 &poca_onwire, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
 Resembles the interface of GFAbsTrackRep in old versions of genfit. More...
 
virtual double extrapolateToLine (StateOnPlane &state, const TVector3 &point1, const TVector3 &point2, TVector3 &poca, TVector3 &dirInPoca, TVector3 &poca_onwire, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
 Resembles the interface of GFAbsTrackRep in old versions of genfit. More...
 
double extrapolateToMeasurement (StateOnPlane &state, const AbsMeasurement *measurement, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
 extrapolate to an AbsMeasurement
 
TVector3 getDir (const StateOnPlane &state) const
 Get the direction vector of a state.
 
void getPosDir (const StateOnPlane &state, TVector3 &pos, TVector3 &dir) const
 Get cartesian position and direction vector of a state.
 
virtual TVectorD get6DState (const StateOnPlane &state) const
 Get the 6D state vector (x, y, z, p_x, p_y, p_z).
 
virtual void get6DStateCov (const MeasuredStateOnPlane &state, TVectorD &stateVec, TMatrixDSym &cov) const
 Translates MeasuredStateOnPlane into 6D state vector (x, y, z, p_x, p_y, p_z) and 6x6 covariance.
 
int getPDG () const
 Get the pdg code.
 
double getPDGCharge () const
 Get the charge of the particle of the pdg code.
 
double getMass (const StateOnPlane &state) const
 Get tha particle mass in GeV/c^2.
 
char getPropDir () const
 Get propagation direction. (-1, 0, 1) -> (backward, auto, forward).
 
void calcJacobianNumerically (const genfit::StateOnPlane &origState, const genfit::SharedPlanePtr destPlane, TMatrixD &jacobian) const
 Calculate Jacobian of transportation numerically. More...
 
bool switchPDGSign ()
 try to multiply pdg code with -1. (Switch from particle to anti-particle and vice versa).
 
void setPropDir (int dir)
 Set propagation direction. (-1, 0, 1) -> (backward, auto, forward).
 
void switchPropDir ()
 Switch propagation direction. Has no effect if propDir_ is set to 0.
 
virtual void setDebugLvl (unsigned int lvl=1)
 
virtual void Print (const Option_t *="") const
 

Protected Attributes

StateOnPlane lastStartState_
 
StateOnPlane lastEndState_
 state where the last extrapolation has started
 
int pdgCode_
 Particle code.
 
char propDir_
 propagation direction (-1, 0, 1) -> (backward, auto, forward)
 
unsigned int debugLvl_
 

Private Member Functions

void initArrays () const
 
virtual double extrapToPoint (StateOnPlane &state, const TVector3 &point, const TMatrixDSym *G=nullptr, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
 
void getState7 (const StateOnPlane &state, M1x7 &state7) const
 
void getState5 (StateOnPlane &state, const M1x7 &state7) const
 
void calcJ_pM_5x7 (M5x7 &J_pM, const TVector3 &U, const TVector3 &V, const M1x3 &pTilde, double spu) const
 
void transformPM6 (const MeasuredStateOnPlane &state, M6x6 &out6x6) const
 
void calcJ_Mp_7x5 (M7x5 &J_Mp, const TVector3 &U, const TVector3 &V, const TVector3 &W, const M1x3 &A) const
 
void calcForwardJacobianAndNoise (const M1x7 &startState7, const DetPlane &startPlane, const M1x7 &destState7, const DetPlane &destPlane) const
 
void transformM6P (const M6x6 &in6x6, const M1x7 &state7, MeasuredStateOnPlane &state) const
 
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. More...
 
double estimateStep (const M1x7 &state7, const M1x4 &SU, const DetPlane &plane, const double &charge, double &relMomLoss, StepLimits &limits) const
 
TVector3 pocaOnLine (const TVector3 &linePoint, const TVector3 &lineDirection, const TVector3 &point) const
 
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. More...
 
void checkCache (const StateOnPlane &state, const SharedPlanePtr *plane) const
 
double momMag (const M1x7 &state7) const
 

Private Attributes

std::vector< RKStepRKSteps_
 state where the last extrapolation has ended
 
int RKStepsFXStart_
 RungeKutta steps made in the last extrapolation.
 
int RKStepsFXStop_
 
std::vector< ExtrapStepExtrapSteps_
 
TMatrixD fJacobian_
 steps made in Extrap during last extrapolation
 
TMatrixDSym fNoise_
 
bool useCache_
 
unsigned int cachePos_
 use cached RKSteps_ for extrapolation
 
StepLimits limits_
 
M7x7 noiseArray_
 
M7x7 noiseProjection_
 noise matrix of the last extrapolation
 
M7x7 J_MMT_
 

Friends

class RKTrackRepTests_momMag_Test
 
class RKTrackRepTests_calcForwardJacobianAndNoise_Test
 
class RKTrackRepTests_getState7_Test
 
class RKTrackRepTests_getState5_Test
 

Detailed Description

AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v)

q/p is charge over momentum. u' and v' are direction tangents. u and v are positions on a DetPlane.

Definition at line 72 of file RKTrackRep.h.

Member Function Documentation

◆ calcJacobianNumerically()

void calcJacobianNumerically ( const genfit::StateOnPlane origState,
const genfit::SharedPlanePtr  destPlane,
TMatrixD &  jacobian 
) const
inherited

Calculate Jacobian of transportation numerically.

Slow but accurate. Can be used to validate (semi)analytic calculations.

Definition at line 105 of file AbsTrackRep.cc.

◆ Extrap()

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
private

Handles propagation and material effects.

extrapolateToPlane(), extrapolateToPoint() and extrapolateToLine() etc. call this function. Extrap() needs a plane as an argument, hence extrapolateToPoint() and extrapolateToLine() create virtual detector planes. In this function, RKutta() is called and the resulting points and point paths are filtered so that the direction doesn't change and tiny steps are filtered out. After the propagation the material effects are called via the MaterialEffects singleton. Extrap() will loop until the plane is reached, unless the propagation fails or the maximum number of iterations is exceeded.

fNoMaterial &&

Definition at line 2311 of file RKTrackRep.cc.

◆ extrapolateBy()

double extrapolateBy ( StateOnPlane state,
double  step,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
overridevirtual

Extrapolates the state by step (cm) and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 723 of file RKTrackRep.cc.

◆ extrapolateToCone()

double extrapolateToCone ( 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
overridevirtual

Extrapolates the state to the cone surface, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 478 of file RKTrackRep.cc.

◆ extrapolateToCylinder()

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
overridevirtual

Extrapolates the state to the cylinder surface, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 353 of file RKTrackRep.cc.

◆ extrapolateToLine() [1/4]

double extrapolateToLine ( StateOnPlane state,
const TVector3 &  linePoint,
const TVector3 &  lineDirection,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
overridevirtual

Extrapolates the state to the POCA to a line, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 135 of file RKTrackRep.cc.

◆ extrapolateToLine() [2/4]

virtual double extrapolateToLine

Extrapolates the state to the POCA to a line, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

◆ extrapolateToLine() [3/4]

virtual double extrapolateToLine ( StateOnPlane state,
const TVector3 &  point1,
const TVector3 &  point2,
TVector3 &  poca,
TVector3 &  dirInPoca,
TVector3 &  poca_onwire,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
inlinevirtualinherited

Resembles the interface of GFAbsTrackRep in old versions of genfit.

This interface to extrapolateToLine is intended to resemble the interface of GFAbsTrackRep in old versions of genfit and is implemented by default via the preceding function.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Definition at line 120 of file AbsTrackRep.h.

◆ extrapolateToLine() [4/4]

virtual double extrapolateToLine
inline

Resembles the interface of GFAbsTrackRep in old versions of genfit.

This interface to extrapolateToLine is intended to resemble the interface of GFAbsTrackRep in old versions of genfit and is implemented by default via the preceding function.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Definition at line 120 of file AbsTrackRep.h.

◆ extrapolateToPlane()

double extrapolateToPlane ( StateOnPlane state,
const SharedPlanePtr plane,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
overridevirtual

Extrapolates the state to plane, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 80 of file RKTrackRep.cc.

◆ extrapolateToPoint() [1/2]

virtual double extrapolateToPoint ( StateOnPlane state,
const TVector3 &  point,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
inlineoverridevirtual

Extrapolates the state to the POCA to a point, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 100 of file RKTrackRep.h.

◆ extrapolateToPoint() [2/2]

virtual double extrapolateToPoint ( StateOnPlane state,
const TVector3 &  point,
const TMatrixDSym &  G,
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
inlineoverridevirtual

Extrapolates the state to the POCA to a point in the metric of G, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 107 of file RKTrackRep.h.

◆ extrapolateToSphere()

double extrapolateToSphere ( StateOnPlane state,
double  radius,
const TVector3 &  point = TVector3(0., 0., 0.),
bool  stopAtBoundary = false,
bool  calcJacobianNoise = false 
) const
overridevirtual

Extrapolates the state to the sphere surface, and returns the extrapolation length and, via reference, the extrapolated state.

If stopAtBoundary is true, the extrapolation stops as soon as a material boundary is encountered.

If state has a covariance, jacobian and noise matrices will be calculated and the covariance will be propagated. If state has no covariance, jacobian and noise will only be calculated if calcJacobianNoise == true.

Implements AbsTrackRep.

Definition at line 612 of file RKTrackRep.cc.

◆ getCharge()

double getCharge ( const StateOnPlane state) const
overridevirtual

Get the (fitted) charge of a state.

This is not always equal the pdg charge (e.g. if the charge sign was flipped during the fit).

Implements AbsTrackRep.

Reimplemented in MplTrackRep.

Definition at line 861 of file RKTrackRep.cc.

◆ RKPropagate()

double RKPropagate ( M1x7 state7,
M7x7 jacobian,
M1x3 SA,
double  S,
bool  varField = true,
bool  calcOnlyLastRowOfJ = false 
) const
virtual

The actual Runge Kutta propagation.

propagate state7 with step S. Fills SA (Start directions derivatives dA/S). This is a single Runge-Kutta step. If jacobian is nullptr, only the state is propagated, otherwise also the 7x7 jacobian is calculated. If varField is false, the magnetic field will only be evaluated at the starting position. The return value is an estimation on how good the extrapolation is, and it is usually fine if it is > 1. It gives a suggestion how you must scale S so that the quality will be sufficient.

Reimplemented in MplTrackRep.

Definition at line 1274 of file RKTrackRep.cc.

◆ RKutta()

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
private

Propagates the particle through the magnetic field.

If the propagation is successful and the plane is reached, the function returns true. Propagated state and the jacobian of the extrapolation are written to state7 and jacobianT. The jacobian is only calculated if jacobianT != nullptr. In the main loop of the Runge Kutta algorithm, the estimateStep() is called and may reduce the estimated stepsize so that a maximum momentum loss will not be exceeded, and stop at material boundaries. If this is the case, RKutta() will only propagate the reduced distance and then return. This is to ensure that material effects, which are calculated after the propagation, are taken into account properly.

Definition at line 1801 of file RKTrackRep.cc.


The documentation for this class was generated from the following files: