Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
geometry
solids
specific
include
G4Hype.hh
Go to the documentation of this file.
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
//
27
// $Id: G4Hype.hh 67011 2013-01-29 16:17:41Z gcosmo $
28
// $Original: G4Hype.hh,v 1.0 1998/06/09 16:57:50 safai Exp $
29
//
30
//
31
// --------------------------------------------------------------------
32
// GEANT 4 class header file
33
//
34
//
35
// G4Hype
36
//
37
// Class description:
38
//
39
// This class implements a tube with hyperbolic profile.
40
//
41
// It describes an hyperbolic volume with curved sides parallel to
42
// the z-axis. The solid has a specified half-length along the z axis,
43
// about which it is centered, and a given minimum and maximum radius.
44
// A minimum radius of 0 signifies a filled Hype (with hyperbolical
45
// inner surface). To have a filled Hype the user must specify
46
// inner radius = 0 AND inner stereo angle = 0.
47
//
48
// The inner and outer hyperbolical surfaces can have different
49
// stereo angles. A stereo angle of 0 gives a cylindrical surface.
50
51
// Authors:
52
// Ernesto Lamanna (Ernesto.Lamanna@roma1.infn.it) &
53
// Francesco Safai Tehrani (Francesco.SafaiTehrani@roma1.infn.it)
54
// Rome, INFN & University of Rome "La Sapienza", 9 June 1998.
55
//
56
// --------------------------------------------------------------------
57
#ifndef G4HYPE_HH
58
#define G4HYPE_HH
59
60
#include "
G4VSolid.hh
"
61
#include "
G4ThreeVector.hh
"
62
63
class
G4SolidExtentList
;
64
class
G4ClippablePolygon
;
65
66
class
G4Hype
:
public
G4VSolid
67
{
68
public
:
// with description
69
70
G4Hype
(
const
G4String
& pName,
71
G4double
newInnerRadius,
72
G4double
newOuterRadius,
73
G4double
newInnerStereo,
74
G4double
newOuterStereo,
75
G4double
newHalfLenZ);
76
77
virtual
~G4Hype
();
78
79
void
ComputeDimensions
(
G4VPVParameterisation
*
p
,
80
const
G4int
n
,
81
const
G4VPhysicalVolume
* pRep);
82
83
G4bool
CalculateExtent
(
const
EAxis
pAxis,
84
const
G4VoxelLimits
& pVoxelLimit,
85
const
G4AffineTransform
& pTransform,
86
G4double
& pmin,
G4double
& pmax)
const
;
87
88
inline
G4double
GetInnerRadius
()
const
;
89
inline
G4double
GetOuterRadius
()
const
;
90
inline
G4double
GetZHalfLength
()
const
;
91
inline
G4double
GetInnerStereo
()
const
;
92
inline
G4double
GetOuterStereo
()
const
;
93
94
inline
void
SetInnerRadius
(
G4double
newIRad);
95
inline
void
SetOuterRadius
(
G4double
newORad);
96
inline
void
SetZHalfLength
(
G4double
newHLZ);
97
inline
void
SetInnerStereo
(
G4double
newISte);
98
inline
void
SetOuterStereo
(
G4double
newOSte);
99
100
EInside
Inside
(
const
G4ThreeVector
& p)
const
;
101
102
G4ThreeVector
SurfaceNormal
(
const
G4ThreeVector
& p)
const
;
103
104
G4double
DistanceToIn
(
const
G4ThreeVector
& p,
const
G4ThreeVector
&
v
)
const
;
105
G4double
DistanceToIn
(
const
G4ThreeVector
& p)
const
;
106
G4double
DistanceToOut
(
const
G4ThreeVector
& p,
const
G4ThreeVector
& v,
107
const
G4bool
calcNorm=
G4bool
(
false
),
108
G4bool
*validNorm=0,
G4ThreeVector
*n=0)
const
;
109
G4double
DistanceToOut
(
const
G4ThreeVector
& p)
const
;
110
111
G4GeometryType
GetEntityType
()
const
;
112
113
G4VSolid
*
Clone
()
const
;
114
115
std::ostream&
StreamInfo
(std::ostream& os)
const
;
116
117
G4double
GetCubicVolume
();
118
G4double
GetSurfaceArea
();
119
120
G4ThreeVector
GetPointOnSurface
()
const
;
121
122
void
DescribeYourselfTo
(
G4VGraphicsScene
& scene)
const
;
123
G4VisExtent
GetExtent
()
const
;
124
G4Polyhedron
*
CreatePolyhedron
()
const
;
125
G4NURBS
*
CreateNURBS
()
const
;
126
G4Polyhedron
*
GetPolyhedron
()
const
;
127
128
public
:
// without description
129
130
G4Hype
(__void__&);
131
// Fake default constructor for usage restricted to direct object
132
// persistency for clients requiring preallocation of memory for
133
// persistifiable objects.
134
135
G4Hype
(
const
G4Hype
& rhs);
136
G4Hype
&
operator=
(
const
G4Hype
& rhs);
137
// Copy constructor and assignment operator.
138
139
protected
:
// without description
140
141
inline
G4bool
InnerSurfaceExists
()
const
;
142
// whether we have an inner surface or not
143
144
static
G4double
ApproxDistOutside
(
G4double
pr
,
G4double
pz,
145
G4double
r0,
G4double
tanPhi );
146
static
G4double
ApproxDistInside
(
G4double
pr,
G4double
pz,
147
G4double
r0,
G4double
tan2Phi );
148
// approximate isotropic distance to hyperbolic surface
149
150
inline
G4double
HypeInnerRadius2
(
G4double
zVal)
const
;
151
inline
G4double
HypeOuterRadius2
(
G4double
zVal)
const
;
152
// values of hype radius at a given Z
153
154
static
G4int
IntersectHype
(
const
G4ThreeVector
&p,
const
G4ThreeVector
&v,
155
G4double
r2,
G4double
tan2Phi,
G4double
s
[2] );
156
// intersection with hyperbolic surface
157
158
static
void
AddPolyToExtent
(
const
G4ThreeVector
&v0,
159
const
G4ThreeVector
&v1,
160
const
G4ThreeVector
&w1,
161
const
G4ThreeVector
&w0,
162
const
G4VoxelLimits
&voxelLimit,
163
const
EAxis
axis,
164
G4SolidExtentList
&extentList );
165
166
protected
:
167
168
G4double
innerRadius
;
169
G4double
outerRadius
;
170
G4double
halfLenZ
;
171
G4double
innerStereo
;
172
G4double
outerStereo
;
173
174
// precalculated parameters, squared quantities
175
176
G4double
tanInnerStereo
;
177
G4double
tanOuterStereo
;
178
G4double
tanInnerStereo2
;
// squared tan of Inner Stereo angle
179
G4double
tanOuterStereo2
;
// squared tan of Outer Stereo angle
180
G4double
innerRadius2
;
// squared Inner Radius
181
G4double
outerRadius2
;
// squared Outer Radius
182
G4double
endInnerRadius2
;
// squared endcap Inner Radius
183
G4double
endOuterRadius2
;
// squared endcap Outer Radius
184
G4double
endInnerRadius
;
// endcap Inner Radius
185
G4double
endOuterRadius
;
// endcap Outer Radius
186
187
// Used by distanceToOut
188
189
enum
ESide
{
outerFace
,
innerFace
,
leftCap
,
rightCap
};
190
191
private
:
192
193
G4double
asinh(
G4double
arg);
194
195
private
:
196
197
G4double
fCubicVolume;
198
G4double
fSurfaceArea;
199
200
mutable
G4Polyhedron
* fpPolyhedron;
201
202
};
203
204
#include "G4Hype.icc"
205
206
#endif
Generated on Sat May 25 2013 14:33:14 for Geant4 by
1.8.4