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

#include <HepPolyhedron.h>

+ Inheritance diagram for HepPolyhedronEllipsoid:

Public Member Functions

 HepPolyhedronEllipsoid (G4double dx, G4double dy, G4double dz, G4double zcut1, G4double zcut2)
 
virtual ~HepPolyhedronEllipsoid ()
 
- Public Member Functions inherited from HepPolyhedron
 HepPolyhedron ()
 
 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=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 528 of file HepPolyhedron.h.

Constructor & Destructor Documentation

◆ HepPolyhedronEllipsoid()

HepPolyhedronEllipsoid::HepPolyhedronEllipsoid ( G4double  dx,
G4double  dy,
G4double  dz,
G4double  zcut1,
G4double  zcut2 
)

Definition at line 2149 of file HepPolyhedron.cc.

2166{
2167 // C H E C K I N P U T P A R A M E T E R S
2168
2169 if (zCut1 >= cz || zCut2 <= -cz || zCut1 > zCut2) {
2170 std::cerr << "HepPolyhedronEllipsoid: wrong zCut1 = " << zCut1
2171 << " zCut2 = " << zCut2
2172 << " for given cz = " << cz << std::endl;
2173 return;
2174 }
2175 if (cz <= 0.0) {
2176 std::cerr << "HepPolyhedronEllipsoid: bad z semi-axis: cz = " << cz
2177 << std::endl;
2178 return;
2179 }
2180
2181 G4double dthe;
2182 G4double sthe;
2183 G4int cutflag;
2184 cutflag= 0;
2185 if (zCut2 >= cz)
2186 {
2187 sthe= 0.0;
2188 }
2189 else
2190 {
2191 sthe= std::acos(zCut2/cz);
2192 cutflag++;
2193 }
2194 if (zCut1 <= -cz)
2195 {
2196 dthe= pi - sthe;
2197 }
2198 else
2199 {
2200 dthe= std::acos(zCut1/cz)-sthe;
2201 cutflag++;
2202 }
2203
2204 // P R E P A R E T W O P O L Y L I N E S
2205 // generate sphere of radius cz first, then rescale x and y later
2206
2207 G4int nds = (GetNumberOfRotationSteps() + 1) / 2;
2208 G4int np1 = G4int(dthe*nds/pi) + 2 + cutflag;
2209
2210 G4double *zz, *rr;
2211 zz = new G4double[np1+1];
2212 rr = new G4double[np1+1];
2213 if (!zz || !rr)
2214 {
2215 G4Exception("HepPolyhedronEllipsoid::HepPolyhedronEllipsoid",
2216 "greps1002", FatalException, "Out of memory");
2217 }
2218
2219 G4double a = dthe/(np1-cutflag-1);
2220 G4double cosa, sina;
2221 G4int j=0;
2222 if (sthe > 0.0)
2223 {
2224 zz[j]= zCut2;
2225 rr[j]= 0.;
2226 j++;
2227 }
2228 for (G4int i=0; i<np1-cutflag; i++) {
2229 cosa = std::cos(sthe+i*a);
2230 sina = std::sin(sthe+i*a);
2231 zz[j] = cz*cosa;
2232 rr[j] = cz*sina;
2233 j++;
2234 }
2235 if (j < np1)
2236 {
2237 zz[j]= zCut1;
2238 rr[j]= 0.;
2239 j++;
2240 }
2241 if (j > np1)
2242 {
2243 std::cerr << "Logic error in HepPolyhedronEllipsoid, memory corrupted!"
2244 << std::endl;
2245 }
2246 if (j < np1)
2247 {
2248 std::cerr << "Warning: logic error in HepPolyhedronEllipsoid."
2249 << std::endl;
2250 np1= j;
2251 }
2252 zz[j] = 0.;
2253 rr[j] = 0.;
2254
2255
2256 // R O T A T E P O L Y L I N E S
2257
2258 RotateAroundZ(0, 0.0, twopi, np1, 1, zz, rr, -1, 1);
2259 SetReferences();
2260
2261 delete [] zz;
2262 delete [] rr;
2263
2264 // rescale x and y vertex coordinates
2265 {
2266 G4Point3D * p= pV;
2267 for (G4int i=0; i<nvert; i++, p++) {
2268 p->setX( p->x() * ax/cz );
2269 p->setY( p->y() * by/cz );
2270 }
2271 }
2272}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
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)
G4Point3D * pV
void SetReferences()
static G4int GetNumberOfRotationSteps()
const G4double pi

◆ ~HepPolyhedronEllipsoid()

HepPolyhedronEllipsoid::~HepPolyhedronEllipsoid ( )
virtual

Definition at line 2274 of file HepPolyhedron.cc.

2274{}

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