CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
List of all members | Public Member Functions
DDI::Cons Class Reference

#include <Cons.h>

Inheritance diagram for DDI::Cons:
DDI::Solid

Public Member Functions

 Cons (double zhalf, double rInMinusZ, double rOutMinusZ, double rInPlusZ, double rOutPlusZ, double startPhi, double deltaPhi)
 
void stream (std::ostream &) const override
 
double volume () const override
 
- Public Member Functions inherited from DDI::Solid
const std::vector< double > & parameters () const
 
void setParameters (std::vector< double > const &p)
 
DDSolidShape shape () const
 
 Solid ()
 
 Solid (DDSolidShape shape)
 
virtual ~Solid ()
 

Additional Inherited Members

- Protected Attributes inherited from DDI::Solid
std::vector< double > p_
 
DDSolidShape shape_
 

Detailed Description

Definition at line 9 of file Cons.h.

Constructor & Destructor Documentation

◆ Cons()

DDI::Cons::Cons ( double  zhalf,
double  rInMinusZ,
double  rOutMinusZ,
double  rInPlusZ,
double  rOutPlusZ,
double  startPhi,
double  deltaPhi 
)

Definition at line 14 of file Cons.cc.

References ddcons, SiPixelRawToDigiRegional_cfi::deltaPhi, and DDI::Solid::p_.

22  p_.emplace_back(zhalf);
23  p_.emplace_back(rInMinusZ);
24  p_.emplace_back(rOutMinusZ);
25  p_.emplace_back(rInPlusZ);
26  p_.emplace_back(rOutPlusZ);
27  p_.emplace_back(startPhi);
28  p_.emplace_back(deltaPhi);
29 }
Solid()
Definition: Solid.h:12
std::vector< double > p_
Definition: Solid.h:30

Member Function Documentation

◆ stream()

void DDI::Cons::stream ( std::ostream &  os) const
overridevirtual

Reimplemented from DDI::Solid.

Definition at line 31 of file Cons.cc.

References angle_units::operators::convertMmToCm(), and angle_units::operators::convertRadToDeg().

31  {
32  os << " zhalf=" << convertMmToCm(p_[0]) << " rIn-Z=" << convertMmToCm(p_[1]) << " rOut-Z=" << convertMmToCm(p_[2])
33  << " rIn+Z=" << convertMmToCm(p_[3]) << " rOut+Z=" << convertMmToCm(p_[4])
34  << " startPhi=" << convertRadToDeg(p_[5]) << " deltaPhi=" << convertRadToDeg(p_[6]);
35 }
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
constexpr NumType convertMmToCm(NumType millimeters)
Definition: angle_units.h:44
std::vector< double > p_
Definition: Solid.h:30

◆ volume()

double DDI::Cons::volume ( ) const
overridevirtual

Reimplemented from DDI::Solid.

Definition at line 37 of file Cons.cc.

References funct::abs(), SiPixelRawToDigiRegional_cfi::deltaPhi, and mergeAndRegister::slice.

37  {
38  /* zhalf is the half length of the cone,
39  phiTo is always clockwise rotated from phiFrom
40  rInMinusZ is always smaller than rOutMinusZ (same for r*PlusZ)
41  They are the distances relative to the rotation axes */
42 
43  /* calculation normalize from 0 to z */
44 
45  /* The function f=rInMinusZ+((rInPlusZ-rInMinusZ)/z)*x defines
46  the radius of the the rotation from 0 to z. Raised to the power
47  of 2 integrated on x from 0 to z. Multiplied by pi, gives the
48  volume that needs to substracted from the other volume */
49 
50  /* f^2=rInMinusZ*rInMinusZ+2*rInMinusZ*((rInPlusZ-rInMinusZ)/z)*x+((rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*x*x)/(z*z) */
51 
52  /* primitive of f^2 is: rInMinusZ*rInMinusZ*x+rInMinusZ*((rInPlusZ-rInMinusZ)/z)*(x*x)+(rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*(x*x*x)/(3*z*z) */
53 
54  /*integration from 0 to z yields: pi*( rInMinusZ*rInMinusZ*z+rInMinusZ*(rInPlusZ-rInMinusZ)*z+((rInPlusZ-rInMinusZ)*(rInPlusZ-rInMinusZ)*z)/(3) ) */
55 
56  double zhalf = p_[0];
57  double rInMinusZ = p_[1];
58  double rOutMinusZ = p_[2];
59  double rInPlusZ = p_[3];
60  double rOutPlusZ = p_[4];
61  //double phiFrom=p_[5]/rad;
62  double deltaPhi = std::abs(p_[6]);
63  double z = 2 * zhalf;
64 
65  double volume1 = 1_pi * (rInPlusZ * rInPlusZ + rInMinusZ * rInMinusZ + rInMinusZ * rInPlusZ) * z / 3;
66 
67  double volume2 = 1_pi * (rOutPlusZ * rOutPlusZ + rOutMinusZ * rOutMinusZ + rOutMinusZ * rOutPlusZ) * z / 3;
68 
69  double slice = deltaPhi / (2_pi);
70  double volume = slice * (volume2 - volume1);
71 
72  return volume;
73 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double volume() const override
Definition: Cons.cc:37
std::vector< double > p_
Definition: Solid.h:30