Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HepPolyhedronHype Class Reference

#include <HepPolyhedron.h>

Inheritance diagram for HepPolyhedronHype:
Collaboration 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 GetNoVerteces () 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 GetNextEdgeIndices (G4int &i1, G4int &i2, G4int &edgeFlag, G4int &iface1, G4int &iface2) const
 
G4bool GetNextEdgeIndeces (G4int &i1, G4int &i2, G4int &edgeFlag, G4int &iface1, G4int &iface2) const
 
G4bool GetNextEdgeIndices (G4int &i1, G4int &i2, G4int &edgeFlag) 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 G4ThreadLocal G4int fNumberOfRotationSteps = DEFAULT_NUMBER_OF_STEPS
 

Detailed Description

Definition at line 423 of file HepPolyhedron.h.

Constructor & Destructor Documentation

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

Definition at line 1612 of file HepPolyhedron.cc.

1631 {
1632  static const G4double wholeCircle=twopi;
1633 
1634  // C H E C K I N P U T P A R A M E T E R S
1635 
1636  G4int k = 0;
1637  if (r2 < 0. || r1 < 0. ) k = 1;
1638  if (r1 > r2 ) k = 1;
1639  if (r1 == r2) k = 1;
1640 
1641  if (halfZ <= 0.) k += 2;
1642 
1643  if (sqrtan1<0.||sqrtan2<0.) k += 4;
1644 
1645  if (k != 0)
1646  {
1647  std::cerr << "HepPolyhedronHype: error in input parameters";
1648  if ((k & 1) != 0) std::cerr << " (radiuses)";
1649  if ((k & 2) != 0) std::cerr << " (half-length)";
1650  if ((k & 4) != 0) std::cerr << " (angles)";
1651  std::cerr << std::endl;
1652  std::cerr << " r1=" << r1 << " r2=" << r2;
1653  std::cerr << " halfZ=" << halfZ << " sqrTan1=" << sqrtan1
1654  << " sqrTan2=" << sqrtan2
1655  << std::endl;
1656  return;
1657  }
1658 
1659  // P R E P A R E T W O P O L Y L I N E S
1660 
1662  G4double dz = 2.*halfZ / n;
1663  G4double k1 = r1*r1;
1664  G4double k2 = r2*r2;
1665 
1666  G4double *zz = new G4double[n+n+1], *rr = new G4double[n+n+1];
1667 
1668  zz[0] = halfZ;
1669  rr[0] = std::sqrt(sqrtan2*halfZ*halfZ+k2);
1670 
1671  for(G4int i = 1; i < n-1; i++)
1672  {
1673  zz[i] = zz[i-1] - dz;
1674  rr[i] =std::sqrt(sqrtan2*zz[i]*zz[i]+k2);
1675  }
1676 
1677  zz[n-1] = -halfZ;
1678  rr[n-1] = rr[0];
1679 
1680  zz[n] = halfZ;
1681  rr[n] = std::sqrt(sqrtan1*halfZ*halfZ+k1);
1682 
1683  for(G4int i = n+1; i < n+n; i++)
1684  {
1685  zz[i] = zz[i-1] - dz;
1686  rr[i] =std::sqrt(sqrtan1*zz[i]*zz[i]+k1);
1687  }
1688  zz[n+n] = -halfZ;
1689  rr[n+n] = rr[n];
1690 
1691  // R O T A T E P O L Y L I N E S
1692 
1693  RotateAroundZ(0, 0., wholeCircle, n, n, zz, rr, -1, -1);
1694  SetReferences();
1695 
1696  delete [] zz;
1697  delete [] rr;
1698 }
int G4int
Definition: G4Types.hh:78
static constexpr double twopi
Definition: G4SIunits.hh:76
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()
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

HepPolyhedronHype::~HepPolyhedronHype ( )
virtual

Definition at line 1700 of file HepPolyhedron.cc.

1700 {}

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