Geant4 11.2.2
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)
 
 ~HepPolyhedronParaboloid () override
 
- Public Member Functions inherited from HepPolyhedron
 HepPolyhedron ()
 
 HepPolyhedron (G4int Nvert, G4int Nface)
 
 HepPolyhedron (const HepPolyhedron &from)
 
 HepPolyhedron (HepPolyhedron &&from)
 
virtual ~HepPolyhedron ()
 
HepPolyhedronoperator= (const HepPolyhedron &from)
 
HepPolyhedronoperator= (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=nullptr, G4int *iFaces=nullptr) const
 
void GetFacet (G4int iFace, G4int &n, G4Point3D *nodes, G4int *edgeFlags=nullptr, G4Normal3D *normals=nullptr) const
 
G4bool GetNextFacet (G4int &n, G4Point3D *nodes, G4int *edgeFlags=nullptr, G4Normal3D *normals=nullptr) 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
 
void SetVertex (G4int index, const G4Point3D &v)
 
void SetFacet (G4int index, G4int iv1, G4int iv2, G4int iv3, G4int iv4=0)
 
void SetReferences ()
 
void JoinCoplanarFacets (G4double tolerance)
 
void InvertFacets ()
 
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])
 
G4Point3D vertexUnweightedMean () const
 

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 RotateContourAroundZ (G4int nstep, G4double phi, G4double dphi, const std::vector< G4TwoVector > &rz, G4int nodeVis, G4int edgeVis)
 
G4bool TriangulatePolygon (const std::vector< G4TwoVector > &polygon, std::vector< G4int > &result)
 
G4bool CheckSnip (const std::vector< G4TwoVector > &contour, G4int a, G4int b, G4int c, G4int n, const G4int *V)
 
- 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 489 of file HepPolyhedron.h.

Constructor & Destructor Documentation

◆ HepPolyhedronParaboloid()

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

Definition at line 2058 of file HepPolyhedron.cc.

2077{
2078 static const G4double wholeCircle=twopi;
2079
2080 // C H E C K I N P U T P A R A M E T E R S
2081
2082 G4int k = 0;
2083 if (r1 < 0. || r2 <= 0.) k = 1;
2084
2085 if (dz <= 0.) k += 2;
2086
2087 G4double phi1, phi2, dphi;
2088
2089 if(dPhi < 0.)
2090 {
2091 phi2 = sPhi; phi1 = phi2 + dPhi;
2092 }
2093 else if(dPhi == 0.)
2094 {
2095 phi1 = sPhi; phi2 = phi1 + wholeCircle;
2096 }
2097 else
2098 {
2099 phi1 = sPhi; phi2 = phi1 + dPhi;
2100 }
2101 dphi = phi2 - phi1;
2102
2103 if (std::abs(dphi-wholeCircle) < perMillion) dphi = wholeCircle;
2104 if (dphi > wholeCircle) k += 4;
2105
2106 if (k != 0) {
2107 std::cerr << "HepPolyhedronParaboloid: error in input parameters";
2108 if ((k & 1) != 0) std::cerr << " (radiuses)";
2109 if ((k & 2) != 0) std::cerr << " (half-length)";
2110 if ((k & 4) != 0) std::cerr << " (angles)";
2111 std::cerr << std::endl;
2112 std::cerr << " r1=" << r1;
2113 std::cerr << " r2=" << r2;
2114 std::cerr << " dz=" << dz << " sPhi=" << sPhi << " dPhi=" << dPhi
2115 << std::endl;
2116 return;
2117 }
2118
2119 // P R E P A R E T W O P O L Y L I N E S
2120
2122 G4double dl = (r2 - r1) / n;
2123 G4double k1 = (r2*r2 - r1*r1) / 2 / dz;
2124 G4double k2 = (r2*r2 + r1*r1) / 2;
2125
2126 auto zz = new G4double[n + 2], rr = new G4double[n + 2];
2127
2128 zz[0] = dz;
2129 rr[0] = r2;
2130
2131 for(G4int i = 1; i < n - 1; i++)
2132 {
2133 rr[i] = rr[i-1] - dl;
2134 zz[i] = (rr[i]*rr[i] - k2) / k1;
2135 if(rr[i] < 0)
2136 {
2137 rr[i] = 0;
2138 zz[i] = 0;
2139 }
2140 }
2141
2142 zz[n-1] = -dz;
2143 rr[n-1] = r1;
2144
2145 zz[n] = dz;
2146 rr[n] = 0;
2147
2148 zz[n+1] = -dz;
2149 rr[n+1] = 0;
2150
2151 // R O T A T E P O L Y L I N E S
2152
2153 RotateAroundZ(0, phi1, dphi, n, 2, zz, rr, -1, -1);
2154 SetReferences();
2155
2156 delete [] zz;
2157 delete [] rr;
2158}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
void RotateAroundZ(G4int nstep, G4double phi, G4double dphi, G4int np1, G4int np2, const G4double *z, G4double *r, G4int nodeVis, G4int edgeVis)
static G4int GetNumberOfRotationSteps()

◆ ~HepPolyhedronParaboloid()

HepPolyhedronParaboloid::~HepPolyhedronParaboloid ( )
overridedefault

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