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
G4PVDivision.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4PVDivision.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
// G4PVDivision
27
//
28
// Class description:
29
//
30
// Represents many touchable detector elements differing only in their
31
// positioning. The elements' positions are calculated by means of a simple
32
// linear formula.
33
//
34
// G4PVDivision(const G4String& pName,
35
// G4LogicalVolume* pLogical,
36
// G4LogicalVolume* pMother,
37
// const EAxis pAxis,
38
// const G4int nReplicas,
39
// const G4double width,
40
// const G4double offset=0)
41
//
42
// Division may occur along:
43
//
44
// o Cartesian axes (kXAxis,kYAxis,kZAxis)
45
//
46
// The divisions, of specified width have coordinates of
47
// form (-width*(nReplicas-1)*0.5+n*width,0,0) where n=0.. nReplicas-1
48
// for the case of kXAxis, and are unrotated.
49
//
50
// o Radial axis (cylindrical polar) (kRho)
51
//
52
// The divisions are cons/tubs sections, centred on the origin
53
// and are unrotated.
54
// They have radii of width*n+offset to width*(n+1)+offset
55
// where n=0..nReplicas-1
56
//
57
// o Phi axis (cylindrical polar) (kPhi)
58
// The divisions are `phi sections' or wedges, and of cons/tubs form
59
// They have phi of offset+n*width to offset+(n+1)*width where
60
// n=0..nReplicas-1
61
62
// 09.05.01 - P.Arce, Initial version
63
// ----------------------------------------------------------------------
64
#ifndef G4PVDIVISION_HH
65
#define G4PVDIVISION_HH
66
67
#include "
geomdefs.hh
"
68
#include "
G4VPhysicalVolume.hh
"
69
#include "
G4VDivisionParameterisation.hh
"
70
71
class
G4LogicalVolume
;
72
class
G4VSolid
;
73
74
class
G4PVDivision
:
public
G4VPhysicalVolume
75
{
76
public
:
// with description
77
78
G4PVDivision
(
const
G4String
& pName,
79
G4LogicalVolume
* pLogical,
80
G4LogicalVolume
* pMother,
81
const
EAxis
pAxis,
82
const
G4int
nReplicas,
83
const
G4double
width
,
84
const
G4double
offset
);
85
// Constructor with number of divisions and width
86
87
G4PVDivision
(
const
G4String
& pName,
88
G4LogicalVolume
* pLogical,
89
G4LogicalVolume
* pMotherLogical,
90
const
EAxis
pAxis,
91
const
G4int
nReplicas,
92
const
G4double
offset );
93
// Constructor with number of divisions
94
95
G4PVDivision
(
const
G4String
& pName,
96
G4LogicalVolume
* pLogical,
97
G4LogicalVolume
* pMotherLogical,
98
const
EAxis
pAxis,
99
const
G4double
width,
100
const
G4double
offset );
101
// Constructor with width
102
103
G4PVDivision
(
const
G4String
& pName,
104
G4LogicalVolume
* pLogical,
105
G4VPhysicalVolume
* pMother,
106
const
EAxis
pAxis,
107
const
G4int
nReplicas,
108
const
G4double
width,
109
const
G4double
offset);
110
// Constructor in mother physical volume (same as first constructor)
111
112
virtual
~G4PVDivision
();
113
114
G4PVDivision
(
const
G4PVDivision
&) =
delete
;
115
G4PVDivision
&
operator=
(
const
G4PVDivision
&) =
delete
;
116
117
virtual
G4bool
IsMany
()
const
;
118
virtual
G4int
GetCopyNo
()
const
;
119
virtual
void
SetCopyNo
(
G4int
CopyNo);
120
virtual
G4bool
IsReplicated
()
const
;
121
virtual
G4int
GetMultiplicity
()
const
;
122
virtual
G4VPVParameterisation
*
GetParameterisation
()
const
;
123
virtual
void
GetReplicationData
(
EAxis
& axis,
124
G4int
& nReplicas,
125
G4double
& width,
126
G4double
& offset,
127
G4bool
& consuming )
const
;
128
EAxis
GetDivisionAxis
()
const
;
129
G4bool
IsParameterised
()
const
;
130
131
virtual
EVolume
VolumeType
()
const
;
132
// Characterise the type of volume - normal/replicated/parameterised.
133
134
G4bool
IsRegularStructure
()
const
;
135
G4int
GetRegularStructureId
()
const
;
136
// Methods to identify volume that can have revised 'regular' navigation.
137
// Currently divisions do not qualify for this.
138
139
private
:
140
141
void
CheckAndSetParameters
(
const
EAxis
pAxis,
142
const
G4int
nDivs,
143
const
G4double
width,
144
const
G4double
offset,
145
DivisionType
divType,
146
const
G4LogicalVolume
* pMotherLogical );
147
148
void
SetParameterisation
(
G4LogicalVolume
* motherLogical,
149
const
EAxis
pAxis,
150
const
G4int
nReplicas,
151
const
G4double
width,
152
const
G4double
offset,
153
DivisionType
divType );
154
void
ErrorInAxis
(
EAxis
axis,
G4VSolid
* solid );
155
156
protected
:
157
158
EAxis
faxis
;
// axis of optimisation
159
EAxis
fdivAxis
;
// axis of division
160
G4int
fnReplicas
= 0;
161
G4double
fwidth
= 0.0,
foffset
= 0.0;
162
G4int
fcopyNo
= -1;
163
G4VDivisionParameterisation
*
fparam
=
nullptr
;
164
};
165
166
#endif
geant4
tree
geant4-10.6-release
source
geometry
divisions
include
G4PVDivision.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:16
using
1.8.2 with
ECCE GitHub integration