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);
104 double sin_theta_p = pz /
sqrt(
px *
px +
py *
py + pz * pz);
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);
128 double pz =
point(6);
180 return std::pair<AlgebraicMatrix, AlgebraicVector>(
dr,
point);
std::pair< AlgebraicMatrix, AlgebraicVector > makeDerivative(const AlgebraicVector &exPoint) const
CLHEP::HepMatrix AlgebraicMatrix
std::pair< AlgebraicVector, AlgebraicVector > makeValue(const AlgebraicVector &exPoint) const
CLHEP::HepVector AlgebraicVector
std::pair< AlgebraicVector, AlgebraicVector > value(const AlgebraicVector &exPoint) const override
int numberOfEquations() const override
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