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

#include <HepPolyhedron.h>

+ Inheritance diagram for HepPolyhedronParaboloid:

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 G4int fNumberOfRotationSteps = DEFAULT_NUMBER_OF_STEPS
 

Detailed Description

Definition at line 406 of file HepPolyhedron.h.

Constructor & Destructor Documentation

◆ HepPolyhedronParaboloid()

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

Definition at line 1493 of file HepPolyhedron.cc.

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

◆ ~HepPolyhedronParaboloid()

HepPolyhedronParaboloid::~HepPolyhedronParaboloid ( )
virtual

Definition at line 1595 of file HepPolyhedron.cc.

1595{}

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