3 {
4
5
6
7
8
9
10 double xx,yy,zz,Det,Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz,Dx,Dy,Dz;
11 Ax=0.;
12 Ay=0.;
13 Az=0.;
14 Bx=0.;
15 By=0.;
16 Bz=0.;
17 Cx=0.;
18 Cy=0.;
19 Cz=0.;
20 Dx=0.;
21 Dy=0.;
22 Dz=0.;
23
24 if (segments->GetEntries()==1) {
25
27 s->PropagateTo(
s->Z()-650);
32 }
33 else {
34 for (int i=0; i<segments->GetEntries(); i++) {
38 double az = 1.0;
42 double a = ax*ax+ay*ay+az*az;
43 double c = -ax*x-ay*y-az*z;
44 double b = (ax*ax+ay*ay);
45
47
48 Ax+=2.0*
w/b*(
a*(ay*ay+az*az) );
49 Bx+=2.0*
w/b*( -
a*ax*ay );
50 Cx+=2.0*
w/b*( -
a*ax*az );
51 Dx+=2.0*
w/b*( -(
a*x+c*ax)*(ax*ax-
a)-(
a*y+c*ay)*ax*ay-(
a*z+c*az)*az*ax );
52
53 Ay+=2.0*
w/b*( -
a*ay*ax );
54 By+=2.0*
w/b*(
a*(az*az+ax*ax) );
55 Cy+=2.0*
w/b*( -
a*ay*az );
56 Dy+=2.0*
w/b*( -(
a*y+c*ay)*(ay*ay-
a)-(
a*z+c*az)*ay*az-(
a*x+c*ax)*ax*ay );
57
58 Az+=2.0*
w/b*( -
a*az*ax );
59 Bz+=2.0*
w/b*( -
a*az*ay );
61 Dz+=2.0*
w/b*( -(
a*z+c*az)*(az*az-
a)-(
a*x+c*ax)*az*ax-(
a*y+c*ay)*ay*az );
62
63 }
64
65 Det=
fabs( Ax*(By*Cz-Cy*Bz)-Bx*(Ay*Cz-Cy*Az)+Cx*(Ay*Bz-By*Az) );
66 xx=( (By*Cz-Cy*Bz)*Dx-(Bx*Cz-Cx*Bz)*Dy+(Bx*Cy-Cx*By)*Dz)/Det;
67 yy=(-(Ay*Cz-Cy*Az)*Dx+(Ax*Cz-Cx*Az)*Dy-(Ax*Cy-Cx*Ay)*Dz)/Det;
68 zz=( (Ay*Bz-By*Az)*Dx-(Ax*Bz-Bx*Az)*Dy+(Ax*By-Bx*Ay)*Dz)/Det;
69 }
70
73
74 return v;
75}
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
Definition: EdbVertex.h:69
void SetXYZ(float x, float y, float z)
Definition: EdbVertex.h:157
void w(int rid=2, int nviews=2)
Definition: test.C:27