CMS 3D CMS Logo

Typedefs | Functions
PerigeeConversions Namespace Reference

Typedefs

typedef FreeTrajectoryState FTS
 

Functions

CurvilinearTrajectoryError curvilinearError (const PerigeeTrajectoryError &perigeeError, const GlobalTrajectoryParameters &gtp)
 
PerigeeTrajectoryError ftsToPerigeeError (const FTS &originalFTS)
 
PerigeeTrajectoryParameters ftsToPerigeeParameters (const FTS &originalFTS, const GlobalPoint &referencePoint, double &pt)
 
AlgebraicMatrix55 jacobianCurvilinear2Perigee (const FreeTrajectoryState &fts)
 
AlgebraicMatrix66 jacobianParameters2Cartesian (const AlgebraicVector3 &momentum, const GlobalPoint &position, const TrackCharge &charge, const MagneticField *field)
 
AlgebraicMatrix55 jacobianPerigee2Curvilinear (const GlobalTrajectoryParameters &gtp)
 
GlobalVector momentumFromPerigee (const AlgebraicVector3 &momentum, const TrackCharge &charge, const GlobalPoint &referencePoint, const MagneticField *field)
 
GlobalVector momentumFromPerigee (const PerigeeTrajectoryParameters &parameters, double pt, const GlobalPoint &referencePoint)
 
GlobalPoint positionFromPerigee (const PerigeeTrajectoryParameters &parameters, const GlobalPoint &referencePoint)
 
TrajectoryStateClosestToPoint trajectoryStateClosestToPoint (const AlgebraicVector3 &momentum, const GlobalPoint &referencePoint, const TrackCharge &charge, const AlgebraicSymMatrix66 &theCovarianceMatrix, const MagneticField *field)
 

Detailed Description

namespace provides several functions to transform perigee parameters to and from various other parametrisations.

Typedef Documentation

Definition at line 16 of file PerigeeConversions.h.

Function Documentation

CurvilinearTrajectoryError PerigeeConversions::curvilinearError ( const PerigeeTrajectoryError perigeeError,
const GlobalTrajectoryParameters gtp 
)

Definition at line 61 of file PerigeeConversions.cc.

References PerigeeTrajectoryError::covarianceMatrix(), jacobianPerigee2Curvilinear(), and positionFromPerigee().

Referenced by TrajectoryStateClosestToPoint::calculateFTS(), and ftsToPerigeeError().

62 {
64  return CurvilinearTrajectoryError(ROOT::Math::Similarity(perigee2curv, perigeeError.covarianceMatrix()));
65 }
AlgebraicMatrix55 jacobianPerigee2Curvilinear(const GlobalTrajectoryParameters &gtp)
const AlgebraicSymMatrix55 & covarianceMatrix() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
PerigeeTrajectoryError PerigeeConversions::ftsToPerigeeError ( const FTS originalFTS)

Definition at line 52 of file PerigeeConversions.cc.

References curvilinearError(), FreeTrajectoryState::curvilinearError(), jacobianCurvilinear2Perigee(), and CurvilinearTrajectoryError::matrix().

Referenced by ftsToPerigeeParameters(), MatcherUsingTracksAlgorithm::getChi2(), TrackFromSeedProducer::produce(), and TrajectoryStateClosestToPoint::TrajectoryStateClosestToPoint().

53 {
54  AlgebraicSymMatrix55 errorMatrix = originalFTS.curvilinearError().matrix();
55  AlgebraicMatrix55 curv2perigee = jacobianCurvilinear2Perigee(originalFTS);
56  return PerigeeTrajectoryError(ROOT::Math::Similarity(curv2perigee,errorMatrix));
57 }
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
const CurvilinearTrajectoryError & curvilinearError() const
AlgebraicMatrix55 jacobianCurvilinear2Perigee(const FreeTrajectoryState &fts)
const AlgebraicSymMatrix55 & matrix() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
PerigeeTrajectoryParameters PerigeeConversions::ftsToPerigeeParameters ( const FTS originalFTS,
const GlobalPoint referencePoint,
double &  pt 
)

calculates the perigee parameters from a given FTS and a reference point.

Definition at line 8 of file PerigeeConversions.cc.

References funct::abs(), FreeTrajectoryState::charge(), geometryDiff::epsilon, Exception, ftsToPerigeeError(), M_PI, GlobalTrajectoryParameters::magneticFieldInInverseGeV(), FreeTrajectoryState::momentum(), FreeTrajectoryState::parameters(), PV3DBase< T, PVType, FrameType >::perp(), PVValHelper::phi, PV3DBase< T, PVType, FrameType >::phi(), FreeTrajectoryState::position(), EnergyCorrector::pt, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::theta(), theta(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by MatcherUsingTracksAlgorithm::getChi2(), and TrajectoryStateClosestToPoint::TrajectoryStateClosestToPoint().

10 {
11  GlobalVector impactDistance = originalFTS.position() - referencePoint;
12 
13  pt = originalFTS.momentum().perp();
14  if (pt==0.) throw cms::Exception("PerigeeConversions", "Track with pt=0");
15 
16  double theta = originalFTS.momentum().theta();
17  double phi = originalFTS.momentum().phi();
18  double field = originalFTS.parameters().magneticFieldInInverseGeV().z();
19 // if (field==0.) throw cms::Exception("PerigeeConversions", "Field is 0") << " at " << originalFTS.position() << "\n" ;
20 
21  double positiveMomentumPhi = ( (phi>0) ? phi : (2*M_PI+phi) );
22  double positionPhi = impactDistance.phi();
23  double positivePositionPhi =
24  ( (positionPhi>0) ? positionPhi : (2*M_PI+positionPhi) );
25  double phiDiff = positiveMomentumPhi - positivePositionPhi;
26  if (phiDiff<0.0) phiDiff+= (2*M_PI);
27  double signEpsilon = ( (phiDiff > M_PI) ? -1.0 : 1.0);
28 
29  double epsilon = signEpsilon *
30  sqrt ( impactDistance.x()*impactDistance.x() +
31  impactDistance.y()*impactDistance.y() );
32 
33  // The track parameters:
34  AlgebraicVector5 theTrackParameters;
35 
36  double signTC = - originalFTS.charge();
37  bool isCharged = (signTC!=0) && (std::abs(field)>1.e-10);
38  if (isCharged) {
39  theTrackParameters[0] = field / pt*signTC;
40  } else {
41  theTrackParameters[0] = 1 / pt;
42  }
43  theTrackParameters[1] = theta;
44  theTrackParameters[2] = phi;
45  theTrackParameters[3] = epsilon;
46  theTrackParameters[4] = impactDistance.z();
47  return PerigeeTrajectoryParameters(theTrackParameters, isCharged);
48 }
T perp() const
Definition: PV3DBase.h:72
const GlobalTrajectoryParameters & parameters() const
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
Geom::Theta< T > theta() const
T y() const
Definition: PV3DBase.h:63
TrackCharge charge() const
GlobalVector magneticFieldInInverseGeV(const GlobalPoint &x) const
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
GlobalVector momentum() const
#define M_PI
GlobalPoint position() const
ROOT::Math::SVector< double, 5 > AlgebraicVector5
T x() const
Definition: PV3DBase.h:62
AlgebraicMatrix55 PerigeeConversions::jacobianCurvilinear2Perigee ( const FreeTrajectoryState fts)

Jacobians of tranformations between curvilinear frame at point of closest approach in transverse plane and perigee frame. The fts must therefore be given at exactly this point in order to yield the correct Jacobians.

Definition at line 156 of file PerigeeConversions.cc.

References funct::abs(), alpha, TtFullHadDaughter::B, Vector3DBase< T, FrameTag >::cross(), Vector3DBase< T, FrameTag >::dot(), MillePedeFileConverter_cfg::e, class-composition::H, Exhume::I, M_PI, PV3DBase< T, PVType, FrameType >::mag(), GlobalTrajectoryParameters::magneticFieldInInverseGeV(), FreeTrajectoryState::momentum(), N, AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::parameters(), class-composition::Q, FreeTrajectoryState::signedInverseMomentum(), PV3DBase< T, PVType, FrameType >::theta(), FreeTrajectoryState::transverseCurvature(), mitigatedMETSequence_cff::U, Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), DOFs::Z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by ftsToPerigeeError(), and PerigeeKinematicState::PerigeeKinematicState().

156  {
157 
158  GlobalVector p = fts.momentum();
159 
160  GlobalVector Z = GlobalVector(0.,0.,1.);
161  GlobalVector T = p.unit();
162  GlobalVector U = Z.cross(T).unit();;
163  GlobalVector V = T.cross(U);
164 
165  GlobalVector I = GlobalVector(-p.x(), -p.y(), 0.); //opposite to track dir.
166  I = I.unit();
167  GlobalVector J(-I.y(), I.x(),0.); //counterclockwise rotation
168  GlobalVector K(Z);
170  GlobalVector H = B.unit();
171  GlobalVector HxT = H.cross(T);
172  GlobalVector N = HxT.unit();
173  double alpha = HxT.mag();
174  double qbp = fts.signedInverseMomentum();
175  double Q = -B.mag() * qbp;
176  double alphaQ = alpha * Q;
177 
178  double lambda = 0.5 * M_PI - p.theta();
179  double sinlambda, coslambda; vdt::fast_sincos(lambda, sinlambda, coslambda);
180  double seclambda = 1./coslambda;
181 
182  double ITI = 1./T.dot(I);
183  double NU = N.dot(U);
184  double NV = N.dot(V);
185  double UI = U.dot(I);
186  double VI = V.dot(I);
187  double UJ = U.dot(J);
188  double VJ = V.dot(J);
189  double UK = U.dot(K);
190  double VK = V.dot(K);
191 
192  AlgebraicMatrix55 jac;
193 
194  if( fabs(fts.transverseCurvature())<1.e-10 ) {
195  jac(0,0) = seclambda;
196  jac(0,1) = sinlambda*seclambda*seclambda*std::abs(qbp);
197  }else{
198  double Bz = B.z();
199  jac(0,0) = -Bz * seclambda;
200  jac(0,1) = -Bz * sinlambda*seclambda*seclambda*qbp;
201  jac(1,3) = alphaQ * NV * UI*ITI;
202  jac(1,4) = alphaQ * NV * VI*ITI;
203  jac(0,3) = -jac(0,1) * jac(1,3);
204  jac(0,4) = -jac(0,1) * jac(1,4);
205  jac(2,3) = -alphaQ*seclambda * NU * UI*ITI;
206  jac(2,4) = -alphaQ*seclambda * NU * VI*ITI;
207  }
208  jac(1,1) = -1.;
209  jac(2,2) = 1.;
210  jac(3,3) = VK*ITI;
211  jac(3,4) = -UK*ITI;
212  jac(4,3) = -VJ*ITI;
213  jac(4,4) = UJ*ITI;
214 
215  return jac;
216 
217 }
float alpha
Definition: AMPTWrapper.h:95
const GlobalTrajectoryParameters & parameters() const
T y() const
Definition: PV3DBase.h:63
PreciseFloatType< T, U >::Type dot(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:107
GlobalVector magneticFieldInInverseGeV(const GlobalPoint &x) const
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
T mag() const
Definition: PV3DBase.h:67
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:119
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const std::complex< double > I
Definition: I.h:8
static const std::string B
GlobalVector momentum() const
#define M_PI
Vector3DBase unit() const
Definition: Vector3DBase.h:57
#define N
Definition: blowfish.cc:9
double transverseCurvature() const
long double T
T x() const
Definition: PV3DBase.h:62
double signedInverseMomentum() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
Global3DVector GlobalVector
Definition: GlobalVector.h:10
AlgebraicMatrix66 PerigeeConversions::jacobianParameters2Cartesian ( const AlgebraicVector3 momentum,
const GlobalPoint position,
const TrackCharge charge,
const MagneticField field 
)

Jacobians of tranformations between the parametrixation (x, y, z, transverse curvature, theta, phi) to Cartesian

Definition at line 124 of file PerigeeConversions.cc.

References funct::abs(), ecalTB2006H4_GenSimDigiReco_cfg::bField, alignmentValidation::c1, ALCARECOTkAlJpsiMuMu_cff::charge, MillePedeFileConverter_cfg::e, f, connectstrParser::f1, connectstrParser::f2, MagneticField::inInverseGeV(), indexGen::s2, and PV3DBase< T, PVType, FrameType >::z().

Referenced by KinematicPerigeeConversions::jacobianParameters2Kinematic(), and trajectoryStateClosestToPoint().

127 {
128  float factor = -1.;
129  float bField = field->inInverseGeV(position).z();
130  if (charge!=0 && std::abs(bField)>1.e-10f)
131  factor = bField*charge;
132 
133 
134  float s1,c1; vdt::fast_sincosf(momentum[1],s1,c1);
135  float s2,c2; vdt::fast_sincosf(momentum[2],s2,c2);
136  float f1 = factor/(momentum[0]*momentum[0]);
137  float f2 = factor/momentum[0];
138 
139  AlgebraicMatrix66 frameTransJ;
140  frameTransJ(0,0) = 1;
141  frameTransJ(1,1) = 1;
142  frameTransJ(2,2) = 1;
143  frameTransJ(3,3) = (f1 * c2);
144  frameTransJ(4,3) = (f1 * s2);
145  frameTransJ(5,3) = (f1*c1/s1);
146 
147  frameTransJ(3,5) = (f2 * s2);
148  frameTransJ(4,5) = -(f2 * c2);
149  frameTransJ(5,4) = (f2/(s1*s1));
150 
151  return frameTransJ;
152 }
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
GlobalVector inInverseGeV(const GlobalPoint &gp) const
Field value ad specified global point, in 1/Gev.
Definition: MagneticField.h:39
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
AlgebraicMatrix55 PerigeeConversions::jacobianPerigee2Curvilinear ( const GlobalTrajectoryParameters gtp)

Definition at line 222 of file PerigeeConversions.cc.

References alpha, TtFullHadDaughter::B, Vector3DBase< T, FrameTag >::cross(), Vector3DBase< T, FrameTag >::dot(), MillePedeFileConverter_cfg::e, f, class-composition::H, Exhume::I, M_PI, PV3DBase< T, PVType, FrameType >::mag(), GlobalTrajectoryParameters::magneticFieldInInverseGeV(), GlobalTrajectoryParameters::momentum(), N, AlCaHLTBitMon_ParallelJobs::p, class-composition::Q, GlobalTrajectoryParameters::signedInverseMomentum(), PV3DBase< T, PVType, FrameType >::theta(), GlobalTrajectoryParameters::transverseCurvature(), mitigatedMETSequence_cff::U, Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), DOFs::Z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by curvilinearError().

222  {
223 
224  GlobalVector p = gtp.momentum();
225 
226  GlobalVector Z = GlobalVector(0.f,0.f,1.f);
227  GlobalVector T = p.unit();
228  GlobalVector U = Z.cross(T).unit();;
229  GlobalVector V = T.cross(U);
230 
231  GlobalVector I = GlobalVector(-p.x(), -p.y(), 0.f); //opposite to track dir.
232  I = I.unit();
233  GlobalVector J(-I.y(), I.x(),0.f); //counterclockwise rotation
234  GlobalVector K(Z);
236  GlobalVector H = B.unit();
237  GlobalVector HxT = H.cross(T);
238  GlobalVector N = HxT.unit();
239  double alpha = HxT.mag();
240  double qbp = gtp.signedInverseMomentum();
241  double Q = -B.mag() * qbp;
242  double alphaQ = alpha * Q;
243 
244 
245  double lambda = 0.5 * M_PI - p.theta();
246  double sinlambda, coslambda; vdt::fast_sincos(lambda, sinlambda, coslambda);
247  double seclambda = 1./coslambda;
248 
249  double mqbpt = -1./coslambda * qbp;
250 
251  double TJ = T.dot(J);
252  double TK = T.dot(K);
253  double NU = N.dot(U);
254  double NV = N.dot(V);
255  double UJ = U.dot(J);
256  double VJ = V.dot(J);
257  double UK = U.dot(K);
258  double VK = V.dot(K);
259 
260  AlgebraicMatrix55 jac;
261 
262  if( fabs(gtp.transverseCurvature())<1.e-10f ) {
263  jac(0,0) = coslambda;
264  jac(0,1) = sinlambda/coslambda/gtp.momentum().mag();
265  }else{
266  jac(0,0) = -coslambda/B.z();
267  jac(0,1) = -sinlambda * mqbpt;
268  jac(1,3) = -alphaQ * NV * TJ;
269  jac(1,4) = -alphaQ * NV * TK;
270  jac(2,3) = -alphaQ*seclambda * NU * TJ;
271  jac(2,4) = -alphaQ*seclambda * NU * TK;
272  }
273  jac(1,1) = -1.;
274  jac(2,2) = 1.;
275  jac(3,3) = UJ;
276  jac(3,4) = UK;
277  jac(4,3) = VJ;
278  jac(4,4) = VK;
279 
280  return jac;
281 }
float alpha
Definition: AMPTWrapper.h:95
T y() const
Definition: PV3DBase.h:63
PreciseFloatType< T, U >::Type dot(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:107
GlobalVector magneticFieldInInverseGeV(const GlobalPoint &x) const
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
T mag() const
Definition: PV3DBase.h:67
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:119
T z() const
Definition: PV3DBase.h:64
const std::complex< double > I
Definition: I.h:8
double f[11][100]
static const std::string B
#define M_PI
Vector3DBase unit() const
Definition: Vector3DBase.h:57
#define N
Definition: blowfish.cc:9
long double T
T x() const
Definition: PV3DBase.h:62
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
Global3DVector GlobalVector
Definition: GlobalVector.h:10
GlobalVector PerigeeConversions::momentumFromPerigee ( const AlgebraicVector3 momentum,
const TrackCharge charge,
const GlobalPoint referencePoint,
const MagneticField field 
)

returns the (Cartesian) momentum. The parameters need not be the full perigee parameters, as long as the first 3 parameters are the transverse curvature, theta and phi.

Definition at line 87 of file PerigeeConversions.cc.

References funct::abs(), MagneticField::inInverseGeV(), EnergyCorrector::pt, trajectoryStateClosestToPoint(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by TrajectoryStateClosestToPoint::calculateFTS(), TrajectoryStateClosestToPoint::momentum(), momentumFromPerigee(), positionFromPerigee(), and trajectoryStateClosestToPoint().

89 {
90  double pt;
91 
92  double bz = fabs(field->inInverseGeV(referencePoint).z());
93  if ( charge!=0 && std::abs(bz)>1.e-10 ) {
94  pt = std::abs(bz/momentum[0]);
95  // if (pt<1.e-10) throw cms::Exception("PerigeeConversions", "pt is 0");
96  } else {
97  pt = 1 / momentum[0];
98  }
99 
100  return GlobalVector(vdt::fast_cos(momentum[2]) * pt,
101  vdt::fast_sin(momentum[2]) * pt,
102  pt/vdt::fast_tan(momentum[1]));
103 }
GlobalVector inInverseGeV(const GlobalPoint &gp) const
Field value ad specified global point, in 1/Gev.
Definition: MagneticField.h:39
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Global3DVector GlobalVector
Definition: GlobalVector.h:10
GlobalVector PerigeeConversions::momentumFromPerigee ( const PerigeeTrajectoryParameters parameters,
double  pt,
const GlobalPoint referencePoint 
)

returns the (Cartesian) momentum from the PerigeeTrajectoryParameters

Definition at line 78 of file PerigeeConversions.cc.

References momentumFromPerigee(), PerigeeTrajectoryParameters::phi(), and PerigeeTrajectoryParameters::theta().

79 {
80  return GlobalVector(vdt::fast_cos(parameters.phi()) * pt,
81  vdt::fast_sin(parameters.phi()) * pt,
82  pt /vdt::fast_tan(parameters.theta()));
83 }
Global3DVector GlobalVector
Definition: GlobalVector.h:10
GlobalPoint PerigeeConversions::positionFromPerigee ( const PerigeeTrajectoryParameters parameters,
const GlobalPoint referencePoint 
)

returns the position (on the helix) at which the parameters are defined

Definition at line 68 of file PerigeeConversions.cc.

References momentumFromPerigee(), PerigeeTrajectoryParameters::vector(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by TrajectoryStateClosestToPoint::calculateFTS(), curvilinearError(), and TrajectoryStateClosestToPoint::position().

69 {
70  AlgebraicVector5 theVector = parameters.vector();
71  return GlobalPoint(theVector[3]*vdt::fast_sin(theVector[2])+referencePoint.x(),
72  -theVector[3]*vdt::fast_cos(theVector[2])+referencePoint.y(),
73  theVector[4]+referencePoint.z());
74 }
const AlgebraicVector5 & vector() const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:63
T z() const
Definition: PV3DBase.h:64
ROOT::Math::SVector< double, 5 > AlgebraicVector5
T x() const
Definition: PV3DBase.h:62
TrajectoryStateClosestToPoint PerigeeConversions::trajectoryStateClosestToPoint ( const AlgebraicVector3 momentum,
const GlobalPoint referencePoint,
const TrackCharge charge,
const AlgebraicSymMatrix66 theCovarianceMatrix,
const MagneticField field 
)

Public constructor. This constructor takes a momentum, with parameters (transverse curvature, theta, phi) and a position, which is both the reference position and the position at which the momentum is defined. The covariance matrix is defined for these 6 parameters, in the order (x, y, z, transverse curvature, theta, phi).

Definition at line 107 of file PerigeeConversions.cc.

References jacobianParameters2Cartesian(), and momentumFromPerigee().

Referenced by PrimaryVertexValidation::analyze(), PerigeeMultiLTS::createRefittedTrackState(), PerigeeLinearizedTrackState::createRefittedTrackState(), and momentumFromPerigee().

110 {
112  (momentum, referencePoint, charge, field);
113  CartesianTrajectoryError cartesianTrajErr(ROOT::Math::Similarity(param2cart, theCovarianceMatrix));
114 
115  FTS theFTS(GlobalTrajectoryParameters(referencePoint,
116  momentumFromPerigee(momentum, charge, referencePoint, field), charge,
117  field), cartesianTrajErr);
118 
119  return TrajectoryStateClosestToPoint(theFTS, referencePoint);
120 }
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
AlgebraicMatrix66 jacobianParameters2Cartesian(const AlgebraicVector3 &momentum, const GlobalPoint &position, const TrackCharge &charge, const MagneticField *field)
GlobalVector momentumFromPerigee(const AlgebraicVector3 &momentum, const TrackCharge &charge, const GlobalPoint &referencePoint, const MagneticField *field)