32#include "TLorentzVector.h"
41 const genie::geometry::PlaneParam& pparam);
65 PlaneParam(Double_t ain=0, Double_t bin=0, Double_t cin=0, Double_t din=0)
68 {
a = abcd[0];
b = abcd[1];
c = abcd[2];
d = abcd[3];
Normalize(); }
71 { Double_t mag = TMath::Sqrt(
a*
a+
b*
b+
c*
c);
72 if (mag>0) {
a /= mag;
b /= mag;
c /= mag;
d /= mag; } }
73 Double_t
Vn(
const TVector3& raybase)
const
74 {
return raybase.X()*
a + raybase.Y()*
b + raybase.Z()*
c +
d; }
75 Double_t
Vd(
const TVector3& raycos)
const
76 {
return raycos.Px()*
a + raycos.Py()*
b + raycos.Pz()*
c; }
77 Bool_t
IsValid()
const {
return (
a != 0 ||
b != 0 ||
c != 0 ); }
79 void Print(std::ostream& stream)
const;
101 virtual void Print(std::ostream& stream)
const = 0;
112 void Print(std::ostream& stream)
const;
120 FidCylinder(
const TVector3& base,
const TVector3& axis, Double_t radius,
126 void Print(std::ostream& stream)
const;
144 void Print(std::ostream& stream)
const;
TVector3 fCylAxis
base point on cylinder axis
PlaneParam fCylCap2
define a plane for 1st cylinder cap
RayIntercept InterceptUncapped(const TVector3 &start, const TVector3 &dir) const
Double_t fCylRadius
direction cosines of cylinder axis
PlaneParam fCylCap1
radius of cylinder
RayIntercept Intercept(const TVector3 &start, const TVector3 &dir) const
void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)
void Print(std::ostream &stream) const
FidCylinder(const TVector3 &base, const TVector3 &axis, Double_t radius, const PlaneParam &cap1, const PlaneParam &cap2)
std::vector< PlaneParam > fPolyFaces
void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)
RayIntercept Intercept(const TVector3 &start, const TVector3 &dir) const
FidPolyhedron()
convex polyhedron is made of multiple planar equations
void Print(std::ostream &stream) const
void push_back(const PlaneParam &pln)
Some simple volumes that know how to calculate where a ray intercepts them.
virtual void Print(std::ostream &stream) const =0
virtual RayIntercept Intercept(const TVector3 &start, const TVector3 &dir) const =0
virtual void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)=0
friend std::ostream & operator<<(std::ostream &stream, const genie::geometry::FidShape &shape)
void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)
Double_t fSRadius
center of the sphere
RayIntercept Intercept(const TVector3 &start, const TVector3 &dir) const
void Print(std::ostream &stream) const
FidSphere(const TVector3 ¢er, Double_t radius)
void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)
PlaneParam(Double_t ain=0, Double_t bin=0, Double_t cin=0, Double_t din=0)
void Print(std::ostream &stream) const
friend std::ostream & operator<<(std::ostream &stream, const genie::geometry::PlaneParam &pparam)
Double_t Vd(const TVector3 &raycos) const
PlaneParam(Double_t *abcd)
Double_t Vn(const TVector3 &raybase) const
A ROOT/GEANT4 geometry driver.
Int_t fSurfIn
was the volume hit
Int_t fSurfOut
what surface was hit on way in
Bool_t fIsHit
distance along ray to exit fid volume
Double_t fDistOut
distance along ray to enter fid volume
std::ostream & operator<<(std::ostream &stream, const genie::geometry::PlaneParam &pparam)
THE MAIN GENIE PROJECT NAMESPACE