25 z*sinf(phi)/sinhf(eta) ,
30 std::vector<HepGeom::Point3D<double> >
32 HepGeom::Point3D<double> & ref )
36 const double dEta ( pv[0] ) ;
37 const double dPhi ( pv[1] ) ;
38 const double dz ( pv[2] ) ;
39 const double eta ( pv[3] ) ;
40 const double z ( pv[4] ) ;
42 std::vector<GlobalPoint> gc ( 8,
GlobalPoint(0,0,0) ) ;
43 std::vector<HepGeom::Point3D<double> > lc ( 8, HepGeom::Point3D<double> ( 0,0,0) ) ;
49 const float r_near ( p.
perp()/
cos( dPhi ) ) ;
50 const float r_far ( r_near*( ( p.
mag() + 2*
dz )/p.
mag() ) ) ;
51 gc[ 0 ] =
etaPhiPerp( eta + dEta , +dPhi , r_near ) ;
52 gc[ 1 ] =
etaPhiPerp( eta + dEta , -dPhi , r_near ) ;
53 gc[ 2 ] =
etaPhiPerp( eta - dEta , -dPhi , r_near ) ;
54 gc[ 3 ] =
etaPhiPerp( eta - dEta , +dPhi , r_near ) ;
55 gc[ 4 ] =
etaPhiPerp( eta + dEta , +dPhi , r_far ) ;
56 gc[ 5 ] =
etaPhiPerp( eta + dEta , -dPhi , r_far ) ;
57 gc[ 6 ] =
etaPhiPerp( eta - dEta , -dPhi , r_far ) ;
58 gc[ 7 ] =
etaPhiPerp( eta - dEta , +dPhi , r_far ) ;
62 const float z_near ( z ) ;
63 const float z_far ( z*( 1 - 2*dz/p.
mag() ) ) ;
64 gc[ 0 ] =
etaPhiZ( eta + dEta , +dPhi , z_near ) ;
65 gc[ 1 ] =
etaPhiZ( eta + dEta , -dPhi , z_near ) ;
66 gc[ 2 ] =
etaPhiZ( eta - dEta , -dPhi , z_near ) ;
67 gc[ 3 ] =
etaPhiZ( eta - dEta , +dPhi , z_near ) ;
68 gc[ 4 ] =
etaPhiZ( eta + dEta , +dPhi , z_far ) ;
69 gc[ 5 ] =
etaPhiZ( eta + dEta , -dPhi , z_far ) ;
70 gc[ 6 ] =
etaPhiZ( eta - dEta , -dPhi , z_far ) ;
71 gc[ 7 ] =
etaPhiZ( eta - dEta , +dPhi , z_far ) ;
73 for(
unsigned int i ( 0 ) ;
i != 8 ; ++
i )
75 lc[
i] = HepGeom::Point3D<double> ( gc[
i].x(), gc[
i].y(), gc[
i].z() ) ;
78 ref = 0.25*( lc[0] + lc[1] + lc[2] + lc[3] ) ;
97 const float r_far ( r_near*( ( p.
mag() + 2*
dz() )/p.
mag() ) ) ;
98 const float eta ( p.
eta() ) ;
99 const float phi ( p.
phi() ) ;
116 const float z_near ( p.
z() ) ;
117 const float mag ( p.
mag() ) ;
118 const float z_far ( z_near*( 1 - 2*
dz()/
mag ) ) ;
119 const float eta ( p.
eta() ) ;
120 const float phi ( p.
phi() ) ;
138 s <<
"Center: " << cell.
getPosition() << std::endl ;
139 s <<
"dEta = " << cell.
dEta() <<
", dPhi = " << cell.
dPhi() <<
", dz = " << cell.
dz() << std::endl ;
static GlobalPoint etaPhiPerp(float eta, float phi, float perp)
virtual const CornersVec & getCorners() const
T perp() const
Magnitude of transverse component.
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
static GlobalPoint etaPhiZ(float eta, float phi, float z)
static std::vector< HepGeom::Point3D< double > > localCorners(const double *pv, HepGeom::Point3D< double > &ref)
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Cos< T >::type cos(const T &t)
CornersVec & setCorners() const
bool uninitialized() const
std::ostream & operator<<(std::ostream &s, const IdealObliquePrism &cell)
const GlobalPoint & getPosition() const
virtual const CornersVec & getCorners() const =0