Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
UOrb Class Reference

#include <UOrb.hh>

Inheritance diagram for UOrb:
VUSolid

Public Member Functions

 UOrb ()
 
 UOrb (const std::string &name, double pRmax)
 
 ~UOrb ()
 
 UOrb (const UOrb &rhs)
 
UOrboperator= (const UOrb &rhs)
 
double GetRadius () const
 
void SetRadius (double newRmax)
 
EnumInside Inside (const UVector3 &aPo6int) const
 
double SafetyFromInside (const UVector3 &aPoint, bool aAccurate=false) const
 
double SafetyFromOutside (const UVector3 &aPoint, bool aAccurate=false) const
 
double DistanceToIn (const UVector3 &aPoint, const UVector3 &aDirection, double aPstep=UUtils::kInfinity) const
 
double DistanceToOut (const UVector3 &aPoint, const UVector3 &aDirection, UVector3 &aNormalVector, bool &aConvex, double aPstep=UUtils::kInfinity) const
 
bool Normal (const UVector3 &aPoint, UVector3 &aNormal) const
 
void Extent (UVector3 &aMin, UVector3 &aMax) const
 
double Capacity ()
 
double SurfaceArea ()
 
UGeometryType GetEntityType () const
 
void ComputeBBox (UBBox *, bool)
 
void GetParametersList (int, double *) const
 
VUSolidClone () const
 
double GetRadialTolerance ()
 
UVector3 GetPointOnSurface () const
 
std::ostream & StreamInfo (std::ostream &os) const
 
- Public Member Functions inherited from VUSolid
 VUSolid ()
 
 VUSolid (const std::string &name)
 
virtual ~VUSolid ()
 
double GetCarTolerance () const
 
double GetRadTolerance () const
 
double GetAngTolerance () const
 
void SetCarTolerance (double eps)
 
void SetRadTolerance (double eps)
 
void SetAngTolerance (double eps)
 
virtual void ExtentAxis (EAxisType aAxis, double &aMin, double &aMax) const
 
const std::string & GetName () const
 
void SetName (const std::string &aName)
 
virtual void SamplePointsInside (int, UVector3 *) const
 
virtual void SamplePointsOnSurface (int, UVector3 *) const
 
virtual void SamplePointsOnEdge (int, UVector3 *) const
 
double EstimateCubicVolume (int nStat, double epsilon) const
 
double EstimateSurfaceArea (int nStat, double ell) const
 

Additional Inherited Members

- Public Types inherited from VUSolid
enum  EnumInside { eInside =0, eSurface =1, eOutside =2 }
 
enum  EAxisType { eXaxis =0, eYaxis =1, eZaxis =2 }
 
- Static Public Member Functions inherited from VUSolid
static double Tolerance ()
 
- Static Protected Attributes inherited from VUSolid
static double fgTolerance = 1.0E-9
 
static double frTolerance = 1.0E-9
 
static double faTolerance = 1.0E-9
 

Detailed Description

Definition at line 28 of file UOrb.hh.

Constructor & Destructor Documentation

UOrb::UOrb ( )
inline

Definition at line 32 of file UOrb.hh.

Referenced by Clone().

32 : VUSolid(), fR(0), fRTolerance(0) {}
VUSolid()
Definition: VUSolid.cc:18
UOrb::UOrb ( const std::string &  name,
double  pRmax 
)

Definition at line 26 of file UOrb.cc.

References UUtils::Exception(), FatalErrorInArguments, VUSolid::fgTolerance, VUSolid::frTolerance, and G4INCL::Math::max().

27  : VUSolid(name), fR(r), fCubicVolume(0), fSurfaceArea(0)
28 {
29  const double epsilon = 2.e-11; // relative tolerance of fR
30 
31  // Check radius
32  //
33  if (r < 10 * VUSolid::fgTolerance) // cartesian tolerance
34  {
35  UUtils::Exception("G4Orb::G4Orb()", "InvalidSetup", FatalErrorInArguments, 1, "Invalid radius > 10*kCarTolerance.");
36  }
37  // VUSolid::fRTolerance is radial tolerance (note: half of G4 tolerance)
38  fRTolerance = max(VUSolid::frTolerance, epsilon * r);
39 }
VUSolid()
Definition: VUSolid.cc:18
static double frTolerance
Definition: VUSolid.hh:31
static double fgTolerance
Definition: VUSolid.hh:30
const XML_Char * name
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void Exception(const char *originOfException, const char *exceptionCode, ExceptionSeverity severity, int level, const char *description)
Definition: UUtils.cc:177
UOrb::~UOrb ( )
inline

Definition at line 34 of file UOrb.hh.

34 {}
UOrb::UOrb ( const UOrb rhs)

Definition at line 496 of file UOrb.cc.

497  : VUSolid(rhs), fR(rhs.fR), fRTolerance(rhs.fRTolerance), fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea)
498 {
499 }
VUSolid()
Definition: VUSolid.cc:18

Member Function Documentation

double UOrb::Capacity ( )
inlinevirtual

Implements VUSolid.

Definition at line 102 of file UOrb.hh.

103 {
104  if (fCubicVolume != 0.)
105  {
106  ;
107  }
108  else
109  {
110  fCubicVolume = (4 * UUtils::kPi / 3) * fR * fR * fR;
111  }
112  return fCubicVolume;
113 }
VUSolid * UOrb::Clone ( ) const
virtual

Implements VUSolid.

Definition at line 489 of file UOrb.cc.

References UOrb().

490 {
491  return new UOrb(*this);
492 }
UOrb()
Definition: UOrb.hh:32
void UOrb::ComputeBBox ( UBBox ,
bool   
)
inlinevirtual

Implements VUSolid.

Definition at line 67 of file UOrb.hh.

67 {}
double UOrb::DistanceToIn ( const UVector3 aPoint,
const UVector3 aDirection,
double  aPstep = UUtils::kInfinity 
) const
virtual

Implements VUSolid.

Definition at line 84 of file UOrb.cc.

References test::c, UUtils::Exception(), python.hepunit::rad, Warning, UVector3::x, UVector3::y, and UVector3::z.

88 {
89  double snxt = UUtils::kInfinity; // snxt = default return value
90 
91  double rad, pDotV3d; // , tolORMax2, tolIRMax2;
92  double c, d2, s = UUtils::kInfinity;
93 
94  const double dRmax = 100.*fR;
95 
96  // General Precalcs
97 
98  rad = sqrt(p.x * p.x + p.y * p.y + p.z * p.z);
99  pDotV3d = p.x * v.x + p.y * v.y + p.z * v.z;
100 
101  // Radial Precalcs
102 
103  // tolORMax2 = (fR+fRTolerance*0.5)*(fR+fRTolerance*0.5);
104  // tolIRMax2 = (fR-fRTolerance*0.5)*(fR-fRTolerance*0.5);
105 
106  // Outer spherical shell intersection
107  // - Only if outside tolerant fR
108  // - Check for if inside and outer G4Orb heading through solid (-> 0)
109  // - No intersect -> no intersection with G4Orb
110  //
111  // Shell eqn: x^2+y^2+z^2 = RSPH^2
112  //
113  // => (px+svx)^2+(py+svy)^2+(pz+svz)^2=R^2
114  //
115  // => (px^2+py^2+pz^2) +2s(pxvx+pyvy+pzvz)+s^2(vx^2+vy^2+vz^2)=R^2
116  // => rad2 +2s(pDotV3d) +s^2 =R^2
117  //
118  // => s=-pDotV3d+-sqrt(pDotV3d^2-(rad2-R^2))
119 
120  c = (rad - fR) * (rad + fR); // c = (rad2-R^2))
121 
122  if (rad > fR - fRTolerance * 0.5) // not inside in terms of Inside(p)
123  {
124  if (c > fRTolerance * fR)
125  {
126  // If outside tolerant boundary of outer G4Orb in terms of c
127  // [ should be sqrt(rad2) - fR > fRTolerance*0.5 ]
128 
129  d2 = pDotV3d * pDotV3d - c;
130 
131  if (d2 >= 0)
132  {
133  s = -pDotV3d - sqrt(d2); // ok! = [ ( -2 p dot v) +- sqrt [(-2p dot v)2 - 4*(rad - fR)*(rad + fR)] ] / 2
134  // pDotV3d must be positive always, if not use alternative http://en.wikipedia.org/wiki/Quadratic_equation#Alternative_quadratic_formula
135  if (s >= 0)
136  {
137  if (s > dRmax) // Avoid rounding errors due to precision issues seen on
138  {
139  // 64 bits systems. Split long distances and recompute
140  double fTerm = s - fmod(s, dRmax);
141  s = fTerm + DistanceToIn(p + fTerm * v, v);
142  }
143  return snxt = s;
144  }
145  }
146  else // No intersection with UOrb
147  {
148  return snxt = UUtils::kInfinity;
149  }
150  }
151  else // not outside in terms of c
152  {
153  if (c > -fRTolerance * fR) // on surface
154  {
155  d2 = pDotV3d * pDotV3d - c;
156  if ((d2 < fRTolerance * fR) || (pDotV3d >= 0)) // pDotV3d = cos si >= 0
157  {
158  return snxt = UUtils::kInfinity;
159  }
160  else
161  {
162  return snxt = 0.;
163  }
164  }
165  }
166  }
167 #ifdef UDEBUG
168  else // inside ???
169  {
170  UUtils::Exception("UOrb::DistanceToIn(p,v)", "Notification", Warning, 1, "Point p is inside !?");
171  }
172 #endif
173 
174  return snxt;
175 }
const XML_Char * s
const char * p
Definition: xmltok.h:285
double DistanceToIn(const UVector3 &aPoint, const UVector3 &aDirection, double aPstep=UUtils::kInfinity) const
Definition: UOrb.cc:84
void Exception(const char *originOfException, const char *exceptionCode, ExceptionSeverity severity, int level, const char *description)
Definition: UUtils.cc:177
double UOrb::DistanceToOut ( const UVector3 aPoint,
const UVector3 aDirection,
UVector3 aNormalVector,
bool &  aConvex,
double  aPstep = UUtils::kInfinity 
) const
virtual

Implements VUSolid.

Definition at line 203 of file UOrb.cc.

References test::c, UUtils::Exception(), python.hepunit::rad, Warning, UVector3::x, UVector3::y, and UVector3::z.

205 {
206  double snxt = 0; // snxt: distance to next surface, is default return value
207  bool notOutside = false;
208  convex = true; // orb is always convex, if we leave surface of Orb, we will neber bump on the orb again ...
209 
210  double rad2, pDotV3d;
211  double xi, yi, zi; // Intersection point
212  double c, d2;
213 
214  rad2 = p.x * p.x + p.y * p.y + p.z * p.z;
215  pDotV3d = p.x * v.x + p.y * v.y + p.z * v.z;
216 
217  // Radial Intersection from UOrb::DistanceToIn
218  //
219  // Outer spherical shell intersection
220  // - Only if outside tolerant fR
221  // - Check for if inside and outer UOrb heading through solid (-> 0)
222  // - No intersect -> no intersection with UOrb
223  //
224  // Shell eqn: x^2+y^2+z^2=RSPH^2
225  //
226  // => (px+svx)^2+(py+svy)^2+(pz+svz)^2=R^2
227  //
228  // => (px^2+py^2+pz^2) +2s(pxvx+pyvy+pzvz)+s^2(vx^2+vy^2+vz^2)=R^2
229  // => rad2 +2s(pDotV3d) +s^2 =R^2
230  //
231  // => s=-pDotV3d+-sqrt(pDotV3d^2-(rad2-R^2))
232 
233  const double rPlus = fR + fRTolerance;
234  double rad = sqrt(rad2);
235 
236  if (rad <= rPlus)
237  {
238  c = (rad - fR) * (rad + fR); // rad2 - fR2
239 
240  if (c < fRTolerance * fR)
241  {
242  // Within tolerant Outer radius
243  //
244  // The test is
245  // rad - fR < 0.5*fRTolerance
246  // => rad < fR + 0.5*kRadTol
247  // => rad2 < (fR + 0.5*kRadTol)^2
248  // => rad2 < fR^2 + 2.*0.5*fR*kRadTol + 0.25*kRadTol*kRadTol
249  // => rad2 - fR^2 <~ fR*kRadTol
250 
251  d2 = pDotV3d * pDotV3d - c;
252 
253  if ((c > -2 * fRTolerance * fR) && // => point is on tolerant surface (i.e. within +- tolerance)
254  ((pDotV3d >= 0) || (d2 < 0))) // if (pDotV3d >= 0 ) => leaving outside from Rmax; i.e. from surface
255  // not re-entering
256  // if (d2 < 0) => it means the point is already outside
257  {
258  // if(calcNorm) // NOTE: we do not have this variable, calcNorm is true always
259  {
260  // *validNorm = true; // NOTE: we do not have this variable, probably always true
261  n = UVector3(p.x / fR, p.y / fR, p.z / fR);
262  }
263  return snxt = 0;
264  }
265  else
266  {
267  // we are inside, with + version of quadratic eq. solution we calculate solution for distance
268  snxt = -pDotV3d + sqrt(d2); // second root since inside Rmax
269  // the solution is safe because pDotV3d is negative
270  // c alternative formula, see http://en.wikipedia.org/wiki/Quadratic_equation#Alternative_quadratic_formula
271  // is not neccessary in this case
272  notOutside = true;
273  }
274  }
275  }
276  else // p is outside ???
277  {
278  // Rule 2: DistanceToOut
279  // Surface points = 0
280  // Outside points: If pointing outwards (dot product with normal positive) return 0, otherwise ignore first surface, another surface should always be on the direction line, use instead distance to this one.
281 
282  // double res = DistanceToOutForOutsidePoints(p, v, n);
283 
284  cout.precision(16);
285  cout << endl;
286  // DumpInfo();
287  cout << "Position:" << endl << endl;
288  cout << "p.x() = " << p.x << endl;
289  cout << "p.y() = " << p.y << endl;
290  cout << "p.z() = " << p.z << endl << endl;
291  cout << "Rp = " << sqrt(p.x * p.x + p.y * p.y + p.z * p.z) << endl << endl;
292  cout << "Direction:" << endl << endl;
293  cout << "v.x() = " << v.x << endl;
294  cout << "v.y() = " << v.y << endl;
295  cout << "v.z() = " << v.z << endl << endl;
296  cout << "Proposed distance :" << endl << endl;
297  cout << "snxt = " << snxt << endl << endl;
298 
299 
300 
301  cout.precision(6);
302  UUtils::Exception("UOrb::DistanceToOut(p,v,..)", "Notification",
303  Warning, 1, "Logic error: snxt = kInfinity ???");
304 
305  }
306 
307  // if (calcNorm) // Output switch operator
308  {
309  if (notOutside)
310  {
311  xi = p.x + snxt * v.x; // we move to the point on surface, then return normal at that point which for orb, see method bool UOrb::Normal( const UVector3& p, UVector3 &n)
312  yi = p.y + snxt * v.y;
313  zi = p.z + snxt * v.z;
314  n = UVector3(xi / fR, yi / fR, zi / fR); // we return normalized vector
315  }
316  else
317  {
318 
319  cout.precision(16);
320  cout << endl;
321  // DumpInfo();
322  cout << "Position:" << endl << endl;
323  cout << "p.x() = " << p.x << " mm" << endl;
324  cout << "p.y() = " << p.y << " mm" << endl;
325  cout << "p.z() = " << p.z << " mm" << endl << endl;
326  cout << "Direction:" << endl << endl;
327  cout << "v.x() = " << v.x << endl;
328  cout << "v.y() = " << v.y << endl;
329  cout << "v.z() = " << v.z << endl << endl;
330  cout << "Proposed distance :" << endl << endl;
331  cout << "snxt = " << snxt << " mm" << endl << endl;
332  cout.precision(6);
333 
334 
335  UUtils::Exception("UOrb::DistanceToOut(p,v,..)", "Notification", Warning, 1, "Undefined side for valid surface normal to solid.");
336  }
337  }
338  return snxt;
339 }
const char * p
Definition: xmltok.h:285
const G4int n
void Exception(const char *originOfException, const char *exceptionCode, ExceptionSeverity severity, int level, const char *description)
Definition: UUtils.cc:177
void UOrb::Extent ( UVector3 aMin,
UVector3 aMax 
) const
virtual

Returns extent of the solid along a given cartesian axis OK

Implements VUSolid.

Definition at line 443 of file UOrb.cc.

References UVector3::Set().

444 {
445  aMin.Set(-fR);
446  aMax.Set(fR);
447 }
void Set(double xx, double yy, double zz)
Definition: UVector3.hh:245
UGeometryType UOrb::GetEntityType ( ) const
virtual

Implements VUSolid.

Definition at line 538 of file UOrb.cc.

539 {
540  return "Orb";
541 }
void UOrb::GetParametersList ( int  ,
double *  aArray 
) const
virtual

Implements VUSolid.

Definition at line 530 of file UOrb.cc.

References GetRadius().

531 {
532  aArray[0] = GetRadius();
533 }
double GetRadius() const
Definition: UOrb.hh:93
UVector3 UOrb::GetPointOnSurface ( ) const
virtual

Implements VUSolid.

Definition at line 474 of file UOrb.cc.

References UUtils::Random(), and UUtils::sqr().

475 {
476  // generate a random number from zero to 2UUtils::kPi...
477  //
478  double phi = UUtils::Random(0., 2.*UUtils::kPi);
479  double cosphi = std::cos(phi);
480  double sinphi = std::sin(phi);
481 
482  // generate a random point uniform in area
483  double costheta = UUtils::Random(-1., 1.);
484  double sintheta = std::sqrt(1. - UUtils::sqr(costheta));
485 
486  return UVector3(fR * sintheta * cosphi, fR * sintheta * sinphi, fR * costheta);
487 }
T sqr(const T &x)
Definition: UUtils.hh:142
double Random(double min=0.0, double max=1.0)
Definition: UUtils.cc:69
double UOrb::GetRadialTolerance ( )
inline

Definition at line 74 of file UOrb.hh.

75  {
76  return fRTolerance;
77  }
double UOrb::GetRadius ( ) const
inline

Definition at line 93 of file UOrb.hh.

Referenced by GetParametersList(), and G4UOrb::GetRadius().

94 {
95  return fR;
96 }
VUSolid::EnumInside UOrb::Inside ( const UVector3 p) const
virtual

Return whether point inside/outside/on surface Split into radius checks

Classify point location with respect to solid: o eInside - inside the solid o eSurface - close to surface within tolerance o eOutside - outside the solid

Implements VUSolid.

Definition at line 53 of file UOrb.cc.

References VUSolid::eInside, VUSolid::eOutside, VUSolid::eSurface, UVector3::x, UVector3::y, and UVector3::z.

Referenced by SafetyFromInside().

54 {
55  double rad2 = p.x * p.x + p.y * p.y + p.z * p.z;
56  // if (false) double rad = sqrt(rad2);
57 
58  double tolRMax = fR - fRTolerance * 0.5;
59 
60  // Check radial surface
61  double tolRMax2 = tolRMax * tolRMax;
62  if (rad2 <= tolRMax2)
63  return eInside;
64  else
65  {
66  tolRMax = fR + fRTolerance * 0.5;
67  tolRMax2 = tolRMax * tolRMax;
68  if (rad2 <= tolRMax2)
69  return eSurface;
70  else
71  return eOutside;
72  }
73 }
double x
Definition: UVector3.hh:136
double z
Definition: UVector3.hh:138
double y
Definition: UVector3.hh:137
bool UOrb::Normal ( const UVector3 p,
UVector3 n 
) const
virtual

Return unit normal of surface closest to p

From http://lists.trolltech.com/qt-interest/2002-09/thread01124-0.html :

does anybody here have an algorithm to calculate the normal vector in a given point in space (x, y, z) in a sphere? I know that it's not about qt but i'll like very mutch the help.

It's simply the connecting vector from the centre of the sphere to the point (other way around for inward normals) obtained through vector subtraction, normalized to unity.

You really should get an algebra book though, as you are bound to encounter more of these problems in a 3d application.

Implements VUSolid.

Definition at line 421 of file UOrb.cc.

References python.hepunit::rad, UVector3::x, UVector3::y, and UVector3::z.

422 {
423  double rad2 = p.x * p.x + p.y * p.y + p.z * p.z;
424  double rad = sqrt(rad2);
425 
426  n = UVector3(p.x / rad, p.y / rad, p.z / rad);
427 
428  double tolRMaxP = fR + fRTolerance;
429  double tolRMaxM = fR - fRTolerance;
430 
431  // Check radial surface
432  bool result = ((rad2 <= tolRMaxP * tolRMaxP) && (rad2 >= tolRMaxM * tolRMaxM)); // means we are on surface
433  return result;
434 }
double x
Definition: UVector3.hh:136
double z
Definition: UVector3.hh:138
double y
Definition: UVector3.hh:137
UOrb & UOrb::operator= ( const UOrb rhs)

Definition at line 505 of file UOrb.cc.

506 {
507  // Check assignment to self
508  //
509  if (this == &rhs)
510  {
511  return *this;
512  }
513 
514  // Copy base class data
515  //
516  VUSolid::operator=(rhs);
517 
518  // Copy data
519  //
520  fR = rhs.fR;
521  fRTolerance = rhs.fRTolerance;
522  fCubicVolume = rhs.fCubicVolume;
523  fSurfaceArea = rhs.fSurfaceArea;
524  return *this;
525 }
double UOrb::SafetyFromInside ( const UVector3 aPoint,
bool  aAccurate = false 
) const
virtual

Implements VUSolid.

Definition at line 350 of file UOrb.cc.

References UUtils::Exception(), Inside(), kOutside, python.hepunit::rad, Warning, UVector3::x, UVector3::y, and UVector3::z.

351 {
352 
353  /////////////////////////////////////////////////////////////////////////
354  //
355  // Calculate distance (<=actual) to closest surface of shape from inside
356 
357  double safe = 0.0, rad = sqrt(p.x * p.x + p.y * p.y + p.z * p.z);
358 
359 #ifdef UDEBUG
360  if (Inside(p) == kOutside)
361  {
362  // int oldprc = cout.precision(16);
363  cout << endl;
364  // DumpInfo();
365  cout << "Position:" << endl << endl;
366  cout << "p.x = " << p.x << endl;
367  cout << "p.y = " << p.y << endl;
368  cout << "p.z = " << p.z << endl << endl;
369  // cout.precision(oldprc);
370  UUtils::Exception("UOrb::DistanceToOut(p)", "Notification", Warning, 1,
371  "Point p is outside !?");
372  }
373 #endif
374 
375  safe = fR - rad;
376  if (safe < 0.) safe = 0.;
377  return safe;
378 }
const char * p
Definition: xmltok.h:285
void Exception(const char *originOfException, const char *exceptionCode, ExceptionSeverity severity, int level, const char *description)
Definition: UUtils.cc:177
EnumInside Inside(const UVector3 &aPo6int) const
Definition: UOrb.cc:53
double UOrb::SafetyFromOutside ( const UVector3 aPoint,
bool  aAccurate = false 
) const
virtual

Implements VUSolid.

Definition at line 393 of file UOrb.cc.

References python.hepunit::rad, UVector3::x, UVector3::y, and UVector3::z.

394 {
395  double safe = 0.0;
396  double rad = sqrt(p.x * p.x + p.y * p.y + p.z * p.z);
397  safe = rad - fR;
398  if (safe < 0)
399  {
400  safe = 0.;
401  }
402  return safe;
403 }
const char * p
Definition: xmltok.h:285
void UOrb::SetRadius ( double  newRmax)
inline

Definition at line 97 of file UOrb.hh.

Referenced by G4UOrb::SetRadius().

98 {
99  fR = newRmax;
100 }
std::ostream & UOrb::StreamInfo ( std::ostream &  os) const
virtual

Implements VUSolid.

Definition at line 454 of file UOrb.cc.

References VUSolid::GetName().

455 {
456  int oldprc = os.precision(16);
457  os << "-----------------------------------------------------------\n"
458  << " *** Dump for solid - " << GetName() << " ***\n"
459  << " ===================================================\n"
460  << " Solid type: UOrb\n"
461  << " Parameters: \n"
462 
463  << " outer radius: " << fR << " mm \n"
464  << "-----------------------------------------------------------\n";
465  os.precision(oldprc);
466 
467  return os;
468 }
const std::string & GetName() const
Definition: VUSolid.hh:103
double UOrb::SurfaceArea ( )
inlinevirtual

Implements VUSolid.

Definition at line 115 of file UOrb.hh.

116 {
117  if (fSurfaceArea != 0.)
118  {
119  ;
120  }
121  else
122  {
123  fSurfaceArea = (4 * UUtils::kPi) * fR * fR;
124  }
125  return fSurfaceArea;
126 }

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