14 return propagateToTheTransversePCANeutral(state, referencePoint);
16 return propagateToTheTransversePCACharged(state, referencePoint);
21 inline pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> planeCrossing(
31 GlobalVectorDouble xOrig2Centre(fac * inMom.
y(), -fac * inMom.
x(), 0.);
32 GlobalVectorDouble xOrigProj(inPos.
x(), inPos.
y(), 0.);
33 GlobalVectorDouble xRefProj(point.
x(), point.
y(), 0.);
34 GlobalVectorDouble deltax = xRefProj - xOrigProj - xOrig2Centre;
35 GlobalVectorDouble ndeltax = deltax.unit();
49 return std::pair<HelixBarrelPlaneCrossingByCircle, Plane::PlanePointer>(planeCrossing, plane);
60 std::pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> cros = planeCrossing(fState, point);
64 std::pair<bool, double> propResult = planeCrossing.
pathLength(*plane);
65 return propResult.first;
80 std::pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> cros = planeCrossing(fState, iP);
84 std::pair<bool, double> propResult = planeCrossing.
pathLength(*plane);
85 if (!propResult.first) {
86 LogDebug(
"RecoVertex/TrackKinematicStatePropagator") <<
"Propagation failed! State is invalid\n";
89 double s = propResult.second;
98 pGen *= inMom.
mag() / pGen.mag();
102 par(0) = nPosition.
x();
103 par(1) = nPosition.y();
104 par(2) = nPosition.z();
105 par(3) = nMomentum.x();
106 par(4) = nMomentum.y();
107 par(5) = nMomentum.z();
117 bool thereIsNoCorr =
true;
119 for (
auto i = 0;
i < 6; ++
i)
140 ca2cu.Place_at(cart2curv.
jacobian(), 0, 0);
141 cu2ca.Place_at(curv2cart.
jacobian(), 0, 0);
159 pr.Place_at(prop.jacobian(), 0, 0);
165 cov = ROOT::Math::Similarity(cu2ca, cov2);
202 double xOrig = xvecOrig.
x();
203 double yOrig = xvecOrig.
y();
204 double zOrig = xvecOrig.
z();
205 double xR = referencePoint.
x();
206 double yR = referencePoint.
y();
208 double s2D = (xR - xOrig) *
cos(phi) + (yR - yOrig) *
sin(phi);
209 double s = s2D /
sin(theta);
210 double xGen = xOrig + s2D *
cos(phi);
211 double yGen = yOrig + s2D *
sin(phi);
212 double zGen = zOrig + s2D /
tan(theta);
217 par(0) = xPerigee.
x();
218 par(1) = xPerigee.
y();
219 par(2) = xPerigee.
z();
220 par(3) = pPerigee.
x();
221 par(4) = pPerigee.
y();
222 par(5) = pPerigee.
z();
224 par(6) = state.
mass();
237 ca2cu.Place_at(cart2curv.jacobian(), 0, 0);
238 cu2ca.Place_at(curv2cart.
jacobian(), 0, 0);
251 pr.Place_at(prop.jacobian(), 0, 0);
257 cov = ROOT::Math::Similarity(cu2ca, cov2);
virtual KinematicState propagateToTheTransversePCANeutral(const KinematicState &state, const GlobalPoint &referencePoint) const
bool willPropagateToTheTransversePCA(const KinematicState &state, const GlobalPoint &point) const override
T y() const
Cartesian y coordinate.
ROOT::Math::SMatrix< double, 6, 7, ROOT::Math::MatRepStd< double, 6, 7 > > AlgebraicMatrix67
T x() const
Cartesian x coordinate.
const GlobalTrajectoryParameters & parameters() const
const AlgebraicMatrix55 & jacobian() const
Sin< T >::type sin(const T &t)
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
Geom::Theta< T > theta() const
const AlgebraicMatrix56 & jacobian() const
GlobalVector globalMomentum() const
AlgebraicSymMatrix77 const & matrix() const
TrackCharge charge() const
GlobalVector magneticFieldInInverseGeV(const GlobalPoint &x) const
const CurvilinearTrajectoryError & curvilinearError() const
ParticleMass mass() const
Geom::Theta< T > theta() const
T z() const
Cartesian z coordinate.
static PlanePointer build(Args &&...args)
DirectionType direction(double s) const override
Cos< T >::type cos(const T &t)
KinematicParametersError const & kinematicParametersError() const
Tan< T >::type tan(const T &t)
GlobalVector momentum() const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
ROOT::Math::SMatrix< double, 7, 6, ROOT::Math::MatRepStd< double, 7, 6 > > AlgebraicMatrix76
GlobalPoint position() const
const AlgebraicMatrix65 & jacobian() const
const MagneticField * magneticField() const
std::pair< bool, double > pathLength(const Plane &) override
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
double transverseCurvature() const
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > AlgebraicSymMatrix77
TrackCharge particleCharge() const
const AlgebraicSymMatrix55 & matrix() const
FreeTrajectoryState freeTrajectoryState() const
virtual KinematicState propagateToTheTransversePCACharged(const KinematicState &state, const GlobalPoint &referencePoint) const
GlobalTrajectoryParameters const & trajectoryParameters() const
KinematicState propagateToTheTransversePCA(const KinematicState &state, const GlobalPoint &referencePoint) const override
PositionType position(double s) const override
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point