Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
src
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