14 typedef HepGeom::Vector3D<CCGFloat>
FVec3D ;
15 typedef HepGeom::Plane3D<CCGFloat>
Plane3D ;
17 typedef HepGeom::Vector3D<double>
DVec3D ;
19 typedef HepGeom::Point3D<double>
DPt3D ;
24 m_corOne ( 0., 0., 0. ), m_local (0., 0., 0.),
25 m_global ( 0., 0., 0. ) {
33 CaloCellGeometry::operator=( tr ) ;
45 <<
" Translation " <<
m_tr.getTranslation()
46 <<
" and rotation " <<
m_tr.getRotation();
65 <<
" Global " << glb <<
" eta " 67 <<
" Translation " <<
m_tr.getTranslation()
68 <<
" and rotation " <<
m_tr.getRotation();
83 <<
" Global " << glb <<
" eta " 85 <<
" Translation " <<
m_tr.getTranslation()
86 <<
" and rotation " <<
m_tr.getRotation();
97 <<
" Global " << glb <<
" eta " 99 <<
" Translation " <<
m_tr.getTranslation()
100 <<
" and rotation " <<
m_tr.getRotation();
110 << local.y() <<
":" << local.z()
111 <<
" Global " << glb.x() <<
":" << glb.y()
112 <<
":" << glb.z() <<
" TR " <<
m_tr.xx()
113 <<
":" <<
m_tr.xy() <<
":" <<
m_tr.xz()
114 <<
":" <<
m_tr.yx() <<
":" <<
m_tr.yy()
115 <<
":" <<
m_tr.yz() <<
":" <<
m_tr.zx()
116 <<
":" <<
m_tr.zy() <<
":" <<
m_tr.zz()
117 <<
":" <<
m_tr.dx() <<
":" <<
m_tr.dy()
127 << global.
y() <<
":" << global.
z()
128 <<
" Local " << local.x() <<
":" 129 << local.y() <<
":" << local.z();
154 std::vector<GlobalPoint>& co ) {
156 assert( 11 <= pv.size() ) ;
165 for(
unsigned int i ( 0 ) ;
i !=
ncorner_ ; ++
i ) {
167 const Pt3D &
p ( ko[
i] ) ;
178 assert(
nullptr != pv ) ;
189 lc[0] =
Pt3D ( - h*ta1 - bl, - h , -dz );
190 lc[1] =
Pt3D ( + h*ta1 - tl, + h , -dz );
191 lc[2] =
Pt3D ( + h*ta1 + tl, + h , -dz );
192 lc[3] =
Pt3D ( - h*ta1 + bl, - h , -dz );
193 lc[4] =
Pt3D ( - h*ta1 - bl, - h , dz );
194 lc[5] =
Pt3D ( + h*ta1 - tl, + h , dz );
195 lc[6] =
Pt3D ( + h*ta1 + tl, + h , dz );
196 lc[7] =
Pt3D ( - h*ta1 + bl, - h , dz );
198 ref = 0.25*( lc[0] + lc[1] + lc[2] + lc[3] ) ;
201 << lc[0] <<
"|" << lc[1] <<
"|" << lc[2]
202 <<
"|" << lc[3] <<
"|" << lc[4] <<
"|" 203 << lc[5] <<
"|" << lc[6] <<
"|" << lc[7];
209 const Pt3D gFront ( p.
x(), p.
y(), p.
z() ) ;
210 const DPt3D dgFront ( p.
x(), p.
y(), p.
z() ) ;
213 assert(
nullptr !=
param() ) ;
219 Pt3D lBack ( 0.25*(lc[4]+lc[5]+lc[6]+lc[7]) ) ;
221 const DPt3D dlFront ( lFront.x(), lFront.y(), lFront.z() ) ;
222 const DPt3D dlBack ( lBack.x() , lBack.y() , lBack.z() ) ;
223 const DPt3D dlOne ( lc[0].
x() , lc[0].
y() , lc[0].
z() ) ;
229 const DPt3D dgBack ( dgFront + ( dlBack - dlFront ).
mag()*dgAxis ) ;
230 DPt3D dgOne ( dgFront + ( dlOne - dlFront ).
mag()*( dmOne - dgFront ).
unit() ) ;
232 const double dlangle ( ( dlBack - dlFront).
angle( dlOne - dlFront ) ) ;
233 const double dgangle ( ( dgBack - dgFront).
angle( dgOne - dgFront ) ) ;
234 const double dangle ( dlangle - dgangle ) ;
236 if( 1.
e-6 < fabs(dangle) ) {
237 const DPlane3D dgPl ( dgFront, dgOne, dgBack ) ;
238 const DPt3D dp2 ( dgFront + dgPl.normal().unit() ) ;
240 DPt3D dgOld ( dgOne ) ;
242 dgOne = ( dgFront + HepGeom::Rotate3D( -dangle, dgFront, dp2 )*
243 DVec3D( dgOld - dgFront ) ) ;
246 tr =
Tr3D( dlFront , dlBack , dlOne ,
247 dgFront , dgBack , dgOne ) ;
249 if(
nullptr != lptr ) (*lptr) = lc ;
260 for (
unsigned int i ( 0 ) ;
i !=
ncorner_ ; ++
i ) {
261 const Pt3D corn ( tr*lc[
i] ) ;
262 corners[
i] =
GlobalPoint( corn.x(), corn.y(), corn.z() ) ;
276 GlobalPoint global(global_b.x(),global_b.y(),global_b.z());
285 <<
" phi " << cell.
phiPos() << std::endl;
288 for (
unsigned int i=0 ;
i != corners.size() ; ++
i ) {
289 s <<
"Corner: " << corners[
i] << std::endl;
const GlobalVector & axis() const
A base class to handle the particular shape of HGCal volumes.
HepGeom::Point3D< double > DPt3D
FlatTrd & operator=(const FlatTrd &tr)
static constexpr unsigned int ncornerBy2_
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
CaloCellGeometry::Pt3D Pt3D
HepGeom::Point3D< double > DPt3D
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
virtual const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
GlobalPoint const & getPosition() const override
Returns the position of reference for this cell.
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
CaloCellGeometry::Pt3DVec Pt3DVec
HepGeom::Transform3D Tr3D
std::vector< Pt3D > Pt3DVec
FlatTrd::CCGFloat CCGFloat
HepGeom::Plane3D< CCGFloat > Plane3D
Geom::Theta< T > theta() const
static constexpr unsigned int ncorner_
const CCGFloat * param() const
void vocalCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref) const override
CaloCellGeometry::CCGFloat CCGFloat
HepGeom::Vector3D< CCGFloat > FVec3D
Tan< T >::type tan(const T &t)
GlobalPoint backCtr(void) const
HepGeom::Vector3D< double > DVec3D
static void localCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref)
void getTransform(Tr3D &tr, Pt3DVec *lptr) const override
--------— only needed by specific utility; overloaded when needed -—
HepGeom::Plane3D< double > DPlane3D
Vector3DBase unit() const
Pt3D getLocal(const GlobalPoint &global) const
GlobalVector makeAxis(void)
HepGeom::Plane3D< double > DPlane3D
void initCorners(CornersVec &) override
HepGeom::Point3D< CCGFloat > Pt3D
static void createCorners(const std::vector< CCGFloat > &pv, const Tr3D &tr, std::vector< GlobalPoint > &co)
CornersVec const & getCorners() const
Returns the corner points of this cell's volume.
std::vector< std::vector< double > > tmp
bool uninitialized() const
CaloCellGeometry::Tr3D Tr3D
CCGFloat getThetaAxis() const
virtual float phiPos() const
std::ostream & operator<<(std::ostream &s, const FlatTrd &cell)
virtual float etaPos() const
CCGFloat getPhiAxis() const
HepGeom::Vector3D< CCGFloat > FVec3D
Global3DVector GlobalVector
T angle(T x1, T y1, T z1, T x2, T y2, T z2)