7 throw VertexException(
"TwoTrackMassKinematicConstraint::<2 states passed");
11 double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
12 double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
17 double p1vx =
p1(3) - a_1 * (point.
y() -
p1(1));
18 double p1vy =
p1(4) + a_1 * (point.
x() -
p1(0));
22 double p2vx =
p2(3) - a_2 * (point.
y() -
p2(1));
23 double p2vy =
p2(4) + a_2 * (point.
x() -
p2(0));
27 double j_energy =
sqrt(
p1(3) *
p1(3) +
p1(4) *
p1(4) +
p1(5) *
p1(5) + m1 * m1) +
30 double j_m = (p1vx + p2vx) * (p1vx + p2vx) + (p1vy + p2vy) * (p1vy + p2vy) + (p1vz + p2vz) * (p1vz + p2vz);
32 res(1) = j_energy * j_energy - j_m -
mass *
mass;
38 int n_st = states.size();
40 throw VertexException(
"TwoTrackMassKinematicConstraint::<2 states passed");
44 double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
45 double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
50 double p1vx =
p1(3) - a_1 * (point.
y() -
p1(1));
51 double p1vy =
p1(4) + a_1 * (point.
x() -
p1(0));
55 double p2vx =
p2(3) - a_2 * (point.
y() -
p2(1));
56 double p2vy =
p2(4) + a_2 * (point.
x() -
p2(0));
64 res(1, 1) = 2 * a_1 * (p2vy + p1vy);
65 res(1, 8) = 2 * a_2 * (p2vy + p1vy);
68 res(1, 2) = -2 * a_1 * (p1vx + p2vx);
69 res(1, 9) = -2 * a_2 * (p2vx + p1vx);
76 res(1, 4) = 2 * (1 + e2 / e1) *
p1(3) - 2 * (p1vx + p2vx);
77 res(1, 11) = 2 * (1 + e1 / e2) *
p2(3) - 2 * (p1vx + p2vx);
80 res(1, 5) = 2 * (1 + e2 / e1) *
p1(4) - 2 * (p1vy + p2vy);
81 res(1, 12) = 2 * (1 + e1 / e2) *
p2(4) - 2 * (p2vy + p1vy);
84 res(1, 6) = 2 * (1 + e2 / e1) *
p1(5) - 2 * (p1vz + p2vz);
85 res(1, 13) = 2 * (1 + e1 / e2) *
p2(5) - 2 * (p2vz + p1vz);
88 res(1, 7) = 2 * m1 * (1 + e2 / e1);
89 res(1, 14) = 2 * m2 * (1 + e1 / e2);
97 if (states.size() < 2)
98 throw VertexException(
"TwoTrackMassKinematicConstraint::<2 states passed");
100 double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
101 double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
106 double p1vx =
p1(3) - a_1 * (point.
y() -
p1(1));
107 double p1vy =
p1(4) + a_1 * (point.
x() -
p1(0));
109 double p2vx =
p2(3) - a_2 * (point.
y() -
p2(1));
110 double p2vy =
p2(4) + a_2 * (point.
x() -
p2(0));
113 res(1, 1) = -2 * (p1vy + p2vy) * (a_1 + a_2);
116 res(1, 2) = 2 * (p1vx + p2vx) * (a_1 + a_2);
AlgebraicVector value(const std::vector< KinematicState > &states, const GlobalPoint &point) const override
ROOT::Math::SVector< double, 7 > AlgebraicVector7
int numberOfEquations() const override
CLHEP::HepMatrix AlgebraicMatrix
CLHEP::HepVector AlgebraicVector
AlgebraicMatrix parametersDerivative(const std::vector< KinematicState > &states, const GlobalPoint &point) const override
AlgebraicMatrix positionDerivative(const std::vector< KinematicState > &states, const GlobalPoint &point) 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