Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
HepPolyhedronHype Class Reference

#include <HepPolyhedron.h>

+ Inheritance diagram for HepPolyhedronHype:

Public Member Functions

 HepPolyhedronHype (G4double r1, G4double r2, G4double tan1, G4double tan2, G4double halfZ)
 
virtual ~HepPolyhedronHype ()
 
- Public Member Functions inherited from HepPolyhedron
 HepPolyhedron ()
 
 HepPolyhedron (const HepPolyhedron &from)
 
virtual ~HepPolyhedron ()
 
HepPolyhedronoperator= (const HepPolyhedron &from)
 
G4int GetNoVertices () const
 
G4int GetNoFacets () const
 
HepPolyhedronTransform (const G4Transform3D &t)
 
G4bool GetNextVertexIndex (G4int &index, G4int &edgeFlag) const
 
G4Point3D GetVertex (G4int index) const
 
G4bool GetNextVertex (G4Point3D &vertex, G4int &edgeFlag) const
 
G4bool GetNextVertex (G4Point3D &vertex, G4int &edgeFlag, G4Normal3D &normal) const
 
G4bool GetNextEdgeIndeces (G4int &i1, G4int &i2, G4int &edgeFlag, G4int &iface1, G4int &iface2) const
 
G4bool GetNextEdgeIndeces (G4int &i1, G4int &i2, G4int &edgeFlag) const
 
G4bool GetNextEdge (G4Point3D &p1, G4Point3D &p2, G4int &edgeFlag) const
 
G4bool GetNextEdge (G4Point3D &p1, G4Point3D &p2, G4int &edgeFlag, G4int &iface1, G4int &iface2) const
 
void GetFacet (G4int iFace, G4int &n, G4int *iNodes, G4int *edgeFlags=0, G4int *iFaces=0) const
 
void GetFacet (G4int iFace, G4int &n, G4Point3D *nodes, G4int *edgeFlags=0, G4Normal3D *normals=0) const
 
G4bool GetNextFacet (G4int &n, G4Point3D *nodes, G4int *edgeFlags=0, G4Normal3D *normals=0) const
 
G4Normal3D GetNormal (G4int iFace) const
 
G4Normal3D GetUnitNormal (G4int iFace) const
 
G4bool GetNextNormal (G4Normal3D &normal) const
 
G4bool GetNextUnitNormal (G4Normal3D &normal) const
 
HepPolyhedron add (const HepPolyhedron &p) const
 
HepPolyhedron subtract (const HepPolyhedron &p) const
 
HepPolyhedron intersect (const HepPolyhedron &p) const
 
G4double GetSurfaceArea () const
 
G4double GetVolume () const
 
G4int createTwistedTrap (G4double Dz, const G4double xy1[][2], const G4double xy2[][2])
 
G4int createPolyhedron (G4int Nnodes, G4int Nfaces, const G4double xyz[][3], const G4int faces[][4])
 

Additional Inherited Members

- Static Public Member Functions inherited from HepPolyhedron
static G4int GetNumberOfRotationSteps ()
 
static void SetNumberOfRotationSteps (G4int n)
 
static void ResetNumberOfRotationSteps ()
 
- Protected Member Functions inherited from HepPolyhedron
void AllocateMemory (G4int Nvert, G4int Nface)
 
G4int FindNeighbour (G4int iFace, G4int iNode, G4int iOrder) const
 
G4Normal3D FindNodeNormal (G4int iFace, G4int iNode) const
 
void CreatePrism ()
 
void RotateEdge (G4int k1, G4int k2, G4double r1, G4double r2, G4int v1, G4int v2, G4int vEdge, G4bool ifWholeCircle, G4int ns, G4int &kface)
 
void SetSideFacets (G4int ii[4], G4int vv[4], G4int *kk, G4double *r, G4double dphi, G4int ns, G4int &kface)
 
void RotateAroundZ (G4int nstep, G4double phi, G4double dphi, G4int np1, G4int np2, const G4double *z, G4double *r, G4int nodeVis, G4int edgeVis)
 
void SetReferences ()
 
void InvertFacets ()
 
- Protected Attributes inherited from HepPolyhedron
G4int nvert
 
G4int nface
 
G4Point3DpV
 
G4FacetpF
 
- Static Protected Attributes inherited from HepPolyhedron
static G4int fNumberOfRotationSteps = DEFAULT_NUMBER_OF_STEPS
 

Detailed Description

Definition at line 417 of file HepPolyhedron.h.

Constructor & Destructor Documentation

◆ HepPolyhedronHype()

HepPolyhedronHype::HepPolyhedronHype ( G4double  r1,
G4double  r2,
G4double  tan1,
G4double  tan2,
G4double  halfZ 
)

Definition at line 1597 of file HepPolyhedron.cc.

1616{
1617 static G4double wholeCircle=twopi;
1618
1619 // C H E C K I N P U T P A R A M E T E R S
1620
1621 G4int k = 0;
1622 if (r2 < 0. || r1 < 0. ) k = 1;
1623 if (r1 > r2 ) k = 1;
1624 if (r1 == r2) k = 1;
1625
1626 if (halfZ <= 0.) k += 2;
1627
1628 if (sqrtan1<0.||sqrtan2<0.) k += 4;
1629
1630 if (k != 0)
1631 {
1632 std::cerr << "HepPolyhedronHype: error in input parameters";
1633 if ((k & 1) != 0) std::cerr << " (radiuses)";
1634 if ((k & 2) != 0) std::cerr << " (half-length)";
1635 if ((k & 4) != 0) std::cerr << " (angles)";
1636 std::cerr << std::endl;
1637 std::cerr << " r1=" << r1 << " r2=" << r2;
1638 std::cerr << " halfZ=" << halfZ << " sqrTan1=" << sqrtan1
1639 << " sqrTan2=" << sqrtan2
1640 << std::endl;
1641 return;
1642 }
1643
1644 // P R E P A R E T W O P O L Y L I N E S
1645
1647 G4double dz = 2.*halfZ / n;
1648 G4double k1 = r1*r1;
1649 G4double k2 = r2*r2;
1650
1651 G4double *zz = new G4double[n+n+1], *rr = new G4double[n+n+1];
1652
1653 zz[0] = halfZ;
1654 rr[0] = std::sqrt(sqrtan2*halfZ*halfZ+k2);
1655
1656 for(G4int i = 1; i < n-1; i++)
1657 {
1658 zz[i] = zz[i-1] - dz;
1659 rr[i] =std::sqrt(sqrtan2*zz[i]*zz[i]+k2);
1660 }
1661
1662 zz[n-1] = -halfZ;
1663 rr[n-1] = rr[0];
1664
1665 zz[n] = halfZ;
1666 rr[n] = std::sqrt(sqrtan1*halfZ*halfZ+k1);
1667
1668 for(G4int i = n+1; i < n+n; i++)
1669 {
1670 zz[i] = zz[i-1] - dz;
1671 rr[i] =std::sqrt(sqrtan1*zz[i]*zz[i]+k1);
1672 }
1673 zz[n+n] = -halfZ;
1674 rr[n+n] = rr[n];
1675
1676 // R O T A T E P O L Y L I N E S
1677
1678 RotateAroundZ(0, 0., wholeCircle, n, n, zz, rr, -1, -1);
1679 SetReferences();
1680
1681 delete [] zz;
1682 delete [] rr;
1683}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
void RotateAroundZ(G4int nstep, G4double phi, G4double dphi, G4int np1, G4int np2, const G4double *z, G4double *r, G4int nodeVis, G4int edgeVis)
void SetReferences()
static G4int GetNumberOfRotationSteps()

◆ ~HepPolyhedronHype()

HepPolyhedronHype::~HepPolyhedronHype ( )
virtual

Definition at line 1685 of file HepPolyhedron.cc.

1685{}

The documentation for this class was generated from the following files: