CMS 3D CMS Logo

Tubs.cc
Go to the documentation of this file.
2 
3 #include <cmath>
4 #include <vector>
5 
9 
10 using std::fabs;
11 using namespace geant_units::operators;
12 
13 DDI::Tubs::Tubs(double zhalf, double rIn, double rOut, double startPhi, double deltaPhi) : Solid(DDSolidShape::ddtubs) {
14  p_.emplace_back(zhalf);
15  p_.emplace_back(rIn);
16  p_.emplace_back(rOut);
17  p_.emplace_back(startPhi);
18  p_.emplace_back(deltaPhi);
19 }
20 
21 void DDI::Tubs::stream(std::ostream& os) const {
22  os << " zhalf=" << convertMmToCm(p_[0]) << " rIn=" << convertMmToCm(p_[1]) << " rOut=" << convertMmToCm(p_[2])
23  << " startPhi=" << convertRadToDeg(p_[3]) << " deltaPhi=" << convertRadToDeg(p_[4]);
24 }
25 
26 double DDI::Tubs::volume() const {
27  double volume = 0;
28  double z = 2. * p_[0];
29  double rIn = p_[1];
30  double rOut = p_[2];
31  double phi = p_[4];
32 
33  double volume1 = 1_pi * rIn * rIn * z;
34  double volume2 = 1_pi * rOut * rOut * z;
35 
36  double slice = fabs(phi / (2_pi));
37 
38  volume = slice * (volume2 - volume1);
39 
40  return volume;
41 }
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
Tubs(double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
Definition: Tubs.cc:13
double volume() const override
Definition: Tubs.cc:26
constexpr NumType convertMmToCm(NumType millimeters)
Definition: angle_units.h:44
DDSolidShape
Definition: DDSolidShapes.h:6
void stream(std::ostream &) const override
Definition: Tubs.cc:21
std::vector< double > p_
Definition: Solid.h:30