CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
CgemGeoReadoutPlane.cxx
Go to the documentation of this file.
2
3using namespace std;
4using namespace CLHEP;
5
7 double rx, double rv,
8 double phiMin, double dX_strip, double dV,
9 double w, double zmin, double L,
10 int NXStrip, int NVStrip, double Xpitch, double XstripWidth, double Vpitch, double VstripWidth, double stereoAngle,
11 double midROfGap, double outROfGap){
12
13 m_iLayer = iLayer;
14 m_iSheet = iSheet;
15
16 m_RX = rx;
17 m_RV = rv;
18 m_Rmid = 0.5*(rx+rv);
19
20 m_W = w;
21 m_Zmin = zmin;
22 m_Zmax = zmin+L;
23 m_L = L;
24
25 m_XPitch = Xpitch;
26 m_XstripWidth = XstripWidth;
27 m_VPitch = Vpitch;
28 m_VstripWidth = VstripWidth;
29 //m_XPitch = Xpitch*m_RX/m_Rmid; // scaling from plane to cylinder
30 //m_XstripWidth = XstripWidth*m_RX/m_Rmid; // scaling from plane to cylinder
31 //m_VPitch = Vpitch*m_RV/m_Rmid; // scaling from plane to cylinder
32 //m_VstripWidth = VstripWidth*m_RV/m_Rmid; // scaling from plane to cylinder
33 m_StereoAngle = stereoAngle / 180.*CLHEP::pi; //degree -> radian
34 m_k = stereoAngle/fabs(stereoAngle); // sign of the stereo angle
35 m_MidRGap = midROfGap;
36 m_OutRGap = outROfGap;
37 m_NXstrips = NXStrip;
38 m_NVstrips = NVStrip;
39
40 m_Phimin = phiMin;
41 while(m_Phimin<-M_PI) m_Phimin+=2*M_PI;
42 while(m_Phimin>M_PI) m_Phimin-=2*M_PI;
43 //m_Xmin = m_Phimin*rx;
44 m_Xmin = m_Phimin*m_Rmid;
45
46 //double dPhi_sensitive = NXStrip*m_XPitch/m_Rmid;
47 //m_Phimin_strip = dX_strip/m_Rmid+m_Phimin;
48 m_Phimin_strip = dX_strip/m_Rmid;
49 //while(m_Phimin_strip<0) m_Phimin_strip+=2*M_PI;
50 //while(m_Phimin_strip>2*M_PI) m_Phimin_strip-=2*M_PI;
51 m_Xmin_strip = m_Phimin_strip*m_Rmid;
52 m_Xmax_strip = m_Xmin_strip+NXStrip*m_XPitch;
53 m_Phimax_strip = m_Xmax_strip/m_Rmid;
54 //if(NXStrip*m_XPitch>2*M_PI*rx/) cout<<"CgemGeoReadoutPlane : "<<endl;
55
56 //m_Vmax = m_L*fabs(sin(m_StereoAngle))+m_W*m_RV/m_RX*cos(m_StereoAngle);
57 //m_Vmax = m_L*fabs(sin(m_StereoAngle))+m_W*cos(m_StereoAngle);
58 //m_NXstrips = floor(m_W / m_XPitch);
59 //m_NVstrips = floor(m_Vmax / m_VPitch);
60 //m_Vmin = 0.;
61
62 m_Vtot = NXStrip*m_XPitch*cos(m_StereoAngle)+m_L*fabs(sin(m_StereoAngle));
63 dV=(m_Vtot-NVStrip*m_VPitch)/2.0;// FIXME?
64 m_Vmin_strip = dV;
65 m_Vmax = m_Vmin_strip+NVStrip*m_VPitch;
66
67
68 cout<<" dX = "<<dX_strip<<endl;
69 print();
70}
71
72//Long Peixun's update: Add destructor
74{}
75
77 cout<<"construct one readout-plane with: "<<endl;
78 cout<<" iLayer "<<m_iLayer<<", iSheet "<<m_iSheet<<endl;
79 cout<<" Rx, Rv, Xmin, width = "<< m_RX<<", "<<m_RV<<", "<<m_Xmin<<", "<<m_W<<endl;
80 cout<<" Zmin, L = "<< m_Zmin <<", "<<m_L<<endl;
81 cout<<" XPitch, XstripWidth ="<<m_XPitch<<", "<<m_XstripWidth<<endl;
82 cout<<" sensitive X (Xmin as origin): "<<m_Xmin_strip<<" to "<<m_Xmax_strip<<endl;
83 cout<<" sensitive range in phi (phimin as origin): "<<m_Phimin_strip<<" to "<<m_Xmax_strip/m_Rmid<<endl;
84 //cout<<" VPitch, VstripWidth, StereoAngle, Vmax ="<<m_VPitch<<", "<<m_VstripWidth<<", "<<m_StereoAngle<<", "<<m_Vmax<<endl;
85 cout<<" VPitch, VstripWidth, StereoAngle, k ="<<m_VPitch<<", "<<m_VstripWidth<<", "<<m_StereoAngle<<", "<<m_k<<endl;
86 cout<<" Vtot, Vmin, Vmax = "<<m_Vtot<<", "<<m_Vmin_strip<<", "<<m_Vmax<<endl;
87 cout<<" N_Xstrips, N_Vstrips="<<m_NXstrips<<", "<<m_NVstrips<<endl;
88 cout<<" MidRGap="<<m_MidRGap<<", OutRGap="<<m_OutRGap<<endl;
89}
90
91double CgemGeoReadoutPlane::getX(double phi) const
92{
93 double dPhi = phi - m_Phimin;
94 while(dPhi<0) dPhi += CLHEP::twopi;
95 while(dPhi>=CLHEP::twopi) dPhi -= CLHEP::twopi;
96 if(dPhi>m_Phimax_strip) {
97 double dphi_start = phi-(m_Phimin+m_Phimin_strip);
98 while(dphi_start> 0) dphi_start-=2.*M_PI;
99 while(dphi_start<=-2.*M_PI) dphi_start+=2.*M_PI;
100 //double dphi_end = phi-(m_Phimin+m_Phimax_strip);
101 //while(dphi_end< 0) dphi_end+=2.*M_PI;
102 //while(dphi_end>=2*M_PI) dphi_end-=2.*M_PI;
103 double dphi_end = dPhi-m_Phimax_strip;
104 if(dphi_start+dphi_end>0) dPhi=dphi_start+m_Phimin_strip;
105 }
106 double X = m_Rmid*dPhi;// in X-zeta plane (X-V plane)
107 return X;
108}
109
110//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
111int CgemGeoReadoutPlane::getXStripID(double phi) const {
112 double X = getX(phi);
113 //cout<<"X="<<X<<", Xmin_strip="<<m_Xmin_strip<<endl;
114 X -= m_Xmin_strip;
115 //cout<<"X="<<X<<endl;
116 int xID = floor(X/m_XPitch);
117 //cout<<"getXStripID: "<<xID<<endl;
118 if(xID<0) xID=-1;
119 //if(xID>=m_NXstrips) xID=m_NXstrips-1;
120 if(xID>=m_NXstrips) xID=-2;
121 //if(xID>=0&&xID<m_NXstrips) return xID;
122 //else return -1;
123 return xID;
124}
125
126int CgemGeoReadoutPlane::getClosestXStripID(double phi, double& dist)
127{
128 //cout<<"getClosestXStripID: phi0="<<phi<<endl;
129 //cout<<"getClosestXStripID: phi="<<phi<<endl;
130 //cout<<"getXStripID: "<<xID<<endl;
131 int xID = getXStripID(phi);
132 int xID2 = xID;
133 if(xID2==-1) xID2=0;
134 if(xID2==-2) xID2=m_NXstrips-1;
135 double X = getX(phi);
136 dist = fabs(X-getCentralXFromXID(xID2))-0.5*m_XstripWidth;
137 //cout<<"getClosestXStripID: m_Xmin="<<m_Xmin<<", m_RX="<<m_RX<<", X="<<X
138 // <<", getCentralXFromXID(xID)="<<getCentralXFromXID(xID)
139 // <<", m_XstripWidth="<<m_XstripWidth<<endl;
140 return xID;
141}
142
144{
145 //cout<<"getClosestXStripID: phi0="<<phi<<endl;
146 //phi = phi - m_Xmin/m_RX;
147 //while(phi<0) phi += CLHEP::twopi;
148 //while(phi>CLHEP::twopi) phi-=CLHEP::twopi;
149 //cout<<"getClosestXStripID: phi="<<phi<<endl;
150 //double X = m_RX * phi;// in X-zeta plane (X-V plane)
151 //if(X == m_W) X -= 0.001 * m_XPitch;
152 //int xID = floor((X-(m_Xmin_strip-m_Xmin))/m_XPitch);
153 //cout<<"getXStripID: "<<xID<<endl;
154 //if(xID==m_NXstrips) xID=m_NXstrips-1;
155 //if(xID<0) xID=0;
156 //if(xID>=m_NXstrips) xID=m_NXstrips-1;
157 double dist=-9999.;
158 int xID = getXStripID(phi);
159 id=xID;
160 int xID2 = xID;
161 if(xID2==-1) xID2=0;
162 if(xID2==-2) xID2=m_NXstrips-1;
163 if(xID2>=0&&xID2<m_NXstrips) {
164 double X = getX(phi);
165 dist = X-getCentralXFromXID(xID2);
166 //cout<<"getClosestXStripID: m_Xmin="<<m_Xmin<<", m_RX="<<m_RX<<", X="<<X
167 // <<", getCentralXFromXID(xID)="<<getCentralXFromXID(xID)
168 // <<", m_XstripWidth="<<m_XstripWidth<<endl;
169 }
170 return dist;
171}
172
173
174//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
175int CgemGeoReadoutPlane::getXStripID(double x, double y) const {
176 if(x!=0||y!=0){
177 double phi=atan2(y,x);
178 return getXStripID(phi);
179 } else{
180 return -3;
181 }
182}
183
184//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
185int CgemGeoReadoutPlane::getXStripID(G4ThreeVector pos) const {
186 double x = pos.x();
187 double y = pos.y();
188 return getXStripID(x,y);
189}
190
191
192//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
193int CgemGeoReadoutPlane::getClosestVStripID(G4ThreeVector pos, double& dist) const
194{
195 double z = pos.z();
196 dist = -9999.;
197 int V_ID=-99;
198 if(z < m_Zmin){
199 V_ID = -3;
200 } else if(z > m_Zmin+m_L){
201 V_ID = -4;
202 } else {
203 double phi = pos.phi();
204 double v = getVFromPhiZ(phi, z);
205 //V_ID = floor((v-m_Vmin_strip) / m_VPitch);
206 V_ID = getVIDFromV(v);
207 int vid2 = V_ID;
208 if(V_ID==-1) vid2=0;
209 if(V_ID==-2) vid2=m_NVstrips-1;
210 if(v>=0.) dist = fabs(v-getCentralVFromVID(vid2))-0.5*m_VstripWidth;
211 }
212
213 return V_ID;
214}
215
216//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
217double CgemGeoReadoutPlane::getDist2ClosestVStripCenter(G4ThreeVector pos, int& id) {
218 double z = pos.z();
219 double dist=-9999.;
220 int V_ID=-99;
221 if(z < m_Zmin){
222 V_ID = -3;
223 } else if(z > m_Zmin+m_L){
224 V_ID = -4;
225 } else {
226 double phi = pos.phi();
227 double v = getVFromPhiZ(phi, z);
228 V_ID = getVIDFromV(v);
229 int vid2 = V_ID;
230 if(V_ID==-1) vid2=0;
231 if(V_ID==-2) vid2=m_NVstrips-1;
232 dist = v-getCentralVFromVID(vid2);
233 }
234 id=V_ID;
235
236 return dist;
237}
238
239//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
240void CgemGeoReadoutPlane::getStripID(G4ThreeVector pos, int& X_ID, int& V_ID) const {
241 /*
242 double z = pos.z();
243 if(z < m_Zmin){
244 V_ID = -2;
245 } else if(z > m_Zmin+m_L){
246 V_ID = -1;
247 } else if(X_ID >= 0){
248 double x = pos.x();
249 double y = pos.y();
250 double phi = atan2(y,x);
251 phi = phi - m_Xmin/m_RX;
252 while(phi < 0) phi+=CLHEP::twopi;
253 while(phi > CLHEP::twopi) phi-=CLHEP::twopi;
254 double X = m_RX * phi;// in X-zeta plane (X-V plane) @ m_RX
255 double zeta = z - m_Zmin;
256 V_ID = floor((getVFromLocalXZ(X, zeta)-m_Vmin_strip) / m_VPitch);
257 } else{
258 V_ID = -3;
259 }
260 */
261
262 X_ID = getXStripID(pos);
263 double dist=-9999.;
264 V_ID = getClosestVStripID(pos, dist);
265}
266
267double CgemGeoReadoutPlane::getPhiFromXID(int X_ID) const { // from -pi to pi
268 double X=getCentralXFromXID(X_ID);// central X with m_Xmin as origin
269 double phi=(X+m_Xmin)/m_Rmid;
270 while(phi<-M_PI) phi+=CLHEP::twopi;
271 while(phi>M_PI) phi-=CLHEP::twopi;
272 return phi;
273}
274
275double CgemGeoReadoutPlane::getZFromXV(double X, double V, int checkXRange, int checkVRange) const {
276 double localX = X-m_Xmin_strip;// with m_Xmin_strip as origin
277 double z = -9999.0;
278 if( (checkVRange==0||((V>=m_Vmin_strip)&&(V<m_Vmax))) && ((checkXRange==0)||((localX>=0.0)&&(localX<=m_Xmax_strip-m_Xmin_strip))) ){
279 //double localXOfVstrip = V / cos(m_StereoAngle);
280 //double zeta = (localXOfVstrip - localX) / tan(m_StereoAngle);
281 //if( m_StereoAngle < 0 ) zeta += m_L;
282 //if( (zeta>=0) && (zeta<=m_L) )
283 //z = zeta + m_Zmin;
284 double z0=m_Zmax; if(m_k<0) z0=m_Zmin;
285 z = localX/tan(m_StereoAngle) - V/sin(m_StereoAngle) + z0;
286 }
287 return z;
288}
289
290void CgemGeoReadoutPlane::getFiredStripID(G4ThreeVector pos1, G4ThreeVector pos2,
291 vector<int>& vecXID, vector<int>& vecVID) const {
292 //cout << "get fired strip id" << endl;
293 bool printDebug = false;
294 double z[2];
295 z[0] = pos1.z();
296 z[1] = pos2.z();
297 if( (z[0]<m_Zmin && z[1]<m_Zmin) || (z[0]>(m_Zmin+m_L) && z[1]>(m_Zmin+m_L)) ) return;
298
299 double phi[2];
300 double phimin=-CLHEP::pi;
301 phi[0]=pos1.phi();
302 phi[1]=pos2.phi();
303 if(fabs(phi[1]-phi[0])>CLHEP::pi){
304 phimin=0.0;
305 for(int i=0; i<2; i++) if(phi[i]<0.0) phi[i]+=CLHEP::twopi;
306 }
307 if(phi[0]>phi[1]){
308 double tmp=phi[0];
309 phi[0]=phi[1];
310 phi[1]=tmp;
311 tmp=z[1];
312 z[1]=z[0];
313 z[0]=tmp;
314 }
315 if(printDebug) cout<<"phimin="<<phimin<<", phi[0,1]="<<phi[0]<<","<<phi[1]<<", z[0,1]="<<z[0]<<","<<z[1]<<endl;
316 for(int i=0; i<2; i++){
317 if(z[i]<m_Zmin){
318 double phiTmp=(phi[1]-phi[0])/(z[1]-z[0])*(m_Zmin-z[0])+phi[0];
319 phi[i]=phiTmp;
320 z[i]=m_Zmin;
321 }
322 if(z[i]>(m_Zmin+m_L)){
323 double phiTmp=(phi[1]-phi[0])/(z[1]-z[0])*(m_Zmin+m_L-z[0])+phi[0];
324 phi[i]=phiTmp;
325 z[i]=m_Zmin+m_L;
326 }
327 }
328 double phiActiveMin=m_Phimin+m_Phimin_strip+10e-10;// 2019-05-05 wangll, +10e-10 2019-10-30
329 double phiActiveMax=m_Phimin+m_Phimax_strip-10e-10;// 2019-05-05 wangll, -10e-10 2019-10-30
330 if(printDebug) cout<<"phimin="<<phimin<<", phiActiveMin="<<phiActiveMin<<", phiActiveMax="<<phiActiveMax<<", phi[0,1]="<<phi[0]<<","<<phi[1]<<", z[0,1]="<<z[0]<<","<<z[1]<<endl;
331 while(phiActiveMax>=CLHEP::twopi) phiActiveMax-=CLHEP::twopi;// [0,2pi]
332 while(phiActiveMin>=CLHEP::twopi) phiActiveMin-=CLHEP::twopi;// [0,2pi]
333 while(phiActiveMax<0 ) phiActiveMax+=CLHEP::twopi;// [0,2pi]
334 while(phiActiveMin<0 ) phiActiveMin+=CLHEP::twopi;// [0,2pi]
335 if(phimin==-CLHEP::pi)
336 {
337 /*if(phiActiveMin>CLHEP::pi||phiActiveMax>CLHEP::pi) {
338 phiActiveMin-=CLHEP::twopi;
339 phiActiveMax-=CLHEP::twopi;
340 }*/
341 while(phiActiveMin>CLHEP::pi) phiActiveMin-=CLHEP::twopi;
342 while(phiActiveMax>CLHEP::pi) phiActiveMax-=CLHEP::twopi;
343 }// [-pi,pi]
344 if(printDebug) cout<<"phimin="<<phimin<<", phiActiveMin="<<phiActiveMin<<", phiActiveMax="<<phiActiveMax<<", phi[0,1]="<<phi[0]<<","<<phi[1]<<", z[0,1]="<<z[0]<<","<<z[1]<<endl;
345
346 int iCase=-1;
347 if(phiActiveMin<=phi[0])
348 {
349 if(phiActiveMax<=phiActiveMin) iCase=1;
350 else if(phiActiveMax<=phi[0]) iCase=2;
351 else if(phiActiveMax<=phi[1]) iCase=3;
352 else iCase=4;
353 }
354 else if(phiActiveMin<=phi[1])
355 {
356 if(phiActiveMax<=phi[0]) iCase=5;
357 else if(phiActiveMax<=phiActiveMin) iCase=6;
358 else if(phiActiveMax<=phi[1]) iCase=7;
359 else iCase=8;
360 }
361 else
362 {
363 if(phiActiveMax<=phi[0]) iCase=9;
364 else if(phiActiveMax<=phi[1]) iCase=10;
365 else if(phiActiveMax<=phiActiveMin) iCase=11;
366 else iCase=12;
367 }
368 if(printDebug) cout<<"iCase = "<<iCase<<endl;
369
370 double zBoundary[2];
371 zBoundary[0]=z[0]+(z[1]-z[0])/(phi[1]-phi[0])*(phiActiveMin-phi[0]);
372 zBoundary[1]=z[0]+(z[1]-z[0])/(phi[1]-phi[0])*(phiActiveMax-phi[0]);
373 switch(iCase)
374 {
375 case 2:
376 case 9:
377 case 12:
378 return;// no cluster
379 case 1:
380 case 4:
381 case 6:
382 case 11:
383 break;// no change in points
384 case 3:
385 case 10:
386 phi[1]=phiActiveMax;
387 z[1]=zBoundary[1];
388 break;
389 case 5:
390 case 8:
391 phi[0]=phiActiveMin;
392 z[0]=zBoundary[0];
393 break;
394 case 7:
395 phi[0]=phiActiveMin;
396 phi[1]=phiActiveMax;
397 z[0]=zBoundary[0];
398 z[1]=zBoundary[1];
399 break;
400 default:
401 cout<<"Error in CgemGeoReadoutPlane::getFiredStripID: iCase = "<<iCase<<endl;
402 return;
403 }
404 if(printDebug) cout<<"phimin="<<phimin<<", phiActiveMin="<<phiActiveMin<<", phiActiveMax="<<phiActiveMax<<", phi[0,1]="<<phi[0]<<","<<phi[1]<<", z[0,1]="<<z[0]<<","<<z[1]<<endl;
405
406 G4ThreeVector pos_1,pos_2;
407 pos_1.setRhoPhiZ(m_Rmid,phi[0],z[0]);
408 pos_2.setRhoPhiZ(m_Rmid,phi[1],z[1]);
409 int XID_min(-9),XID_max(-9);
410 int VID_min(-9),VID_max(-9);
411 getStripID(pos_1,XID_min,VID_min);
412 getStripID(pos_2,XID_max,VID_max);
413 if( iCase!=6 && VID_max<VID_min ) {
414 int tmp=VID_max;
415 VID_max=VID_min;
416 VID_min=tmp;
417 }
418 if(printDebug) {
419 cout<<"on the sheet: phi "<<phi[0]<<" to "<<phi[1]<<", z "<<z[0]<<" to "<<z[1]<<endl;
420 cout<<" XID "<<XID_min<<" to "<<XID_max<<", VID "<<VID_min<<" to "<<VID_max<<endl;
421 }
422
423 if(iCase!=6)
424 {
425 for(int i=0; i<=abs(XID_min-XID_max);i++) vecXID.push_back(XID_min+i);
426 for(int i=0; i<=abs(VID_min-VID_max);i++) vecVID.push_back(VID_min+i);
427 }
428 else
429 {
430 pos_1.setRhoPhiZ(m_Rmid,phiActiveMax,zBoundary[1]);
431 pos_2.setRhoPhiZ(m_Rmid,phiActiveMin,zBoundary[0]);
432 int XID_1(-9),XID_2(-9);
433 int VID_1(-9),VID_2(-9);
434 getStripID(pos_1,XID_1,VID_1);
435 getStripID(pos_2,XID_2,VID_2);
436 for(int i=0; i<=abs(XID_min-XID_1);i++) vecXID.push_back(XID_min+i);
437 for(int i=0; i<=abs(XID_max-XID_2);i++) vecXID.push_back(XID_2+i);
438 int VID_0=min(VID_1,VID_min);
439 for(int i=0; i<=abs(VID_min-VID_1);i++) vecVID.push_back(VID_0+i);
440 VID_0=min(VID_2,VID_max);
441 for(int i=0; i<=abs(VID_max-VID_2);i++) vecVID.push_back(VID_0+i);
442 }
443}
444
445double CgemGeoReadoutPlane::incidentAngleX(Hep3Vector momentum, double phi) const
446{
447 double phiTrk = momentum.phi();
448 /*double dPhi = phiTrk-phi;
449 while(dPhi<-CLHEP::pi) dPhi+=CLHEP::twopi;
450 while(dPhi> CLHEP::pi) dPhi-=CLHEP::twopi;
451 if(dPhi<-0.5*CLHEP::pi) dPhi+=CLHEP::pi;
452 else if(dPhi>0.5*CLHEP::pi) dPhi-=CLHEP::pi;
453 */
454 double dPhi = dAngleAcute(phiTrk,phi);
455 return dPhi;
456}
457
458double CgemGeoReadoutPlane::incidentAngleV(Hep3Vector momentum, double phi) const
459{
460 Hep3Vector zaxis(0,0,1);
461 momentum.rotate(zaxis, -phi);
462 Hep3Vector xaxis(1,0,0);
463 momentum.rotate(xaxis, m_StereoAngle);
464 double phiTrk = momentum.phi();
465 double dPhi = dAngleAcute(phiTrk,0);
466 return dPhi;
467}
468
469double CgemGeoReadoutPlane::dAngleAcute(double phi1, double phi2) const
470{
471 double dPhi = phi1-phi2;
472 while(dPhi<-CLHEP::pi) dPhi+=CLHEP::twopi;
473 while(dPhi> CLHEP::pi) dPhi-=CLHEP::twopi;
474 if(dPhi<-0.5*CLHEP::pi) dPhi+=CLHEP::pi;
475 else if(dPhi>0.5*CLHEP::pi) dPhi-=CLHEP::pi;
476 return dPhi;
477}
double tan(const BesAngle a)
Definition: BesAngle.h:216
double sin(const BesAngle a)
Definition: BesAngle.h:210
double cos(const BesAngle a)
Definition: BesAngle.h:213
**********INTEGER nmxhep !maximum number of particles DOUBLE PRECISION vhep INTEGER jdahep COMMON hepevt $ !serial number $ !number of particles $ !status code $ !particle ident KF $ !parent particles $ !childreen particles $ !four momentum
Double_t phi2
Double_t x[10]
Double_t phi1
double abs(const EvtComplex &c)
Definition: EvtComplex.hh:212
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition: KarLud.h:35
#define M_PI
Definition: TConstant.h:4
CgemGeoReadoutPlane(int iLayer, int iSheet, double rx, double rv, double phi_min, double dX_strip, double dV, double w, double zmin, double L, int NXStrip, int NVStrip, double Xpitch, double XstripWidth, double Vpitch, double VstripWidth, double stereoAngle, double midROfGap, double outROfGap)
double getVFromPhiZ(double phi, double z, bool checkRange=true) const
double incidentAngleV(Hep3Vector momentum, double phi) const
void getFiredStripID(G4ThreeVector pos1, G4ThreeVector pos2, vector< int > &vecXID, vector< int > &vecVID) const
double getCentralXFromXID(int X_ID) const
double incidentAngleX(Hep3Vector momentum, double phi) const
double getCentralVFromVID(int V_ID) const
double getPhiFromXID(int X_ID) const
double getZFromXV(double X, double V, int checkXRange=1, int checkVRange=1) const
double getDist2ClosestXStripCenter(double phi, int &id)
int getClosestXStripID(double phi, double &dist)
int getXStripID(double phi) const
int getVIDFromV(double V) const
double dAngleAcute(double phi1, double phi2) const
double getX(double phi) const
int getClosestVStripID(G4ThreeVector pos, double &dist) const
void getStripID(G4ThreeVector pos, int &X_ID, int &V_ID) const
double getDist2ClosestVStripCenter(G4ThreeVector pos, int &id)