6 #include "CLHEP/Units/GlobalSystemOfUnits.h"
15 Polyhedra::Polyhedra (
int sides,
double startPhi,
double deltaPhi,
16 const std::vector<double> &
z,
17 const std::vector<double> & rmin,
18 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(
"Polyhedra(..): 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)
47 p_.push_back(startPhi);
48 p_.push_back(deltaPhi);
49 if(z.size()!=r.size())
51 std::string
s=std::string(
"Polyhedra(..): std::vectors z,rmin,rmax not of same length");
56 for(
unsigned int i=0;
i<z.size(); ++
i)
73 int loop = (
p_.size()-3)/3 -1;
75 double a = 0.5*fabs(
p_[2]/rad /
p_[0]);
76 DCOUT(
'V',
"Polyhedra::volume(), loop=" << loop <<
" alph[deg]=" << a/deg);
78 for (
int j=3;
j<(loop+3); ++
j) {
79 double dz= fabs(
p_[i]-
p_[i+3]);
80 DCOUT(
'v',
" dz[m] =" << dz/
m);
92 double H1=(
p_[i+2]-
p_[i+1])*
cos(a);
93 double Bl1=
p_[i+1]*
sin(a);
94 double Tl1=
p_[i+2]*
sin(a);
96 double H2=(
p_[i+5]-
p_[i+4])*
cos(a);
97 double Bl2=
p_[i+4]*
sin(a);
98 double Tl2=
p_[i+5]*
sin(a);
100 double s = (2*H1*Bl1+2*H1*Tl1)*z+(H1*Bl2-2*H1*Bl1+H1*Tl2-2*H1*Tl1+H2*Bl1+H2*Tl1+H2*Tl2-H2*Tl1)*z+(2/3)*(H2*Bl2-H2*Bl1-H1*Bl2+H1*Bl1-H1*Tl2+H1*Tl1)*
z;
108 int sides=int(
p_[0]);
110 double phiDelta=
p_[2]/rad;
121 alpha=fabs(phiDelta);
122 beta=0.5*(alpha/sides);
124 while(i<(
p_.size()-2))
133 double volume1=(rEnd*rEnd+rBegin*rBegin+rBegin*rEnd)*z/3;
135 volume=volume+volume1;
149 double volume2=(rEnd*rEnd+rBegin*rBegin+rBegin*rEnd)*z/3;
151 volume=volume+volume2;
153 volume=fabs(sides*
cos(beta)*
sin(beta)*volume);
double deltaPhi(float phi1, float phi2)
Sin< T >::type sin(const T &t)
An exception for DDD errors.
Cos< T >::type cos(const T &t)
Polyhedra(int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
DDSolidShape shape() const
#define DCOUT(M_v_Y, M_v_S)