Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HepPolyhedronEllipsoid Class Reference

#include <HepPolyhedron.h>

Inheritance diagram for HepPolyhedronEllipsoid:
Collaboration 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)
 
virtual ~HepPolyhedron ()
 
HepPolyhedronoperator= (const 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 503 of file HepPolyhedron.h.

Constructor & Destructor Documentation

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

Definition at line 2072 of file HepPolyhedron.cc.

2089 {
2090  // C H E C K I N P U T P A R A M E T E R S
2091 
2092  if (zCut1 >= cz || zCut2 <= -cz || zCut1 > zCut2) {
2093  std::cerr << "HepPolyhedronEllipsoid: wrong zCut1 = " << zCut1
2094  << " zCut2 = " << zCut2
2095  << " for given cz = " << cz << std::endl;
2096  return;
2097  }
2098  if (cz <= 0.0) {
2099  std::cerr << "HepPolyhedronEllipsoid: bad z semi-axis: cz = " << cz
2100  << std::endl;
2101  return;
2102  }
2103 
2104  G4double dthe;
2105  G4double sthe;
2106  G4int cutflag;
2107  cutflag= 0;
2108  if (zCut2 >= cz)
2109  {
2110  sthe= 0.0;
2111  }
2112  else
2113  {
2114  sthe= std::acos(zCut2/cz);
2115  cutflag++;
2116  }
2117  if (zCut1 <= -cz)
2118  {
2119  dthe= pi - sthe;
2120  }
2121  else
2122  {
2123  dthe= std::acos(zCut1/cz)-sthe;
2124  cutflag++;
2125  }
2126 
2127  // P R E P A R E T W O P O L Y L I N E S
2128  // generate sphere of radius cz first, then rescale x and y later
2129 
2130  G4int nds = (GetNumberOfRotationSteps() + 1) / 2;
2131  G4int np1 = G4int(dthe*nds/pi) + 2 + cutflag;
2132 
2133  G4double *zz, *rr;
2134  zz = new G4double[np1+1];
2135  rr = new G4double[np1+1];
2136  if (!zz || !rr)
2137  {
2138  G4Exception("HepPolyhedronEllipsoid::HepPolyhedronEllipsoid",
2139  "greps1002", FatalException, "Out of memory");
2140  }
2141 
2142  G4double a = dthe/(np1-cutflag-1);
2143  G4double cosa, sina;
2144  G4int j=0;
2145  if (sthe > 0.0)
2146  {
2147  zz[j]= zCut2;
2148  rr[j]= 0.;
2149  j++;
2150  }
2151  for (G4int i=0; i<np1-cutflag; i++) {
2152  cosa = std::cos(sthe+i*a);
2153  sina = std::sin(sthe+i*a);
2154  zz[j] = cz*cosa;
2155  rr[j] = cz*sina;
2156  j++;
2157  }
2158  if (j < np1)
2159  {
2160  zz[j]= zCut1;
2161  rr[j]= 0.;
2162  j++;
2163  }
2164  if (j > np1)
2165  {
2166  std::cerr << "Logic error in HepPolyhedronEllipsoid, memory corrupted!"
2167  << std::endl;
2168  }
2169  if (j < np1)
2170  {
2171  std::cerr << "Warning: logic error in HepPolyhedronEllipsoid."
2172  << std::endl;
2173  np1= j;
2174  }
2175  zz[j] = 0.;
2176  rr[j] = 0.;
2177 
2178 
2179  // R O T A T E P O L Y L I N E S
2180 
2181  RotateAroundZ(0, 0.0, twopi, np1, 1, zz, rr, -1, 1);
2182  SetReferences();
2183 
2184  delete [] zz;
2185  delete [] rr;
2186 
2187  // rescale x and y vertex coordinates
2188  {
2189  G4Point3D * p= pV;
2190  for (G4int i=0; i<nvert; i++, p++) {
2191  p->setX( p->x() * ax/cz );
2192  p->setY( p->y() * by/cz );
2193  }
2194  }
2195 }
const char * p
Definition: xmltok.h:285
int G4int
Definition: G4Types.hh:78
static constexpr double twopi
Definition: G4SIunits.hh:76
G4Point3D * pV
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
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()
static constexpr double pi
Definition: G4SIunits.hh:75
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

HepPolyhedronEllipsoid::~HepPolyhedronEllipsoid ( )
virtual

Definition at line 2197 of file HepPolyhedron.cc.

2197 {}

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