7 if(exPoint.num_row() ==0 )
throw VertexException(
"PointingKinematicConstraint::value requested for zero Linearization point");
10 int inSize = exPoint.num_row();
11 if((inSize%7) !=0)
throw VertexException(
"PointingKinematicConstraint::linearization point has a wrong dimension");
12 int nStates = inSize/7;
13 if(nStates != 1)
throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
22 return std::pair<AlgebraicVector,AlgebraicVector>(vl,lPar);
27 if(exPoint.num_row() ==0 )
throw VertexException(
"PointingKinematicConstraint::value requested for zero Linearization point");
30 int inSize = exPoint.num_row();
31 if((inSize%7) !=0)
throw VertexException(
"PointingKinematicConstraint::linearization point has a wrong dimension");
32 int nStates = inSize/7;
33 if(nStates != 1)
throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
40 return std::pair<AlgebraicMatrix,AlgebraicVector>(dr,lPar);
45 int nStates = par.size();
46 if(nStates == 0)
throw VertexException(
"PointingKinematicConstraint::Empty vector of particles passed");
47 if(nStates != 1)
throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
50 AlgebraicVector lPoint = asHepVector<7>(par.front()->currentState().kinematicParameters().vector());
57 return std::pair<AlgebraicMatrix,AlgebraicVector>(dr,lPoint);
62 int nStates = par.size();
63 if(nStates == 0)
throw VertexException(
"PointingKinematicConstraint::Empty vector of particles passed");
64 if(nStates != 1)
throw VertexException(
"PointingKinematicConstraint::Current version does not support the multistate refit");
66 AlgebraicVector lPoint = asHepVector<7>(par.front()->currentState().kinematicParameters().vector());
72 return std::pair<AlgebraicVector,AlgebraicVector>(vl,lPoint);
95 double cos_phi_p = px/
sqrt(px*px + py*py);
96 double cos_phi_x = dx/
sqrt(dx*dx + dy*dy);
101 double cos_theta_p =
sqrt(px*px + py*py)/
sqrt(px*px + py*py + pz*pz);
102 double cos_theta_x =
sqrt(dx*dx + dy*dy)/
sqrt(dx*dx + dy*dy + dz*dz);
104 float feq =
sqrt((1-cos_phi_p)*(1+cos_phi_x)) -
sqrt((1+cos_phi_p)*(1-cos_phi_x));
105 float seq =
sqrt((1-cos_theta_p)*(1+cos_theta_x)) -
sqrt((1+cos_theta_p)*(1-cos_theta_x));
117 return std::pair<AlgebraicVector,AlgebraicVector>(vl,
point);
127 double px =
point(4);
128 double py =
point(5);
129 double pz =
point(6);
149 dr(1,4) = (-(dx*dy*(1 - px/
sqrt(
pow(px,2) +
pow(py,2))))/
157 dr(1,5) = (((1 + dx/
sqrt(
pow(dx,2) +
pow(dy,2)))*px*py)/
251 return std::pair<AlgebraicMatrix,AlgebraicVector>(dr,
point);
virtual std::pair< AlgebraicVector, AlgebraicVector > value(const AlgebraicVector &exPoint) const
virtual AlgebraicVector deviations(int nStates) const
CLHEP::HepMatrix AlgebraicMatrix
std::pair< AlgebraicVector, AlgebraicVector > makeValue(const AlgebraicVector &exPoint) const
CLHEP::HepVector AlgebraicVector
virtual int numberOfEquations() const
virtual std::pair< AlgebraicMatrix, AlgebraicVector > derivative(const AlgebraicVector &exPoint) const
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 > makeDerivative(const AlgebraicVector &exPoint) const