Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DCDCWire.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DCDCWire.h
4 // Created: Wed Oct 18 11:39:35 EDT 2006
5 // Creator: davidl (on Darwin swire-b241.jlab.org 8.7.0 powerpc)
6 //
7 
8 #ifndef _DCDCWire_
9 #define _DCDCWire_
10 
11 #include <DCoordinateSystem.h>
12 
13 enum CDCWireD {
74 };
75 
77  public:
78  float phi; // phi angle of wire at midplane in lab coordinates
79 
80  int ring;
81  int straw;
82  float stereo;
83  // Added for alignment derivatives
84  // These are values that go into the calculation of origin and udir
85  double phiX,phiY,phiZ;
86  double x0, y0, z0;
87  double udir_mag;
88  double stereo_raw;
89  double r0;
90  double phiStraw;
91 
92  vector<double> derivatives;
94  jout << "Printing Derivatives for Ring " << ring << " Straw " << straw << std::endl;
95  for (size_t i=0; i< derivatives.size(); i++){
96  jout << derivatives[i] << std::endl;
97  }
98  }
99 
100  vector<double> GetCDCWireDerivatives(){
101  if(false){
102  if(ring == 1 && straw == 1) {
104  jout << " phi x,y,z " << phiX << " " << phiY << " " << phiZ << std::endl;
105  jout << " phiStraw " << phiStraw << " stereo_raw " << stereo_raw << std::endl;
106  jout << "sin " << sin(phiZ) << " cos " << cos(phiZ) << std::endl;
107  jout << "udir_mag " << udir_mag << std::endl;
108  }
109  }
110  // Only need to calculate this once
111  if (derivatives.size() != 0) return derivatives;
112  derivatives.resize(60);
113 
114  double sinPhiX=sin(phiX); double cosPhiX=cos(phiX);
115  double sinPhiY=sin(phiY); double cosPhiY=cos(phiY);
116  double sinPhiZ=sin(phiZ); double cosPhiZ=cos(phiZ);
117  double sinPhiStraw=sin(phiStraw); double cosPhiStraw=cos(phiStraw);
118  double tanStereo=tan(stereo_raw);
119  double cosStereo=cos(stereo);
120 
121  double x0Shift = x0+r0*cosPhiStraw;
122  double y0Shift = y0+r0*sinPhiStraw;
123 
124  derivatives[CDCWireD::dOriginXddeltaX]=cosPhiY*cosPhiZ;
125  derivatives[CDCWireD::dOriginXddeltaY]=cosPhiZ*sinPhiX*sinPhiY-cosPhiX*sinPhiZ;
126  derivatives[CDCWireD::dOriginXddeltaZ]=cosPhiX*cosPhiZ*sinPhiY+sinPhiX*sinPhiZ;
127  derivatives[CDCWireD::dOriginXddeltaPhiX]=cosPhiX*(cosPhiZ*sinPhiY*y0Shift+z0*sinPhiZ)
128  +sinPhiX*(-z0*cosPhiZ*sinPhiY+y0Shift*sinPhiZ);
129  derivatives[CDCWireD::dOriginXddeltaPhiY]=cosPhiZ*(z0*cosPhiX*cosPhiY
130  +cosPhiY*y0Shift*sinPhiX-x0Shift*sinPhiY);
131  derivatives[CDCWireD::dOriginXddeltaPhiZ]=z0*cosPhiZ*sinPhiX-(x0Shift*cosPhiY+y0Shift*sinPhiX*sinPhiY)*sinPhiZ
132  -cosPhiX*(cosPhiZ*y0Shift+z0*sinPhiY*sinPhiZ);
133  derivatives[CDCWireD::dOriginXddeltaXu]=0.5*derivatives[CDCWireD::dOriginXddeltaX];
134  derivatives[CDCWireD::dOriginXddeltaYu]=0.5*derivatives[CDCWireD::dOriginXddeltaY];
135  derivatives[CDCWireD::dOriginXddeltaXd]=0.5*derivatives[CDCWireD::dOriginXddeltaX];
136  derivatives[CDCWireD::dOriginXddeltaYd]=0.5*derivatives[CDCWireD::dOriginXddeltaY];
137  derivatives[CDCWireD::dOriginYddeltaX]=cosPhiY*sinPhiZ;
138  derivatives[CDCWireD::dOriginYddeltaY]=cosPhiX*cosPhiZ+sinPhiX*sinPhiY*sinPhiZ;
139  derivatives[CDCWireD::dOriginYddeltaZ]=-cosPhiZ*sinPhiX+cosPhiX*sinPhiY*sinPhiZ;
140  derivatives[CDCWireD::dOriginYddeltaPhiX]=-cosPhiZ*(z0*cosPhiX+y0Shift*sinPhiX)
141  +sinPhiY*sinPhiZ*(y0Shift*cosPhiX-z0*sinPhiX);
142  derivatives[CDCWireD::dOriginYddeltaPhiY]=(z0*cosPhiX*cosPhiY+y0Shift*cosPhiY*sinPhiX-x0Shift*sinPhiY)*sinPhiZ;
143  derivatives[CDCWireD::dOriginYddeltaPhiZ]=x0Shift*cosPhiY*cosPhiZ
144  +sinPhiX*(y0Shift*cosPhiZ*sinPhiY+z0*sinPhiZ)
145  +cosPhiX*(z0*cosPhiZ*sinPhiY-y0Shift*sinPhiZ);
146  derivatives[CDCWireD::dOriginYddeltaXu]=0.5*derivatives[CDCWireD::dOriginYddeltaX];
147  derivatives[CDCWireD::dOriginYddeltaYu]=0.5*derivatives[CDCWireD::dOriginYddeltaY];
148  derivatives[CDCWireD::dOriginYddeltaXd]=0.5*derivatives[CDCWireD::dOriginYddeltaX];
149  derivatives[CDCWireD::dOriginYddeltaYd]=0.5*derivatives[CDCWireD::dOriginYddeltaY];
150  derivatives[CDCWireD::dOriginZddeltaX]=-sinPhiY;
151  derivatives[CDCWireD::dOriginZddeltaY]=cosPhiY*sinPhiX;
152  derivatives[CDCWireD::dOriginZddeltaZ]=cosPhiX*cosPhiY;
153  derivatives[CDCWireD::dOriginZddeltaPhiX]=cosPhiY*(y0Shift*cosPhiX-z0*sinPhiX);
154  derivatives[CDCWireD::dOriginZddeltaPhiY]=-x0Shift*cosPhiY-sinPhiY*(z0*cosPhiX+y0Shift*sinPhiX);
155  derivatives[CDCWireD::dOriginZddeltaPhiZ]=0.0;
156  derivatives[CDCWireD::dOriginZddeltaXu]=0.5*derivatives[CDCWireD::dOriginZddeltaX];
157  derivatives[CDCWireD::dOriginZddeltaYu]=0.5*derivatives[CDCWireD::dOriginZddeltaY];
158  derivatives[CDCWireD::dOriginZddeltaXd]=0.5*derivatives[CDCWireD::dOriginZddeltaX];
159  derivatives[CDCWireD::dOriginZddeltaYd]=0.5*derivatives[CDCWireD::dOriginZddeltaY];
160  derivatives[CDCWireD::dDirXddeltaX]=0.0;
161  derivatives[CDCWireD::dDirXddeltaY]=0.0;
162  derivatives[CDCWireD::dDirXddeltaZ]=0.0;
163  //Add cos(stereo) since it is divided out in geometry L->L*cos(stereo)
164  derivatives[CDCWireD::dDirXddeltaPhiX]=-L*cosStereo*(1./udir_mag)*(cosPhiZ*sinPhiY*(sinPhiX+cosPhiStraw*cosPhiX*tanStereo)
165  +sinPhiZ*(cosPhiStraw*sinPhiX*tanStereo-cosPhiX));
166  derivatives[CDCWireD::dDirXddeltaPhiY]=L*cosStereo*(1./udir_mag)*cosPhiZ*(cosPhiX*cosPhiY-(cosPhiStraw*cosPhiY*sinPhiX+sinPhiStraw*sinPhiY)*tanStereo);
167  derivatives[CDCWireD::dDirXddeltaPhiZ]=L*cosStereo*(1./udir_mag)*(cosPhiZ*(sinPhiX+cosPhiStraw*cosPhiX*tanStereo)
168  -sinPhiZ*(cosPhiX*sinPhiY
169  +(cosPhiY*sinPhiStraw-cosPhiStraw*sinPhiX*sinPhiY)*tanStereo));
170  derivatives[CDCWireD::dDirXddeltaXu]=(-1./udir_mag)*cosPhiY*cosPhiZ;
171  derivatives[CDCWireD::dDirXddeltaYu]=(-1./udir_mag)*(cosPhiZ*sinPhiX*sinPhiY+cosPhiX*sinPhiZ);
172  derivatives[CDCWireD::dDirXddeltaXd]=-derivatives[CDCWireD::dDirXddeltaXu];
173  derivatives[CDCWireD::dDirXddeltaYd]=-derivatives[CDCWireD::dDirXddeltaYu];
174  derivatives[CDCWireD::dDirYddeltaX]=0.0;
175  derivatives[CDCWireD::dDirYddeltaY]=0.0;
176  derivatives[CDCWireD::dDirYddeltaZ]=0.0;
177  derivatives[CDCWireD::dDirYddeltaPhiX]=-L*cosStereo*(1./udir_mag)*(sinPhiX*(sinPhiY*sinPhiZ-cosPhiStraw*cosPhiZ*tanStereo)
178  +cosPhiX*(cosPhiZ+cosPhiStraw*sinPhiY*sinPhiZ*tanStereo));
179  derivatives[CDCWireD::dDirYddeltaPhiY]=L*cosStereo*(1./udir_mag)*sinPhiZ*(cosPhiX*cosPhiY
180  -(cosPhiStraw*cosPhiY*sinPhiX+sinPhiStraw*sinPhiY)*tanStereo);
181  derivatives[CDCWireD::dDirYddeltaPhiZ]=L*cosStereo*(1./udir_mag)*(cosPhiY*cosPhiZ*sinPhiStraw*tanStereo
182  +sinPhiX*(sinPhiZ-cosPhiStraw*cosPhiZ*sinPhiY*tanStereo)
183  +cosPhiX*(cosPhiZ*sinPhiY+cosPhiStraw*sinPhiZ*tanStereo));
184  derivatives[CDCWireD::dDirYddeltaXu]=(-1./udir_mag)*cosPhiY*sinPhiZ;
185  derivatives[CDCWireD::dDirYddeltaYu]=(-1./udir_mag)*(cosPhiX*cosPhiZ-sinPhiX*sinPhiY*sinPhiZ);
186  derivatives[CDCWireD::dDirYddeltaXd]=-derivatives[CDCWireD::dDirYddeltaXu];
187  derivatives[CDCWireD::dDirYddeltaYd]=-derivatives[CDCWireD::dDirYddeltaYu];
188  derivatives[CDCWireD::dDirZddeltaX]=0.0;
189  derivatives[CDCWireD::dDirZddeltaY]=0.0;
190  derivatives[CDCWireD::dDirZddeltaZ]=0.0;
191  derivatives[CDCWireD::dDirZddeltaPhiX]=-L*cosStereo*(1./udir_mag)*cosPhiY*(sinPhiX+cosPhiStraw*cosPhiX*tanStereo);
192  derivatives[CDCWireD::dDirZddeltaPhiY]=-L*cosStereo*(1./udir_mag)*(cosPhiX*sinPhiY
193  +(cosPhiY*sinPhiStraw-cosPhiStraw*sinPhiX*sinPhiY)*tanStereo);
194  derivatives[CDCWireD::dDirZddeltaPhiZ]=0.0;
195  derivatives[CDCWireD::dDirZddeltaXu]=(1./udir_mag)*sinPhiY;
196  derivatives[CDCWireD::dDirZddeltaYu]=(-1./udir_mag)*cosPhiY*sinPhiX;
197  derivatives[CDCWireD::dDirZddeltaXd]=-derivatives[CDCWireD::dDirZddeltaXu];
198  derivatives[CDCWireD::dDirZddeltaYd]=-derivatives[CDCWireD::dDirZddeltaYu];
199 
200  return derivatives;
201  }
202 };
203 
204 #endif // _DCDCWire_
205 
double stereo_raw
Definition: DCDCWire.h:88
double phiZ
Definition: DCDCWire.h:85
void PrintDerivatives()
Definition: DCDCWire.h:93
vector< double > GetCDCWireDerivatives()
Definition: DCDCWire.h:100
double z0
Definition: DCDCWire.h:86
double r0
Definition: DCDCWire.h:89
CDCWireD
Definition: DCDCWire.h:13
int straw
Definition: DCDCWire.h:81
double udir_mag
Definition: DCDCWire.h:87
double phiY
Definition: DCDCWire.h:85
double phiX
Definition: DCDCWire.h:85
double sin(double)
vector< double > derivatives
Definition: DCDCWire.h:92
int ring
Definition: DCDCWire.h:80
double y0
Definition: DCDCWire.h:86
float phi
Definition: DCDCWire.h:78
float stereo
Definition: DCDCWire.h:82
double x0
Definition: DCDCWire.h:86
double phiStraw
Definition: DCDCWire.h:90