ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::SiTrajectoryElement_xk Class Referencefinal

#include <SiTrajectoryElement_xk.h>

Public Member Functions

 SiTrajectoryElement_xk ()
 SiTrajectoryElement_xk (const SiTrajectoryElement_xk &)
 ~SiTrajectoryElement_xk ()=default
SiTrajectoryElement_xkoperator= (const SiTrajectoryElement_xk &)
const int & detstatus () const
const int & inside () const
const int & ndist () const
 number of crossed without hit - dead + holes
const int & nlinksF () const
const int & nlinksB () const
const int & nholesF () const
const int & nholesB () const
const int & dholesF () const
const int & dholesB () const
const int & nclustersF () const
const int & nclustersB () const
const int & npixelsB () const
const bool & stereo () const
const int & status () const
const int & noiseModel () const
const int & ndf () const
const int & ndfF () const
const int & ndfB () const
const int & ntsos () const
const double & step () const
const double & dist () const
bool isBarrel () const
const InDetDD::SiDetectorElementdetElement () const
const InDet::SiClustercluster () const
const InDet::SiClusterclusterOld () const
const InDet::SiClusterclusterNoAdd () const
Trk::TrackStateOnSurfacetsos (int i)
bool isNextClusterHoleB (bool &, double &)
bool isNextClusterHoleF (bool &, double &)
 checks if removing this cluster from the forward propagation would result in a critical number of holes or double holes.
Methods update with cluster information
bool addCluster (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)
bool addCluster (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)
bool addClusterPrecise (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)
bool addClusterPreciseWithCorrection (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)
bool combineStates (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)
Methods noise calculation
void noiseProduction (int, const Trk::PatternTrackParameters &, double rad_length=-1., bool useMomentum=false)
void noiseInitiate ()
bool addNextClusterB ()
bool addNextClusterF ()
bool addNextClusterB (SiTrajectoryElement_xk &, const InDet::SiCluster *)
bool addNextClusterF (SiTrajectoryElement_xk &, const InDet::SiCluster *)
void setCluster (const InDet::SiCluster *)
void setClusterB (const InDet::SiCluster *, double)
void setParametersB (Trk::PatternTrackParameters &)
void setParametersF (Trk::PatternTrackParameters &)
void setNdist (int)
int numberClusters () const
const double & xi2F () const
const double & xi2B () const
const double & xi2totalF () const
const double & xi2totalB () const
const double & radlength () const
const double & energylose () const
const Trk::PatternTrackParametersparametersPF () const
 track parameters for forward filter / smoother predicted
const Trk::PatternTrackParametersparametersUF () const
 updated
const Trk::PatternTrackParametersparametersPB () const
 predicted
const Trk::PatternTrackParametersparametersUB () const
 observed
const Trk::PatternTrackParametersparametersSM () const
const Trk::PatternTrackParametersparameters () const
 return pattern parameters matching the status of this element
const Trk::Surfacesurface () const
const InDet::SiClusterLink_xklinkF (int i) const
const InDet::SiClusterLink_xklinkB (int i) const
Main methods
template<typename T>
bool set (int st, const InDet::SiDetElementBoundaryLink_xk *&dl, const T &sb, const T &se, const InDet::SiCluster *si, const EventContext &ctx)
 T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.
bool setDead (const Trk::Surface *)
void setDeadRadLength (Trk::PatternTrackParameters &)
void setTools (const InDet::SiTools_xk *)
void setParameters ()
void bremNoiseModel ()
Update first trajectory element on the trajectory with

track parameters

bool firstTrajectorElement (const Trk::TrackParameters &, const EventContext &ctx)
bool firstTrajectorElement (bool correction)
bool ForwardPropagationWithoutSearch (SiTrajectoryElement_xk &, const EventContext &)
bool ForwardPropagationWithoutSearchPreciseWithCorrection (SiTrajectoryElement_xk &, const EventContext &)
bool ForwardPropagationWithSearch (SiTrajectoryElement_xk &, const EventContext &)
template<typename T>
bool ForwardPropagationForClusterSeach (int n, const Trk::TrackParameters &Tpa, const InDet::SiDetElementBoundaryLink_xk *&dl, const T &sb, const T &se, const EventContext &ctx)
 T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.
template<typename T>
void CloseClusterSeach (Trk::PatternTrackParameters &Tpa, const InDet::SiDetElementBoundaryLink_xk *&dl, const T &sb, const T &se)
 T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.
void eraseClusterForwardPropagation ()
For last detector element initiate smoother
bool lastTrajectorElement ()
bool lastTrajectorElementPrecise ()
Backward propagation for smoother
bool BackwardPropagationSmoother (SiTrajectoryElement_xk &, bool, const EventContext &ctx)
bool BackwardPropagationPrecise (SiTrajectoryElement_xk &, const EventContext &ctx)
bool BackwardPropagationFilter (SiTrajectoryElement_xk &, const EventContext &ctx)
Search clusters compatible with track
int searchClusters (Trk::PatternTrackParameters &, SiClusterLink_xk *)
template<typename T>
int searchClustersSub (Trk::PatternTrackParameters &, SiClusterLink_xk *)
template<typename T>
int searchClustersWithoutStereoPIX (Trk::PatternTrackParameters &, SiClusterLink_xk *)
template<typename T>
int searchClustersWithoutStereoSCT (Trk::PatternTrackParameters &, SiClusterLink_xk *)
template<typename T>
int searchClustersWithStereo (Trk::PatternTrackParameters &, SiClusterLink_xk *)
Search only clusters without track assosiation compatible with track
template<typename T>
int searchClustersWithoutStereoAssPIX (Trk::PatternTrackParameters &, SiClusterLink_xk *, const Trk::PRDtoTrackMap &)
template<typename T>
int searchClustersWithoutStereoAssSCT (Trk::PatternTrackParameters &, SiClusterLink_xk *, const Trk::PRDtoTrackMap &)
template<typename T>
int searchClustersWithStereoAss (Trk::PatternTrackParameters &, SiClusterLink_xk *, const Trk::PRDtoTrackMap &)
bool difference () const
 check for a difference between forward and back propagation
Trk::TrackStateOnSurfacetrackStateOnSurface (bool, bool, bool, int, const EventContext &ctx)
Trk::TrackStateOnSurfacetrackSimpleStateOnSurface (bool, bool, int)
Trk::TrackStateOnSurfacetrackPerigeeStateOnSurface (const EventContext &ctx)
Step of trajectory calculation
double step (SiTrajectoryElement_xk &)
double stepToPerigee ()
Global position of the track parameters
Amg::Vector3D globalPosition ()
Quality of the trajectory element
double quality (int &) const
Propagate parameters with covariance
bool propagate (Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outParameters, double &step, const EventContext &ctx)
 Will propagate the startingParameters from their reference to the surface associated with this element and write the result into the second argument.
Propagate parameters without covariance update.

Will propagate the startingParameters from their reference to the surface associated with this element and write the result into the second argument.

The third argument records the step length traversed.

bool propagateParameters (Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outParameters, double &step)
 Start from 'startingParameters', propagate to current surface.

Work methods for propagation

enum  IteratorType { SiClusterColl = 0 , PixelClusterColl = 1 , SCT_ClusterColl = 2 , Invalid = 3 }
 Private Data. More...
bool m_stereo {}
bool m_utsos [3] {}
bool m_fieldMode {}
bool m_useassoTool = false
int m_status {}
 status flag.
int m_detstatus {}
 0 (no clusters)
int m_inside {}
int m_nMissing {}
int m_nlinksForward {}
int m_nlinksBackward {}
int m_nholesForward {}
int m_nholesBackward {}
int m_dholesForward {}
int m_dholesBackward {}
int m_nclustersForward {}
int m_nclustersBackward {}
int m_npixelsBackward {}
int m_noisemodel {}
int m_ndf {}
int m_ndfForward {}
int m_ndfBackward {}
int m_ntsos {}
int m_maxholes {}
int m_maxdholes {}
double m_dist {}
double m_xi2Forward {}
double m_xi2Backward {}
double m_xi2totalForward {}
double m_xi2totalBackward {}
double m_radlength {}
double m_radlengthN {}
double m_energylose {}
double m_halflength {}
double m_step {}
double m_xi2max {}
double m_xi2maxNoAdd {}
double m_xi2maxlink {}
double m_xi2multi {}
double m_localTransform [13] {}
double m_localDir [3] {}
 the transform for this element
double m_invMoment {}
const InDetDD::SiDetectorElementm_detelement {}
const InDet::SiDetElementBoundaryLink_xkm_detlink {}
const Trk::Surfacem_surface {}
bool transformPlaneToGlobal (bool, Trk::PatternTrackParameters &localParameters, double *globalPars)
 Tramsform from plane to global Will take the surface and parameters from localParameters and populate globalPars with the result.
bool transformGlobalToPlane (bool updateJacobian, double *globalPars, Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outputParameters)
 Tramsform from global to plane surface Will take the global parameters in globalPars, the surface from this trajectory element and populate outputParameters with the result.
bool rungeKuttaToPlane (bool updateJacobian, double *globalPars)
 Runge Kutta step to plane Updates the "globalPars" array, which is also used to pass the input.
bool straightLineStepToPlane (bool updateJacobian, double *globalPars)
 Straight line step to plane Updates the "globalPars" array, which is also used to pass the input.

Data members using std::any

std::any is used to cover

  • InDet::PixelClusterCollection::const_iterator
  • InDet::SCT_ClusterCollection::const_iterator
  • InDet::SiClusterCollection::const_iterator used in SiTrajectoryElement_xk.cxx.
std::any m_sibegin
std::any m_siend
const InDet::SiClusterm_cluster {}
const InDet::SiClusterm_clusterOld {}
const InDet::SiClusterm_clusterNoAdd {}
Trk::PatternTrackParameters m_parametersPredForward
 Pattern track parameters.
Trk::PatternTrackParameters m_parametersUpdatedForward
 Updated state, forward.
Trk::PatternTrackParameters m_parametersPredBackward
 For backward filtering / smoothing Predicted state, backward.
Trk::PatternTrackParameters m_parametersUpdatedBackward
 Updated state, backward.
Trk::PatternTrackParameters m_parametersSM
InDet::SiClusterLink_xk m_linkForward [10]
InDet::SiClusterLink_xk m_linkBackward [10]
Trk::NoiseOnSurface m_noise
const InDet::SiTools_xkm_tools {}
MagField::AtlasFieldCache m_fieldCache
const Trk::IPatternParametersUpdatorm_updatorTool {}
const Trk::IPatternParametersPropagatorm_proptool {}
const Trk::IRIO_OnTrackCreatorm_riotool {}
const Trk::PRDtoTrackMapm_prdToTrackMap {}
Trk::TrackStateOnSurfacem_tsos [3] {}
Amg::MatrixX m_covariance
Amg::Vector2D m_position
IteratorType m_itType {Invalid}
static constexpr double s_oneOverTwelve {0.08333}
void patternCovariances (const InDet::SiCluster *, double &, double &, double &) const
 Private Methods.
void checkBoundaries (const Trk::PatternTrackParameters &pars)

TrackParameters production

std::unique_ptr< Trk::TrackParameterstrackParameters (bool, int)
std::unique_ptr< Trk::TrackParameterstrackParametersWithNewDirection (bool, int)
bool initiateState (Trk::PatternTrackParameters &inputPars, Trk::PatternTrackParameters &outputPars)
 inputPars: input parameters.
bool initiateStatePrecise (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)
bool initiateStateWithCorrection (Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)
void precisePosCov (Trk::PatternTrackParameters &)
void lastActive ()
static std::unique_ptr< Trk::TrackParameterstrackParameters (Trk::PatternTrackParameters &, bool)

Detailed Description

Definition at line 35 of file SiTrajectoryElement_xk.h.

Member Enumeration Documentation

◆ IteratorType

Private Data.

Enumerator
SiClusterColl 
PixelClusterColl 
SCT_ClusterColl 
Invalid 

Definition at line 427 of file SiTrajectoryElement_xk.h.

Constructor & Destructor Documentation

◆ SiTrajectoryElement_xk() [1/2]

InDet::SiTrajectoryElement_xk::SiTrajectoryElement_xk ( )

Definition at line 1916 of file SiTrajectoryElement_xk.cxx.

1917{
1918 m_detstatus =-1 ;
1919 m_status = 0 ;
1920 m_nlinksForward = 0 ;
1921 m_nlinksBackward = 0 ;
1922 m_nMissing = 0 ;
1923 m_radlength = .03;
1924 m_radlengthN = .03;
1925 m_energylose = .4 ;
1926 m_tools = nullptr ;
1927 m_noisemodel = 0 ;
1928 m_covariance.resize(2,2);
1929 m_covariance<<0.,0.,0.,0.;
1930 m_ndf = 0 ;
1931 m_ndfBackward = 0 ;
1932 m_ndfForward = 0 ;
1933 m_ntsos = 0 ;
1934 m_maxholes = 0 ;
1935 m_maxdholes = 0 ;
1936 m_xi2Forward = 0.;
1937 m_xi2Backward = 0.;
1938 m_xi2totalForward = 0.;
1939 m_xi2totalBackward = 0.;
1940 m_halflength = 0.;
1941 m_step = 0.;
1942 m_xi2max = 0.;
1943 m_dist = 0.;
1944 m_xi2maxNoAdd = 0.;
1945 m_xi2maxlink = 0.;
1946 m_xi2multi = 0.;
1947 m_invMoment = 0.;
1948 m_detelement = nullptr ;
1949 m_detlink = nullptr ;
1950 m_surface = nullptr ;
1951 m_cluster = nullptr ;
1952 m_clusterOld = nullptr ;
1953 m_clusterNoAdd = nullptr ;
1954 m_updatorTool = nullptr ;
1955 m_proptool = nullptr ;
1956 m_riotool = nullptr ;
1957 m_inside = 0 ;
1958 m_nholesForward = 0 ;
1959 m_nholesBackward = 0 ;
1960 m_dholesForward = 0 ;
1961 m_dholesBackward = 0 ;
1962 m_nclustersForward = 0 ;
1964 m_npixelsBackward = 0 ;
1965 m_stereo = false ;
1966 m_fieldMode = false ;
1967
1968 m_tsos[0]=m_tsos[1]=m_tsos[2]=nullptr;
1969}
Trk::TrackStateOnSurface * m_tsos[3]
const Trk::IPatternParametersPropagator * m_proptool
const Trk::IRIO_OnTrackCreator * m_riotool
const InDetDD::SiDetectorElement * m_detelement
const InDet::SiCluster * m_clusterOld
const Trk::IPatternParametersUpdator * m_updatorTool
const InDet::SiDetElementBoundaryLink_xk * m_detlink
const InDet::SiCluster * m_clusterNoAdd
const InDet::SiTools_xk * m_tools

◆ SiTrajectoryElement_xk() [2/2]

InDet::SiTrajectoryElement_xk::SiTrajectoryElement_xk ( const SiTrajectoryElement_xk & E)

Definition at line 1971 of file SiTrajectoryElement_xk.cxx.

1972{
1973 *this = E;
1974}

◆ ~SiTrajectoryElement_xk()

InDet::SiTrajectoryElement_xk::~SiTrajectoryElement_xk ( )
default

Member Function Documentation

◆ addCluster() [1/2]

bool InDet::SiTrajectoryElement_xk::addCluster ( Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb )

Definition at line 2189 of file SiTrajectoryElement_xk.cxx.

2191{
2192 if(!m_stereo) {
2193
2196 if(m_detelement->isSCT()) {
2197 return m_updatorTool->addToStateOneDimension
2198 (Ta,m_cluster->localPosition(),m_covariance,Tb);
2199 }
2200 return m_updatorTool->addToState
2201 (Ta,m_cluster->localPosition(),m_covariance,Tb);
2202 }
2203 return m_updatorTool->addToStateOneDimension
2204 (Ta,m_cluster->localPosition(),m_cluster->localCovariance(),Tb);
2205}
void patternCovariances(const InDet::SiCluster *, double &, double &, double &) const
Private Methods.

◆ addCluster() [2/2]

bool InDet::SiTrajectoryElement_xk::addCluster ( Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb,
double & Xi2 )

non-stereo measurements

set m_covariance to the cluster errors

update state

for stereo, use the cluster local covariance directly

Definition at line 2163 of file SiTrajectoryElement_xk.cxx.

2165{
2166 int N;
2168 if(!m_stereo) {
2173 if(m_detelement->isSCT()) {
2174 return m_updatorTool->addToStateOneDimension
2175 (Ta,m_cluster->localPosition(),m_covariance,Tb,Xi2,N);
2176 }
2177 return m_updatorTool->addToState
2178 (Ta,m_cluster->localPosition(),m_covariance,Tb,Xi2,N);
2179 }
2181 return m_updatorTool->addToStateOneDimension
2182 (Ta,m_cluster->localPosition(),m_cluster->localCovariance(),Tb,Xi2,N);
2183}
constexpr std::size_t N

◆ addClusterPrecise()

bool InDet::SiTrajectoryElement_xk::addClusterPrecise ( Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb,
double & Xi2 )

Definition at line 2212 of file SiTrajectoryElement_xk.cxx.

2214 {
2215 int N;
2216 if(m_ndf==1) {
2217 return m_updatorTool->addToStateOneDimension(Ta,m_position,m_covariance,Tb,Xi2,N);
2218 }
2219 else {
2220 return m_updatorTool->addToState (Ta,m_position,m_covariance,Tb,Xi2,N);
2221 }
2222}

◆ addClusterPreciseWithCorrection()

bool InDet::SiTrajectoryElement_xk::addClusterPreciseWithCorrection ( Trk::PatternTrackParameters & Tc,
Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb,
double & Xi2 )

Definition at line 2357 of file SiTrajectoryElement_xk.cxx.

2361{
2362 int N;
2364
2365 if(m_ndf==1) {
2366 return m_updatorTool->addToStateOneDimension(Ta,m_position,m_covariance,Tb,Xi2,N);
2367 }
2368 else {
2369 return m_updatorTool->addToState(Ta,m_position,m_covariance,Tb,Xi2,N);
2370 }
2371}
static Double_t Tc(Double_t t)
void precisePosCov(Trk::PatternTrackParameters &)

◆ addNextClusterB() [1/2]

bool InDet::SiTrajectoryElement_xk::addNextClusterB ( )

Definition at line 753 of file SiTrajectoryElement_xk.cxx.

754{
755 if(m_nlinksBackward <= 0) return false;
756
758
759 if(m_nlinksBackward > 1 && m_linkBackward[1].xi2() <= m_xi2max) {
760
761 int n = 0;
762 for(; n!=m_nlinksBackward-1; ++n) m_linkBackward[n]=m_linkBackward[n+1];
764
765 m_cluster = m_linkBackward[0].cluster();
766 m_xi2Backward = m_linkBackward[0].xi2() ;
769 }
770 else {
774 if(m_dist < -2.) ++m_nMissing;
775 }
776 return true;
777}
Trk::PatternTrackParameters m_parametersPredBackward
For backward filtering / smoothing Predicted state, backward.
bool addCluster(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)
Trk::PatternTrackParameters m_parametersUpdatedBackward
Updated state, backward.
InDet::SiClusterLink_xk m_linkBackward[10]

◆ addNextClusterB() [2/2]

bool InDet::SiTrajectoryElement_xk::addNextClusterB ( InDet::SiTrajectoryElement_xk & TE,
const InDet::SiCluster * Cl )

Definition at line 813 of file SiTrajectoryElement_xk.cxx.

815{
816
818 m_cluster = Cl ;
825
827
828 if(Cl) {
829
831 m_inside = -1;
834 }
835 else {
836
838 if(m_dist < -2.) ++m_nMissing;
839 }
840 return true;
841}
void noiseProduction(int, const Trk::PatternTrackParameters &, double rad_length=-1., bool useMomentum=false)

◆ addNextClusterF() [1/2]

bool InDet::SiTrajectoryElement_xk::addNextClusterF ( )

Definition at line 783 of file SiTrajectoryElement_xk.cxx.

784{
785 if(m_nlinksForward <= 0) return false;
786
788
789 if(m_nlinksForward > 1 && m_linkForward[1].xi2() <= m_xi2max) {
790
791 int n = 0;
792 for(; n!=m_nlinksForward-1; ++n) m_linkForward[n]=m_linkForward[n+1];
794
795 m_cluster = m_linkForward[0].cluster();
796 m_xi2Forward = m_linkForward[0].xi2() ;
799 }
800 else {
801 m_nlinksForward = 0;
804 if(m_dist < -2.) ++m_nMissing;
805 }
806 return true;
807}
Trk::PatternTrackParameters m_parametersPredForward
Pattern track parameters.
Trk::PatternTrackParameters m_parametersUpdatedForward
Updated state, forward.
InDet::SiClusterLink_xk m_linkForward[10]

◆ addNextClusterF() [2/2]

bool InDet::SiTrajectoryElement_xk::addNextClusterF ( InDet::SiTrajectoryElement_xk & TE,
const InDet::SiCluster * Cl )

write the current cluster (if any) into the old cluster slot

and set the current cluster to the one assigned

can be null!

copy running counts from the previous element

if the previous element has a hit, reset incremental hole counter

otherwise start from the running count

if we have a non-null cluster to add

add it to the track, and update our parameters using it

update m_inside to signify we are on the module

update noise to current parameters

update hit counts, chi2, ndf

no hit (nullptr cluster)

if we are within boundaries, add to hole counts

no chi2 contribution here

if crossed

Definition at line 847 of file SiTrajectoryElement_xk.cxx.

849{
853 m_cluster = Cl ;
862 if (TE.m_cluster){
863 m_dholesForward = 0;
864 }
866 else{
868 }
870 if(Cl) {
874 m_inside = -1;
881 }
883 else {
885 if(m_inside < 0) {
888 }
890 m_xi2Forward = 0.;
892 if(m_dist < -2.) ++m_nMissing;
893 }
894 return true;
895}

◆ BackwardPropagationFilter()

bool InDet::SiTrajectoryElement_xk::BackwardPropagationFilter ( InDet::SiTrajectoryElement_xk & TE,
const EventContext & ctx )

Definition at line 531 of file SiTrajectoryElement_xk.cxx.

533{
534 // Track propagation
535 //
536 if(TE.m_noise.correctionIMom() < 1.) {
537
538 if(TE.m_cluster) {
539
544 }
545 else {
546
551 }
552 }
553 else {
554
555 if(TE.m_cluster) {
556
559 }
560 else {
561
564 }
565 }
566 m_status = 2;
569 m_cluster = nullptr;
570 m_clusterNoAdd = nullptr;
571 m_xi2Backward = 10000.;
578 m_step += TE.m_step;
579
580 if(m_tools->isITkGeometry() && !m_detelement) {
583 return true;
584 }
586
587 if(m_inside >0 ) {noiseInitiate(); return true;}
588
590
591 m_xi2Backward = m_linkBackward[0].xi2();
592
593 if (m_xi2Backward <= m_xi2max ) {
594
595 m_cluster = m_linkBackward[0].cluster();
599 }
600 else if(m_xi2Backward <= m_xi2maxNoAdd) {
601
602 m_clusterNoAdd = m_linkBackward[0].cluster();
604 }
605 }
606 else {
608 }
609
610 if(m_detstatus >=0 && !m_cluster){
612 if(m_dist < -2.) ++m_nMissing;
613 }
614 return true;
615}
int searchClusters(Trk::PatternTrackParameters &, SiClusterLink_xk *)
void checkBoundaries(const Trk::PatternTrackParameters &pars)
void setDeadRadLength(Trk::PatternTrackParameters &)
bool propagate(Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outParameters, double &step, const EventContext &ctx)
Will propagate the startingParameters from their reference to the surface associated with this elemen...
const double & correctionIMom() const
void addNoise(const NoiseOnSurface &, PropDirection)
void removeNoise(const NoiseOnSurface &, PropDirection)
@ oppositeMomentum

◆ BackwardPropagationPrecise()

bool InDet::SiTrajectoryElement_xk::BackwardPropagationPrecise ( InDet::SiTrajectoryElement_xk & TE,
const EventContext & ctx )

Definition at line 719 of file SiTrajectoryElement_xk.cxx.

721{
722
723 // Track propagation
724 //
725 double step;
726 if(TE.m_cluster) {
727
729 }
730 else {
731
733 }
734
736
737 // Forward-backward predict parameters
738 //
739 if(m_cluster) {
740 m_status = 3 ;
742 }
743 else {
744 m_status = 2 ;
745 }
746 return true;
747}
bool addClusterPrecise(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)

◆ BackwardPropagationSmoother()

bool InDet::SiTrajectoryElement_xk::BackwardPropagationSmoother ( InDet::SiTrajectoryElement_xk & TE,
bool isTwoSpacePointsSeed,
const EventContext & ctx )

Definition at line 621 of file SiTrajectoryElement_xk.cxx.

623{
624
625 // Track propagation
626 //
627 double step;
628 if(TE.m_cluster) {
631 }
632 else {
635 }
636
644
645 // remove case if you have trajectory element without actual detector element
646 // this happens if you have added a dead cylinder
647 if(!m_detelement) {
648 m_status = 2;
649 return true;
650 }
651
652 // Forward-backward predict parameters
653 //
655
656 m_cluster ? m_status = 3 : m_status = 2;
657
658 double Xi2max = m_xi2max; if( isTwoSpacePointsSeed) Xi2max*=2.;
662 m_cluster = nullptr;
663 m_clusterNoAdd = nullptr;
664 m_xi2Backward = 10000.;
665
666 //m_step += TE.m_step ;
667 if(m_inside> 0 ) return true;
668
669
670 // For not first cluster on trajectory
671 //
673
675
676 m_xi2Backward = m_linkBackward[0].xi2();
677
678
679 if (m_xi2Backward <= Xi2max) {
680
681 m_cluster = m_linkBackward[0].cluster();
682
685 }
686 else if(m_xi2Backward <= m_xi2maxNoAdd) {
687
688 m_clusterNoAdd = m_linkBackward[0].cluster();
689 }
690 }
691 if(m_detstatus >=0 && !m_cluster) {
693 if(m_dist < -2.) ++m_nMissing;
694 }
695 return true;
696 }
697
698 // For first cluster of short trajectory
699 //
702
705 else {m_cluster = nullptr; }
706
707 if(!m_cluster) {
709 if(m_dist < -2.) ++m_nMissing;
710
711 }
712 return true;
713}
Trk::PatternTrackParameters m_parametersSM
bool combineStates(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)

◆ bremNoiseModel()

void InDet::SiTrajectoryElement_xk::bremNoiseModel ( )

Definition at line 2335 of file SiTrajectoryElement_xk.cxx.

2336{
2337 m_noisemodel = 2;
2338}

◆ checkBoundaries()

void InDet::SiTrajectoryElement_xk::checkBoundaries ( const Trk::PatternTrackParameters & pars)
private

Definition at line 2406 of file SiTrajectoryElement_xk.cxx.

2406 {
2407
2408 m_inside = m_detlink->intersect(pars, m_dist);
2409
2410}

◆ CloseClusterSeach()

template<typename T>
void InDet::SiTrajectoryElement_xk::CloseClusterSeach ( Trk::PatternTrackParameters & Tpa,
const InDet::SiDetElementBoundaryLink_xk *& dl,
const T & sb,
const T & se )

T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.

◆ cluster()

const InDet::SiCluster * InDet::SiTrajectoryElement_xk::cluster ( ) const
inline

Definition at line 73 of file SiTrajectoryElement_xk.h.

73{return m_cluster ; }

◆ clusterNoAdd()

const InDet::SiCluster * InDet::SiTrajectoryElement_xk::clusterNoAdd ( ) const
inline

Definition at line 75 of file SiTrajectoryElement_xk.h.

75{return m_clusterNoAdd;}

◆ clusterOld()

const InDet::SiCluster * InDet::SiTrajectoryElement_xk::clusterOld ( ) const
inline

Definition at line 74 of file SiTrajectoryElement_xk.h.

74{return m_clusterOld; }

◆ combineStates()

bool InDet::SiTrajectoryElement_xk::combineStates ( Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb,
Trk::PatternTrackParameters & Tc )

Definition at line 2228 of file SiTrajectoryElement_xk.cxx.

2232{
2233 return m_updatorTool->combineStates(Ta,Tb,Tc);
2234}

◆ detElement()

const InDetDD::SiDetectorElement * InDet::SiTrajectoryElement_xk::detElement ( ) const
inline

Definition at line 72 of file SiTrajectoryElement_xk.h.

72{return m_detelement; }

◆ detstatus()

const int & InDet::SiTrajectoryElement_xk::detstatus ( ) const
inline

Definition at line 48 of file SiTrajectoryElement_xk.h.

48{return m_detstatus;}

◆ dholesB()

const int & InDet::SiTrajectoryElement_xk::dholesB ( ) const
inline

Definition at line 57 of file SiTrajectoryElement_xk.h.

57{return m_dholesBackward; }

◆ dholesF()

const int & InDet::SiTrajectoryElement_xk::dholesF ( ) const
inline

Definition at line 56 of file SiTrajectoryElement_xk.h.

56{return m_dholesForward; }

◆ difference()

bool InDet::SiTrajectoryElement_xk::difference ( ) const

check for a difference between forward and back propagation

Definition at line 2074 of file SiTrajectoryElement_xk.cxx.

2075{
2076 return m_cluster != m_clusterOld || m_status != 3;
2077}

◆ dist()

const double & InDet::SiTrajectoryElement_xk::dist ( ) const
inline

Definition at line 69 of file SiTrajectoryElement_xk.h.

69{return m_dist; }

◆ energylose()

const double & InDet::SiTrajectoryElement_xk::energylose ( ) const
inline

Definition at line 126 of file SiTrajectoryElement_xk.h.

126{return m_energylose;}

◆ eraseClusterForwardPropagation()

void InDet::SiTrajectoryElement_xk::eraseClusterForwardPropagation ( )

Definition at line 1337 of file SiTrajectoryElement_xk.cxx.

1338{
1339 m_cluster=nullptr;
1343}

◆ firstTrajectorElement() [1/2]

bool InDet::SiTrajectoryElement_xk::firstTrajectorElement ( bool correction)

reset the cov (off-diagonal to zero, diagonal multiplied by 100)

Definition at line 179 of file SiTrajectoryElement_xk.cxx.

180{
181
182 if(!m_cluster || !m_status) return false;
184
185 if(correction){
186 m_parametersPredForward.diagonalization(10.);
188 }
189 else{
191 m_parametersPredForward.diagonalization(100.);
193 }
194
195 m_invMoment = std::abs(m_parametersUpdatedBackward.parameters()[4]);
197
198 m_dist = -10. ;
199 m_xi2Forward = 0. ;
200 m_xi2totalForward = 0. ;
201 m_status = 1 ;
202 m_inside = -1 ;
203 m_nMissing = 0 ;
204 m_nlinksForward = 0 ;
205 m_nholesForward = 0 ;
206 m_dholesForward = 0 ;
207 m_clusterNoAdd = nullptr ;
210 return true;
211}
bool initiateStateWithCorrection(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)
bool initiateState(Trk::PatternTrackParameters &inputPars, Trk::PatternTrackParameters &outputPars)
inputPars: input parameters.

◆ firstTrajectorElement() [2/2]

bool InDet::SiTrajectoryElement_xk::firstTrajectorElement ( const Trk::TrackParameters & startingParameters,
const EventContext & ctx )

if we don't have a cluster, something went wrong!

generate pattern track parameters from the starting parameters

get the surface belonging to our staring pars

Track propagation if needed if we are already on the correct surface, we can assign the params as they ar

otherwise, we need to propagate to "our" surface

write our covariance into the parameters

and initiate our state. parametersUF will be constrained to the local cluster coordinates (with its covariance), while taking the momentum and direction from the input parameters

add noise to the parameter estimate (scattering, eloss)

and init other values

Definition at line 113 of file SiTrajectoryElement_xk.cxx.

115{
117 if(!m_cluster) return false;
118
120 Trk::PatternTrackParameters startingPatternPars;
121 if(!startingPatternPars.production(&startingParameters)) return false;
122
124 const Trk::Surface* pl = &startingPatternPars.associatedSurface();
125
128 if(m_surface==pl) m_parametersPredForward = startingPatternPars;
130 else if(!propagate(startingPatternPars,m_parametersPredForward,m_step,ctx)) return false;
131
132 // Initiate track parameters without initial covariance
133 //
134 double cv[15]={
135 1. ,
136 0. , 1.,
137 0. , 0.,.001,
138 0. , 0., 0.,.001,
139 0. , 0., 0., 0.,.00001};
140
141 if (m_tools->isITkGeometry()) {
142 cv[5] = m_ndf==2 ? .1 : .01;
143 cv[9] = cv[5];
144 }
145
147 m_parametersPredForward.setCovariance(cv);
153
155 if(!m_tools->isITkGeometry()) noiseProduction(1,m_parametersUpdatedForward);
157
159 m_dist = -10. ;
160 m_step = 0. ;
161 m_xi2Forward = 0. ;
162 m_xi2totalForward = 0. ;
163 m_status = 1 ;
164 m_inside = -1 ;
165 m_nMissing = 0 ;
166 m_nlinksForward = 0 ;
167 m_nholesForward = 0 ;
168 m_dholesForward = 0 ;
169 m_clusterNoAdd = nullptr ;
172 return true;
173}
bool production(const TrackParameters *)
virtual const Surface & associatedSurface() const override final
Access to the Surface associated to the Parameters.

◆ ForwardPropagationForClusterSeach()

template<typename T>
bool InDet::SiTrajectoryElement_xk::ForwardPropagationForClusterSeach ( int n,
const Trk::TrackParameters & Tpa,
const InDet::SiDetElementBoundaryLink_xk *& dl,
const T & sb,
const T & se,
const EventContext & ctx )

T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.

◆ ForwardPropagationWithoutSearch()

bool InDet::SiTrajectoryElement_xk::ForwardPropagationWithoutSearch ( InDet::SiTrajectoryElement_xk & TE,
const EventContext & ctx )

Track propagation If the starting trajectory element has a cluster:

add noise to the track parameters of the starting TE

propagate to the current element, plug into m_parametersPredForward

and restore the starting TE again

reset the double hole count to zero - we had a cluster

add noise to the starting pars

propagate, plug into m_parametersPredForward

restore starting TE

double hole count is copied from the previous one

copy information from starting TE

Track update If we have a cluster on this element

add it to refine the parameter estimate

set m_inside to signify this is a hit on track

increment cluster count

increment chi² and degrees of freedom

if we have no cluster on this element

check the intersection of the propagated track with this surface

if we have hits on this element

and expect to be inside the active area

then increment the hole counters

for bond gaps, increment ndist

Noise production If the track passes through our element

if we have a cluster, update noise based on the updated parameters

otherwise, update noise based on the predicted parameters

otherwise, reset noise

Definition at line 279 of file SiTrajectoryElement_xk.cxx.

281{
284 if(TE.m_cluster) {
292 m_dholesForward = 0;
293 }
294 else {
303 }
304
311 m_step += TE.m_step ;
312
315 if(!m_tools->isITkGeometry() || m_detelement){
316 if( m_cluster) {
320 m_inside = -1;
326 }
328 else {
332 if( m_detstatus >=0) {
334 if(m_inside < 0 ) {
338 }
340 if(m_dist < -2.) ++m_nMissing;
341 }
342 }
344
345
348 if(m_inside<=0) {
353 }
355 else {
357 }
358 m_status = 1;
359 m_nlinksForward = 0;
360 m_clusterNoAdd = nullptr;
361 return true;
362}
@ alongMomentum

◆ ForwardPropagationWithoutSearchPreciseWithCorrection()

bool InDet::SiTrajectoryElement_xk::ForwardPropagationWithoutSearchPreciseWithCorrection ( InDet::SiTrajectoryElement_xk & TE,
const EventContext & ctx )

Definition at line 369 of file SiTrajectoryElement_xk.cxx.

371{
372 Trk::PatternTrackParameters P;
373
374 if(TE.m_cluster) {
376 m_dholesForward = 0;
377 }
378 else {
381 }
383
384 // Track propagation
385 //
386 P.addNoise(TE.m_noise,Trk::alongMomentum);
387 if(!propagate(P,m_parametersPredForward,m_step,ctx)) return false;
388
394 m_step += TE.m_step ;
395 m_inside = -1 ;
396
397 // Track update
398 //
399 if(!m_tools->isITkGeometry() || m_detelement){
400 if( m_cluster) {
403 }
404 else {
405 if( m_detstatus >=0) {
407 }
408 }
409 }
411
412 // Noise production
413 //
414 m_radlength = .04;
416 m_status = 1;
417 m_nlinksForward = 0;
418 m_clusterNoAdd = nullptr;
419 return true;
420}
static Double_t P(Double_t *tt, Double_t *par)
bool addClusterPreciseWithCorrection(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, Trk::PatternTrackParameters &, double &)

◆ ForwardPropagationWithSearch()

bool InDet::SiTrajectoryElement_xk::ForwardPropagationWithSearch ( InDet::SiTrajectoryElement_xk & TE,
const EventContext & ctx )

Track propagation as usual, if the previous element has a cluster, propagate the updated parameters. otherwise the predicted ones.

double hole running counter is reset if the prev element has a cluster

reset old fwd propagation info

note the socially distant semicolons!

current cluster --> old cluster, reset current

copy running counts from previous element

re-evaluate if we are expected to intersect this element based on the updated prediction

if we are not passing through this element, reset noise production and return

now perform cluster search.

if we found any:

set chi2 to the one for the first candidate

if the chi2 is acceptable:

use first cluster as cluster on this element

try to add it to the trajectory, update our parameters

update noise based on this cluster

increment running cluster count for forward trajectory

increment total chi2 for forward trajectory

and the degrees of freedom as well

if we have an outlier:

update outlier cluster member

and reset noise

end of branch for found clusters

reset noise if nothing was found

if we are in an active module (with nonzero clusters) and didn't find anything:

if we expect a hit, and didn't see an outlier: increment hole counts

if we are well within bounds, increment nDist (may be bond-gap case)

end of case covering no found cluster

Definition at line 427 of file SiTrajectoryElement_xk.cxx.

429{
433 if(TE.m_cluster) {
434
439 m_dholesForward = 0;
440 }
441 else {
442
447 }
448
450 m_status = 1 ;
451 m_nlinksForward = 0 ;
454 m_cluster = nullptr ;
455 m_clusterNoAdd = nullptr ;
456 m_xi2Forward = 10000. ;
457
464 m_step += TE.m_step ;
465
466 if(m_tools->isITkGeometry() && !m_detelement) {
469 return true;
470 }
471
474
476 if(m_inside > 0) {
477 noiseInitiate(); return true;
478 }
479
483 if(m_nlinksForward!=0) {
485 m_xi2Forward = m_linkForward[0].xi2();
486
488 if (m_xi2Forward <= m_xi2max ) {
490 m_cluster = m_linkForward[0].cluster();
501 }
503 else if(m_xi2Forward <= m_xi2maxNoAdd) {
505 m_clusterNoAdd = m_linkForward[0].cluster();
508 }
509 }
510 else {
513 }
515 if(m_detstatus >=0 && !m_cluster) {
517 if(m_inside < 0 && !m_clusterNoAdd) {
520 }
522 if(m_dist < -2. ) ++m_nMissing;
523 }
524 return true;
525}

◆ globalPosition()

Amg::Vector3D InDet::SiTrajectoryElement_xk::globalPosition ( )

Definition at line 1283 of file SiTrajectoryElement_xk.cxx.

1284{
1285 if (m_status == 1) {
1286 if(m_cluster) return m_parametersUpdatedForward.position();
1287 else return m_parametersPredForward.position();
1288 }
1289 else if(m_status == 2) {
1290 if(m_cluster) return m_parametersUpdatedBackward.position();
1291 else return m_parametersPredBackward.position();
1292 }
1293 else if(m_status == 3) {
1294
1295 Amg::Vector3D gp(0.,0.,0.);
1296 bool QA; Trk::PatternTrackParameters S1,SM,S2(parametersPF());
1297
1298 if(m_cluster) S1 = parametersUB();
1299 else S1 = parametersPB();
1300
1301 QA = m_updatorTool->combineStates(S1,S2,SM);
1302
1303 if(QA) {
1304 gp = SM.position();
1305 }
1306 return gp;
1307 }
1308 Amg::Vector3D gp(0.,0.,0.);
1309 return gp;
1310}
struct TBPatternUnitContext S2
struct TBPatternUnitContext S1
const Trk::PatternTrackParameters & parametersUB() const
observed
const Trk::PatternTrackParameters & parametersPB() const
predicted
const Trk::PatternTrackParameters & parametersPF() const
track parameters for forward filter / smoother predicted
Eigen::Matrix< double, 3, 1 > Vector3D

◆ initiateState()

bool InDet::SiTrajectoryElement_xk::initiateState ( Trk::PatternTrackParameters & inputPars,
Trk::PatternTrackParameters & outputPars )

inputPars: input parameters.

outputPars: output parameters. Gives outputPars the x and (for pix) the y of the associated cluster, and the corresponding cov elements, and copies all other elements else from inputPars

Gives Tb the x and (for pix) the y of the cluster, and the corresponding cov elements, and copies everything else from inputPars

Definition at line 2249 of file SiTrajectoryElement_xk.cxx.

2251{
2254 if (m_tools->isITkGeometry()) {
2255 // using pattern covariance for all clusters for ITk
2256 Amg::MatrixX cov(2,2);
2257 patternCovariances(m_cluster,cov(0,0),cov(1,0),cov(1,1));
2258 return outputPars.initiate(inputPars,m_cluster->localPosition(),cov);
2259 }
2260 return outputPars.initiate(inputPars,m_cluster->localPosition(),m_cluster->localCovariance());
2261}
bool initiate(PatternTrackParameters &, const Amg::Vector2D &, const Amg::MatrixX &)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.

◆ initiateStatePrecise()

bool InDet::SiTrajectoryElement_xk::initiateStatePrecise ( Trk::PatternTrackParameters & inputPars,
Trk::PatternTrackParameters & outputPars )

Definition at line 2267 of file SiTrajectoryElement_xk.cxx.

2269{
2270 return outputPars.initiate(inputPars,m_position,m_covariance);
2271}

◆ initiateStateWithCorrection()

bool InDet::SiTrajectoryElement_xk::initiateStateWithCorrection ( Trk::PatternTrackParameters & Tc,
Trk::PatternTrackParameters & Ta,
Trk::PatternTrackParameters & Tb )

Definition at line 2344 of file SiTrajectoryElement_xk.cxx.

2347{
2349 return Tb.initiate(Ta,m_position,m_covariance);
2350}

◆ inside()

const int & InDet::SiTrajectoryElement_xk::inside ( ) const
inline

Definition at line 49 of file SiTrajectoryElement_xk.h.

49{return m_inside; }

◆ isBarrel()

bool InDet::SiTrajectoryElement_xk::isBarrel ( ) const
inline

Definition at line 70 of file SiTrajectoryElement_xk.h.

70{return m_detelement->isBarrel();}

◆ isNextClusterHoleB()

bool InDet::SiTrajectoryElement_xk::isNextClusterHoleB ( bool & cl,
double & X )

Definition at line 2083 of file SiTrajectoryElement_xk.cxx.

2084{
2085 cl = false ;
2087
2088 if(m_nlinksBackward > 1 && m_linkBackward[1].xi2() <= m_xi2max) {
2089 X+=m_linkBackward[1].xi2();
2090 cl = true; return true;
2091 }
2092
2093 if(m_inside < 0) {
2095 }
2096 return true;
2097}
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]

◆ isNextClusterHoleF()

bool InDet::SiTrajectoryElement_xk::isNextClusterHoleF ( bool & cl,
double & X )

checks if removing this cluster from the forward propagation would result in a critical number of holes or double holes.

Fills "cl" with true if we would still find another cluster after removing the preferred one. Fills X with the chi square we would have on removal. Return true if we would not get a problematic number of holes

chi2 if we drop this cluster

not used in SiTrajectory?

if we have another good cluster on this element which could replace the current one were it dropped:

add the chi2 of the second forward link to the second arg

set the return-arg signifying we would still see a cluster and return

if we expect a hit:

return true if we are below the max allowed holes (so we can add one)

otherwise return false

if we do not expect a hit return true

Definition at line 2104 of file SiTrajectoryElement_xk.cxx.

2105{
2106 cl = false ;
2110 if(m_detstatus == 2) return false;
2113 if(m_nlinksForward > 1 && m_linkForward[1].xi2() <= m_xi2max) {
2115 X+=m_linkForward[1].xi2();
2117 cl = true;
2118 return true;
2119 }
2121 if(m_inside < 0) {
2125 return false;
2126 }
2128 return true;
2129}

◆ lastActive()

void InDet::SiTrajectoryElement_xk::lastActive ( )

Definition at line 2314 of file SiTrajectoryElement_xk.cxx.

2315{
2316 m_detstatus = 2;
2317}

◆ lastTrajectorElement()

bool InDet::SiTrajectoryElement_xk::lastTrajectorElement ( )

Definition at line 217 of file SiTrajectoryElement_xk.cxx.

218{
219 if(m_status==0 || !m_cluster) return false;
221
224 m_parametersPredBackward.diagonalization(100.);
226
227 m_status = 3 ;
228 m_inside = -1 ;
229 m_nMissing = 0 ;
230 m_nlinksBackward = 0 ;
231 m_nholesBackward = 0 ;
232 m_dholesBackward = 0 ;
233 m_clusterNoAdd = nullptr ;
239 m_dist = -10.;
240 return true;
241}

◆ lastTrajectorElementPrecise()

bool InDet::SiTrajectoryElement_xk::lastTrajectorElementPrecise ( )

Definition at line 247 of file SiTrajectoryElement_xk.cxx.

248{
249 if(m_status==0 || !m_cluster) return false;
250 m_radlength = .04;
252
255 m_parametersPredBackward.diagonalization(10.);
257 m_status = 3;
258 m_inside = -1;
259 m_nMissing = 0;
263 m_clusterNoAdd = nullptr;
265 m_clusterNoAdd = nullptr;
266 m_npixelsBackward = m_ndf==2 ? 1 : 0;
269 m_xi2totalBackward = m_xi2Forward; // As in 21.9, should this be m_xi2totalForward instead?
270 m_dist = -10.;
271 return true;
272}
bool initiateStatePrecise(Trk::PatternTrackParameters &, Trk::PatternTrackParameters &)

◆ linkB()

const InDet::SiClusterLink_xk & InDet::SiTrajectoryElement_xk::linkB ( int i) const
inline

Definition at line 146 of file SiTrajectoryElement_xk.h.

146{return m_linkBackward[i];}

◆ linkF()

const InDet::SiClusterLink_xk & InDet::SiTrajectoryElement_xk::linkF ( int i) const
inline

Definition at line 145 of file SiTrajectoryElement_xk.h.

145{return m_linkForward[i];}

◆ nclustersB()

const int & InDet::SiTrajectoryElement_xk::nclustersB ( ) const
inline

Definition at line 59 of file SiTrajectoryElement_xk.h.

59{return m_nclustersBackward;}

◆ nclustersF()

const int & InDet::SiTrajectoryElement_xk::nclustersF ( ) const
inline

Definition at line 58 of file SiTrajectoryElement_xk.h.

58{return m_nclustersForward;}

◆ ndf()

const int & InDet::SiTrajectoryElement_xk::ndf ( ) const
inline

Definition at line 64 of file SiTrajectoryElement_xk.h.

64{return m_ndf; }

◆ ndfB()

const int & InDet::SiTrajectoryElement_xk::ndfB ( ) const
inline

Definition at line 66 of file SiTrajectoryElement_xk.h.

66{return m_ndfBackward; }

◆ ndfF()

const int & InDet::SiTrajectoryElement_xk::ndfF ( ) const
inline

Definition at line 65 of file SiTrajectoryElement_xk.h.

65{return m_ndfForward; }

◆ ndist()

const int & InDet::SiTrajectoryElement_xk::ndist ( ) const
inline

number of crossed without hit - dead + holes

Definition at line 51 of file SiTrajectoryElement_xk.h.

51{return m_nMissing ; }

◆ nholesB()

const int & InDet::SiTrajectoryElement_xk::nholesB ( ) const
inline

Definition at line 55 of file SiTrajectoryElement_xk.h.

55{return m_nholesBackward; }

◆ nholesF()

const int & InDet::SiTrajectoryElement_xk::nholesF ( ) const
inline

Definition at line 54 of file SiTrajectoryElement_xk.h.

54{return m_nholesForward; }

◆ nlinksB()

const int & InDet::SiTrajectoryElement_xk::nlinksB ( ) const
inline

Definition at line 53 of file SiTrajectoryElement_xk.h.

53{return m_nlinksBackward; }

◆ nlinksF()

const int & InDet::SiTrajectoryElement_xk::nlinksF ( ) const
inline

Definition at line 52 of file SiTrajectoryElement_xk.h.

52{return m_nlinksForward; }

◆ noiseInitiate()

void InDet::SiTrajectoryElement_xk::noiseInitiate ( )

Definition at line 2240 of file SiTrajectoryElement_xk.cxx.

2241{
2242 m_noisemodel = 1; m_noise.initiate();
2243}

◆ noiseModel()

const int & InDet::SiTrajectoryElement_xk::noiseModel ( ) const
inline

Definition at line 63 of file SiTrajectoryElement_xk.h.

63{return m_noisemodel;}

◆ noiseProduction()

void InDet::SiTrajectoryElement_xk::noiseProduction ( int Dir,
const Trk::PatternTrackParameters & Tp,
double rad_length = -1.,
bool useMomentum = false )

qoverp

projection of direction normal to surface

number of radiation lengths when crossing this surface

134 is a very magic number related to multiple scattering, used frequently throught the track finder chain. Here we use it to estimate the scattering impact on the errors

1 - Az² --> squared transverse direction component

if too small, set to a reasonable minimum

azimuthal component: scale with 1/d

muon model

estimate e-loss

impact on covariance

impact on momentum

electron model - much more generous

for forward direction, invert correction

store in noise object

Definition at line 1121 of file SiTrajectoryElement_xk.cxx.

1123{
1124
1125 int Model = m_noisemodel;
1126 if(Model < 1 || Model > 2) return;
1127 if (rad_length<0.) rad_length=m_radlength;
1128
1129 double q = useMomentum ? m_invMoment : std::abs(Tp.parameters()[4]);
1130
1132 double s = std::abs(m_localDir[0]*m_localTransform[6]+
1135 if(m_tools->isITkGeometry() && !m_detelement) s = sqrt(m_localDir[0]*m_localDir[0]+m_localDir[1]*m_localDir[1]);
1136
1137 if(m_tools->isITkGeometry()){
1138 if (s < .01) s = 100.;
1139 else s = 1./s;
1140 }
1141 else{
1142 if (s < .05) s = 20.;
1143 else s = 1./s;
1144 }
1145
1151 double covariancePola = (134.*m_radlengthN)*(q*q);
1152 if(m_tools->isITkGeometry()){
1153 double qc = (1.+.038*log(m_radlengthN))*q;
1154 covariancePola = (185.*m_radlengthN)*qc*qc;
1155 }
1156
1158 double d = (1.-m_localDir[2])*(1.+m_localDir[2]);
1160 if(d < 1.e-5) d = 1.e-5;
1162 double covarianceAzim = covariancePola/d;
1163
1164 double covarianceIMom;
1165 double correctionIMom;
1166
1168 if(Model==1) {
1170 double dp = m_energylose*q*s;
1172 covarianceIMom = (.2*dp*dp)*(q*q);
1174 correctionIMom = 1.-dp;
1175 }
1177 else {
1178 correctionIMom = .70;
1179 covarianceIMom = (correctionIMom-1.)*(correctionIMom-1.)*(q*q);
1180 }
1182 if(Dir>0) correctionIMom = 1./correctionIMom;
1184 m_noise.set(covarianceAzim,covariancePola,covarianceIMom,correctionIMom);
1185}
static Double_t Tp(Double_t *t, Double_t *par)
static const int qc[]
double m_localDir[3]
the transform for this element

◆ npixelsB()

const int & InDet::SiTrajectoryElement_xk::npixelsB ( ) const
inline

Definition at line 60 of file SiTrajectoryElement_xk.h.

60{return m_npixelsBackward; }

◆ ntsos()

const int & InDet::SiTrajectoryElement_xk::ntsos ( ) const
inline

Definition at line 67 of file SiTrajectoryElement_xk.h.

67{return m_ntsos; }

◆ numberClusters()

int InDet::SiTrajectoryElement_xk::numberClusters ( ) const

Definition at line 2038 of file SiTrajectoryElement_xk.cxx.

2039{
2040 int n = 0;
2041 if (m_detstatus<=0) return n;
2042
2044 const InDet::PixelClusterCollection::const_iterator* sibegin
2045 = std::any_cast<const InDet::PixelClusterCollection::const_iterator>(&m_sibegin);
2046 const InDet::PixelClusterCollection::const_iterator* siend
2047 = std::any_cast<const InDet::PixelClusterCollection::const_iterator>(&m_siend);
2048 if (sibegin==nullptr or siend==nullptr) return 0;
2049 for (InDet::PixelClusterCollection::const_iterator p = *sibegin; p!=*siend; ++p) {
2050 ++n;
2051 }
2052 } else if (m_itType==SCT_ClusterColl) {
2053 const InDet::SCT_ClusterCollection::const_iterator* sibegin
2054 = std::any_cast<const InDet::SCT_ClusterCollection::const_iterator>(&m_sibegin);
2055 const InDet::SCT_ClusterCollection::const_iterator* siend
2056 = std::any_cast<const InDet::SCT_ClusterCollection::const_iterator>(&m_siend);
2057 if (sibegin==nullptr or siend==nullptr) return 0;
2058 for (InDet::SCT_ClusterCollection::const_iterator p = *sibegin; p!=*siend; ++p) {
2059 ++n;
2060 }
2061 } else {
2062 const InDet::SiClusterCollection::const_iterator* sibegin
2063 = std::any_cast<const InDet::SiClusterCollection::const_iterator>(&m_sibegin);
2064 const InDet::SiClusterCollection::const_iterator* siend
2065 = std::any_cast<const InDet::SiClusterCollection::const_iterator>(&m_siend);
2066 if (sibegin==nullptr or siend==nullptr) return 0;
2067 for (InDet::SiClusterCollection::const_iterator p = *sibegin; p!=*siend; ++p) {
2068 ++n;
2069 }
2070 }
2071 return n;
2072}

◆ operator=()

InDet::SiTrajectoryElement_xk & InDet::SiTrajectoryElement_xk::operator= ( const SiTrajectoryElement_xk & E)

Definition at line 1978 of file SiTrajectoryElement_xk.cxx.

1980{
1981 if(&E==this) return(*this);
1982
1983 m_fieldMode = E.m_fieldMode ;
1984 m_status = E.m_status ;
1985 m_detstatus = E.m_detstatus ;
1986 m_inside = E.m_inside ;
1987 m_nMissing = E.m_nMissing ;
1988 m_stereo = E.m_stereo ;
1989 m_detelement = E.m_detelement ;
1990 m_detlink = E.m_detlink ;
1991 m_surface = E.m_surface ;
1992 m_sibegin = E.m_sibegin ;
1993 m_siend = E.m_siend ;
1994 m_cluster = E.m_cluster ;
1995 m_clusterOld = E.m_clusterOld ;
1996 m_clusterNoAdd = E.m_clusterNoAdd;
1997 m_parametersPredForward = E.m_parametersPredForward;
1998 m_parametersUpdatedForward = E.m_parametersUpdatedForward;
1999 m_parametersPredBackward = E.m_parametersPredBackward;
2000 m_parametersUpdatedBackward = E.m_parametersUpdatedBackward;
2001 m_parametersSM = E.m_parametersSM;
2002 m_dist = E.m_dist ;
2003 m_xi2Forward = E.m_xi2Forward ;
2004 m_xi2Backward = E.m_xi2Backward ;
2005 m_xi2totalForward = E.m_xi2totalForward ;
2006 m_xi2totalBackward = E.m_xi2totalBackward;
2007 m_radlength = E.m_radlength ;
2008 m_radlengthN = E.m_radlengthN ;
2009 m_energylose = E.m_energylose ;
2010 m_halflength = E.m_halflength ;
2011 m_step = E.m_step ;
2012 m_nlinksForward = E.m_nlinksForward ;
2013 m_nlinksBackward = E.m_nlinksBackward ;
2014 m_nholesForward = E.m_nholesForward ;
2015 m_nholesBackward = E.m_nholesBackward ;
2016 m_dholesForward = E.m_dholesForward ;
2017 m_dholesBackward = E.m_dholesBackward ;
2018 m_noisemodel = E.m_noisemodel ;
2019 m_ndf = E.m_ndf ;
2020 m_ndfForward = E.m_ndfForward ;
2021 m_ndfBackward = E.m_ndfBackward ;
2022 m_ntsos = E.m_ntsos ;
2023 m_nclustersForward = E.m_nclustersForward ;
2024 m_nclustersBackward = E.m_nclustersBackward ;
2025 m_npixelsBackward = E.m_npixelsBackward ;
2026 m_noise = E.m_noise ;
2027 m_tools = E.m_tools ;
2028 m_covariance = E.m_covariance ;
2029 m_position = E.m_position ;
2030 m_invMoment = E.m_invMoment ;
2031 for(int i=0; i!=m_nlinksForward; ++i) {m_linkForward[i]=E.m_linkForward[i];}
2032 for(int i=0; i!=m_nlinksBackward; ++i) {m_linkBackward[i]=E.m_linkBackward[i];}
2033 for(int i=0; i!=m_ntsos ; ++i) {m_tsos [i]=E.m_tsos [i];}
2034 for(int i=0; i!=m_ntsos ; ++i) {m_utsos[i]=E.m_utsos [i];}
2035 return(*this);
2036}

◆ parameters()

const Trk::PatternTrackParameters * InDet::SiTrajectoryElement_xk::parameters ( ) const

return pattern parameters matching the status of this element

Returns
nullptr or pointer to the internal pattern track parameters PF, UF, PB, UB, SM depending on m_status and m_cluster The returned pointer is owned by this element.

◆ parametersPB()

const Trk::PatternTrackParameters & InDet::SiTrajectoryElement_xk::parametersPB ( ) const
inline

predicted

Definition at line 133 of file SiTrajectoryElement_xk.h.

◆ parametersPF()

const Trk::PatternTrackParameters & InDet::SiTrajectoryElement_xk::parametersPF ( ) const
inline

track parameters for forward filter / smoother predicted

Definition at line 129 of file SiTrajectoryElement_xk.h.

◆ parametersSM()

const Trk::PatternTrackParameters & InDet::SiTrajectoryElement_xk::parametersSM ( ) const
inline

Definition at line 136 of file SiTrajectoryElement_xk.h.

136{return m_parametersSM;}

◆ parametersUB()

const Trk::PatternTrackParameters & InDet::SiTrajectoryElement_xk::parametersUB ( ) const
inline

observed

Definition at line 135 of file SiTrajectoryElement_xk.h.

◆ parametersUF()

const Trk::PatternTrackParameters & InDet::SiTrajectoryElement_xk::parametersUF ( ) const
inline

updated

Definition at line 131 of file SiTrajectoryElement_xk.h.

◆ patternCovariances()

void InDet::SiTrajectoryElement_xk::patternCovariances ( const InDet::SiCluster * c,
double & covX,
double & covXY,
double & covY ) const
private

Private Methods.

sigma ~pitch / sqrt(12)

if larger error in cluster covariance, replace covx by it

strips: take y error from cov

pixels: again take either pitch/sqrt(12) or the cluster cov, whichever is larger

Definition at line 2277 of file SiTrajectoryElement_xk.cxx.

2279{
2280 const Amg::MatrixX& v = c->localCovariance();
2281 if (m_tools->useFastTracking() and m_stereo) {
2282 // in fast tracking mode, endcap strip clusters use cluster covariance terms
2283 covX=v(0,0);
2284 covY=v(1,1);
2285 covXY=v(1,0);
2286 return;
2287 }
2288 covX = c->width().phiR();
2289 covX*=(covX*s_oneOverTwelve);
2290 covXY = c->localCovariance()(1,0);
2291
2292 if(!m_tools->useFastTracking()){
2293 if(covX < v(0,0)) covX=v(0,0);
2294 covXY = 0.;
2295 }
2296
2297 if(m_ndf==1) {
2298 covY=v(1,1);
2299 }
2300 else {
2302 covY=c->width().z();
2303 covY*=(covY*s_oneOverTwelve);
2304 if(!m_tools->useFastTracking()){
2305 if(covY < v(1,1)) covY=v(1,1);
2306 }
2307 }
2308}
static constexpr double s_oneOverTwelve

◆ precisePosCov()

void InDet::SiTrajectoryElement_xk::precisePosCov ( Trk::PatternTrackParameters & Tc)

Definition at line 2377 of file SiTrajectoryElement_xk.cxx.

2378{
2379
2380 m_position = m_cluster->localPosition ();
2381 m_covariance = m_cluster->localCovariance();
2382
2383 if(m_ndf==1) return;
2384
2385 const Amg::Vector2D& colRow = m_cluster->width().colRow();
2386 if(colRow.x()==1. && colRow.y()==1.) return;
2387
2388 std::unique_ptr<Trk::TrackParameters> tr = Tc.convert(true);
2389 std::unique_ptr<const Trk::RIO_OnTrack> ri(m_riotool->correct(*m_cluster, *tr, Gaudi::Hive::currentContext()));
2390
2391 m_position = ri->localParameters();
2392 m_covariance = ri->localCovariance();
2393
2394}
Eigen::Matrix< double, 2, 1 > Vector2D

◆ propagate()

bool InDet::SiTrajectoryElement_xk::propagate ( Trk::PatternTrackParameters & startingParameters,
Trk::PatternTrackParameters & outputParameters,
double & StepLength,
const EventContext & ctx )

Will propagate the startingParameters from their reference to the surface associated with this element and write the result into the second argument.

Start from 'startingParameters', propagate to current surface.

The third argument records the step length traversed.

Write into outputParameters and wrote step to surface into StepLength

helper field to store global frame parameters Convention: 0-2: Position 3-5: Direction 6: qoverp 7 - 41: jacobian 42-44: extension of jacobian for dA/ds 45: step length

transform starting parameters to global, write into globalParameters

if running with field, use Runge Kutta. Will update globalParameters to the result in global coordinates

otherwise, we can use the straight line

Update step length

and finally transform from global back to local, and write into the output parameters.

Definition at line 1379 of file SiTrajectoryElement_xk.cxx.

1382 {
1383 if (Trk::SurfaceType::Plane == m_surface->type() and
1384 Trk::SurfaceType::Plane == startingParameters.associatedSurface().type()) {
1385 bool useJac = (startingParameters.iscovariance());
1386 double globalParameters[64];
1394
1396 if(!transformPlaneToGlobal(useJac,startingParameters,globalParameters)) return false;
1398 if( m_fieldMode) {
1399 if(!rungeKuttaToPlane (useJac,globalParameters)) return false;
1400 }
1402 else {
1403 if(!straightLineStepToPlane(useJac,globalParameters)) return false;
1404 }
1406 StepLength = globalParameters[45];
1408 return transformGlobalToPlane(useJac,globalParameters,startingParameters,outputParameters);
1409 } else {
1410 if (!m_proptool->propagate (ctx,
1411 startingParameters, *m_surface, outputParameters,
1412 Trk::anyDirection, m_tools->fieldTool(), StepLength, Trk::pion))
1413 return false;
1414
1415 double sinPhi,cosPhi,sinTheta,cosTheta;
1416 sincos(outputParameters.parameters()[2],&sinPhi,&cosPhi);
1417 sincos(outputParameters.parameters()[3],&sinTheta,&cosTheta);
1418 m_localDir[0] = cosPhi*sinTheta;
1419 m_localDir[1] = sinPhi*sinTheta;
1420 m_localDir[2] = cosTheta;
1421 return true;
1422 }
1423}
bool rungeKuttaToPlane(bool updateJacobian, double *globalPars)
Runge Kutta step to plane Updates the "globalPars" array, which is also used to pass the input.
bool transformGlobalToPlane(bool updateJacobian, double *globalPars, Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outputParameters)
Tramsform from global to plane surface Will take the global parameters in globalPars,...
bool transformPlaneToGlobal(bool, Trk::PatternTrackParameters &localParameters, double *globalPars)
Tramsform from plane to global Will take the surface and parameters from localParameters and populate...
bool straightLineStepToPlane(bool updateJacobian, double *globalPars)
Straight line step to plane Updates the "globalPars" array, which is also used to pass the input.
virtual constexpr SurfaceType type() const =0
Returns the Surface type to avoid dynamic casts.
@ anyDirection

◆ propagateParameters()

bool InDet::SiTrajectoryElement_xk::propagateParameters ( Trk::PatternTrackParameters & startingParameters,
Trk::PatternTrackParameters & outputParameters,
double & StepLength )

Start from 'startingParameters', propagate to current surface.

Write into outputParameters and wrote step to surface into StepLength

helper field to store global frame parameters Convention: 0-2: Position 3-5: Direction 6: qoverp 7 - 41: jacobian 42-44: extension of jacobian for dA/ds 45: step length

if running with field, use Runge Kutta. Will update globalParameters to the result in global coordinates

otherwise, we can use the straight line

Update step length

and finally transform from global back to local, and write into the output parameters.

Definition at line 1433 of file SiTrajectoryElement_xk.cxx.

1435 {
1436 bool useJac = false;
1437 double globalParameters[64];
1445 if(!transformPlaneToGlobal(useJac,startingParameters,globalParameters)) return false;
1448 if( m_fieldMode) {
1449 if(!rungeKuttaToPlane (useJac,globalParameters)) return false;
1450 }
1452 else {
1453 if(!straightLineStepToPlane(useJac,globalParameters)) return false;
1454 }
1456 StepLength = globalParameters[45];
1458 return transformGlobalToPlane(useJac,globalParameters,startingParameters,outputParameters);
1459}

◆ quality()

double InDet::SiTrajectoryElement_xk::quality ( int & holes) const

Definition at line 1349 of file SiTrajectoryElement_xk.cxx.

1350{
1351
1352 if(!m_cluster && !m_clusterNoAdd) {
1353
1354 if(m_detstatus < 0) return 0.;
1355
1356 if (m_inside < 0) {
1357 double w = 2.-m_xi2max; if(++holes > 1) w*=2.; return w;
1358 }
1359 else if(m_inside == 0) return -1.;
1360 else return 0.;
1361 }
1362
1363 double w,X,Xc = m_xi2max+2.;
1364 m_status == 1 ? X = m_xi2Forward : X = m_xi2Backward;
1365 m_ndf == 2 ? w = 1.2*(Xc-X*.5) : w = Xc-X ; if(w < -1.) w = -1.;
1366 holes = 0;
1367
1368 return w;
1369}

◆ radlength()

const double & InDet::SiTrajectoryElement_xk::radlength ( ) const
inline

Definition at line 125 of file SiTrajectoryElement_xk.h.

125{return m_radlength ;}

◆ rungeKuttaToPlane()

bool InDet::SiTrajectoryElement_xk::rungeKuttaToPlane ( bool updateJacobian,
double * globalPars )

Runge Kutta step to plane Updates the "globalPars" array, which is also used to pass the input.


This array follows the convention outlined above (46 components)

minimum step length

step length below which we are allowed to use a helical approximation

tolerance before reducing step length

Minimum momentum check

dA/ds

This is a conversion from p to half-curvature (1/2R), when multiplied with the orthogonal field component Curvature = 2 * Pi x B x sin(angle)

abs(qoverp)

projection of global direction onto local Z-axis

distance orthogonal to surface in units of direction z-component

if we are sufficiently close in Z already, add a final straight line step corresponding to the remaining difference to get the estimate on the surface, update step length, and return the result

if we are too far away, Limit the step size to 0.3 * p

holders for the B-field

get the field at our reference point

if the step is sifficiently small, we are allowed to use a helical model

S/3

S/4

2 S/curvature radius, when multiplied with the appropriate field

First point

equip field with conversion factor to 2S/curvature

v cross B

updated position for field eval

field at updated position

if assuming helix, homogenous field

Parameters calculation if the step grew too small, or we traveled more than 2 meters, abort, this went badly wrong...

New step estimation

if the remaining step is below threshold, we can finish with a small linear step

if we ran past the surface and changed signs more than twice, abort

if absolute step size is decreasing, we keep going

if step increased, try the other direction

otherwise refine step length if shorter than before

update field for next iteration

Definition at line 1661 of file SiTrajectoryElement_xk.cxx.

1663{
1665 const double Smin = .1 ;
1668 const double Shel = 5. ;
1670 const double dlt = .001 ;
1671
1673 if(std::abs(globalPars[6]) > .05) return false;
1674
1675
1676 int it = 0;
1677 double* R = &globalPars[ 0]; // Coordinates
1678
1679 double* A = &globalPars[ 3]; // Directions
1680
1681 double* sA = &globalPars[42];
1682 double Pi = 149.89626*globalPars[6];
1684 double Pa = std::abs (globalPars[6]);
1685
1687 double a = A[0]*m_localTransform[6]+A[1]*m_localTransform[7]+A[2]*m_localTransform[8];
1688 if(a==0.) return false;
1690 double S = ((m_localTransform[12]-R[0]*m_localTransform[6])-(R[1]*m_localTransform[7]+R[2]*m_localTransform[8]))/a;
1691 double S0 = std::abs(S) ;
1692
1696 if(S0 <= Smin) {
1697 R[0]+=(A[0]*S);
1698 R[1]+=(A[1]*S);
1699 R[2]+=(A[2]*S);
1700 globalPars[45]+=S;
1701 return true;
1702 }
1705 else if( (Pa*S0) > .3) {
1706 if (S >0) S = 0.3 / Pa;
1707 else S = -0.3/Pa;
1708 }
1709
1710 bool ste = false;
1711
1713 double f0[3];
1714 double f[3];
1715
1717 m_fieldCache.getFieldZR(R,f0);
1718
1719
1720 while(true) {
1721
1722 bool Helix = false;
1724 if(std::abs(S) < Shel) Helix = true;
1725 double S3=(1./3.)*S;
1726 double S4=.25*S;
1727 double PS2=Pi*S;
1728
1731 double H0[3] = {f0[0]*PS2,
1732 f0[1]*PS2,
1733 f0[2]*PS2};
1734
1735 double A0 = A[1]*H0[2]-A[2]*H0[1] ;
1736 double B0 = A[2]*H0[0]-A[0]*H0[2] ;
1737 double C0 = A[0]*H0[1]-A[1]*H0[0] ;
1738
1739 double A2 = A0+A[0] ;
1740 double B2 = B0+A[1] ;
1741 double C2 = C0+A[2] ;
1742
1743 double A1 = A2+A[0] ;
1744 double B1 = B2+A[1] ;
1745 double C1 = C2+A[2] ;
1746
1747 // Second point
1748 //
1749 if(!Helix) {
1750 double gP[3]={R[0]+A1*S4,
1751 R[1]+B1*S4,
1752 R[2]+C1*S4};
1753
1754 m_fieldCache.getFieldZR(gP,f);
1755
1756 }
1758 else {
1759 f[0]=f0[0];
1760 f[1]=f0[1];
1761 f[2]=f0[2];
1762 }
1763
1764 double H1[3] = {f[0]*PS2,
1765 f[1]*PS2,
1766 f[2]*PS2};
1767 double A3 = (A[0]+B2*H1[2])-C2*H1[1] ;
1768 double B3 = (A[1]+C2*H1[0])-A2*H1[2] ;
1769 double C3 = (A[2]+A2*H1[1])-B2*H1[0] ;
1770
1771 double A4 = (A[0]+B3*H1[2])-C3*H1[1] ;
1772 double B4 = (A[1]+C3*H1[0])-A3*H1[2] ;
1773 double C4 = (A[2]+A3*H1[1])-B3*H1[0] ;
1774
1775 double A5 = 2.*A4-A[0] ;
1776 double B5 = 2.*B4-A[1] ;
1777 double C5 = 2.*C4-A[2] ;
1778
1779 // Last point
1780 //
1781 if(!Helix) {
1782 double gP[3]={R[0]+S*A4,
1783 R[1]+S*B4,
1784 R[2]+S*C4};
1785
1786 m_fieldCache.getFieldZR(gP,f);
1787
1788 }
1789 else{
1790 f[0]=f0[0];
1791 f[1]=f0[1];
1792 f[2]=f0[2];
1793 }
1794
1795 double H2[3] = {f[0]*PS2,
1796 f[1]*PS2,
1797 f[2]*PS2};
1798
1799 double A6 = B5*H2[2]-C5*H2[1] ;
1800 double B6 = C5*H2[0]-A5*H2[2] ;
1801 double C6 = A5*H2[1]-B5*H2[0] ;
1802
1803 // Test approximation quality on give step and possible step reduction
1804 //
1805 if(!ste) {
1806 double EST = std::abs((A1+A6)-(A3+A4))+std::abs((B1+B6)-(B3+B4))+std::abs((C1+C6)-(C3+C4));
1807 if(EST>dlt) {
1808 S*=.6;
1809 continue;
1810 }
1811 }
1812
1815 if((!ste && S0 > std::abs(S)*100.) || std::abs(globalPars[45]+=S) > 2000.) return false;
1816 ste = true;
1817
1818 double A0arr[3]{A0,B0,C0};
1819 double A3arr[3]{A3,B3,C3};
1820 double A4arr[3]{A4,B4,C4};
1821 double A6arr[3]{A6,B6,C6};
1822
1823 if(Jac) {
1824 Trk::propJacobian(globalPars,H0,H1,H2,A,A0arr,A3arr,A4arr,A6arr,S3);
1825 }
1826
1827 R[0]+=(A2+A3+A4)*S3;
1828 A[0] = ((A0+2.*A3)+(A5+A6));
1829 R[1]+=(B2+B3+B4)*S3;
1830 A[1] = ((B0+2.*B3)+(B5+B6));
1831 R[2]+=(C2+C3+C4)*S3;
1832 A[2] = ((C0+2.*C3)+(C5+C6));
1833 if(!m_tools->isITkGeometry()){
1834 A[0] *= 1./3.;
1835 A[1] *= 1./3.;
1836 A[2] *= 1./3.;
1837 }
1838
1839 double D = 1./sqrt(A[0]*A[0]+A[1]*A[1]+A[2]*A[2]);
1840 A[0]*=D; A[1]*=D; A[2]*=D;
1841
1844 double a = A[0]*m_localTransform[6]+A[1]*m_localTransform[7]+A[2]*m_localTransform[8];
1845 if(a==0.) return false;
1846 double Sn = ((m_localTransform[12]-R[0]*m_localTransform[6])-(R[1]*m_localTransform[7]+R[2]*m_localTransform[8]))/a;
1847 double aSn = std::abs(Sn);
1848
1851 if(aSn <= Smin) {
1852 double Sl = 2./S;
1853 sA[0] = A6*Sl;
1854 sA[1] = B6*Sl;
1855 sA[2] = C6*Sl;
1856
1857 R[0]+=(A[0]*Sn);
1858 R[1]+=(A[1]*Sn);
1859 R[2]+=(A[2]*Sn);
1860 globalPars[45]+=Sn;
1861
1862 return true;
1863 }
1864
1865 double aS = std::abs(S);
1866
1868 if ( S*Sn < 0. ) {
1869 if(++it > 2) return false;
1871 if (aSn < aS) S = Sn;
1873 else S =-S;
1874 }
1876 else if( aSn < aS ) S = Sn;
1877
1879 f0[0]=f[0];
1880 f0[1]=f[1];
1881 f0[2]=f[2];
1882 }
1883 return false;
1884}
static const int B0
Definition AtlasPID.h:122
static const double Pi
static Double_t a
#define H2(x, y, z)
Definition MD5.cxx:115
struct TBPatternUnitContext S3
MagField::AtlasFieldCache m_fieldCache
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
ATH_ALWAYS_INLINE void propJacobian(double *ATH_RESTRICT P, const double *ATH_RESTRICT H0, const double *ATH_RESTRICT H1, const double *ATH_RESTRICT H2, const double *ATH_RESTRICT A, const double *ATH_RESTRICT A0, const double *ATH_RESTRICT A3, const double *ATH_RESTRICT A4, const double *ATH_RESTRICT A6, const double S3)
This provides an inline helper function for updating the jacobian during Runge-Kutta propagation.

◆ searchClusters()

int InDet::SiTrajectoryElement_xk::searchClusters ( Trk::PatternTrackParameters & Tp,
SiClusterLink_xk * L )

delegate work to subsystem-specific template implementation

Definition at line 2400 of file SiTrajectoryElement_xk.cxx.

◆ searchClustersSub()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersSub ( Trk::PatternTrackParameters & ,
SiClusterLink_xk *  )

◆ searchClustersWithoutStereoAssPIX()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithoutStereoAssPIX ( Trk::PatternTrackParameters & ,
SiClusterLink_xk * ,
const Trk::PRDtoTrackMap &  )

◆ searchClustersWithoutStereoAssSCT()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithoutStereoAssSCT ( Trk::PatternTrackParameters & ,
SiClusterLink_xk * ,
const Trk::PRDtoTrackMap &  )

◆ searchClustersWithoutStereoPIX()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithoutStereoPIX ( Trk::PatternTrackParameters & ,
SiClusterLink_xk *  )

◆ searchClustersWithoutStereoSCT()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithoutStereoSCT ( Trk::PatternTrackParameters & ,
SiClusterLink_xk *  )

◆ searchClustersWithStereo()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithStereo ( Trk::PatternTrackParameters & ,
SiClusterLink_xk *  )

◆ searchClustersWithStereoAss()

template<typename T>
int InDet::SiTrajectoryElement_xk::searchClustersWithStereoAss ( Trk::PatternTrackParameters & ,
SiClusterLink_xk * ,
const Trk::PRDtoTrackMap &  )

◆ set()

template<typename T>
bool InDet::SiTrajectoryElement_xk::set ( int st,
const InDet::SiDetElementBoundaryLink_xk *& dl,
const T & sb,
const T & se,
const InDet::SiCluster * si,
const EventContext & ctx )

T = InDet::SiClusterCollection::const_iterator or InDet::PixelClusterCollection::const_iterator or InDet::SCT_ClusterCollection::const_iterator.

◆ setCluster()

void InDet::SiTrajectoryElement_xk::setCluster ( const InDet::SiCluster * Cl)

Definition at line 2131 of file SiTrajectoryElement_xk.cxx.

2132{
2133 m_cluster = Cl;
2134}

◆ setClusterB()

void InDet::SiTrajectoryElement_xk::setClusterB ( const InDet::SiCluster * Cl,
double Xi2 )

Definition at line 2136 of file SiTrajectoryElement_xk.cxx.

2137{
2138 m_cluster = Cl ;
2139 m_status = 2 ;
2140 m_xi2Backward = Xi2;
2141}

◆ setDead()

bool InDet::SiTrajectoryElement_xk::setDead ( const Trk::Surface * SU)

Definition at line 29 of file SiTrajectoryElement_xk.cxx.

30{
31 m_fieldMode = false;
32 if(m_tools->fieldTool().magneticFieldMode()!=0) m_fieldMode = true;
33 m_status = 0 ;
34 m_detstatus = 0 ;
35 m_nMissing = 0 ;
36 m_nlinksForward = 0 ;
38 m_nholesForward = 0 ;
40 m_dholesForward = 0 ;
45 m_ndfForward = 0 ;
46 m_ndfBackward = 0 ;
47 m_ntsos = 0 ;
48 m_detelement = nullptr ;
49 m_detlink = nullptr ;
50 m_surface = SU ;
51 m_cluster = nullptr ;
52 m_clusterOld = nullptr ;
53 m_clusterNoAdd = nullptr ;
55 m_radlength = -1. ;
56 m_inside = -1 ;
57 m_localDir[0] = 1.;
58 m_localDir[1] = 0.;
59 m_localDir[2] = 0.;
60 return true;
61}

◆ setDeadRadLength()

void InDet::SiTrajectoryElement_xk::setDeadRadLength ( Trk::PatternTrackParameters & Tp)

Definition at line 68 of file SiTrajectoryElement_xk.cxx.

69{
70 if(m_radlength >= 0.) return;
71 double z = std::abs(Tp.parameters()[1]);
72 if (z < 50.) m_radlength = .0075;
73 else if(z < 205.) m_radlength = .02;
74 else if(z < 360.) m_radlength = .03+(z-205.)*0.000129032;
75 else if(z < 570.) m_radlength = .035+(z-360.)*9.04762e-05;
76 else if(z < 1500.) m_radlength = .054+(z-570.)*1.82796e-05;
77 else if(z < 2400.) m_radlength = .071+(z-1500.)*7.14286e-06;
78 else m_radlength = .078;
79
80}
#define z

◆ setNdist()

void InDet::SiTrajectoryElement_xk::setNdist ( int n)

Definition at line 2154 of file SiTrajectoryElement_xk.cxx.

2155{
2156 m_nMissing = n;
2157}

◆ setParameters()

void InDet::SiTrajectoryElement_xk::setParameters ( )

Definition at line 98 of file SiTrajectoryElement_xk.cxx.

99{
100 m_maxholes = m_tools->maxholes () ;
101 m_maxdholes = m_tools->maxdholes () ;
102 m_xi2max = m_tools->xi2max () ;
103 m_xi2maxNoAdd = m_tools->xi2maxNoAdd() ;
104 m_xi2maxlink = m_tools->xi2maxlink () ;
105 m_xi2multi = m_tools->xi2multi () ;
106}

◆ setParametersB()

void InDet::SiTrajectoryElement_xk::setParametersB ( Trk::PatternTrackParameters & P)

Definition at line 2144 of file SiTrajectoryElement_xk.cxx.

2145{
2147}

◆ setParametersF()

void InDet::SiTrajectoryElement_xk::setParametersF ( Trk::PatternTrackParameters & P)

Definition at line 2149 of file SiTrajectoryElement_xk.cxx.

2150{
2152}

◆ setTools()

void InDet::SiTrajectoryElement_xk::setTools ( const InDet::SiTools_xk * t)

Definition at line 87 of file SiTrajectoryElement_xk.cxx.

88{
89 m_tools = t ;
90 m_prdToTrackMap= m_tools->PRDtoTrackMap();
91 m_useassoTool = m_tools->usePRDtoTrackAssociation() ;
92 m_updatorTool = m_tools->updatorTool ();
93 m_proptool = m_tools->propTool ();
94 m_riotool = m_tools->rioTool ();
95 m_tools->fieldCondObj()->getInitializedCache (m_fieldCache);
96}
const Trk::PRDtoTrackMap * m_prdToTrackMap

◆ status()

const int & InDet::SiTrajectoryElement_xk::status ( ) const
inline

Definition at line 62 of file SiTrajectoryElement_xk.h.

62{return m_status; }

◆ step() [1/2]

const double & InDet::SiTrajectoryElement_xk::step ( ) const
inline

Definition at line 68 of file SiTrajectoryElement_xk.h.

68{return m_step; }

◆ step() [2/2]

double InDet::SiTrajectoryElement_xk::step ( InDet::SiTrajectoryElement_xk & TE)

Definition at line 1257 of file SiTrajectoryElement_xk.cxx.

1259{
1260 Trk::PatternTrackParameters Ta,Tb;
1261
1262 if (TE.m_status == 1) {
1264 else Ta = TE.m_parametersPredForward;
1265 }
1266 else if(TE.m_status == 2) {
1268 else Ta = TE.m_parametersPredBackward;
1269 }
1270 else if(TE.m_status == 3) {
1271 Ta = TE.m_parametersSM;
1272 }
1273 double step = 0.;
1274 bool Q = propagateParameters(Ta,Tb,step);
1275 if(Q) return step;
1276 return 0.;
1277}
bool propagateParameters(Trk::PatternTrackParameters &startingParameters, Trk::PatternTrackParameters &outParameters, double &step)
Start from 'startingParameters', propagate to current surface.

◆ stepToPerigee()

double InDet::SiTrajectoryElement_xk::stepToPerigee ( )

Definition at line 1316 of file SiTrajectoryElement_xk.cxx.

1317{
1318 Amg::Vector3D M;
1320
1321 if(m_cluster) {
1322 M = m_parametersUpdatedBackward.momentum();
1323 P = m_parametersUpdatedBackward.position();
1324 }
1325 else {
1326 M = m_parametersPredBackward.momentum();
1327 P = m_parametersPredBackward.position();
1328 }
1329
1330 return -(P[0]*M[0]+P[1]*M[1]);
1331}

◆ stereo()

const bool & InDet::SiTrajectoryElement_xk::stereo ( ) const
inline

Definition at line 61 of file SiTrajectoryElement_xk.h.

61{return m_stereo; }

◆ straightLineStepToPlane()

bool InDet::SiTrajectoryElement_xk::straightLineStepToPlane ( bool updateJacobian,
double * globalPars )

Straight line step to plane Updates the "globalPars" array, which is also used to pass the input.


This array follows the convention outlined above (46 components)

Definition at line 1890 of file SiTrajectoryElement_xk.cxx.

1892{
1893 double* R = &globalPars[ 0]; // Start coordinates
1894 double* A = &globalPars[ 3]; // Start directions
1896 double a = A[0]*m_localTransform[6]+A[1]*m_localTransform[7]+A[2]*m_localTransform[8];
1897 if(a==0.) return false;
1898 double S = ((m_localTransform[12]-R[0]*m_localTransform[6])-(R[1]*m_localTransform[7]+R[2]*m_localTransform[8]))/a;
1899 globalPars[45] = S;
1900
1901 // Track parameters in last point
1902 //
1903 R[0]+=(A[0]*S); R[1]+=(A[1]*S); R[2]+=(A[2]*S); if(!Jac) return true;
1904
1905 // Derivatives of track parameters in last point
1906 //
1907 for(int i=7; i<42; i+=7) {
1908
1909 double* dR = &globalPars[i ];
1910 double* dA = &globalPars[i+3];
1911 dR[0]+=(dA[0]*S); dR[1]+=(dA[1]*S); dR[2]+=(dA[2]*S);
1912 }
1913 return true;
1914}

◆ surface()

const Trk::Surface * InDet::SiTrajectoryElement_xk::surface ( ) const
inline

Definition at line 144 of file SiTrajectoryElement_xk.h.

144{return m_surface;}

◆ trackParameters() [1/2]

std::unique_ptr< Trk::TrackParameters > InDet::SiTrajectoryElement_xk::trackParameters ( bool cov,
int Q )

Definition at line 1072 of file SiTrajectoryElement_xk.cxx.

1073{
1074 if (m_status == 1) {
1075 if (m_cluster) {
1076 return m_parametersUpdatedForward.convert(cov);
1077 } else {
1078 return m_parametersPredForward.convert(cov);
1079 }
1080 } else if (m_status == 2) {
1081 if (m_cluster) {
1082 return m_parametersUpdatedBackward.convert(cov);
1083 } else {
1084 return m_parametersPredBackward.convert(cov);
1085 }
1086 } else if (m_status == 3) {
1087 if (Q == 0) {
1088 if (m_cluster) {
1090 return m_parametersSM.convert(cov);
1091 } else if ((*m_parametersUpdatedBackward.covariance())(4, 4) <
1092 (*m_parametersPredForward.covariance())(4, 4)) {
1093 return m_parametersUpdatedBackward.convert(cov);
1094 } else {
1095 return m_parametersPredForward.convert(cov);
1096 }
1097 } else
1098 return m_parametersSM.convert(cov);
1099 }
1100 if (Q == 1) {
1101 if (m_cluster) {
1102 return m_parametersUpdatedBackward.convert(cov);
1103 }
1104 }
1105 if (Q == 2) {
1106 if (m_cluster) {
1107 return m_parametersUpdatedForward.convert(cov);
1108 }
1109 }
1110 }
1111 return nullptr;
1112}

◆ trackParameters() [2/2]

std::unique_ptr< Trk::TrackParameters > InDet::SiTrajectoryElement_xk::trackParameters ( Trk::PatternTrackParameters & Tp,
bool cov )
static

Definition at line 1245 of file SiTrajectoryElement_xk.cxx.

1247{
1248 Tp.changeDirection();
1249 return Tp.convert(cov);
1250}

◆ trackParametersWithNewDirection()

std::unique_ptr< Trk::TrackParameters > InDet::SiTrajectoryElement_xk::trackParametersWithNewDirection ( bool cov,
int Q )

Definition at line 1196 of file SiTrajectoryElement_xk.cxx.

1197{
1198 if (m_status == 1) {
1199 if (m_cluster) {
1201 } else {
1203 }
1204
1205 } else if (m_status == 2) {
1206 if (m_cluster) {
1208 } else {
1210 }
1211 } else if (m_status == 3) {
1212
1213 if (Q == 0) {
1214 if (m_cluster) {
1216 return trackParameters(m_parametersSM, cov);
1217 else if ((*m_parametersUpdatedBackward.covariance())(4, 4) <
1218 (*m_parametersPredForward.covariance())(4, 4)) {
1220 } else {
1222 }
1223 } else {
1224 return trackParameters(m_parametersSM, cov);
1225 }
1226 }
1227 if (Q == 1) {
1228 if (m_cluster){
1230 }
1231 }
1232 if (Q == 2) {
1233 if (m_cluster){
1235 }
1236 }
1237 }
1238 return nullptr;
1239}
std::unique_ptr< Trk::TrackParameters > trackParameters(bool, int)

◆ trackPerigeeStateOnSurface()

Trk::TrackStateOnSurface * InDet::SiTrajectoryElement_xk::trackPerigeeStateOnSurface ( const EventContext & ctx)

Definition at line 1043 of file SiTrajectoryElement_xk.cxx.

1044{
1045 if(&m_parametersUpdatedBackward.associatedSurface()!=m_surface) return nullptr;
1046
1047 double step ;
1048 Trk::PatternTrackParameters Tp;
1049
1050 Trk::PerigeeSurface per;
1051
1052 bool Q = m_proptool->propagate
1053 (ctx,
1055
1056 if(Q) {
1057 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
1058 typePattern.set(Trk::TrackStateOnSurface::Perigee);
1059 return new Trk::TrackStateOnSurface(nullptr,Tp.convert(true),nullptr,typePattern);
1060 }
1061 return nullptr;
1062}
@ Perigee
This represents a perigee, and so will contain a Perigee object only.

◆ trackSimpleStateOnSurface()

Trk::TrackStateOnSurface * InDet::SiTrajectoryElement_xk::trackSimpleStateOnSurface ( bool change,
bool cov,
int Q )

Definition at line 979 of file SiTrajectoryElement_xk.cxx.

981{
982 if(!m_detelement) {
983 return nullptr;
984 }
985
986 std::unique_ptr<Trk::TrackParameters> tp = nullptr;
987
988 if (Q) {
989 if (!change) {
990 tp = trackParameters(cov, Q);
991 } else {
993 }
994 if (!tp) {
995 return nullptr;
996 }
997 if (&tp->associatedSurface() != m_surface) {
998 return nullptr;
999 }
1000 }
1001
1002 IdentifierHash iH = m_detelement->identifyHash();
1003 std::unique_ptr<Trk::MeasurementBase> ro{};
1004 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> pat(
1005 0);
1006
1007 const InDet::SiCluster* cl = nullptr;
1008 if (m_cluster) {
1009 cl = m_cluster;
1011 } else {
1014 }
1016
1017 Trk::LocalParameters locp = Trk::LocalParameters(cl->localPosition());
1018 //coverity[NULL_FIELD:FALSE]
1019 Amg::MatrixX cv = cl->localCovariance();
1020
1021 Trk::FitQualityOnSurface fq{};
1022 if (m_status == 1) fq = Trk::FitQualityOnSurface(m_xi2Forward,m_ndf);
1023 else fq = Trk::FitQualityOnSurface(m_xi2Backward,m_ndf);
1024
1025 if (m_ndf == 1) {
1026 const InDet::SCT_Cluster* sc = static_cast<const InDet::SCT_Cluster*>(cl);
1027 if (sc)
1028 ro = std::make_unique<InDet::SCT_ClusterOnTrack>(sc, std::move(locp), std::move(cv), iH, sc->globalPosition());
1029 } else {
1030 const InDet::PixelCluster* pc = static_cast<const InDet::PixelCluster*>(cl);
1031 if (pc)
1032 ro = std::make_unique<InDet::PixelClusterOnTrack>(
1033 pc, std::move(locp), std::move(cv), iH, pc->globalPosition(), pc->gangedPixel());
1034 }
1035 return new Trk::TrackStateOnSurface(fq, std::move(ro), std::move(tp), nullptr, pat);
1036}
static Double_t sc
std::unique_ptr< Trk::TrackParameters > trackParametersWithNewDirection(bool, int)
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Scatterer
This represents a scattering point on the track, and so will contain TrackParameters and MaterialEffe...

◆ trackStateOnSurface()

Trk::TrackStateOnSurface * InDet::SiTrajectoryElement_xk::trackStateOnSurface ( bool change,
bool cov,
bool multi,
int Q,
const EventContext & ctx )

Definition at line 902 of file SiTrajectoryElement_xk.cxx.

903{
904 std::unique_ptr<Trk::TrackParameters> tp = nullptr;
905 if (!change) {
906 tp = trackParameters(cov, Q);
907 } else {
909 }
910 if (!tp) {
911 return nullptr;
912 }
913 if (&tp->associatedSurface() != m_surface) {
914 return nullptr;
915 }
916
917 Trk::FitQualityOnSurface fq{};
918 std::unique_ptr<Trk::MeasurementBase> ro{};
919
920 if (m_status == 1) {
921 fq = Trk::FitQualityOnSurface(m_xi2Forward, m_ndf);
922 } else {
923 fq = Trk::FitQualityOnSurface(m_xi2Backward, m_ndf);
924 }
925
926 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> pat(
927 0);
928
929 if (m_cluster) {
930 ro.reset(m_riotool->correct(*m_cluster, *tp, ctx));
932 } else {
933 ro.reset(m_riotool->correct(*m_clusterNoAdd, *tp, ctx));
935 }
936 auto sa = Trk::ScatteringAngles(
937 0., 0., std::sqrt(m_noise.covarianceAzim()), std::sqrt(m_noise.covariancePola()));
938
939 auto meTemplate = std::make_unique<Trk::MaterialEffectsOnTrack>(
940 m_radlengthN, sa, tp->associatedSurface());
941
943 Trk::TrackStateOnSurface* sos =
944 new Trk::TrackStateOnSurface(fq, std::move(ro), std::move(tp), meTemplate->uniqueClone(), pat);
945
946 m_tsos[0] = sos;
947 m_utsos[0] = true;
948 m_ntsos = 1;
949
950 if (multi && m_cluster && m_ndf == 2 && m_nlinksBackward > 1) {
951 for(int i=1; i!= m_nlinksBackward; ++i) {
952 if(m_linkBackward[i].xi2() > m_xi2multi) break;
953 std::unique_ptr<Trk::TrackParameters> tpn{};
954 if (!change) {
955 tpn = trackParameters(cov, Q);
956 } else {
958 }
959 if (!tpn){
960 break;
961 }
962 auto fqn = Trk::FitQualityOnSurface(m_linkBackward[i].xi2(),m_ndf);
963 std::unique_ptr<Trk::MeasurementBase> ron(m_riotool->correct(
964 *m_linkBackward[i].cluster(), *(sos->trackParameters()), ctx) );
965 m_tsos[m_ntsos] = new Trk::TrackStateOnSurface(
966 fqn, std::move(ron), std::move(tpn), meTemplate->uniqueClone(), pat);
967 m_utsos[m_ntsos] = false;
968 if(++m_ntsos == 3) break;
969 }
970 }
971 return sos;
972}
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload

◆ transformGlobalToPlane()

bool InDet::SiTrajectoryElement_xk::transformGlobalToPlane ( bool useJac,
double * globalPars,
Trk::PatternTrackParameters & startingParameters,
Trk::PatternTrackParameters & outputParameters )

Tramsform from global to plane surface Will take the global parameters in globalPars, the surface from this trajectory element and populate outputParameters with the result.

If covariance update ("updateJacobian") is requested, also transport the covariance from "startingParameters" using the jacobian stored in the globalPars and write this into outputParameters. Convention for globalPars: /dL0 /dL1 /dPhi /dThe /dCM X ->globalPars[0] dX / globalPars[ 7] globalPars[14] globalPars[21] globalPars[28] globalPars[35]
Y ->globalPars[1] dY / globalPars[ 8] globalPars[15] globalPars[22] globalPars[29] globalPars[36]
Z ->globalPars[2] dZ / globalPars[ 9] globalPars[16] globalPars[23] globalPars[30] globalPars[37]
Ax ->globalPars[3] dAx/ globalPars[10] globalPars[17] globalPars[24] globalPars[31] globalPars[38]
Ay ->globalPars[4] dAy/ globalPars[11] globalPars[18] globalPars[25] globalPars[32] globalPars[39]
Az ->globalPars[5] dAz/ globalPars[12] globalPars[19] globalPars[26] globalPars[33] globalPars[40]
CM ->globalPars[6] dCM/ globalPars[13] globalPars[20] globalPars[27] globalPars[34] globalPars[41]

  • dA/dS (42-44) and step (45)

Convention for globalPars: /dL0 /dL1 /dPhi /dThe /dCM X ->globalPars[0] dX / globalPars[ 7] globalPars[14] globalPars[21] globalPars[28] globalPars[35] Y ->globalPars[1] dY / globalPars[ 8] globalPars[15] globalPars[22] globalPars[29] globalPars[36] Z ->globalPars[2] dZ / globalPars[ 9] globalPars[16] globalPars[23] globalPars[30] globalPars[37] Ax ->globalPars[3] dAx/ globalPars[10] globalPars[17] globalPars[24] globalPars[31] globalPars[38] Ay ->globalPars[4] dAy/ globalPars[11] globalPars[18] globalPars[25] globalPars[32] globalPars[39] Az ->globalPars[5] dAz/ globalPars[12] globalPars[19] globalPars[26] globalPars[33] globalPars[40] CM ->globalPars[6] dCM/ globalPars[13] globalPars[20] globalPars[27] globalPars[34] globalPars[41]

local x,y,z axes in global frame

distance of global position to origin of local frame

local parameters obtained by transforming from global

local X

local Y

phi (from global direction x,y)

theta (from global cosTheta)

qoverp

update local direction vector

Condition trajectory on surface

transverse direction component

unit direction vector in the X,Y plane

covariance matrix production using jacobian - CovNEW = J*CovOLD*Jt

check for negative diagonals in the cov

write into output parameters. Assign our surface to them

Definition at line 1552 of file SiTrajectoryElement_xk.cxx.

1554{
1556 double Ax[3] = {m_localTransform[0],m_localTransform[1],m_localTransform[2]};
1557 double Ay[3] = {m_localTransform[3],m_localTransform[4],m_localTransform[5]};
1558 double Az[3] = {m_localTransform[6],m_localTransform[7],m_localTransform[8]};
1560 double d [3] = {globalPars[0]-m_localTransform[ 9],
1561 globalPars[1]-m_localTransform[10],
1562 globalPars[2]-m_localTransform[11]};
1563
1565 double p[5] = {
1566 d[0]*Ax[0]+d[1]*Ax[1]+d[2]*Ax[2],
1567 d[0]*Ay[0]+d[1]*Ay[1]+d[2]*Ay[2],
1568 atan2(globalPars[4],globalPars[3]),
1569 acos(globalPars[5]),
1570 globalPars[6]
1571 };
1572
1574 m_localDir[0] = globalPars[3];
1575 m_localDir[1] = globalPars[4];
1576 m_localDir[2] = globalPars[5];
1577
1578 if (useJac) {
1580 double A = Az[0]*globalPars[3]+Az[1]*globalPars[4]+Az[2]*globalPars[5];
1581 if(A!=0.) A=1./A;
1582 double s0 = Az[0]*globalPars[ 7]+Az[1]*globalPars[ 8]+Az[2]*globalPars[ 9];
1583 double s1 = Az[0]*globalPars[14]+Az[1]*globalPars[15]+Az[2]*globalPars[16];
1584 double s2 = Az[0]*globalPars[21]+Az[1]*globalPars[22]+Az[2]*globalPars[23];
1585 double s3 = Az[0]*globalPars[28]+Az[1]*globalPars[29]+Az[2]*globalPars[30];
1586 double s4 = Az[0]*globalPars[35]+Az[1]*globalPars[36]+Az[2]*globalPars[37];
1587 double T0 =(Ax[0]*globalPars[ 3]+Ax[1]*globalPars[ 4]+Ax[2]*globalPars[ 5])*A;
1588 double T1 =(Ay[0]*globalPars[ 3]+Ay[1]*globalPars[ 4]+Ay[2]*globalPars[ 5])*A;
1589 double n = 1./globalPars[6];
1590
1591 double Jac[21];
1592
1593 // Jacobian production
1594 //
1595 Jac[ 0] = (Ax[0]*globalPars[ 7]+Ax[1]*globalPars[ 8])+(Ax[2]*globalPars[ 9]-s0*T0); // dL0/dL0
1596 Jac[ 1] = (Ax[0]*globalPars[14]+Ax[1]*globalPars[15])+(Ax[2]*globalPars[16]-s1*T0); // dL0/dL1
1597 Jac[ 2] = (Ax[0]*globalPars[21]+Ax[1]*globalPars[22])+(Ax[2]*globalPars[23]-s2*T0); // dL0/dPhi
1598 Jac[ 3] = (Ax[0]*globalPars[28]+Ax[1]*globalPars[29])+(Ax[2]*globalPars[30]-s3*T0); // dL0/dThe
1599 Jac[ 4] =((Ax[0]*globalPars[35]+Ax[1]*globalPars[36])+(Ax[2]*globalPars[37]-s4*T0))*n; // dL0/dCM
1600
1601 Jac[ 5] = (Ay[0]*globalPars[ 7]+Ay[1]*globalPars[ 8])+(Ay[2]*globalPars[ 9]-s0*T1); // dL1/dL0
1602 Jac[ 6] = (Ay[0]*globalPars[14]+Ay[1]*globalPars[15])+(Ay[2]*globalPars[16]-s1*T1); // dL1/dL1
1603 Jac[ 7] = (Ay[0]*globalPars[21]+Ay[1]*globalPars[22])+(Ay[2]*globalPars[23]-s2*T1); // dL1/dPhi
1604 Jac[ 8] = (Ay[0]*globalPars[28]+Ay[1]*globalPars[29])+(Ay[2]*globalPars[30]-s3*T1); // dL1/dThe
1605 Jac[ 9] =((Ay[0]*globalPars[35]+Ay[1]*globalPars[36])+(Ay[2]*globalPars[37]-s4*T1))*n; // dL1/dCM
1606
1607 double P3=0;
1608 double P4=0;
1610 double C = globalPars[3]*globalPars[3]+globalPars[4]*globalPars[4];
1611 if(C > 1.e-20) {
1612 C= 1./C ;
1614 P3 = globalPars[3]*C;
1615 P4 =globalPars[4]*C;
1616 C =-sqrt(C);
1617 }
1618 else{
1619 C=-1.e10;
1620 P3 = 1.;
1621 P4 =0.;
1622 }
1623
1624 double T2 =(P3*globalPars[43]-P4*globalPars[42])*A;
1625 double C44 = C*globalPars[44] *A;
1626
1627 Jac[10] = P3*globalPars[11]-P4*globalPars[10]-s0*T2; // dPhi/dL0
1628 Jac[11] = P3*globalPars[18]-P4*globalPars[17]-s1*T2; // dPhi/dL1
1629 Jac[12] = P3*globalPars[25]-P4*globalPars[24]-s2*T2; // dPhi/dPhi
1630 Jac[13] = P3*globalPars[32]-P4*globalPars[31]-s3*T2; // dPhi/dThe
1631 Jac[14] =(P3*globalPars[39]-P4*globalPars[38]-s4*T2)*n; // dPhi/dCM
1632
1633 Jac[15] = C*globalPars[12]-s0*C44; // dThe/dL0
1634 Jac[16] = C*globalPars[19]-s1*C44; // dThe/dL1
1635 Jac[17] = C*globalPars[26]-s2*C44; // dThe/dPhi
1636 Jac[18] = C*globalPars[33]-s3*C44; // dThe/dThe
1637 Jac[19] =(C*globalPars[40]-s4*C44)*n; // dThe/dCM
1638 Jac[20] = 1.; // dCM /dCM
1639
1641 AmgSymMatrix(5) newCov = Trk::RungeKuttaUtils::newCovarianceMatrix(Jac, *startingParameters.covariance());
1642 outputParameters.setParametersWithCovariance(m_surface, p, newCov);
1643
1645 const AmgSymMatrix(5) & t = *outputParameters.covariance();
1646 if(t(0, 0)<=0. || t(1, 1)<=0. || t(2, 2)<=0. || t(3, 3)<=0. || t(4, 4)<=0.) return false;
1647 } else {
1649 outputParameters.setParameters(m_surface,p);
1650 }
1651
1652 return true;
1653}
#define AmgSymMatrix(dim)
static Double_t s0
if(pathvar)
void setParameters(const Surface *, const double *)
struct color C

◆ transformPlaneToGlobal()

bool InDet::SiTrajectoryElement_xk::transformPlaneToGlobal ( bool useJac,
Trk::PatternTrackParameters & localParameters,
double * globalPars )

Tramsform from plane to global Will take the surface and parameters from localParameters and populate globalPars with the result.

globalPars needs to be at least 46 elements long. Convention: /dL0 /dL1 /dPhi /dThe /dCM X ->globalPars[0] dX / globalPars[ 7] globalPars[14] globalPars[21] globalPars[28] globalPars[35]
Y ->globalPars[1] dY / globalPars[ 8] globalPars[15] globalPars[22] globalPars[29] globalPars[36]
Z ->globalPars[2] dZ / globalPars[ 9] globalPars[16] globalPars[23] globalPars[30] globalPars[37]
Ax ->globalPars[3] dAx/ globalPars[10] globalPars[17] globalPars[24] globalPars[31] globalPars[38]
Ay ->globalPars[4] dAy/ globalPars[11] globalPars[18] globalPars[25] globalPars[32] globalPars[39]
Az ->globalPars[5] dAz/ globalPars[12] globalPars[19] globalPars[26] globalPars[33] globalPars[40]
CM ->globalPars[6] dCM/ globalPars[13] globalPars[20] globalPars[27] globalPars[34] globalPars[41]

  • dA/dS (42-44) and step (45)

globalPars needs to be at least 46 elements long. Convention: /dL0 /dL1 /dPhi /dThe /dCM X ->globalPars[0] dX / globalPars[ 7] globalPars[14] globalPars[21] globalPars[28] globalPars[35] Y ->globalPars[1] dY / globalPars[ 8] globalPars[15] globalPars[22] globalPars[29] globalPars[36] Z ->globalPars[2] dZ / globalPars[ 9] globalPars[16] globalPars[23] globalPars[30] globalPars[37] Ax ->globalPars[3] dAx/ globalPars[10] globalPars[17] globalPars[24] globalPars[31] globalPars[38] Ay ->globalPars[4] dAy/ globalPars[11] globalPars[18] globalPars[25] globalPars[32] globalPars[39] Az ->globalPars[5] dAz/ globalPars[12] globalPars[19] globalPars[26] globalPars[33] globalPars[40] CM ->globalPars[6] dCM/ globalPars[13] globalPars[20] globalPars[27] globalPars[34] globalPars[41]

obtain trigonometric functions required for transform

get the surface corresponding to the local parameters

get the associated transform from the surface

Get the local x and y axis in the global frame

position

direction vectors

qoeverp // Az

for very high momenta, truncate to avoid zero

Update jacobian if requested

d(Ax,Ay,Az)/ds

Step length is initialised to zero - no propagation done yet

Definition at line 1477 of file SiTrajectoryElement_xk.cxx.

1479 {
1481 double sinPhi,cosPhi,cosTheta,sintheta;
1482 sincos(localParameters.parameters()[2],&sinPhi,&cosPhi);
1483 sincos(localParameters.parameters()[3],&sintheta,&cosTheta);
1484 if (m_tools->isITkGeometry()) {
1485 if(std::abs(sintheta) < std::abs(localParameters.parameters()[4])*50.) return false;
1486 }
1488 const Trk::Surface* pSurface=&localParameters.associatedSurface();
1489 if (!pSurface){
1490 throw(std::runtime_error("TrackParameters associated surface is null pointer in InDet::SiTrajectoryElement_xk::transformPlaneToGlobal"));
1491 }
1493 const Amg::Transform3D& T = pSurface->transform();
1494
1496 double Ax[3] = {T(0,0),T(1,0),T(2,0)};
1497 double Ay[3] = {T(0,1),T(1,1),T(2,1)};
1498
1500 globalPars[ 0] = localParameters.parameters()[0]*Ax[0]+localParameters.parameters()[1]*Ay[0]+T(0,3); // X
1501 globalPars[ 1] = localParameters.parameters()[0]*Ax[1]+localParameters.parameters()[1]*Ay[1]+T(1,3); // Y
1502 globalPars[ 2] = localParameters.parameters()[0]*Ax[2]+localParameters.parameters()[1]*Ay[2]+T(2,3); // Z
1504 globalPars[ 3] = cosPhi*sintheta; // Ax
1505 globalPars[ 4] = sinPhi*sintheta; // Ay
1506 globalPars[ 5] = cosTheta;
1508 globalPars[ 6] = localParameters.parameters()[4]; // CM
1510 if(std::abs(globalPars[6])<1.e-20) {
1511 if (globalPars[6] < 0){
1512 globalPars[6]=-1.e-20;
1513 }
1514 else globalPars[6]= 1.e-20;
1515 }
1516
1518 if(useJac) {
1519
1520 // /dL1 | /dL2 | /dPhi | /dThe | /dCM |
1521 globalPars[ 7] = Ax[0]; globalPars[14] = Ay[0]; globalPars[21] = 0.; globalPars[28] = 0.; globalPars[35] = 0.; // dX /
1522 globalPars[ 8] = Ax[1]; globalPars[15] = Ay[1]; globalPars[22] = 0.; globalPars[29] = 0.; globalPars[36] = 0.; // dY /
1523 globalPars[ 9] = Ax[2]; globalPars[16] = Ay[2]; globalPars[23] = 0.; globalPars[30] = 0.; globalPars[37] = 0.; // dZ /
1524 globalPars[10] = 0.; globalPars[17] = 0.; globalPars[24] =-globalPars[4]; globalPars[31] = cosPhi*cosTheta; globalPars[38] = 0.; // dAx/
1525 globalPars[11] = 0.; globalPars[18] = 0.; globalPars[25] = globalPars[3]; globalPars[32] = sinPhi*cosTheta; globalPars[39] = 0.; // dAy/
1526 globalPars[12] = 0.; globalPars[19] = 0.; globalPars[26] = 0.; globalPars[33] = -sintheta; globalPars[40] = 0.; // dAz/
1527
1529 globalPars[42] = 0.;
1530 globalPars[43] = 0.;
1531 globalPars[44] = 0.;
1532 }
1534 globalPars[45] = 0.;
1535 return true;
1536}
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Eigen::Affine3d Transform3D
unsigned long long T

◆ tsos()

Trk::TrackStateOnSurface * InDet::SiTrajectoryElement_xk::tsos ( int i)

Definition at line 2319 of file SiTrajectoryElement_xk.cxx.

2320{
2321 if(i<0 || i>2) return nullptr;
2322
2323 bool us = m_utsos[i];
2324 m_utsos[i] = true;
2325
2326 if(us) return new Trk::TrackStateOnSurface(*m_tsos[i]);
2327
2328 return m_tsos[i];
2329}

◆ xi2B()

const double & InDet::SiTrajectoryElement_xk::xi2B ( ) const
inline

Definition at line 122 of file SiTrajectoryElement_xk.h.

122{return m_xi2Backward ;}

◆ xi2F()

const double & InDet::SiTrajectoryElement_xk::xi2F ( ) const
inline

Definition at line 121 of file SiTrajectoryElement_xk.h.

121{return m_xi2Forward ;}

◆ xi2totalB()

const double & InDet::SiTrajectoryElement_xk::xi2totalB ( ) const
inline

Definition at line 124 of file SiTrajectoryElement_xk.h.

124{return m_xi2totalBackward ;}

◆ xi2totalF()

const double & InDet::SiTrajectoryElement_xk::xi2totalF ( ) const
inline

Definition at line 123 of file SiTrajectoryElement_xk.h.

123{return m_xi2totalForward ;}

Member Data Documentation

◆ m_cluster

const InDet::SiCluster* InDet::SiTrajectoryElement_xk::m_cluster {}
private

Definition at line 495 of file SiTrajectoryElement_xk.h.

495{} ;

◆ m_clusterNoAdd

const InDet::SiCluster* InDet::SiTrajectoryElement_xk::m_clusterNoAdd {}
private

Definition at line 497 of file SiTrajectoryElement_xk.h.

497{};

◆ m_clusterOld

const InDet::SiCluster* InDet::SiTrajectoryElement_xk::m_clusterOld {}
private

Definition at line 496 of file SiTrajectoryElement_xk.h.

496{} ;

◆ m_covariance

Amg::MatrixX InDet::SiTrajectoryElement_xk::m_covariance
private

Definition at line 523 of file SiTrajectoryElement_xk.h.

◆ m_detelement

const InDetDD::SiDetectorElement* InDet::SiTrajectoryElement_xk::m_detelement {}
private

Definition at line 480 of file SiTrajectoryElement_xk.h.

480{} ;

◆ m_detlink

const InDet::SiDetElementBoundaryLink_xk* InDet::SiTrajectoryElement_xk::m_detlink {}
private

Definition at line 481 of file SiTrajectoryElement_xk.h.

481{} ;

◆ m_detstatus

int InDet::SiTrajectoryElement_xk::m_detstatus {}
private

0 (no clusters)

Definition at line 443 of file SiTrajectoryElement_xk.h.

443{} ;

◆ m_dholesBackward

int InDet::SiTrajectoryElement_xk::m_dholesBackward {}
private

Definition at line 451 of file SiTrajectoryElement_xk.h.

451{} ;

◆ m_dholesForward

int InDet::SiTrajectoryElement_xk::m_dholesForward {}
private

Definition at line 450 of file SiTrajectoryElement_xk.h.

450{} ;

◆ m_dist

double InDet::SiTrajectoryElement_xk::m_dist {}
private

Definition at line 462 of file SiTrajectoryElement_xk.h.

462{} ;

◆ m_energylose

double InDet::SiTrajectoryElement_xk::m_energylose {}
private

Definition at line 469 of file SiTrajectoryElement_xk.h.

469{} ;

◆ m_fieldCache

MagField::AtlasFieldCache InDet::SiTrajectoryElement_xk::m_fieldCache
private

Definition at line 516 of file SiTrajectoryElement_xk.h.

◆ m_fieldMode

bool InDet::SiTrajectoryElement_xk::m_fieldMode {}
private

Definition at line 436 of file SiTrajectoryElement_xk.h.

436{} ;

◆ m_halflength

double InDet::SiTrajectoryElement_xk::m_halflength {}
private

Definition at line 470 of file SiTrajectoryElement_xk.h.

470{} ;

◆ m_inside

int InDet::SiTrajectoryElement_xk::m_inside {}
private

Definition at line 444 of file SiTrajectoryElement_xk.h.

444{} ;

◆ m_invMoment

double InDet::SiTrajectoryElement_xk::m_invMoment {}
private

Definition at line 478 of file SiTrajectoryElement_xk.h.

478{} ;

◆ m_itType

IteratorType InDet::SiTrajectoryElement_xk::m_itType {Invalid}
private

Definition at line 528 of file SiTrajectoryElement_xk.h.

528{Invalid};

◆ m_linkBackward

InDet::SiClusterLink_xk InDet::SiTrajectoryElement_xk::m_linkBackward[10]
private

Definition at line 513 of file SiTrajectoryElement_xk.h.

◆ m_linkForward

InDet::SiClusterLink_xk InDet::SiTrajectoryElement_xk::m_linkForward[10]
private

Definition at line 512 of file SiTrajectoryElement_xk.h.

◆ m_localDir

double InDet::SiTrajectoryElement_xk::m_localDir[3] {}
private

the transform for this element

Definition at line 477 of file SiTrajectoryElement_xk.h.

477{} ;

◆ m_localTransform

double InDet::SiTrajectoryElement_xk::m_localTransform[13] {}
private

Definition at line 476 of file SiTrajectoryElement_xk.h.

476{} ;

◆ m_maxdholes

int InDet::SiTrajectoryElement_xk::m_maxdholes {}
private

Definition at line 461 of file SiTrajectoryElement_xk.h.

461{} ;

◆ m_maxholes

int InDet::SiTrajectoryElement_xk::m_maxholes {}
private

Definition at line 460 of file SiTrajectoryElement_xk.h.

460{} ;

◆ m_nclustersBackward

int InDet::SiTrajectoryElement_xk::m_nclustersBackward {}
private

Definition at line 453 of file SiTrajectoryElement_xk.h.

453{} ;

◆ m_nclustersForward

int InDet::SiTrajectoryElement_xk::m_nclustersForward {}
private

Definition at line 452 of file SiTrajectoryElement_xk.h.

452{} ;

◆ m_ndf

int InDet::SiTrajectoryElement_xk::m_ndf {}
private

Definition at line 456 of file SiTrajectoryElement_xk.h.

456{} ;

◆ m_ndfBackward

int InDet::SiTrajectoryElement_xk::m_ndfBackward {}
private

Definition at line 458 of file SiTrajectoryElement_xk.h.

458{} ;

◆ m_ndfForward

int InDet::SiTrajectoryElement_xk::m_ndfForward {}
private

Definition at line 457 of file SiTrajectoryElement_xk.h.

457{} ;

◆ m_nholesBackward

int InDet::SiTrajectoryElement_xk::m_nholesBackward {}
private

Definition at line 449 of file SiTrajectoryElement_xk.h.

449{} ;

◆ m_nholesForward

int InDet::SiTrajectoryElement_xk::m_nholesForward {}
private

Definition at line 448 of file SiTrajectoryElement_xk.h.

448{} ;

◆ m_nlinksBackward

int InDet::SiTrajectoryElement_xk::m_nlinksBackward {}
private

Definition at line 447 of file SiTrajectoryElement_xk.h.

447{} ;

◆ m_nlinksForward

int InDet::SiTrajectoryElement_xk::m_nlinksForward {}
private

Definition at line 446 of file SiTrajectoryElement_xk.h.

446{} ;

◆ m_nMissing

int InDet::SiTrajectoryElement_xk::m_nMissing {}
private

Definition at line 445 of file SiTrajectoryElement_xk.h.

445{} ;

◆ m_noise

Trk::NoiseOnSurface InDet::SiTrajectoryElement_xk::m_noise
private

Definition at line 514 of file SiTrajectoryElement_xk.h.

◆ m_noisemodel

int InDet::SiTrajectoryElement_xk::m_noisemodel {}
private

Definition at line 455 of file SiTrajectoryElement_xk.h.

455{} ;

◆ m_npixelsBackward

int InDet::SiTrajectoryElement_xk::m_npixelsBackward {}
private

Definition at line 454 of file SiTrajectoryElement_xk.h.

454{} ;

◆ m_ntsos

int InDet::SiTrajectoryElement_xk::m_ntsos {}
private

Definition at line 459 of file SiTrajectoryElement_xk.h.

459{} ;

◆ m_parametersPredBackward

Trk::PatternTrackParameters InDet::SiTrajectoryElement_xk::m_parametersPredBackward
private

For backward filtering / smoothing Predicted state, backward.

Definition at line 508 of file SiTrajectoryElement_xk.h.

◆ m_parametersPredForward

Trk::PatternTrackParameters InDet::SiTrajectoryElement_xk::m_parametersPredForward
private

Pattern track parameters.

For forward filtering / smoothing Predicted state, forward

Definition at line 503 of file SiTrajectoryElement_xk.h.

◆ m_parametersSM

Trk::PatternTrackParameters InDet::SiTrajectoryElement_xk::m_parametersSM
private

Definition at line 511 of file SiTrajectoryElement_xk.h.

◆ m_parametersUpdatedBackward

Trk::PatternTrackParameters InDet::SiTrajectoryElement_xk::m_parametersUpdatedBackward
private

Updated state, backward.

Definition at line 510 of file SiTrajectoryElement_xk.h.

◆ m_parametersUpdatedForward

Trk::PatternTrackParameters InDet::SiTrajectoryElement_xk::m_parametersUpdatedForward
private

Updated state, forward.

Definition at line 505 of file SiTrajectoryElement_xk.h.

◆ m_position

Amg::Vector2D InDet::SiTrajectoryElement_xk::m_position
private

Definition at line 524 of file SiTrajectoryElement_xk.h.

◆ m_prdToTrackMap

const Trk::PRDtoTrackMap* InDet::SiTrajectoryElement_xk::m_prdToTrackMap {}
private

Definition at line 520 of file SiTrajectoryElement_xk.h.

520{};

◆ m_proptool

const Trk::IPatternParametersPropagator* InDet::SiTrajectoryElement_xk::m_proptool {}
private

Definition at line 518 of file SiTrajectoryElement_xk.h.

518{} ;

◆ m_radlength

double InDet::SiTrajectoryElement_xk::m_radlength {}
private

Definition at line 467 of file SiTrajectoryElement_xk.h.

467{} ;

◆ m_radlengthN

double InDet::SiTrajectoryElement_xk::m_radlengthN {}
private

Definition at line 468 of file SiTrajectoryElement_xk.h.

468{} ;

◆ m_riotool

const Trk::IRIO_OnTrackCreator* InDet::SiTrajectoryElement_xk::m_riotool {}
private

Definition at line 519 of file SiTrajectoryElement_xk.h.

519{} ;

◆ m_sibegin

std::any InDet::SiTrajectoryElement_xk::m_sibegin
private

Definition at line 492 of file SiTrajectoryElement_xk.h.

◆ m_siend

std::any InDet::SiTrajectoryElement_xk::m_siend
private

Definition at line 493 of file SiTrajectoryElement_xk.h.

◆ m_status

int InDet::SiTrajectoryElement_xk::m_status {}
private

status flag.

Start as 0. set to 1 if set up for forward set to 2 if set up for backward set to 3 by lastTrajectoryElement or BackwardPropagationSmoother if m_cluster

Definition at line 442 of file SiTrajectoryElement_xk.h.

442{} ;

◆ m_step

double InDet::SiTrajectoryElement_xk::m_step {}
private

Definition at line 471 of file SiTrajectoryElement_xk.h.

471{} ;

◆ m_stereo

bool InDet::SiTrajectoryElement_xk::m_stereo {}
private

Definition at line 434 of file SiTrajectoryElement_xk.h.

434{} ;

◆ m_surface

const Trk::Surface* InDet::SiTrajectoryElement_xk::m_surface {}
private

Definition at line 482 of file SiTrajectoryElement_xk.h.

482{} ;

◆ m_tools

const InDet::SiTools_xk* InDet::SiTrajectoryElement_xk::m_tools {}
private

Definition at line 515 of file SiTrajectoryElement_xk.h.

515{} ;

◆ m_tsos

Trk::TrackStateOnSurface* InDet::SiTrajectoryElement_xk::m_tsos[3] {}
private

Definition at line 522 of file SiTrajectoryElement_xk.h.

522{} ;

◆ m_updatorTool

const Trk::IPatternParametersUpdator* InDet::SiTrajectoryElement_xk::m_updatorTool {}
private

Definition at line 517 of file SiTrajectoryElement_xk.h.

517{} ;

◆ m_useassoTool

bool InDet::SiTrajectoryElement_xk::m_useassoTool = false
private

Definition at line 437 of file SiTrajectoryElement_xk.h.

◆ m_utsos

bool InDet::SiTrajectoryElement_xk::m_utsos[3] {}
private

Definition at line 435 of file SiTrajectoryElement_xk.h.

435{} ;

◆ m_xi2Backward

double InDet::SiTrajectoryElement_xk::m_xi2Backward {}
private

Definition at line 464 of file SiTrajectoryElement_xk.h.

464{} ;

◆ m_xi2Forward

double InDet::SiTrajectoryElement_xk::m_xi2Forward {}
private

Definition at line 463 of file SiTrajectoryElement_xk.h.

463{} ;

◆ m_xi2max

double InDet::SiTrajectoryElement_xk::m_xi2max {}
private

Definition at line 472 of file SiTrajectoryElement_xk.h.

472{} ;

◆ m_xi2maxlink

double InDet::SiTrajectoryElement_xk::m_xi2maxlink {}
private

Definition at line 474 of file SiTrajectoryElement_xk.h.

474{} ;

◆ m_xi2maxNoAdd

double InDet::SiTrajectoryElement_xk::m_xi2maxNoAdd {}
private

Definition at line 473 of file SiTrajectoryElement_xk.h.

473{} ;

◆ m_xi2multi

double InDet::SiTrajectoryElement_xk::m_xi2multi {}
private

Definition at line 475 of file SiTrajectoryElement_xk.h.

475{} ;

◆ m_xi2totalBackward

double InDet::SiTrajectoryElement_xk::m_xi2totalBackward {}
private

Definition at line 466 of file SiTrajectoryElement_xk.h.

466{} ;

◆ m_xi2totalForward

double InDet::SiTrajectoryElement_xk::m_xi2totalForward {}
private

Definition at line 465 of file SiTrajectoryElement_xk.h.

465{} ;

◆ s_oneOverTwelve

double InDet::SiTrajectoryElement_xk::s_oneOverTwelve {0.08333}
staticconstexprprivate

Definition at line 526 of file SiTrajectoryElement_xk.h.

526{0.08333} ;

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