47 #ifndef __G4VTWISTSURFACE__
48 #define __G4VTWISTSURFACE__
57 #define G4VSURFACENXX 10
111 G4int areacode[]) = 0;
123 G4int &boundarytype)
const;
173 G4bool isGlobal =
false ) = 0 ;
207 const G4int &boundarytype);
304 const G4int &boundarytype);
311 G4int &boundarytype)
const;
384 #include "G4VTwistSurface.icc"
G4int GetAreacode(G4int i) const
static const G4int sC0Min1Max
CurrentStatus fCurStatWithV
static const G4int sInside
static const G4int sAreaMask
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const
static const G4int sAxisRho
std::vector< ExP01TrackerHit * > a
G4ThreeVector fCorners[4]
static const G4double kInfinity
G4bool IsCorner(G4int areacode, G4bool testbitmode=false) const
static const G4int sAxisX
virtual void SetBoundary(const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
G4bool IsSameBoundary(G4VTwistSurface *surface1, G4int areacode1, G4VTwistSurface *surface2, G4int areacode2) const
static const G4int sCorner
void SetCurrentStatus(G4int i, G4ThreeVector &xx, G4double &dist, G4int &areacode, G4bool &isvalid, G4int nxx, EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
void SetAxis(G4int i, const EAxis axis)
G4bool GetBoundaryParameters(const G4int &areacode, G4ThreeVector &d, G4ThreeVector &x0, G4int &boundarytype) const
G4SurfSideQuery fAmIOnLeftSide
G4bool IsValidNorm() const
G4bool IsOutside(G4int areacode) const
static const G4int sAxisMask
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
virtual G4double GetSurfaceArea()=0
virtual G4int DistanceToSurface(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)=0
virtual ~G4VTwistSurface()
virtual G4ThreeVector GetNormal(const G4ThreeVector &xx, G4bool isGlobal)=0
G4int fAreacode[G4VSURFACENXX]
G4int GetAxisType(G4int areacode, G4int whichaxis) const
static const G4int sAxisZ
static const G4int sC0Min1Min
G4double fDistance[G4VSURFACENXX]
virtual G4String GetName() const
G4ThreeVector fBoundaryX0
static constexpr double m
void ResetfDone(EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
virtual void SetBoundaries()=0
static const G4int sAxis1
G4ThreeVector fBoundaryDirection
void GetBoundaryLimit(G4int areacode, G4double limit[]) const
void SetFields(const G4int &areacode, const G4ThreeVector &d, const G4ThreeVector &x0, const G4int &boundarytype)
static const G4int sSizeMask
virtual G4double DistanceTo(const G4ThreeVector &gp, G4ThreeVector &gxx)
void GetBoundaryAxis(G4int areacode, EAxis axis[]) const
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sC0Max1Max
G4double DistanceToLine(const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &d, G4ThreeVector &xx)
G4bool IsAxis1(G4int areacode) const
G4double DistanceToPlaneWithV(const G4ThreeVector &p, const G4ThreeVector &v, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
static const G4int sAxisPhi
void SetCorner(G4int areacode, G4double x, G4double y, G4double z)
virtual G4double DistanceToIn(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
G4ThreeVector GetCorner(G4int areacode) const
virtual G4double GetBoundaryMax(G4double)=0
virtual G4double GetBoundaryMin(G4double)=0
G4bool DistanceSort(const Intersection &a, const Intersection &b)
G4VTwistSurface(const G4String &name)
G4bool fIsValid[G4VSURFACENXX]
G4VTwistSurface ** GetNeighbours()
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const
void SetNeighbours(G4VTwistSurface *axis0min, G4VTwistSurface *axis1min, G4VTwistSurface *axis0max, G4VTwistSurface *axis1max)
virtual G4double DistanceToBoundary(G4int areacode, G4ThreeVector &xx, const G4ThreeVector &p)
G4bool IsBoundary(G4int areacode, G4bool testbitmode=false) const
G4bool IsAxis0(G4int areacode) const
G4bool EqualIntersection(const Intersection &a, const Intersection &b)
G4VTwistSurface * fNeighbours[4]
G4double GetDistance(G4int i) const
G4ThreeVector fXX[G4VSURFACENXX]
static constexpr double mm
static const G4int sAxis0
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const
virtual void GetBoundaryParameters(const G4int &areacode, G4ThreeVector &d, G4ThreeVector &x0, G4int &boundarytype) const
virtual void SetCorners()=0
virtual G4ThreeVector SurfacePoint(G4double, G4double, G4bool isGlobal=false)=0
static const G4int sOutside
G4SurfCurNormal fCurrentNormal
static const G4int sAxisMin
static const G4int sBoundary
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sC0Max1Min
static const G4int sAxisMax
virtual G4double DistanceToOut(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
G4double DistanceToPlane(const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
virtual G4int GetAreaCode(const G4ThreeVector &xx, G4bool withtol=true)=0
G4ThreeVector GetXX(G4int i) const
static const G4int sAxisY
virtual G4int AmIOnLeftSide(const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const
virtual void GetFacets(G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)=0
virtual G4ThreeVector GetBoundaryAtPZ(G4int areacode, const G4ThreeVector &p) const
G4bool IsValid(G4int i) const
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const