CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Sphere.cc
Go to the documentation of this file.
3 #include "CLHEP/Units/GlobalSystemOfUnits.h"
4 
5 #include <cmath>
6 #include <ostream>
7 
8 DDI::Sphere::Sphere(double innerRadius,
9  double outerRadius,
10  double startPhi,
11  double deltaPhi,
12  double startTheta,
13  double deltaTheta)
14  : Solid(ddsphere)
15 {
16  p_.push_back(innerRadius);
17  p_.push_back(outerRadius);
18  p_.push_back(startPhi);
19  p_.push_back(deltaPhi);
20  p_.push_back(startTheta);
21  p_.push_back(deltaTheta);
22 }
23 
24 
25 void DDI::Sphere::stream(std::ostream & os) const
26 {
27  os << " innerRadius=" << p_[0]/cm
28  << " outerRadius=" << p_[1]/cm
29  << " startPhi=" << p_[2]/deg
30  << " deltaPhi=" << p_[3]/deg
31  << " startTheta=" << p_[4]/deg
32  << " deltaTheta=" << p_[5]/deg;
33 }
34 
35 double DDI::Sphere::volume() const
36 {
37  double volume(0.);
38  if ( std::fabs(p_[3]) <= 2.*Geom::pi() && std::fabs(p_[5]) <= Geom::pi() ) {
39  volume = std::fabs((p_[1]*p_[1]*p_[1] - p_[0]*p_[0]*p_[0])/3. * (std::cos(p_[4]+p_[5]) - std::cos(p_[4]))*p_[3]);
40  } else if (std::fabs(p_[3]) <= 2.*Geom::pi() && std::fabs(p_[5]) > Geom::pi() ) {
41  volume = std::fabs((p_[1]*p_[1]*p_[1] - p_[0]*p_[0]*p_[0])/3. * (std::cos(p_[4]+p_[5]-180.*deg) - std::cos(p_[4]))*p_[3]);
42  } else if (std::fabs(p_[3]) > 2.*Geom::pi() && std::fabs(p_[5]) <= Geom::pi() ) {
43  volume = std::fabs((p_[1]*p_[1]*p_[1] - p_[0]*p_[0]*p_[0])/3. * (std::cos(p_[4]+p_[5]) - std::cos(p_[4]))*(p_[3]-p_[2]));
44  }
45  return volume;
46 }
47 
48 
Sphere(double innerRadius, double outerRadius, double startPhi, double deltaPhi, double startZ, double deltaZ)
Definition: Sphere.cc:8
double volume() const
Definition: Sphere.cc:35
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< double > p_
Definition: Solid.h:32
void stream(std::ostream &) const
Definition: Sphere.cc:25
constexpr double pi()
Definition: Pi.h:31