7 #include "CLHEP/Units/GlobalSystemOfUnits.h"
8 #include "CLHEP/Units/SystemOfUnits.h"
13 os <<
" xSemiAxis[cm]=" <<
p_[0]/cm
14 <<
" ySemiAxis[cm]=" <<
p_[1]/cm
15 <<
" zSemiAxis" <<
p_[2]/cm
16 <<
" zBottomCut" <<
p_[3]/cm
17 <<
" zTopCut" <<
p_[4]/cm;
25 double c2 = p_[2] * p_[2];
26 for (;z <= maxz; z=z+dz) {
32 if ( z*z / c2 > 1.0 ) {
36 x = p_[0] *
sqrt( 1 - z*z/c2);
37 y = p_[1] *
sqrt( 1 - z*z/c2);
41 volume = volume +
Geom::pi() * dz * x * y;
53 volume = 4./3. *
Geom::pi() * p_[0] * p_[1] * p_[2];
56 std::cout <<
"FAIL: p_[3] > 0.0" <<std::endl;
57 }
else if ( p_[4] < 0.0 ) {
59 std::cout <<
"FAIL: p_[4] < 0.0" <<std::endl;
60 }
else if ( p_[3] < 0. && p_[4] > 0. ) {
61 volume = halfVol (p_[4]/100000., p_[4]) + halfVol (std::fabs(p_[3]/100000.), std::fabs(p_[3]));
62 }
else if ( p_[3] < 0. ) {
63 volume = volume / 2 + halfVol(std::fabs(p_[3]/100000.), std::fabs(p_[3]));
64 }
else if ( p_[4] > 0. ) {
65 volume = volume / 2 + halfVol (p_[4]/100000., p_[4]);
double volume() const
Not as flexible and possibly less accurate than G4 volume.
double halfVol(double dz, double maxz) const
T x() const
Cartesian x coordinate.
void stream(std::ostream &os) const