Belle II Software
release-08-01-10
|
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) More...
#include <RKTrackRep.h>
Public Member Functions | |
RKTrackRep (int pdgCode, char propDir=0) | |
virtual AbsTrackRep * | clone () 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::MatStep > | getSteps () 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< RKStep > | RKSteps_ |
state where the last extrapolation has ended | |
int | RKStepsFXStart_ |
RungeKutta steps made in the last extrapolation. | |
int | RKStepsFXStop_ |
std::vector< ExtrapStep > | ExtrapSteps_ |
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 |
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.