18 double px = direction.
x();
19 double py = direction.
y();
20 double pz = direction.
z();
21 double pt = px*px+py*py;
22 double p =
sqrt(pt+pz*pz);
31 std::pair<bool,double>
43 ceq[3] = 2*helix2.
mag2();
55 std::pair<bool,double>
72 ceq[3] = 2*helix2.
dot(helix2p);
77 ceq[0] = deltaPos.
dot(helix1p);
85 std::pair<bool,double>
97 for (
unsigned int i=0;
i<nRaw;
i++ ) {
101 solutions[nDir++] = solutions[
i];
103 if ( nDir==0 )
return std::make_pair(
false,0.);
107 unsigned int nMin(0);
108 for (
unsigned int i=0;
i<nDir;
i++ ) {
109 double st = solutions[
i];
110 double deri2 = (3*ceq[3]*st+2*ceq[2])*st+ceq[1];
111 if ( deri2>0. ) solutions[nMin++] = st;
113 if ( nMin==0 )
return std::make_pair(
false,0.);
117 double dSt = solutions[0];
118 for (
unsigned int i=1;
i<nMin;
i++ ) {
119 if ( fabs(solutions[
i])<fabs(dSt) ) dSt = solutions[
i];
132 if ( fabs(ceq[3])>FLT_MIN ) {
134 double q = (ceq[2]*ceq[2]-3*ceq[3]*ceq[1]) / (ceq[3]*ceq[3]) / 9.;
135 double r = (2*ceq[2]*ceq[2]*ceq[2]-9*ceq[3]*ceq[2]*ceq[1]+27*ceq[3]*ceq[3]*ceq[0])
136 / (ceq[3]*ceq[3]*ceq[3]) / 54.;
139 double phi = acos(r/
sqrt(q3))/3.;
140 double rootq =
sqrt(q);
141 for (
int i=0;
i<3;
i++ ) {
142 solutions[
i] = -2*rootq*
cos(phi) - ceq[2]/ceq[3]/3.;
148 double a =
pow(fabs(r)+
sqrt(r*r-q3),1./3.);
150 double b = fabs(a)>FLT_MIN ? q/a : 0.;
151 solutions[0] = a + b - ceq[2]/ceq[3]/3.;
159 else if ( fabs(ceq[2])>FLT_MIN ) {
166 solutions[0] = -ceq[0]/ceq[1];
176 double deq1 = coeff[1]*coeff[1];
177 double deq2 = coeff[2]*coeff[0];
178 if ( fabs(deq1)<FLT_MIN || fabs(deq2/deq1)>1.
e-6 ) {
182 double deq = deq1+2*deq2;
183 if ( deq<0. )
return 0;
184 double ceq = -0.5*(coeff[1]+(coeff[1]>0?1:-1)*
sqrt(deq));
185 solutions[0] = -2*ceq/coeff[2];
186 solutions[1] = coeff[0]/ceq;
193 double ceq = coeff[1]/coeff[2];
194 double deq = deq2/deq1;
196 solutions[0] = -ceq*deq;
197 solutions[1] = ceq*(2+deq);
DirectionType direction() const
T y() const
Cartesian y coordinate.
T x() const
Cartesian x coordinate.
PositionType position() const
T curvature(T InversePt, const edm::EventSetup &iSetup)
T z() const
Cartesian z coordinate.
Cos< T >::type cos(const T &t)
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
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.