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

#include <HepPolyhedron.h>

+ Inheritance diagram for HepPolyhedronHyperbolicMirror:

Public Member Functions

 HepPolyhedronHyperbolicMirror (G4double a, G4double h, G4double r)
 
virtual ~HepPolyhedronHyperbolicMirror ()
 
- 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 544 of file HepPolyhedron.h.

Constructor & Destructor Documentation

◆ HepPolyhedronHyperbolicMirror()

HepPolyhedronHyperbolicMirror::HepPolyhedronHyperbolicMirror ( G4double  a,
G4double  h,
G4double  r 
)

Definition at line 2340 of file HepPolyhedron.cc.

2355{
2356 G4double H = std::abs(h);
2357 G4double R = std::abs(r);
2358 G4double A = std::abs(a);
2359 G4double B = A*R/std::sqrt(2*A*H + H*H);
2360
2361 // P R E P A R E T W O P O L Y L I N E S
2362
2363 G4int np1 = (A == 0.) ? 2 : std::max(3, GetNumberOfRotationSteps()/4) + 1;
2364 G4int np2 = 2;
2365 G4double maxAng = (A == 0.) ? 0. : std::acosh(1. + H/A);
2366 G4double delAng = maxAng/(np1 - 1);
2367
2368 G4double *zz = new G4double[np1 + np2];
2369 G4double *rr = new G4double[np1 + np2];
2370
2371 // 1st polyline
2372 zz[0] = H;
2373 rr[0] = R;
2374 for (G4int iz = 1; iz < np1 - 1; ++iz)
2375 {
2376 G4double ang = maxAng - iz*delAng;
2377 zz[iz] = A*std::cosh(ang) - A;
2378 rr[iz] = B*std::sinh(ang);
2379 }
2380 zz[np1 - 1] = 0.;
2381 rr[np1 - 1] = 0.;
2382
2383 // 2nd polyline
2384 zz[np1] = H;
2385 rr[np1] = 0.;
2386 zz[np1 + 1] = 0.;
2387 rr[np1 + 1] = 0.;
2388
2389 // R O T A T E P O L Y L I N E S
2390
2391 G4double phi = 0.;
2392 G4double dphi = CLHEP::twopi;
2393 RotateAroundZ(0, phi, dphi, np1, np2, zz, rr, -1, -1);
2394 SetReferences();
2395
2396 delete [] zz;
2397 delete [] rr;
2398}
double B(double temperature)
double A(double temperature)
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)
void SetReferences()
static G4int GetNumberOfRotationSteps()

◆ ~HepPolyhedronHyperbolicMirror()

HepPolyhedronHyperbolicMirror::~HepPolyhedronHyperbolicMirror ( )
virtual

Definition at line 2400 of file HepPolyhedron.cc.

2400{}

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