1#ifndef CGEMGEOREADOUTPLANE_H
2#define CGEMGEOREADOUTPLANE_H
6#include <CLHEP/Units/PhysicalConstants.h>
7#include <CLHEP/Units/SystemOfUnits.h>
8#include "G4ThreeVector.hh"
17 double phi_min,
double dX_strip,
double dV,
18 double w,
double zmin,
double L,
19 int NXStrip,
int NVStrip,
20 double Xpitch,
double XstripWidth,
double Vpitch,
double VstripWidth,
double stereoAngle,
21 double midROfGap,
double outROfGap);
45 double getX(
double phi)
const;
53 void getStripID(G4ThreeVector pos,
int& X_ID,
int& V_ID)
const;
54 void getFiredStripID(G4ThreeVector pos1, G4ThreeVector pos2, vector<int>& vecXID, vector<int>& vecVID)
const;
59 double dPhi = phiminNext-m_Phimin;
60 while(dPhi<=0) dPhi+=CLHEP::twopi;
61 while(dPhi>CLHEP::twopi) dPhi-=CLHEP::twopi;
63 double dX = dPhi*m_Rmid;
64 return v-dX*
cos(m_StereoAngle);
72 return (X_ID+0.5)*m_XPitch+m_Xmin_strip;
78 return (V_ID+0.5)*m_VPitch+m_Vmin_strip;
82 double vStripLegth(0.);
83 if(V_ID>=0&&V_ID<m_NVstrips)
86 double Lz=V/fabs(
sin(m_StereoAngle));
89 vStripLegth=Lz/
cos(m_StereoAngle);
91 else if(V/
cos(m_StereoAngle)<=m_NXstrips*m_XPitch)
93 vStripLegth=m_L/
cos(m_StereoAngle);
95 else vStripLegth=(m_Vtot-V)/fabs(
sin(m_StereoAngle)*
cos(m_StereoAngle));
100 double getZFromXV(
double X,
double V,
int checkXRange=1,
int checkVRange=1)
const;
101 double getZFromPhiV(
double phi,
double V,
int checkXRange=1)
const;
124 double m_Phimin_strip;
126 double m_Phimax_strip;
138 double m_XstripWidth;
139 double m_VstripWidth;
140 double m_StereoAngle;
149 double dPhi=phi-m_Phimin;
150 while(dPhi<0) dPhi+=CLHEP::twopi;
151 while(dPhi>=2*
M_PI) dPhi-=CLHEP::twopi;
152 if(dPhi>=m_Phimin_strip && dPhi<=m_Xmax_strip/m_Rmid && z>=m_Zmin && z<=m_Zmax)
return true;
158 if(
x>=0. && x<=m_NXstrips*m_XPitch && zeta>=0 && zeta<=m_L )
163 double z0=m_Zmax;
if(m_k<0) z0=m_Zmin;
165 return x*
cos(m_StereoAngle)+(z0-zeta-m_Zmin)*
sin(m_StereoAngle);
173 double dPhi=phi-m_Phimin;
174 while(dPhi<0) dPhi+=CLHEP::twopi;
175 while(dPhi>=CLHEP::twopi) dPhi-=CLHEP::twopi;
176 double X=dPhi*m_Rmid;
177 double x=X-m_Xmin_strip;
178 double zeta=z-m_Zmin;
186 if( (vID>=0) && (vID<m_NVstrips) ){
198 while(phi<0) phi+=CLHEP::twopi;
199 while(phi>=CLHEP::twopi) phi-=CLHEP::twopi;
200 return getZFromXV(phi*m_Rmid, V, checkXRange);
204 double Vid = floor((V-m_Vmin_strip)/m_VPitch);
206 if(Vid>=m_NVstrips) Vid=-2;
double sin(const BesAngle a)
double cos(const BesAngle a)
**********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
double getVStripLength(int V_ID) const
void getFiredStripID(G4ThreeVector pos1, G4ThreeVector pos2, vector< int > &vecXID, vector< int > &vecVID) const
int getVIDInNextSheetFromVID(int vID, double phimin_next) const
double getPhiMin_strip() const
double getCentralXFromXID(int X_ID) const
double getZFromPhiV(double phi, double V, int checkXRange=1) 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
bool OnThePlane(double phi, double z) const
int getVIDFromV(double V) const
double getVFromPhiZ(double phi, double z) const
double getX(double phi) const
double getVInNextSheetFromV(double v, double phiminNext) const
int getClosestVStripID(G4ThreeVector pos, double &dist) const
double getVFromLocalXZ(double x, double zeta) const
void getStripID(G4ThreeVector pos, int &X_ID, int &V_ID) const
double getDist2ClosestVStripCenter(G4ThreeVector pos, int &id)