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
G4Trd.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4Trd.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
// G4Trd
27
//
28
// Class description:
29
//
30
// A G4Trd is a trapezoid with the x and y dimensions varying along z
31
// functions:
32
//
33
// Member Data:
34
//
35
// fDx1 Half-length along x at the surface positioned at -dz
36
// fDx2 Half-length along x at the surface positioned at +dz
37
// fDy1 Half-length along y at the surface positioned at -dz
38
// fDy2 Half-length along y at the surface positioned at +dz
39
// fDz Half-length along z axis
40
41
// 12.01.95 P.Kent: Old prototype code converted to thick geometry
42
// 21.04.97 J.Apostolakis: Added Set Methods
43
// 19.11.99 V.Grichine: kUndefined was added to Eside enum
44
// --------------------------------------------------------------------
45
#ifndef G4TRD_HH
46
#define G4TRD_HH
47
48
#include "
G4GeomTypes.hh
"
49
50
#if defined(G4GEOM_USE_USOLIDS)
51
#define G4GEOM_USE_UTRD 1
52
#endif
53
54
#if defined(G4GEOM_USE_UTRD)
55
#define G4UTrd G4Trd
56
#include "
G4UTrd.hh
"
57
#else
58
59
#include "
G4CSGSolid.hh
"
60
#include "
G4Polyhedron.hh
"
61
62
class
G4Trd
:
public
G4CSGSolid
63
{
64
public
:
// with description
65
66
G4Trd
(
const
G4String
& pName,
67
G4double
pdx1,
G4double
pdx2,
68
G4double
pdy1,
G4double
pdy2,
69
G4double
pdz );
70
//
71
// Constructs a trapezoid with name, and half lengths
72
73
~G4Trd
();
74
//
75
// Destructor
76
77
// Accessors
78
79
inline
G4double
GetXHalfLength1
()
const
;
80
inline
G4double
GetXHalfLength2
()
const
;
81
inline
G4double
GetYHalfLength1
()
const
;
82
inline
G4double
GetYHalfLength2
()
const
;
83
inline
G4double
GetZHalfLength
()
const
;
84
85
// Modifiers
86
87
inline
void
SetXHalfLength1
(
G4double
val);
88
inline
void
SetXHalfLength2
(
G4double
val);
89
inline
void
SetYHalfLength1
(
G4double
val);
90
inline
void
SetYHalfLength2
(
G4double
val);
91
inline
void
SetZHalfLength
(
G4double
val);
92
93
void
SetAllParameters
(
G4double
pdx1,
G4double
pdx2,
94
G4double
pdy1,
G4double
pdy2,
95
G4double
pdz );
96
97
// Methods of solid
98
99
G4double
GetCubicVolume
();
100
G4double
GetSurfaceArea
();
101
102
void
ComputeDimensions
(
G4VPVParameterisation
*
p
,
103
const
G4int
n
,
104
const
G4VPhysicalVolume
* pRep );
105
106
void
BoundingLimits
(
G4ThreeVector
&
pMin
,
G4ThreeVector
&
pMax
)
const
;
107
108
G4bool
CalculateExtent
(
const
EAxis
pAxis,
109
const
G4VoxelLimits
& pVoxelLimit,
110
const
G4AffineTransform
& pTransform,
111
G4double
& pMin,
G4double
& pMax )
const
;
112
113
EInside
Inside
(
const
G4ThreeVector
& p )
const
;
114
115
G4ThreeVector
SurfaceNormal
(
const
G4ThreeVector
& p )
const
;
116
117
G4double
DistanceToIn
(
const
G4ThreeVector
& p,
118
const
G4ThreeVector
&
v
)
const
;
119
120
G4double
DistanceToIn
(
const
G4ThreeVector
& p )
const
;
121
122
G4double
DistanceToOut
(
const
G4ThreeVector
& p,
123
const
G4ThreeVector
& v,
124
const
G4bool
calcNorm =
false
,
125
G4bool
* validNorm =
nullptr
,
126
G4ThreeVector
* n =
nullptr
)
const
;
127
128
G4double
DistanceToOut
(
const
G4ThreeVector
& p )
const
;
129
130
G4GeometryType
GetEntityType
()
const
;
131
132
G4ThreeVector
GetPointOnSurface
()
const
;
133
134
G4VSolid
*
Clone
()
const
;
135
136
std::ostream&
StreamInfo
( std::ostream& os )
const
;
137
138
// Visualisation functions
139
140
void
DescribeYourselfTo
(
G4VGraphicsScene
& scene)
const
;
141
G4Polyhedron
*
CreatePolyhedron
()
const
;
142
143
public
:
// without description
144
145
G4Trd
(__void__&);
146
// Fake default constructor for usage restricted to direct object
147
// persistency for clients requiring preallocation of memory for
148
// persistifiable objects.
149
150
G4Trd
(
const
G4Trd
& rhs);
151
G4Trd
&
operator=
(
const
G4Trd
& rhs);
152
// Copy constructor and assignment operator
153
154
private
:
155
156
void
CheckParameters
();
157
// Check parameters
158
159
void
MakePlanes
();
160
// Set side planes
161
162
G4ThreeVector
ApproxSurfaceNormal
(
const
G4ThreeVector
& p )
const
;
163
// Algorithm for SurfaceNormal() following the original
164
// specification for points not on the surface
165
166
private
:
167
168
G4double
halfCarTolerance
;
169
G4double
fDx1
,
fDx2
,
fDy1
,
fDy2
,
fDz
;
170
struct
{
G4double
a
,
b
,
c
,
d
; }
fPlanes
[4];
171
};
172
173
#include "G4Trd.icc"
174
175
#endif
176
177
#endif
geant4
tree
geant4-10.6-release
source
geometry
solids
CSG
include
G4Trd.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:18
using
1.8.2 with
ECCE GitHub integration