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
HadrontherapyDetectorConstruction.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file HadrontherapyDetectorConstruction.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
// Hadrontherapy advanced example for Geant4
27
// See more at: https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesHadrontherapy
28
29
#ifndef HadrontherapyDetectorConstruction_H
30
#define HadrontherapyDetectorConstruction_H 1
31
32
#include "
G4Box.hh
"
33
#include "
globals.hh
"
34
#include "
G4VisAttributes.hh
"
35
#include "
G4LogicalVolume.hh
"
36
#include "
G4UnitsTable.hh
"
37
#include "
HadrontherapyDetectorROGeometry.hh
"
38
39
class
G4VPhysicalVolume
;
40
class
G4LogicalVolume
;
41
class
G4PVPlacement
;
42
class
HadrontherapyDetectorROGeometry
;
43
class
HadrontherapyDetectorMessenger
;
44
class
HadrontherapyDetectorSD
;
45
class
HadrontherapyMatrix
;
46
class
HadrontherapyLet
;
47
48
class
HadrontherapyDetectorConstruction
49
{
50
public
:
51
52
HadrontherapyDetectorConstruction
(
G4VPhysicalVolume
*);
53
54
~HadrontherapyDetectorConstruction
();
55
56
public
:
57
static
HadrontherapyDetectorConstruction
*
GetInstance
();
58
void
InitializeDetectorROGeometry
(
HadrontherapyDetectorROGeometry
*,
59
G4ThreeVector
detectorToWorldPosition);
60
G4VPhysicalVolume
*
motherPhys
;
61
HadrontherapyDetectorSD
*
detectorSD
;
// Pointer to sensitive detector
62
64
void
VirtualLayer
(
G4bool
Varbool);
65
G4bool
NewSource
;
66
void
SetVirtualLayerPosition
(
G4ThreeVector
);
67
G4ThreeVector
VirtualLayerPosition
;
68
70
private
:
71
72
void
ConstructPhantom
();
73
void
ConstructDetector
();
74
void
ParametersCheck
();
75
void
CheckOverlaps
();
76
77
public
:
78
// Get detector position relative to WORLD
79
inline
G4ThreeVector
GetDetectorToWorldPosition
()
80
{
81
return
phantomPosition
+
detectorPosition
;
82
}
84
// Get displacement between phantom and detector by detector position (center of), phantom (center of) and detector sizes
85
inline
G4ThreeVector
GetDetectorToPhantomPosition
()
86
{
87
return
G4ThreeVector
(
phantomSizeX
/2 -
detectorSizeX
/2 +
detectorPosition
.
getX
(),
88
phantomSizeY
/2 -
detectorSizeY
/2 +
detectorPosition
.
getY
(),
89
phantomSizeZ
/2 -
detectorSizeZ
/2 +
detectorPosition
.
getZ
()
90
);
91
}
92
94
// Calculate (and set) detector position by displacement, phantom and detector sizes
95
inline
void
SetDetectorPosition
()
96
{
97
// Adjust detector position
98
detectorPosition
.
setX
(
detectorToPhantomPosition
.
getX
() -
phantomSizeX
/2 +
detectorSizeX
/2);
99
detectorPosition
.
setY
(
detectorToPhantomPosition
.
getY
() -
phantomSizeY
/2 +
detectorSizeY
/2);
100
detectorPosition
.
setZ
(
detectorToPhantomPosition
.
getZ
() -
phantomSizeZ
/2 +
detectorSizeZ
/2);
101
102
103
}
105
// Check whether detector is inside phantom
106
inline
bool
IsInside
(
G4double
detectorX,
107
G4double
detectorY,
108
G4double
detectorZ,
109
G4double
phantomX,
110
G4double
phantomY,
111
G4double
phantomZ,
112
G4ThreeVector
pos
)
113
{
114
// Dimensions check... X Y and Z
115
// Firstly check what dimension we are modifying
116
{
117
if
(detectorX > phantomX)
118
{
119
G4cout
<<
"Error: Detector X dimension must be smaller or equal to the correspondent of the phantom"
<<
G4endl
;
120
return
false
;
121
}
122
if
( (phantomX - detectorX) < pos.
getX
())
123
{
124
G4cout
<<
"Error: X dimension doesn't fit with detector to phantom relative position"
<<
G4endl
;
125
return
false
;
126
}
127
}
128
129
{
130
if
(detectorY > phantomY)
131
{
132
G4cout
<<
"Error: Detector Y dimension must be smaller or equal to the correspondent of the phantom"
<<
G4endl
;
133
return
false
;
134
}
135
if
( (phantomY - detectorY) < pos.
getY
())
136
{
137
G4cout
<<
"Error: Y dimension doesn't fit with detector to phantom relative position"
<<
G4endl
;
138
return
false
;
139
}
140
}
141
142
{
143
if
(detectorZ > phantomZ)
144
{
145
G4cout
<<
"Error: Detector Z dimension must be smaller or equal to the correspondent of the phantom"
<<
G4endl
;
146
return
false
;
147
}
148
if
( (phantomZ - detectorZ) < pos.
getZ
())
149
{
150
G4cout
<<
"Error: Z dimension doesn't fit with detector to phantom relative position"
<<
G4endl
;
151
return
false
;
152
}
153
}
154
155
return
true
;
156
}
158
159
G4bool
SetPhantomMaterial
(
G4String
material
);
160
void
SetVoxelSize
(
G4double
sizeX,
G4double
sizeY,
G4double
sizeZ);
161
void
SetDetectorSize
(
G4double
sizeX,
G4double
sizeY,
G4double
sizeZ);
162
void
SetPhantomSize
(
G4double
sizeX,
G4double
sizeY,
G4double
sizeZ);
163
void
SetPhantomPosition
(
G4ThreeVector
);
164
void
SetDetectorToPhantomPosition
(
G4ThreeVector
DetectorToPhantomPosition);
165
void
UpdateGeometry
();
166
void
PrintParameters
();
167
G4LogicalVolume
*
GetDetectorLogicalVolume
(){
return
detectorLogicalVolume
;}
168
169
private
:
170
static
HadrontherapyDetectorConstruction
*
instance
;
171
HadrontherapyDetectorMessenger
*
detectorMessenger
;
172
173
G4VisAttributes
*
skyBlue
;
174
G4VisAttributes
*
red
;
175
176
HadrontherapyDetectorROGeometry
*
detectorROGeometry
;
// Pointer to ROGeometry
177
HadrontherapyMatrix
*
matrix
;
178
HadrontherapyLet
*
let
;
179
180
G4Box
*
phantom
, *
detector
;
181
G4LogicalVolume
*
phantomLogicalVolume
, *
detectorLogicalVolume
;
182
G4VPhysicalVolume
*
phantomPhysicalVolume
, *
detectorPhysicalVolume
;
183
184
G4Box
*
solidVirtualLayer
;
185
G4LogicalVolume
*
logicVirtualLayer
;
186
G4VPhysicalVolume
*
physVirtualLayer
;
187
188
G4double
phantomSizeX
;
189
G4double
phantomSizeY
;
190
G4double
phantomSizeZ
;
191
192
G4double
detectorSizeX
;
193
G4double
detectorSizeY
;
194
G4double
detectorSizeZ
;
195
196
G4ThreeVector
phantomPosition
,
detectorPosition
,
detectorToPhantomPosition
;
// phantom center, detector center, detector to phantom relative position
197
198
G4double
sizeOfVoxelAlongX
;
199
G4double
sizeOfVoxelAlongY
;
200
G4double
sizeOfVoxelAlongZ
;
201
202
G4int
numberOfVoxelsAlongX
;
203
G4int
numberOfVoxelsAlongY
;
204
G4int
numberOfVoxelsAlongZ
;
205
206
G4double
volumeOfVoxel
,
massOfVoxel
;
207
208
G4Material
*
phantomMaterial
, *
detectorMaterial
;
209
G4Region
*
aRegion
;
210
};
211
#endif
geant4
tree
geant4-10.6-release
examples
advanced
hadrontherapy
include
HadrontherapyDetectorConstruction.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:58
using
1.8.2 with
ECCE GitHub integration