Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
DetectorDescription
Core
src
Cons.cc
Go to the documentation of this file.
1
#include "
DetectorDescription/Core/src/Cons.h
"
2
#include "CLHEP/Units/GlobalSystemOfUnits.h"
3
#include "CLHEP/Units/GlobalPhysicalConstants.h"
4
#include <cmath>
5
#include <ostream>
6
7
DDI::Cons::Cons
(
double
zhalf,
8
double
rInMinusZ,
9
double
rOutMinusZ,
10
double
rInPlusZ,
11
double
rOutPlusZ,
12
double
startPhi,
13
double
deltaPhi
)
14
:
Solid
(
ddcons
)
15
{
16
p_
.push_back(zhalf);
17
p_
.push_back(rInMinusZ);
18
p_
.push_back(rOutMinusZ);
19
p_
.push_back(rInPlusZ);
20
p_
.push_back(rOutPlusZ);
21
p_
.push_back(startPhi);
22
p_
.push_back(deltaPhi);
23
24
}
25
26
27
void
DDI::Cons::stream
(std::ostream & os)
const
28
{
29
os <<
" zhalf="
<< p_[0]/cm
30
<<
" rIn-Z="
<< p_[1]/cm
31
<<
" rOut-Z="
<< p_[2]/cm
32
<<
" rIn+Z="
<< p_[3]/cm
33
<<
" rOut+Z="
<< p_[4]/cm
34
<<
" startPhi="
<< p_[5]/deg
35
<<
" deltaPhi="
<< p_[6]/deg;
36
}
37
38
double
DDI::Cons::volume
()
const
39
{
40
/* zhalf is the half length of the cone,
41
phiTo is always clockwise rotated from phiFrom
42
rInMinusZ is always smaller than rOutMinusZ (same for r*PlusZ)
43
They are the distances relative to the rotation axes */
44
45
/* calculation normalize from 0 to z */
46
47
/* The function f=rInMinusZ+((rInPlusZ-rInMinusZ)/z)*x defines
48
the radius of the the rotation from 0 to z. Raised to the power
49
of 2 integrated on x from 0 to z. Multiplied by pi, gives the
50
volume that needs to substracted from the other volume */
51
52
/* f^2=rInMinusZ*rInMinusZ+2*rInMinusZ*((rInPlusZ-rInMinusZ)/z)*x+((rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*x*x)/(z*z) */
53
54
/* primitive of f^2 is: rInMinusZ*rInMinusZ*x+rInMinusZ*((rInPlusZ-rInMinusZ)/z)*(x*x)+(rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*(x*x*x)/(3*z*z) */
55
56
/*integration from 0 to z yields: pi*( rInMinusZ*rInMinusZ*z+rInMinusZ*(rInPlusZ-rInMinusZ)*z+((rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*z)/(3) ) */
57
58
double
zhalf=p_[0];
59
double
rInMinusZ=p_[1];
60
double
rOutMinusZ=p_[2];
61
double
rInPlusZ=p_[3];
62
double
rOutPlusZ=p_[4];
63
//double phiFrom=p_[5]/rad;
64
double
deltaPhi
=fabs(p_[6]/rad);
65
double
z
=2*zhalf;
66
67
double
volume1=
pi
*(rInPlusZ*rInPlusZ+rInMinusZ*rInMinusZ+rInMinusZ*rInPlusZ)*z/3;
68
69
double
volume2=
pi
*(rOutPlusZ*rOutPlusZ+rOutMinusZ*rOutMinusZ+rOutMinusZ*rOutPlusZ)*z/3;
70
71
double
slice=deltaPhi/(2*
pi
);
72
double
volume=slice*(volume2-volume1);
73
74
return
volume;
75
76
}
77
78
detailsBasic3DVector::z
float float float z
Definition:
extBasic3DVector.h:15
pi
const Double_t pi
Definition:
trackSplitPlot.h:35
DDI::Cons::Cons
Cons(double zhalf, double rInMinusZ, double rOutMinusZ, double rInPlusZ, double rOutPlusZ, double startPhi, double deltaPhi)
Definition:
Cons.cc:7
ddcons
Definition:
DDSolidShapes.h:7
Cons.h
SiPixelRawToDigiRegional_cfi.deltaPhi
tuple deltaPhi
Definition:
SiPixelRawToDigiRegional_cfi.py:9
DDI::Cons::stream
void stream(std::ostream &) const
Definition:
Cons.cc:27
DDI::Cons::volume
double volume() const
Definition:
Cons.cc:38
DDI::Solid
Definition:
Solid.h:10
DDI::Solid::p_
std::vector< double > p_
Definition:
Solid.h:32
Generated for CMSSW Reference Manual by
1.8.5