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
G4Para.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4Para.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
// G4Para
27
//
28
// Class description:
29
//
30
// A G4Parallepiped, essentially a box with half lengths dx,dy,dz
31
// `skewed' so that there are angles theta & phi of the polar line
32
// joining the faces at +-dz in z, and alpha formed by the y axis
33
// and the plane joinng the centre of the faces G4Parallel to the
34
// z-x plane at -dy and +dy.
35
//
36
// A G4Para is defined by:
37
// dx,dy,dz - Half-length in x,y,z
38
// alpha - Angle formed by the y axis and by the plane joining
39
// the centre of the faces G4Parallel to the z-x plane
40
// at -dy and +dy
41
// theta - Polar angle of the line joining the centres of the
42
// faces at -dz and +dz in z
43
// phi - Azimuthal angle of the line joining the centres of the
44
// faces at -dz and +dz in z
45
// Member data:
46
//
47
// Note that the angles parameters are not stored - precomputed trig is
48
// stored instead.
49
//
50
// fDx Half-length in x
51
// fDy Half-length in y
52
// fDz Half-length in z
53
//
54
// fTalpha Tan of alpha
55
// fTthetaCphi Tan theta * Cos phi
56
// fTthetaSphi Tan theta * Sin phi
57
58
// 21.3.94 P.Kent Old C++ code converted to tolerant geometry
59
// 31.10.96 V.Grichine Modifications according G4Box/Tubs before to commit
60
// --------------------------------------------------------------------
61
#ifndef G4PARA_HH
62
#define G4PARA_HH
63
64
#include "
G4GeomTypes.hh
"
65
66
#if defined(G4GEOM_USE_USOLIDS)
67
#define G4GEOM_USE_UPARA 1
68
#endif
69
70
#if defined(G4GEOM_USE_UPARA)
71
#define G4UPara G4Para
72
#include "
G4UPara.hh
"
73
#else
74
75
#include "
G4CSGSolid.hh
"
76
#include "
G4Polyhedron.hh
"
77
78
class
G4Para
:
public
G4CSGSolid
79
{
80
public
:
// with description
81
82
G4Para
(
const
G4String
& pName,
83
G4double
pDx,
G4double
pDy,
G4double
pDz,
84
G4double
pAlpha,
G4double
pTheta,
G4double
pPhi);
85
86
G4Para
(
const
G4String
& pName,
87
const
G4ThreeVector
pt
[8]);
88
89
virtual
~G4Para
();
90
91
// Accessors
92
93
inline
G4double
GetZHalfLength
()
const
;
94
inline
G4ThreeVector
GetSymAxis
()
const
;
95
inline
G4double
GetYHalfLength
()
const
;
96
inline
G4double
GetXHalfLength
()
const
;
97
inline
G4double
GetTanAlpha
()
const
;
98
99
// Modifiers
100
101
inline
void
SetXHalfLength
(
G4double
val);
102
inline
void
SetYHalfLength
(
G4double
val);
103
inline
void
SetZHalfLength
(
G4double
val);
104
inline
void
SetAlpha
(
G4double
alpha
);
105
inline
void
SetTanAlpha
(
G4double
val);
106
inline
void
SetThetaAndPhi
(
double
pTheta,
double
pPhi);
107
108
void
SetAllParameters
(
G4double
pDx,
G4double
pDy,
G4double
pDz,
109
G4double
pAlpha,
G4double
pTheta,
G4double
pPhi);
110
111
// Methods of solid
112
113
G4double
GetCubicVolume
();
114
G4double
GetSurfaceArea
();
115
116
void
ComputeDimensions
(
G4VPVParameterisation
*
p
,
117
const
G4int
n
,
118
const
G4VPhysicalVolume
* pRep);
119
120
void
BoundingLimits
(
G4ThreeVector
&
pMin
,
G4ThreeVector
&
pMax
)
const
;
121
122
G4bool
CalculateExtent
(
const
EAxis
pAxis,
123
const
G4VoxelLimits
& pVoxelLimit,
124
const
G4AffineTransform
& pTransform,
125
G4double
& pMin,
G4double
& pMax)
const
;
126
127
EInside
Inside
(
const
G4ThreeVector
& p)
const
;
128
129
G4ThreeVector
SurfaceNormal
(
const
G4ThreeVector
& p)
const
;
130
131
G4double
DistanceToIn
(
const
G4ThreeVector
& p,
132
const
G4ThreeVector
&
v
)
const
;
133
G4double
DistanceToIn
(
const
G4ThreeVector
& p)
const
;
134
135
G4double
DistanceToOut
(
const
G4ThreeVector
& p,
const
G4ThreeVector
& v,
136
const
G4bool
calcNorm =
false
,
137
G4bool
* validNorm =
nullptr
,
138
G4ThreeVector
* n =
nullptr
)
const
;
139
G4double
DistanceToOut
(
const
G4ThreeVector
& p)
const
;
140
141
G4GeometryType
GetEntityType
()
const
;
142
143
G4ThreeVector
GetPointOnSurface
()
const
;
144
145
G4VSolid
*
Clone
()
const
;
146
147
std::ostream&
StreamInfo
(std::ostream& os)
const
;
148
149
// Visualisation functions
150
151
void
DescribeYourselfTo
(
G4VGraphicsScene
& scene)
const
;
152
G4Polyhedron
*
CreatePolyhedron
()
const
;
153
154
public
:
// without description
155
156
G4Para
(__void__&);
157
// Fake default constructor for usage restricted to direct object
158
// persistency for clients requiring preallocation of memory for
159
// persistifiable objects
160
161
G4Para
(
const
G4Para
& rhs);
162
G4Para
&
operator=
(
const
G4Para
& rhs);
163
// Copy constructor and assignment operator
164
165
private
:
166
167
void
CheckParameters
();
168
// Check parameters
169
170
void
MakePlanes
();
171
// Set side planes
172
173
G4ThreeVector
ApproxSurfaceNormal
(
const
G4ThreeVector
& p)
const
;
174
// Algorithm for SurfaceNormal() following the original
175
// specification for points not on the surface
176
177
private
:
178
179
G4double
halfCarTolerance
;
180
G4double
fDx
,
fDy
,
fDz
;
181
G4double
fTalpha
,
fTthetaCphi
,
fTthetaSphi
;
182
struct
{
G4double
a
,
b
,
c
,
d
; }
fPlanes
[4];
183
};
184
185
#include "G4Para.icc"
186
187
#endif
188
189
#endif
geant4
tree
geant4-10.6-release
source
geometry
solids
CSG
include
G4Para.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:18
using
1.8.2 with
ECCE GitHub integration