00001 #include "DetectorDescription/Core/src/Tubs.h" 00002 00003 #include "CLHEP/Units/SystemOfUnits.h" 00004 #include "CLHEP/Units/PhysicalConstants.h" 00005 00006 #include <cmath> 00007 00008 using std::fabs; 00009 00010 00011 DDI::Tubs::Tubs(double zhalf, 00012 double rIn, double rOut, 00013 double startPhi, 00014 double deltaPhi) 00015 : Solid(ddtubs) 00016 { 00017 p_.push_back(zhalf); 00018 p_.push_back(rIn); 00019 p_.push_back(rOut); 00020 p_.push_back(startPhi); 00021 p_.push_back(deltaPhi); 00022 } 00023 00024 00025 void DDI::Tubs::stream(std::ostream & os) const 00026 { 00027 os << " zhalf=" << p_[0]/cm 00028 << " rIn=" << p_[1]/cm 00029 << " rOut=" << p_[2]/cm 00030 << " startPhi=" << p_[3]/deg 00031 << " deltaPhi=" << p_[4]/deg; 00032 } 00033 00034 00035 double DDI::Tubs::volume() const 00036 { 00037 double volume=0; 00038 double z=2.*p_[0]; 00039 double rIn=p_[1]; 00040 double rOut=p_[2]; 00041 double phi=p_[4]/rad; 00042 00043 double volume1=pi*rIn*rIn*z; 00044 double volume2=pi*rOut*rOut*z; 00045 00046 double slice=fabs(phi/(2*pi)); 00047 00048 volume=slice*(volume2-volume1); 00049 00050 return volume; 00051 } 00052