Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
HepPolyhedronParaboloid Class Reference

#include <HepPolyhedron.h>

Inheritance diagram for HepPolyhedronParaboloid:
HepPolyhedron

Public Member Functions

 HepPolyhedronParaboloid (G4double r1, G4double r2, G4double dz, G4double Phi1, G4double Dphi)
 
virtual ~HepPolyhedronParaboloid ()
 
- 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 G4ThreadLocal G4int fNumberOfRotationSteps = DEFAULT_NUMBER_OF_STEPS
 

Detailed Description

Definition at line 406 of file HepPolyhedron.h.

Constructor & Destructor Documentation

HepPolyhedronParaboloid::HepPolyhedronParaboloid ( G4double  r1,
G4double  r2,
G4double  dz,
G4double  Phi1,
G4double  Dphi 
)

Definition at line 1495 of file HepPolyhedron.cc.

References HepPolyhedron::GetNumberOfRotationSteps(), n, python.hepunit::perMillion, HepPolyhedron::RotateAroundZ(), HepPolyhedron::SetReferences(), and python.hepunit::twopi.

1514 {
1515  static const G4double wholeCircle=twopi;
1516 
1517  // C H E C K I N P U T P A R A M E T E R S
1518 
1519  G4int k = 0;
1520  if (r1 < 0. || r2 <= 0.) k = 1;
1521 
1522  if (dz <= 0.) k += 2;
1523 
1524  G4double phi1, phi2, dphi;
1525 
1526  if(dPhi < 0.)
1527  {
1528  phi2 = sPhi; phi1 = phi2 + dPhi;
1529  }
1530  else if(dPhi == 0.)
1531  {
1532  phi1 = sPhi; phi2 = phi1 + wholeCircle;
1533  }
1534  else
1535  {
1536  phi1 = sPhi; phi2 = phi1 + dPhi;
1537  }
1538  dphi = phi2 - phi1;
1539 
1540  if (std::abs(dphi-wholeCircle) < perMillion) dphi = wholeCircle;
1541  if (dphi > wholeCircle) k += 4;
1542 
1543  if (k != 0) {
1544  std::cerr << "HepPolyhedronParaboloid: error in input parameters";
1545  if ((k & 1) != 0) std::cerr << " (radiuses)";
1546  if ((k & 2) != 0) std::cerr << " (half-length)";
1547  if ((k & 4) != 0) std::cerr << " (angles)";
1548  std::cerr << std::endl;
1549  std::cerr << " r1=" << r1;
1550  std::cerr << " r2=" << r2;
1551  std::cerr << " dz=" << dz << " sPhi=" << sPhi << " dPhi=" << dPhi
1552  << std::endl;
1553  return;
1554  }
1555 
1556  // P R E P A R E T W O P O L Y L I N E S
1557 
1559  G4double dl = (r2 - r1) / n;
1560  G4double k1 = (r2*r2 - r1*r1) / 2 / dz;
1561  G4double k2 = (r2*r2 + r1*r1) / 2;
1562 
1563  G4double *zz = new G4double[n + 2], *rr = new G4double[n + 2];
1564 
1565  zz[0] = dz;
1566  rr[0] = r2;
1567 
1568  for(G4int i = 1; i < n - 1; i++)
1569  {
1570  rr[i] = rr[i-1] - dl;
1571  zz[i] = (rr[i]*rr[i] - k2) / k1;
1572  if(rr[i] < 0)
1573  {
1574  rr[i] = 0;
1575  zz[i] = 0;
1576  }
1577  }
1578 
1579  zz[n-1] = -dz;
1580  rr[n-1] = r1;
1581 
1582  zz[n] = dz;
1583  rr[n] = 0;
1584 
1585  zz[n+1] = -dz;
1586  rr[n+1] = 0;
1587 
1588  // R O T A T E P O L Y L I N E S
1589 
1590  RotateAroundZ(0, phi1, dphi, n, 2, zz, rr, -1, -1);
1591  SetReferences();
1592 
1593  delete [] zz;
1594  delete [] rr;
1595 }
int G4int
Definition: G4Types.hh:78
const G4int n
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
float perMillion
Definition: hepunit.py:241
HepPolyhedronParaboloid::~HepPolyhedronParaboloid ( )
virtual

Definition at line 1597 of file HepPolyhedron.cc.

1597 {}

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