StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StSvtAngles.cc
1 #include <Stiostream.h>
2 #include <math.h>
3 
4 //#include "StThreeVector.hh"
5 //#include "tables/St_svg_geom_Table.h"
6 #include "StSvtAngles.hh"
7 #include "StSvtClassLibrary/StSvtGeometry.hh"
8 #include "StSvtClassLibrary/StSvtWaferGeometry.hh"
9 
10 //ClassImp(StSvtAngles)
11 
12 StSvtAngles::StSvtAngles():mTheta(-1956),mPhi(-1956)
13 {
14 
15 }
16 
17 StSvtAngles::~StSvtAngles()
18 {
19 
20 }
21 
22 void StSvtAngles::svtTheta(const StThreeVector <double> & V, const StThreeVector<double> & uz)
23 {
24 
25  double thetaZ = 0;
26 
27  thetaZ = (V.x()*uz.x() + V.y()*uz.y() + V.z()*uz.z())/V.mag();
28  mTheta = acos(thetaZ);
29 
30 }
31 
32 void StSvtAngles::svtTheta(double Vx, double Vy, double Vz, double ux,double uy,double uz)
33 {
34  double thetaZ = 0;
35 
36  thetaZ = (Vx*ux + Vy*uy + Vz*uz)/::sqrt(Vx*Vx + Vy*Vy + Vz*Vz);
37  mTheta = acos(thetaZ);
38 }
39 
40 void StSvtAngles::svtPhi(const StThreeVector <double>& V, const StThreeVector <double>& ux, const StThreeVector <double>& uy)
41 {
42 
43  double csPhi = 0, Vx = 0, Vy = 0;
44 
45  //thetaX = (V.x()*ux.x() + V.y()*ux.y() + V.z()*ux.z())/::sqrt(V.x()*V.x() + V.y()*V.y() + V.z()*V.z());
46  //thetaY = (V.x()*uy.x() + V.y()*uy.y() + V.z()*uy.z())/::sqrt(V.x()*V.x() + V.y()*V.y() + V.z()*V.z());
47 
48  // Vx = ::sqrt(V.x()*V.x() + V.y()*V.y() + V.z()*V.z())*thetaX;
49  //Vy = qrt(V.x()*V.x() + V.y()*V.y() + V.z()*V.z())*thetaY;
50 
51  Vx = V.x()*ux.x() + V.y()*ux.y() + V.z()*ux.z();
52  Vy = V.x()*uy.x() + V.y()*uy.y() + V.z()*uy.z();
53 
54  csPhi = Vx/::sqrt(Vx*Vx + Vy*Vy);
55  mPhi = acos(csPhi);
56 
57 }
58 
59 void StSvtAngles::calcAngles(StSvtGeometry *geom, double x, double y, double z, int mLayer, int mLadder, int mWafer )
60  //void StSvtAngles::calcAngles(svg_geom_st *geom_st, double x, double y, double z, int mLayer, int mLadder, int mWafer )
61 {
62  //int hardWarePosition ,index = 0;
63  StThreeVector<double> mom(0,0,0);
64  StThreeVector<double> uVecN(0,0,0);
65  StThreeVector<double> uVecD(0,0,0);
66  StThreeVector<double> uVecT(0,0,0);
67 
68  //hardWarePosition = getLayerID()*1000 + 100*wafer + ladder;
69 
70  /*
71  hardWarePosition = mLayer*1000 + 100*mWafer + mLadder;
72 
73  for( index=0; index < 216; index++){
74  if( geom_st[index].id == hardWarePosition)
75  break;
76  }
77  */
78 
79  StSvtWaferGeometry* waferGeom = NULL;
80  int index = geom->getWaferIndex(geom->getBarrelID(mLayer,mLadder),mLadder,mWafer);
81  if (index >= 0)
82  waferGeom = (StSvtWaferGeometry*)geom->at(index);
83 
84  if (!waferGeom) return;
85 
86  mom.setX(x);
87  mom.setY(y);
88  mom.setZ(z);
89 
90  /*
91  uVecN.setX(geom_st[index].n[0]);
92  uVecN.setY(geom_st[index].n[1]);
93  uVecN.setZ(geom_st[index].n[2]);
94 
95  uVecD.setX(geom_st[index].d[0]);
96  uVecD.setY(geom_st[index].d[1]);
97  uVecD.setZ(geom_st[index].d[2]);
98 
99  uVecT.setX(geom_st[index].t[0]);
100  uVecT.setY(geom_st[index].t[1]);
101  uVecT.setZ(geom_st[index].t[2]);
102  */
103 
104  uVecN.setX(waferGeom->n(0));
105  uVecN.setY(waferGeom->n(1));
106  uVecN.setZ(waferGeom->n(2));
107 
108  uVecD.setX(waferGeom->d(0));
109  uVecD.setY(waferGeom->d(1));
110  uVecD.setZ(waferGeom->d(2));
111 
112  uVecT.setX(waferGeom->t(0));
113  uVecT.setY(waferGeom->t(1));
114  uVecT.setZ(waferGeom->t(2));
115 
116  svtTheta(mom,uVecN);
117  svtPhi(mom,uVecD,uVecT);
118 
119 }