13 if (
state.particleCharge() == 0.) {
14 return propagateToTheTransversePCANeutral(
state, referencePoint);
16 return propagateToTheTransversePCACharged(
state, referencePoint);
21 inline pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> planeCrossing(
29 auto bz =
state.parameters().magneticFieldInInverseGeV(
point).z();
31 LogDebug(
"RecoVertex/TrackKinematicStatePropagator") <<
"planeCrossing is not possible";
34 double fac =
state.charge() / bz;
36 GlobalVectorDouble xOrig2Centre(fac * inMom.
y(), -fac * inMom.
x(), 0.);
37 GlobalVectorDouble xOrigProj(inPos.
x(), inPos.
y(), 0.);
38 GlobalVectorDouble xRefProj(
point.x(),
point.y(), 0.);
39 GlobalVectorDouble deltax = xRefProj - xOrigProj - xOrig2Centre;
40 GlobalVectorDouble ndeltax = deltax.unit();
54 return std::pair<HelixBarrelPlaneCrossingByCircle, Plane::PlanePointer>(planeCrossing, plane);
60 if (
state.particleCharge() == 0.)
65 std::pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> cros = planeCrossing(
fState,
point);
66 if (cros.second ==
nullptr)
71 std::pair<bool, double> propResult = planeCrossing.
pathLength(*plane);
72 return propResult.first;
87 std::pair<HelixBarrelPlaneCrossingByCircle, BoundPlane::BoundPlanePointer> cros = planeCrossing(
fState, iP);
88 if (cros.second ==
nullptr)
93 std::pair<bool, double> propResult = planeCrossing.
pathLength(*plane);
94 if (!propResult.first) {
95 LogDebug(
"RecoVertex/TrackKinematicStatePropagator") <<
"Propagation failed! State is invalid\n";
98 double s = propResult.second;
107 pGen *= inMom.
mag() / pGen.mag();
111 par(0) = nPosition.
x();
112 par(1) = nPosition.y();
113 par(2) = nPosition.z();
114 par(3) = nMomentum.x();
115 par(4) = nMomentum.y();
116 par(5) = nMomentum.z();
126 bool thereIsNoCorr =
true;
128 for (
auto i = 0;
i < 6; ++
i)
129 thereIsNoCorr &= (0 ==
state.kinematicParametersError().matrix()(
i, 6));
149 ca2cu.Place_at(cart2curv.
jacobian(), 0, 0);
150 cu2ca.Place_at(curv2cart.
jacobian(), 0, 0);
168 pr.Place_at(prop.jacobian(), 0, 0);
174 cov = ROOT::Math::Similarity(cu2ca, cov2);
209 double phi =
fState.momentum().phi();
211 double xOrig = xvecOrig.
x();
212 double yOrig = xvecOrig.
y();
213 double zOrig = xvecOrig.
z();
214 double xR = referencePoint.
x();
215 double yR = referencePoint.
y();
217 double s2D = (xR - xOrig) *
cos(phi) + (yR - yOrig) *
sin(phi);
219 double xGen = xOrig + s2D *
cos(phi);
220 double yGen = yOrig + s2D *
sin(phi);
221 double zGen = zOrig + s2D /
tan(
theta);
226 par(0) = xPerigee.
x();
227 par(1) = xPerigee.
y();
228 par(2) = xPerigee.
z();
229 par(3) = pPerigee.
x();
230 par(4) = pPerigee.
y();
231 par(5) = pPerigee.
z();
233 par(6) =
state.mass();
246 ca2cu.Place_at(cart2curv.jacobian(), 0, 0);
247 cu2ca.Place_at(curv2cart.
jacobian(), 0, 0);
260 pr.Place_at(prop.jacobian(), 0, 0);
266 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)
Abs< T >::type abs(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