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
G4TwistTubsSide.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4TwistTubsSide.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
// G4TwistTubsSide
27
//
28
// Class description:
29
//
30
// Class describing a twisted boundary surface for a cylinder.
31
32
// 01-Aug-2002 - Kotoyo Hoshina (hoshina@hepburn.s.chiba-u.ac.jp), created
33
// 13-Nov-2003 - O.Link (Oliver.Link@cern.ch), Integration in Geant4
34
// from original version in Jupiter-2.5.02 application.
35
// --------------------------------------------------------------------
36
#ifndef G4TWISTTUBSSIDE_HH
37
#define G4TWISTTUBSSIDE_HH
38
39
#include "
G4VTwistSurface.hh
"
40
41
class
G4TwistTubsSide
:
public
G4VTwistSurface
42
{
43
public
:
// with description
44
45
G4TwistTubsSide
(
const
G4String
&
name
,
46
const
G4RotationMatrix
& rot,
// 0.5*(phi-width segment)
47
const
G4ThreeVector
& tlate,
48
G4int
handedness,
// R-hand = 1, L-hand = -1
49
const
G4double
kappa,
// tan(TwistAngle/2)/fZHalfLen
50
const
EAxis
axis0 =
kXAxis
,
51
const
EAxis
axis1 =
kZAxis
,
52
G4double
axis0min = -
kInfinity
,
53
G4double
axis1min = -
kInfinity
,
54
G4double
axis0max =
kInfinity
,
55
G4double
axis1max =
kInfinity
);
56
57
G4TwistTubsSide
(
const
G4String
& name,
58
G4double
EndInnerRadius[2],
59
G4double
EndOuterRadius[2],
60
G4double
DPhi,
61
G4double
EndPhi[2],
62
G4double
EndZ[2],
63
G4double
InnerRadius,
64
G4double
OuterRadius,
65
G4double
Kappa,
66
G4int
handedness);
67
68
virtual
~G4TwistTubsSide
();
69
70
virtual
G4ThreeVector
GetNormal
(
const
G4ThreeVector
&
xx
,
71
G4bool
isGlobal =
false
) ;
72
73
virtual
G4int
DistanceToSurface
(
const
G4ThreeVector
& gp,
74
const
G4ThreeVector
& gv,
75
G4ThreeVector
gxx[],
76
G4double
distance[],
77
G4int
areacode[],
78
G4bool
isvalid[],
79
EValidate
validate =
kValidateWithTol
);
80
81
virtual
G4int
DistanceToSurface
(
const
G4ThreeVector
& gp,
82
G4ThreeVector
gxx[],
83
G4double
distance[],
84
G4int
areacode[]);
85
86
inline
G4ThreeVector
ProjectAtPXPZ
(
const
G4ThreeVector
&
p
,
87
G4bool
isglobal =
false
)
const
;
88
89
virtual
G4ThreeVector
SurfacePoint
(
G4double
,
G4double
,
90
G4bool
isGlobal =
false
) ;
91
virtual
G4double
GetBoundaryMin
(
G4double
phi
) ;
92
virtual
G4double
GetBoundaryMax
(
G4double
phi) ;
93
virtual
G4double
GetSurfaceArea
() ;
94
virtual
void
GetFacets
(
G4int
m
,
G4int
n
,
G4double
xyz[][3],
95
G4int
faces[][4],
G4int
iside ) ;
96
97
public
:
// without description
98
99
G4TwistTubsSide
(__void__&);
100
// Fake default constructor for usage restricted to direct object
101
// persistency for clients requiring preallocation of memory for
102
// persistifiable objects.
103
104
private
:
105
106
virtual
G4double
DistanceToPlane
(
const
G4ThreeVector
& p,
107
const
G4ThreeVector
&
A
,
108
const
G4ThreeVector
&
B
,
109
const
G4ThreeVector
&
C
,
110
const
G4ThreeVector
&
D
,
111
const
G4int
parity
,
112
G4ThreeVector
& xx,
113
G4ThreeVector
& n);
114
115
virtual
G4int
GetAreaCode
(
const
G4ThreeVector
& xx,
116
G4bool
withTol =
true
);
117
118
virtual
void
SetCorners
();
119
120
virtual
void
SetCorners
(
G4double
endInnerRad[2],
121
G4double
endOuterRad[2],
122
G4double
endPhi[2],
123
G4double
endZ[2] ) ;
124
125
virtual
void
SetBoundaries
();
126
127
private
:
128
129
G4double
fKappa
;
// std::tan(TwistedAngle/2)/HalfLenZ;
130
};
131
132
133
//========================================================
134
// inline functions
135
//========================================================
136
137
inline
138
G4ThreeVector
G4TwistTubsSide::ProjectAtPXPZ
(
const
G4ThreeVector
&
p
,
139
G4bool
isglobal)
const
140
{
141
// Get Rho at p.z() on Hyperbolic Surface.
142
G4ThreeVector
tmpp;
143
if
(isglobal) { tmpp =
fRot
.
inverse
()*p -
fTrans
; }
144
else
{ tmpp =
p
; }
145
G4ThreeVector
xx
(p.
x
(), p.
x
() *
fKappa
* p.
z
(), p.
z
());
146
if
(isglobal) {
return
(
fRot
*
xx
+
fTrans
); }
147
return
xx
;
148
}
149
150
inline
151
G4ThreeVector
152
G4TwistTubsSide::SurfacePoint
(
G4double
x
,
G4double
z
,
G4bool
isGlobal)
153
{
154
G4ThreeVector
SurfPoint( x , x *
fKappa
* z , z ) ;
155
156
if
(isGlobal) {
return
(
fRot
* SurfPoint +
fTrans
); }
157
return
SurfPoint;
158
}
159
160
inline
161
G4double
G4TwistTubsSide::GetBoundaryMin
(
G4double
)
162
{
163
return
fAxisMin
[0] ;
// inner radius at z = 0
164
}
165
166
inline
167
G4double
G4TwistTubsSide::GetBoundaryMax
(
G4double
)
168
{
169
return
fAxisMax
[0] ;
// outer radius at z = 0
170
}
171
172
inline
173
G4double
G4TwistTubsSide::GetSurfaceArea
()
174
{
175
// approximation only
176
return
(
fAxisMax
[0] -
fAxisMin
[0] ) * (
fAxisMax
[1] -
fAxisMin
[1] ) ;
177
}
178
179
#endif
geant4
tree
geant4-10.6-release
source
geometry
solids
specific
include
G4TwistTubsSide.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:19
using
1.8.2 with
ECCE GitHub integration