ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4Cons.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4Cons.hh
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
// G4Cons
27
//
28
// Class description:
29
//
30
// A G4Cons is, in the general case, a Phi segment of a cone, with
31
// half-length fDz, inner and outer radii specified at -fDz and +fDz.
32
// The Phi segment is described by a starting fSPhi angle, and the
33
// +fDPhi delta angle for the shape.
34
// If the delta angle is >=2*pi, the shape is treated as continuous
35
// in Phi
36
//
37
// Member Data:
38
//
39
// fRmin1 inside radius at -fDz
40
// fRmin2 inside radius at +fDz
41
// fRmax1 outside radius at -fDz
42
// fRmax2 outside radius at +fDz
43
// fDz half length in z
44
//
45
// fSPhi starting angle of the segment in radians
46
// fDPhi delta angle of the segment in radians
47
//
48
// fPhiFullCone Boolean variable used for indicate the Phi Section
49
//
50
// Note:
51
// Internally fSPhi & fDPhi are adjusted so that fDPhi<=2PI,
52
// and fDPhi+fSPhi<=2PI. This enables simpler comparisons to be
53
// made with (say) Phi of a point.
54
55
// 19.3.94 P.Kent: Old C++ code converted to tolerant geometry
56
// 13.9.96 V.Grichine: Final modifications to commit
57
// --------------------------------------------------------------------
58
#ifndef G4CONS_HH
59
#define G4CONS_HH
60
61
#include "
G4GeomTypes.hh
"
62
63
#if defined(G4GEOM_USE_USOLIDS)
64
#define G4GEOM_USE_UCONS 1
65
#endif
66
67
#if defined(G4GEOM_USE_UCONS)
68
#define G4UCons G4Cons
69
#include "
G4UCons.hh
"
70
#else
71
72
#include <
CLHEP/Units/PhysicalConstants.h
>
73
74
#include "
G4CSGSolid.hh
"
75
#include "
G4Polyhedron.hh
"
76
77
class
G4Cons
:
public
G4CSGSolid
78
{
79
public
:
// with description
80
81
G4Cons
(
const
G4String
& pName,
82
G4double
pRmin1,
G4double
pRmax1,
83
G4double
pRmin2,
G4double
pRmax2,
84
G4double
pDz,
85
G4double
pSPhi,
G4double
pDPhi);
86
//
87
// Constructs a cone with the given name and dimensions
88
89
~G4Cons
() ;
90
//
91
// Destructor
92
93
// Accessors
94
95
inline
G4double
GetInnerRadiusMinusZ
()
const
;
96
inline
G4double
GetOuterRadiusMinusZ
()
const
;
97
inline
G4double
GetInnerRadiusPlusZ
()
const
;
98
inline
G4double
GetOuterRadiusPlusZ
()
const
;
99
inline
G4double
GetZHalfLength
()
const
;
100
inline
G4double
GetStartPhiAngle
()
const
;
101
inline
G4double
GetDeltaPhiAngle
()
const
;
102
inline
G4double
GetSinStartPhi
()
const
;
103
inline
G4double
GetCosStartPhi
()
const
;
104
inline
G4double
GetSinEndPhi
()
const
;
105
inline
G4double
GetCosEndPhi
()
const
;
106
107
// Modifiers
108
109
inline
void
SetInnerRadiusMinusZ
(
G4double
Rmin1 );
110
inline
void
SetOuterRadiusMinusZ
(
G4double
Rmax1 );
111
inline
void
SetInnerRadiusPlusZ
(
G4double
Rmin2 );
112
inline
void
SetOuterRadiusPlusZ
(
G4double
Rmax2 );
113
inline
void
SetZHalfLength
(
G4double
newDz );
114
inline
void
SetStartPhiAngle
(
G4double
newSPhi,
G4bool
trig=
true
);
115
inline
void
SetDeltaPhiAngle
(
G4double
newDPhi);
116
117
// Other methods for solid
118
119
inline
G4double
GetCubicVolume
();
120
inline
G4double
GetSurfaceArea
();
121
122
void
ComputeDimensions
(
G4VPVParameterisation
*
p
,
123
const
G4int
n
,
124
const
G4VPhysicalVolume
* pRep );
125
126
void
BoundingLimits
(
G4ThreeVector
&
pMin
,
G4ThreeVector
&
pMax
)
const
;
127
128
G4bool
CalculateExtent
(
const
EAxis
pAxis,
129
const
G4VoxelLimits
& pVoxelLimit,
130
const
G4AffineTransform
& pTransform,
131
G4double
& pMin,
G4double
& pMax )
const
;
132
133
EInside
Inside
(
const
G4ThreeVector
& p )
const
;
134
135
G4ThreeVector
SurfaceNormal
(
const
G4ThreeVector
& p )
const
;
136
137
G4double
DistanceToIn
(
const
G4ThreeVector
& p,
138
const
G4ThreeVector
&
v
)
const
;
139
G4double
DistanceToIn
(
const
G4ThreeVector
& p)
const
;
140
G4double
DistanceToOut
(
const
G4ThreeVector
& p,
141
const
G4ThreeVector
& v,
142
const
G4bool
calcNorm =
false
,
143
G4bool
* validNorm =
nullptr
,
144
G4ThreeVector
* n =
nullptr
)
const
;
145
G4double
DistanceToOut
(
const
G4ThreeVector
& p)
const
;
146
147
G4GeometryType
GetEntityType
()
const
;
148
149
G4ThreeVector
GetPointOnSurface
()
const
;
150
151
G4VSolid
*
Clone
()
const
;
152
153
std::ostream&
StreamInfo
(std::ostream& os)
const
;
154
155
// Visualisation functions
156
157
void
DescribeYourselfTo
(
G4VGraphicsScene
& scene )
const
;
158
G4Polyhedron
*
CreatePolyhedron
()
const
;
159
160
public
:
// without description
161
162
G4Cons
(__void__&);
163
//
164
// Fake default constructor for usage restricted to direct object
165
// persistency for clients requiring preallocation of memory for
166
// persistifiable objects.
167
168
G4Cons
(
const
G4Cons
& rhs);
169
G4Cons
&
operator=
(
const
G4Cons
& rhs);
170
// Copy constructor and assignment operator.
171
172
// Old access functions
173
174
inline
G4double
GetRmin1
()
const
;
175
inline
G4double
GetRmax1
()
const
;
176
inline
G4double
GetRmin2
()
const
;
177
inline
G4double
GetRmax2
()
const
;
178
inline
G4double
GetDz
()
const
;
179
inline
G4double
GetSPhi
()
const
;
180
inline
G4double
GetDPhi
()
const
;
181
182
private
:
183
184
inline
void
Initialize
();
185
//
186
// Reset relevant values to zero
187
188
inline
void
CheckSPhiAngle
(
G4double
sPhi);
189
inline
void
CheckDPhiAngle
(
G4double
dPhi);
190
inline
void
CheckPhiAngles
(
G4double
sPhi,
G4double
dPhi);
191
//
192
// Reset relevant flags and angle values
193
194
inline
void
InitializeTrigonometry
();
195
//
196
// Recompute relevant trigonometric values and cache them
197
198
G4ThreeVector
ApproxSurfaceNormal
(
const
G4ThreeVector
& p)
const
;
199
//
200
// Algorithm for SurfaceNormal() following the original
201
// specification for points not on the surface
202
203
private
:
204
205
// Used by distanceToOut
206
//
207
enum
ESide
{
kNull
,
kRMin
,
kRMax
,
kSPhi
,
kEPhi
,
kPZ
,
kMZ
};
208
209
// used by normal
210
//
211
enum
ENorm
{
kNRMin
,
kNRMax
,
kNSPhi
,
kNEPhi
,
kNZ
};
212
213
G4double
kRadTolerance
,
kAngTolerance
;
214
//
215
// Radial and angular tolerances
216
217
G4double
fRmin1
,
fRmin2
,
fRmax1
,
fRmax2
,
fDz
,
fSPhi
,
fDPhi
;
218
//
219
// Radial and angular dimensions
220
221
G4double
sinCPhi
,
cosCPhi
,
cosHDPhi
,
cosHDPhiOT
,
cosHDPhiIT
,
222
sinSPhi
,
cosSPhi
,
sinEPhi
,
cosEPhi
;
223
//
224
// Cached trigonometric values
225
226
G4bool
fPhiFullCone
=
false
;
227
//
228
// Flag for identification of section or full cone
229
230
G4double
halfCarTolerance
,
halfRadTolerance
,
halfAngTolerance
;
231
//
232
// Cached half tolerance values
233
};
234
235
#include "G4Cons.icc"
236
237
#endif
238
239
#endif
geant4
tree
geant4-10.6-release
source
geometry
solids
CSG
include
G4Cons.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:18
using
1.8.2 with
ECCE GitHub integration