13 if (
state.particleCharge() == 0.) {
14 return propagateToTheTransversePCANeutral(
state, referencePoint);
16 return propagateToTheTransversePCACharged(
state, referencePoint);
21 inline pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> planeCrossing(
29 double fac =
state.charge() /
state.parameters().magneticFieldInInverseGeV(
point).z();
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);
55 if (
state.particleCharge() == 0.)
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)
120 thereIsNoCorr &= (0 ==
state.kinematicParametersError().matrix()(
i, 6));
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);
200 double phi =
fState.momentum().phi();
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);
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 propagateToTheTransversePCACharged(const KinematicState &state, const GlobalPoint &referencePoint) const
bool willPropagateToTheTransversePCA(const KinematicState &state, const GlobalPoint &point) const override
ROOT::Math::SMatrix< double, 6, 7, ROOT::Math::MatRepStd< double, 6, 7 > > AlgebraicMatrix67
T x() const
Cartesian x coordinate.
Sin< T >::type sin(const T &t)
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Global3DPoint GlobalPoint
T y() const
Cartesian y coordinate.
static PlanePointer build(Args &&... args)
const AlgebraicMatrix65 & jacobian() const
const AlgebraicMatrix56 & jacobian() const
DirectionType direction(double s) const override
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
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
T z() const
Cartesian z coordinate.
std::pair< bool, double > pathLength(const Plane &) override
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > AlgebraicSymMatrix77
virtual KinematicState propagateToTheTransversePCANeutral(const KinematicState &state, const GlobalPoint &referencePoint) const
Geom::Theta< T > theta() 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
const AlgebraicMatrix55 & jacobian() const