Garfield++ 4.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Garfield::SolidTube Class Reference

Cylindrical tube. More...

#include <SolidTube.hh>

+ Inheritance diagram for Garfield::SolidTube:

Public Member Functions

 SolidTube (const double cx, const double cy, const double cz, const double r, const double lz)
 Constructor from centre, outer radius, and half-length.
 
 SolidTube (const double cx, const double cy, const double cz, const double r, const double lz, const double dx, const double dy, const double dz)
 Constructor from centre, outer radius, half-length and orientation.
 
 ~SolidTube ()
 Destructor.
 
bool IsInside (const double x, const double y, const double z, const bool tesselated) const override
 
bool GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const override
 Return the bounding box of the solid.
 
bool IsTube () const override
 Return true if the solid is a tube.
 
void SetHalfLength (const double lz)
 
void SetRadius (const double r)
 
double GetHalfLengthZ () const override
 Return the half-length along z.
 
double GetRadius () const override
 Return the radius.
 
void SetSectors (const unsigned int n)
 
void SetRotation (const double angle)
 
void SetAverageRadius (const bool average)
 
void SetTopLid (const bool closed)
 Request the cylinder to be closed with a (polygonal) lid at +z.
 
void SetBottomLid (const bool closed)
 Request the cylinder to be closed with a (polygonal) lid at -z.
 
unsigned int GetSectors () const
 Return the number of sectors.
 
double GetRotation () const
 Return the current rotation angle.
 
bool GetAverage () const
 Return the status of the "average-radius" flag.
 
bool SolidPanels (std::vector< Panel > &panels) override
 Retrieve the surface panels of the solid.
 
void SetDiscretisationLevel (const double dis) override
 Set the discretisation level (for all panels).
 
double GetDiscretisationLevel (const Panel &panel) override
 Retrieve the discretisation level of a panel.
 
void Cut (const double x0, const double y0, const double z0, const double xn, const double yn, const double zn, std::vector< Panel > &panels) override
 
- Public Member Functions inherited from Garfield::Solid
 Solid ()=delete
 Default constructor.
 
 Solid (const double cx, const double cy, const double cz, const std::string &name)
 Constructor.
 
virtual ~Solid ()
 Destructor.
 
virtual bool IsInside (const double x, const double y, const double z, const bool tesselated=false) const =0
 
virtual bool GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const =0
 Return the bounding box of the solid.
 
virtual bool IsBox () const
 Return true if the solid is a box.
 
virtual bool IsTube () const
 Return true if the solid is a tube.
 
virtual bool IsSphere () const
 Return true if the solid is a sphere.
 
virtual bool IsHole () const
 Return true if the solid is a hole.
 
virtual bool IsRidge () const
 Return true if the solid is a ridge.
 
virtual bool IsExtrusion () const
 Return true if the solid is an extrusion.
 
virtual bool IsWire () const
 Return true if the solid is a wire.
 
void SetLabel (const std::string &label)
 Set a label.
 
std::string GetLabel () const
 Return the label.
 
bool GetCentre (double &x, double &y, double &z) const
 Retrieve the centre point of the solid.
 
bool GetDirection (double &dx, double &dy, double &dz) const
 Retrieve the direction vector.
 
bool GetOrientation (double &ctheta, double &stheta, double &cphi, double &sphi) const
 Retrieve the orientation (azimuthal and polar angles) of the solid.
 
virtual double GetHalfLengthX () const
 Return the half-length along x.
 
virtual double GetHalfLengthY () const
 Return the half-length along y.
 
virtual double GetHalfLengthZ () const
 Return the half-length along z.
 
virtual double GetInnerRadius () const
 Return the inner radius.
 
virtual double GetOuterRadius () const
 Return the outer radius.
 
virtual double GetRadius () const
 Return the radius.
 
virtual double GetLowerRadius () const
 Return the lower radius (of a hole).
 
virtual double GetUpperRadius () const
 Return the upper radius (of a hole).
 
virtual double GetRidgeOffset () const
 Return the x-offset of a ridge.
 
virtual double GetRidgeHeight () const
 Return the height of a ridge.
 
virtual bool GetProfile (std::vector< double > &xv, std::vector< double > &yv) const
 Get the vertices defining an extrusion.
 
unsigned int GetId () const
 Get the ID of the solid.
 
virtual bool SolidPanels (std::vector< Panel > &panels)=0
 Retrieve the surface panels of the solid.
 
virtual void SetDiscretisationLevel (const double dis)=0
 Set the discretisation level (for all panels).
 
virtual double GetDiscretisationLevel (const Panel &panel)=0
 Retrieve the discretisation level of a panel.
 
virtual void Cut (const double x0, const double y0, const double z0, const double xn, const double yn, const double zn, std::vector< Panel > &panels)=0
 
void SetBoundaryPotential (const double v)
 Apply Dirichlet boundary conditions (fixed voltage).
 
void SetBoundaryChargeDensity (const double q)
 Apply fixed-charge boundary conditions.
 
void SetBoundaryFloat ()
 Make the potential at the surface of the solid floating.
 
void SetBoundaryDielectric ()
 Make the surfaces of the solid dielectric-dielectric interfaces.
 
void SetBoundaryParallelField ()
 
void SetBoundaryPerpendicularField ()
 
BoundaryCondition GetBoundaryConditionType () const
 Retrieve the type of boundary condition.
 
double GetBoundaryPotential () const
 Retrieve the potential.
 
double GetBoundaryChargeDensity () const
 Retrieve the surface charge density.
 
void EnableDebugging (const bool on=true)
 Switch debugging messages on/off.
 
void SetColour (const int col)
 Set the colour of the solid.
 
int GetColour () const
 Get the colour of the solid.
 

Additional Inherited Members

- Public Types inherited from Garfield::Solid
enum  BoundaryCondition {
  Unknown = 0 , Voltage , Charge , Float ,
  Dielectric , DielectricCharge , ParallelField , PerpendicularField
}
 
- Static Public Member Functions inherited from Garfield::Solid
static bool Intersect (const double x1, const double y1, const double z1, const double x2, const double y2, const double z2, const double x0, const double y0, const double z0, const double a, const double b, const double c, double &xc, double &yc, double &zc)
 
- Protected Member Functions inherited from Garfield::Solid
void ToLocal (const double x, const double y, const double z, double &u, double &v, double &w) const
 
void ToGlobal (const double u, const double v, const double w, double &x, double &y, double &z) const
 
void VectorToLocal (const double x, const double y, const double z, double &u, double &v, double &w)
 Transform a vector from global to local coordinates.
 
void SetDirection (const double dx, const double dy, const double dz)
 
- Protected Attributes inherited from Garfield::Solid
double m_cX = 0.
 Centre of the solid.
 
double m_cY = 0.
 
double m_cZ = 0.
 
double m_dX = 0.
 Direction vector.
 
double m_dY = 0.
 
double m_dZ = 1.
 
double m_cPhi = 1.
 Azimuthal angle.
 
double m_sPhi = 0.
 
double m_cTheta = 1.
 Polar angle.
 
double m_sTheta = 0.
 
std::string m_className = "Solid"
 Class name.
 
std::string m_label = ""
 Label.
 
bool m_debug = false
 Debug flag.
 
BoundaryCondition m_bctype = Unknown
 Type of boundary condition.
 
double m_volt = 0.
 Potential at the surface.
 
double m_charge = 0.
 Surface charge density.
 
double m_eps = 0.
 Dielectric constant.
 
int m_colour = -1
 Colour.
 

Detailed Description

Cylindrical tube.

Definition at line 12 of file SolidTube.hh.

Constructor & Destructor Documentation

◆ SolidTube() [1/2]

Garfield::SolidTube::SolidTube ( const double  cx,
const double  cy,
const double  cz,
const double  r,
const double  lz 
)

Constructor from centre, outer radius, and half-length.

Definition at line 10 of file SolidTube.cc.

12 : Solid(cx, cy, cz, "SolidTube"),
13 m_rMax(rt),
14 m_lZ(lz) {
15 UpdatePolygon();
16}
Solid()=delete
Default constructor.

◆ SolidTube() [2/2]

Garfield::SolidTube::SolidTube ( const double  cx,
const double  cy,
const double  cz,
const double  r,
const double  lz,
const double  dx,
const double  dy,
const double  dz 
)

Constructor from centre, outer radius, half-length and orientation.

Definition at line 18 of file SolidTube.cc.

21 : SolidTube(cx, cy, cz, rt, lz) {
22 SetDirection(dx, dy, dz);
23}
SolidTube(const double cx, const double cy, const double cz, const double r, const double lz)
Constructor from centre, outer radius, and half-length.
Definition: SolidTube.cc:10
void SetDirection(const double dx, const double dy, const double dz)
Definition: Solid.cc:12

◆ ~SolidTube()

Garfield::SolidTube::~SolidTube ( )
inline

Destructor.

Definition at line 21 of file SolidTube.hh.

21{}

Member Function Documentation

◆ Cut()

void Garfield::SolidTube::Cut ( const double  x0,
const double  y0,
const double  z0,
const double  xn,
const double  yn,
const double  zn,
std::vector< Panel > &  panels 
)
overridevirtual

Implements Garfield::Solid.

Definition at line 242 of file SolidTube.cc.

244 {
245
246 // -----------------------------------------------------------------------
247 // PLACYC - Cuts cylinder with a plane.
248 // -----------------------------------------------------------------------
249 std::vector<double> xv;
250 std::vector<double> yv;
251 std::vector<double> zv;
252 double r = m_rp;
253 const unsigned int nPoints = 4 * (m_n - 1);
254 const double dphi = HalfPi / (m_n - 1.);
255 // Go through the lines of the top and bottom lids.
256 for (const auto zLid : {-m_lZ, +m_lZ}) {
257 double x1, y1, z1;
258 ToGlobal(r * cos(m_rot), r * sin(m_rot), zLid, x1, y1, z1);
259 // Loop over the points.
260 for (unsigned int i = 2; i <= nPoints + 1; ++i) {
261 const double phi = m_rot + (i - 1.) * dphi;
262 double x2, y2, z2;
263 ToGlobal(r * cos(phi), r * sin(phi), zLid, x2, y2, z2);
264 // Cut with the plane.
265 double xc, yc, zc;
266 if (Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0,
267 xn, yn, zn, xc, yc, zc)) {
268 xv.push_back(xc);
269 yv.push_back(yc);
270 zv.push_back(zc);
271 }
272 // Shift the coordinates.
273 x1 = x2;
274 y1 = y2;
275 z1 = z2;
276 }
277 }
278 // Go through the ribs.
279 for (unsigned int i = 2; i <= nPoints + 1; ++i) {
280 // Bottom and top of the line along the axis of the cylinder.
281 const double phi = m_rot + (i - 1.) * dphi;
282 const double u = r * cos(phi);
283 const double v = r * sin(phi);
284 double x1, y1, z1;
285 ToGlobal(u, v, +m_lZ, x1, y1, z1);
286 double x2, y2, z2;
287 ToGlobal(u, v, -m_lZ, x2, y2, z2);
288 // Cut with the plane.
289 double xc, yc, zc;
290 if (Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
291 xv.push_back(xc);
292 yv.push_back(yc);
293 zv.push_back(zc);
294 }
295 }
296 // Get rid of butterflies.
298
299 if (xv.size() >= 3) {
300 Panel panel;
301 panel.a = xn;
302 panel.b = yn;
303 panel.c = zn;
304 panel.xv = xv;
305 panel.yv = yv;
306 panel.zv = zv;
307 panel.colour = m_colour;
308 panel.volume = GetId();
309 panels.push_back(std::move(panel));
310 }
311}
static bool Intersect(const double x1, const double y1, const double z1, const double x2, const double y2, const double z2, const double x0, const double y0, const double z0, const double a, const double b, const double c, double &xc, double &yc, double &zc)
Definition: Solid.cc:52
unsigned int GetId() const
Get the ID of the solid.
Definition: Solid.hh:137
int m_colour
Colour.
Definition: Solid.hh:230
void ToGlobal(const double u, const double v, const double w, double &x, double &y, double &z) const
Definition: Solid.hh:246
void EliminateButterflies(std::vector< double > &xp, std::vector< double > &yp, std::vector< double > &zp)
Definition: Polygon.cc:355
DoubleAc cos(const DoubleAc &f)
Definition: DoubleAc.cpp:432
DoubleAc sin(const DoubleAc &f)
Definition: DoubleAc.cpp:384

◆ GetAverage()

bool Garfield::SolidTube::GetAverage ( ) const
inline

Return the status of the "average-radius" flag.

Definition at line 60 of file SolidTube.hh.

60{ return m_average; }

◆ GetBoundingBox()

bool Garfield::SolidTube::GetBoundingBox ( double &  xmin,
double &  ymin,
double &  zmin,
double &  xmax,
double &  ymax,
double &  zmax 
) const
overridevirtual

Return the bounding box of the solid.

Implements Garfield::Solid.

Definition at line 69 of file SolidTube.cc.

70 {
71 if (m_cTheta == 1. && m_cPhi == 1.) {
72 xmin = m_cX - m_rMax;
73 xmax = m_cX + m_rMax;
74 ymin = m_cY - m_rMax;
75 ymax = m_cY + m_rMax;
76 zmin = m_cZ - m_lZ;
77 zmax = m_cZ + m_lZ;
78 return true;
79 }
80
81 const double dd = sqrt(m_rMax * m_rMax + m_lZ * m_lZ);
82 xmin = m_cX - dd;
83 xmax = m_cX + dd;
84 ymin = m_cY - dd;
85 ymax = m_cY + dd;
86 zmin = m_cZ - dd;
87 zmax = m_cZ + dd;
88 return true;
89}
double m_cZ
Definition: Solid.hh:202
double m_cTheta
Polar angle.
Definition: Solid.hh:209
double m_cY
Definition: Solid.hh:202
double m_cX
Centre of the solid.
Definition: Solid.hh:202
double m_cPhi
Azimuthal angle.
Definition: Solid.hh:207
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:314

◆ GetDiscretisationLevel()

double Garfield::SolidTube::GetDiscretisationLevel ( const Panel panel)
overridevirtual

Retrieve the discretisation level of a panel.

Implements Garfield::Solid.

Definition at line 228 of file SolidTube.cc.

228 {
229
230 // Transform the normal vector to local coordinates.
231 double u = 0., v = 0., w = 0.;
232 VectorToLocal(panel.a, panel.b, panel.c, u, v, w);
233 // Identify the vector.
234 if (w > std::max(std::abs(u), std::abs(v))) {
235 return m_dis[0];
236 } else if (w < -std::max(std::abs(u), std::abs(v))) {
237 return m_dis[1];
238 }
239 return m_dis[2];
240}
void VectorToLocal(const double x, const double y, const double z, double &u, double &v, double &w)
Transform a vector from global to local coordinates.
Definition: Solid.hh:253

◆ GetHalfLengthZ()

double Garfield::SolidTube::GetHalfLengthZ ( ) const
inlineoverridevirtual

Return the half-length along z.

Reimplemented from Garfield::Solid.

Definition at line 32 of file SolidTube.hh.

32{ return m_lZ; }

◆ GetRadius()

double Garfield::SolidTube::GetRadius ( ) const
inlineoverridevirtual

Return the radius.

Reimplemented from Garfield::Solid.

Definition at line 33 of file SolidTube.hh.

33{ return m_rMax; }

◆ GetRotation()

double Garfield::SolidTube::GetRotation ( ) const
inline

Return the current rotation angle.

Definition at line 58 of file SolidTube.hh.

58{ return m_rot; }

◆ GetSectors()

unsigned int Garfield::SolidTube::GetSectors ( ) const
inline

Return the number of sectors.

Definition at line 56 of file SolidTube.hh.

56{ return m_n; }

◆ IsInside()

bool Garfield::SolidTube::IsInside ( const double  x,
const double  y,
const double  z,
const bool  tesselated 
) const
overridevirtual

Check whether a given point is inside the solid. If requested, use the tesselated approximation of the solid (if applicable).

Implements Garfield::Solid.

Definition at line 50 of file SolidTube.cc.

51 {
52 // Transform the point to local coordinates.
53 double u = x, v = y, w = z;
54 ToLocal(x, y, z, u, v, w);
55
56 if (fabs(w) > m_lZ) return false;
57
58 const double rho = sqrt(u * u + v * v);
59 if (!tesselated) return (rho <= m_rMax);
60
61 if (rho > m_rp) return false;
62 if (rho < m_ri) return true;
63 bool inside = false;
64 bool edge = false;
65 Polygon::Inside(m_xp, m_yp, u, v, inside, edge);
66 return inside;
67}
void ToLocal(const double x, const double y, const double z, double &u, double &v, double &w) const
Definition: Solid.hh:234
void Inside(const std::vector< double > &xpl, const std::vector< double > &ypl, const double x, const double y, bool &inside, bool &edge)
Definition: Polygon.cc:187
DoubleAc fabs(const DoubleAc &f)
Definition: DoubleAc.h:615

◆ IsTube()

bool Garfield::SolidTube::IsTube ( ) const
inlineoverridevirtual

Return true if the solid is a tube.

Reimplemented from Garfield::Solid.

Definition at line 27 of file SolidTube.hh.

27{ return true; }

◆ SetAverageRadius()

void Garfield::SolidTube::SetAverageRadius ( const bool  average)
inline

By default, the polygon used for approximating the cylinder when calculating surface panels is inscribed in a circle of the specified radius. If the "average-radius" flag is activated, then the radius will be interpreted as the mean radius of the polygon that approximates the cylinder.

Definition at line 49 of file SolidTube.hh.

49{ m_average = average; }

◆ SetBottomLid()

void Garfield::SolidTube::SetBottomLid ( const bool  closed)
inline

Request the cylinder to be closed with a (polygonal) lid at -z.

Definition at line 53 of file SolidTube.hh.

53{ m_botlid = closed; }

◆ SetDiscretisationLevel()

void Garfield::SolidTube::SetDiscretisationLevel ( const double  dis)
inlineoverridevirtual

Set the discretisation level (for all panels).

Implements Garfield::Solid.

Definition at line 63 of file SolidTube.hh.

63{ m_dis.fill(dis); }

◆ SetHalfLength()

void Garfield::SolidTube::SetHalfLength ( const double  lz)

Definition at line 100 of file SolidTube.cc.

100 {
101 if (lz <= 0.) {
102 std::cerr << "SolidTube::SetHalfLength: Half-length must be > 0.\n";
103 return;
104 }
105 m_lZ = lz;
106 UpdatePolygon();
107}

◆ SetRadius()

void Garfield::SolidTube::SetRadius ( const double  r)

Definition at line 91 of file SolidTube.cc.

91 {
92 if (r <= 0.) {
93 std::cerr << "SolidTube::SetRadius: Radius must be > 0.\n";
94 return;
95 }
96 m_rMax = r;
97 UpdatePolygon();
98}

◆ SetRotation()

void Garfield::SolidTube::SetRotation ( const double  angle)
inline

Specify a rotation angle (radian) of the cylinder. Such a rotation is meaningful only if the number of sectors (when approximating the circle with a polygon) has been chosen small.

Definition at line 43 of file SolidTube.hh.

43{ m_rot = angle; }

◆ SetSectors()

void Garfield::SolidTube::SetSectors ( const unsigned int  n)

When calculating the surface panels, the cylinder is approximated as a polygon with a finite number of panels. The number of corners of the polygon equals $4(n - 1)$. Thus, $n = 2$ will produce a square, $n = 3$ an octagon etc.

Definition at line 109 of file SolidTube.cc.

109 {
110 if (n < 1) {
111 std::cerr << "SolidTube::SetSectors: Number must be > 0.\n";
112 return;
113 }
114 m_n = n;
115 UpdatePolygon();
116}

◆ SetTopLid()

void Garfield::SolidTube::SetTopLid ( const bool  closed)
inline

Request the cylinder to be closed with a (polygonal) lid at +z.

Definition at line 51 of file SolidTube.hh.

51{ m_toplid = closed; }

◆ SolidPanels()

bool Garfield::SolidTube::SolidPanels ( std::vector< Panel > &  panels)
overridevirtual

Retrieve the surface panels of the solid.

Implements Garfield::Solid.

Definition at line 118 of file SolidTube.cc.

118 {
119
120 const auto id = GetId();
121 const auto nPanels = panels.size();
122 // Direction vector.
123 const double fnorm = sqrt(m_dX * m_dX + m_dY * m_dY + m_dZ * m_dZ);
124 if (fnorm <= 0) {
125 std::cerr << "SolidTube::SolidPanels:\n"
126 << " Zero norm direction vector; no panels generated.\n";
127 return false;
128 }
129
130 double r = m_rp;
131 const unsigned int nPoints = 4 * (m_n - 1);
132 // Create the top lid.
133 if (m_toplid) {
134 std::vector<double> xv;
135 std::vector<double> yv;
136 std::vector<double> zv;
137 for (unsigned int i = 1; i <= nPoints; i++) {
138 const double alpha = m_rot + HalfPi * (i - 1.) / (m_n - 1.);
139 // Rotate into place.
140 double x, y, z;
141 ToGlobal(r * cos(alpha), r * sin(alpha), m_lZ, x, y, z);
142 xv.push_back(x);
143 yv.push_back(y);
144 zv.push_back(z);
145 }
146 Panel panel;
147 panel.a = m_cPhi * m_sTheta;
148 panel.b = m_sPhi * m_sTheta;
149 panel.c = m_cTheta;
150 panel.xv = xv;
151 panel.yv = yv;
152 panel.zv = zv;
153 panel.colour = m_colour;
154 panel.volume = id;
155 panels.push_back(std::move(panel));
156 }
157 // Create the bottom lid.
158 if (m_botlid) {
159 std::vector<double> xv;
160 std::vector<double> yv;
161 std::vector<double> zv;
162 for (unsigned int i = 1; i <= nPoints; i++) {
163 const double alpha = m_rot + HalfPi * (i - 1.) / (m_n - 1.);
164 // Rotate into place.
165 double x, y, z;
166 ToGlobal(r * cos(alpha), r * sin(alpha), -m_lZ, x, y, z);
167 xv.push_back(x);
168 yv.push_back(y);
169 zv.push_back(z);
170 }
171 Panel panel;
172 panel.a = -m_cPhi * m_sTheta;
173 panel.b = -m_sPhi * m_sTheta;
174 panel.c = -m_cTheta;
175 panel.xv = xv;
176 panel.yv = yv;
177 panel.zv = zv;
178 panel.colour = m_colour;
179 panel.volume = id;
180 panels.push_back(std::move(panel));
181 }
182 // Create the side panels.
183 double u = r * cos(m_rot);
184 double v = r * sin(m_rot);
185 // Rotate into place.
186 double xv0, yv0, zv0;
187 ToGlobal(u, v, -m_lZ, xv0, yv0, zv0);
188 double xv1, yv1, zv1;
189 ToGlobal(u, v, +m_lZ, xv1, yv1, zv1);
190 // Go around the cylinder.
191 for (unsigned int i = 2; i <= nPoints + 1; i++) {
192 // Bottom and top of the line along the axis of the cylinder.
193 double alpha = m_rot + HalfPi * (i - 1.) / (m_n - 1.);
194 u = r * cos(alpha);
195 v = r * sin(alpha);
196 // Rotate into place.
197 double xv2, yv2, zv2;
198 ToGlobal(u, v, +m_lZ, xv2, yv2, zv2);
199 double xv3, yv3, zv3;
200 ToGlobal(u, v, -m_lZ, xv3, yv3, zv3);
201 // Store the plane.
202 Panel panel;
203 alpha = m_rot + HalfPi * (i - 1.5) / (m_n - 1.);
204 const double cAlpha = cos(alpha);
205 const double sAlpha = sin(alpha);
206 panel.a = m_cPhi * m_cTheta * cAlpha - m_sPhi * sAlpha;
207 panel.b = m_sPhi * m_cTheta * cAlpha + m_cPhi * sAlpha;
208 panel.c = -m_sTheta * cAlpha;
209 panel.xv = {xv0, xv1, xv2, xv3};
210 panel.yv = {yv0, yv1, yv2, yv3};
211 panel.zv = {zv0, zv1, zv2, zv3};
212 panel.colour = m_colour;
213 panel.volume = id;
214 panels.push_back(std::move(panel));
215 // Shift the points.
216 xv0 = xv3;
217 yv0 = yv3;
218 zv0 = zv3;
219 xv1 = xv2;
220 yv1 = yv2;
221 zv1 = zv2;
222 }
223 std::cout << "SolidTube::SolidPanels: " << panels.size() - nPanels
224 << " panels.\n";
225 return true;
226}
double m_dZ
Definition: Solid.hh:205
double m_dX
Direction vector.
Definition: Solid.hh:205
double m_sPhi
Definition: Solid.hh:207
double m_sTheta
Definition: Solid.hh:209
double m_dY
Definition: Solid.hh:205

The documentation for this class was generated from the following files: