2 #include <CLHEP/Geometry/Plane3D.h> 9 typedef HepGeom::Vector3D<CCGFloat>
FVec3D;
10 typedef HepGeom::Plane3D<CCGFloat>
Plane3D;
12 typedef HepGeom::Vector3D<double>
DVec3D;
14 typedef HepGeom::Point3D<double>
DPt3D;
27 :
m_refPoint(0.25 * (cv[0].
x() + cv[1].
x() + cv[2].
x() + cv[3].
x()),
28 0.25 * (cv[0].
y() + cv[1].
y() + cv[2].
y() + cv[3].
y()),
29 0.25 * (cv[0].
z() + cv[1].
z() + cv[2].
z() + cv[3].
z())),
35 s <<
", Center: " << cell.
getPosition() << std::endl;
38 s <<
"Corners vector is empty." << std::endl;
41 for (
unsigned int i(0);
i != corners.size(); ++
i) {
42 s <<
"Corner: " << corners[
i] << std::endl;
50 const Pt3D gFront(p.
x(), p.
y(), p.
z());
51 const DPt3D dgFront(p.
x(), p.
y(), p.
z());
54 assert(
nullptr !=
param());
58 DPt3D dlFront(lFront.x(), lFront.y(), lFront.z());
60 const Pt3D lBack(0.25 * (lc[4] + lc[5] + lc[6] + lc[7]));
61 const DPt3D dlBack(lBack.x(), lBack.y(), lBack.z());
63 const Pt3D dlOne(lc[0].
x(), lc[0].
y(), lc[0].
z());
67 for (
unsigned int i(0);
i != 8; ++
i) {
71 DPt3D dgBack(0.25 * (dkor[4] + dkor[5] + dkor[6] + dkor[7]));
73 const DVec3D dgAxis((dgBack - dgFront).
unit());
75 dgBack = (dgFront + (dlBack - dlFront).
mag() * dgAxis);
76 const DPt3D dgOneT(dgFront + (dlOne - dlFront).
mag() * (dkor[0] - dgFront).
unit());
78 const double dlangle((dlBack - dlFront).
angle(dlOne - dlFront));
79 const double dgangle((dgBack - dgFront).
angle(dgOneT - dgFront));
80 const double ddangle(dlangle - dgangle);
82 const DPlane3D dgPl(dgFront, dgOneT, dgBack);
83 const DPt3D dp2(dgFront + dgPl.normal().unit());
85 const DPt3D dgOne(dgFront + HepGeom::Rotate3D(-ddangle, dgFront, dp2) *
DVec3D(dgOneT - dgFront));
87 tr =
Tr3D(dlFront, dlBack, dlOne, dgFront, dgBack, dgOne);
94 const float* pP(
nullptr);
96 for (
unsigned int ii(0);
ii != pvv.size(); ++
ii) {
98 assert(v.
size() == vv.size());
101 for (
unsigned int j(0);
j != vv.size(); ++
j) {
102 same = same && (fabs(vv[
j] - v[
j]) < 1.e-6);
120 pvv.emplace_back(
ParVec(mgr));
122 for (
unsigned int i(0);
i != vv.size(); ++
i) {
125 pP = &(*back.begin());
132 const Pt3D p(point.
x(), point.
y(), point.
z());
135 for (
unsigned int i(0);
i != 8; ++
i) {
139 const Plane3D AA(co[0], co[1], co[2]);
140 const Plane3D BB(co[6], co[5], co[4]);
142 if (AA.distance(
p) * BB.distance(
p) >= 0) {
143 const Plane3D CC(co[0], co[4], co[5]);
145 if (CC.distance(
p) * DD.distance(
p) >= 0) {
147 const Plane3D FF(co[1], co[5], co[6]);
148 if (EE.distance(
p) * FF.distance(
p) >= 0) {
std::ostream & operator<<(std::ostream &s, const CaloCellGeometry &cell)
bool emptyCorners() const
EZArrayFL< CCGFloat > ParVec
std::vector< ParVec > ParVecVec
HepGeom::Point3D< double > DPt3D
virtual void vocalCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref) const =0
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
virtual const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
const_iterator begin() const
HepGeom::Transform3D Tr3D
std::vector< Pt3D > Pt3DVec
MgrType::const_reference const_reference
const CCGFloat * param() const
virtual void getTransform(Tr3D &tr, Pt3DVec *lptr) const
--------— only needed by specific utility; overloaded when needed -—
virtual ~CaloCellGeometry()
HepGeom::Vector3D< double > DVec3D
CaloCellGeometry::CCGFloat CCGFloat
static const CCGFloat * getParmPtr(const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
static const CCGFloat k_ScaleFromDDDtoGeant
CaloCellGeometry::Pt3D Pt3D
bool inside(const GlobalPoint &point) const
Returns true if the specified point is inside this cell.
HepGeom::Plane3D< double > DPlane3D
CaloCellGeometry::Pt3DVec Pt3DVec
HepGeom::Point3D< CCGFloat > Pt3D
DD
single HTRIG enabling on first/second tracks
CornersVec const & getCorners() const
Returns the corner points of this cell's volume.
CaloCellGeometry::Tr3D Tr3D
T perp() const
Magnitude of transverse component.
std::vector< DPt3D > DPt3DVec
HepGeom::Plane3D< CCGFloat > Plane3D
HepGeom::Vector3D< CCGFloat > FVec3D
ROOT::Math::Plane3D Plane3D
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Basic3DVector unit() const
static const CCGFloat * checkParmPtr(const std::vector< CCGFloat > &vd, ParVecVec &pvv)
T angle(T x1, T y1, T z1, T x2, T y2, T z2)