8 #include "CLHEP/Units/GlobalSystemOfUnits.h"
9 #include "CLHEP/Units/GlobalPhysicalConstants.h"
16 Polycone::Polycone (
double startPhi,
double deltaPhi,
17 const std::vector<double> &
z,
18 const std::vector<double> & rmin,
19 const std::vector<double> & rmax)
22 p_.push_back(startPhi);
23 p_.push_back(deltaPhi);
24 if((z.size()!=rmin.size()) || (z.size()!=rmax.size()) )
26 std::string
s=std::string(
"Polycone(..): std::vectors z,rmin,rmax not of same length");
31 for(
unsigned int i=0;
i<z.size(); ++
i)
34 p_.push_back(rmin[i]);
35 p_.push_back(rmax[i]);
42 const std::vector<double> &
z,
43 const std::vector<double> &
r)
46 p_.push_back(startPhi);
47 p_.push_back(deltaPhi);
48 if(z.size()!=r.size())
50 std::string
s=std::string(
"Polycone(..): std::vectors z,rmin,rmax not of same length");
55 for(
unsigned int i=0;
i<z.size(); ++
i)
68 int loop = (
p_.size()-2)/3 -1;
71 DCOUT(
'V',
"Polycone::volume(), loop=" << loop);
73 for (
int j=2;
j<(loop+2); ++
j) {
74 double dz= std::fabs(
p_[i]-
p_[i+3]);
75 DCOUT(
'v',
" dz=" << dz/cm <<
"cm zi=" <<
p_[i] <<
" zii=" <<
p_[i+3] );
76 double v_min = dz *
pi/3. *(
p_[i+1]*
p_[i+1] +
p_[i+4]*
p_[i+4]
78 DCOUT(
'v',
" v_min" << v_min/cm3 <<
"cm3 rmi=" <<
p_[i+1]);
79 double v_max = dz *
pi/3. *(
p_[i+2]*
p_[i+2] +
p_[i+5]*
p_[i+5]
81 DCOUT(
'v',
" v_max" << v_max/cm3 <<
"cm3");
82 double s = v_max - v_min;
87 result = sec * std::fabs(
p_[1])/rad/(2.*
pi);
92 double phiFrom=
p_[0]/rad;
93 double phiTo=(
p_[0]+
p_[1])/rad;
94 double slice=(std::fabs(phiFrom-phiTo))/(2*
pi);
102 while(i<(
p_.size()-2))
112 double volume1=(rEnd*rEnd+rBegin*rBegin+rBegin*rEnd)*z/3;
114 volume=volume+volume1;
127 double volume2=(rEnd*rEnd+rBegin*rBegin+rBegin*rEnd)*z/3;
130 volume=volume+volume2;
132 volume=std::fabs(slice*
pi*volume);
double deltaPhi(float phi1, float phi2)
An exception for DDD errors.
Polycone(double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
#define DCOUT(M_v_Y, M_v_S)