5 if (exPoint.num_row() == 0)
6 throw VertexException(
"PointingKinematicConstraint::value requested for zero Linearization point");
9 int inSize = exPoint.num_row();
10 if ((inSize % 7) != 0)
11 throw VertexException(
"PointingKinematicConstraint::linearization point has a wrong dimension");
12 int nStates = inSize / 7;
14 throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
23 return std::pair<AlgebraicVector, AlgebraicVector>(vl, lPar);
27 if (exPoint.num_row() == 0)
28 throw VertexException(
"PointingKinematicConstraint::value requested for zero Linearization point");
31 int inSize = exPoint.num_row();
32 if ((inSize % 7) != 0)
33 throw VertexException(
"PointingKinematicConstraint::linearization point has a wrong dimension");
34 int nStates = inSize / 7;
36 throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
43 return std::pair<AlgebraicMatrix, AlgebraicVector>(
dr, lPar);
47 const std::vector<RefCountedKinematicParticle>& par)
const {
48 int nStates = par.size();
50 throw VertexException(
"PointingKinematicConstraint::Empty vector of particles passed");
52 throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
55 AlgebraicVector lPoint = asHepVector<7>(par.front()->currentState().kinematicParameters().vector());
62 return std::pair<AlgebraicMatrix, AlgebraicVector>(
dr, lPoint);
66 const std::vector<RefCountedKinematicParticle>& par)
const {
67 int nStates = par.size();
69 throw VertexException(
"PointingKinematicConstraint::Empty vector of particles passed");
71 throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
73 AlgebraicVector lPoint = asHepVector<7>(par.front()->currentState().kinematicParameters().vector());
79 return std::pair<AlgebraicVector, AlgebraicVector>(vl, lPoint);
99 double cos_phi_p = px /
sqrt(px * px + py * py);
100 double sin_phi_p = py /
sqrt(px * px + py * py);
101 double cos_phi_x = dx /
sqrt(dx * dx + dy * dy);
102 double sin_phi_x = dy /
sqrt(dx * dx + dy * dy);
104 double sin_theta_p = pz /
sqrt(px * px + py * py + pz * pz);
105 double sin_theta_x = dz /
sqrt(dx * dx + dy * dy + dz * dz);
107 double cos_theta_p =
sqrt(px * px + py * py) /
sqrt(px * px + py * py + pz * pz);
108 double cos_theta_x =
sqrt(dx * dx + dy * dy) /
sqrt(dx * dx + dy * dy + dz * dz);
110 float feq = sin_phi_p * cos_phi_x - cos_phi_p * sin_phi_x;
111 float seq = sin_theta_p * cos_theta_x - cos_theta_p * sin_theta_x;
116 return std::pair<AlgebraicVector, AlgebraicVector>(vl,
point);
126 double px =
point(4);
127 double py =
point(5);
128 double pz =
point(6);
134 dr(1, 1) = (dy * (dx * px + dy * py)) / (
pow(
pow(dx, 2) +
pow(dy, 2), 1.5) *
sqrt(
pow(px, 2) +
pow(py, 2)));
136 dr(1, 2) = -((dx * (dx * px + dy * py)) / (
pow(
pow(dx, 2) +
pow(dy, 2), 1.5) *
sqrt(
pow(px, 2) +
pow(py, 2))));
142 dr(1, 4) = -((py * (dx * px + dy * py)) / (
sqrt(
pow(dx, 2) +
pow(dy, 2)) *
pow(
pow(px, 2) +
pow(py, 2), 1.5)));
144 dr(1, 5) = (px * (dx * px + dy * py)) / (
sqrt(
pow(dx, 2) +
pow(dy, 2)) *
pow(
pow(px, 2) +
pow(py, 2), 1.5));
180 return std::pair<AlgebraicMatrix, AlgebraicVector>(
dr,
point);
std::pair< AlgebraicVector, AlgebraicVector > makeValue(const AlgebraicVector &exPoint) const
CLHEP::HepMatrix AlgebraicMatrix
CLHEP::HepVector AlgebraicVector
std::pair< AlgebraicVector, AlgebraicVector > value(const AlgebraicVector &exPoint) const override
int numberOfEquations() const override
std::pair< AlgebraicMatrix, AlgebraicVector > makeDerivative(const AlgebraicVector &exPoint) const
AlgebraicVector deviations(int nStates) const override
Power< A, B >::type pow(const A &a, const B &b)
*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
std::pair< AlgebraicMatrix, AlgebraicVector > derivative(const AlgebraicVector &exPoint) const override