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
HadrontherapyMatrix.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file HadrontherapyMatrix.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 HadrontherapyMatrix_H
30
#define HadrontherapyMatrix_H 1
31
#include <
G4ParticleDefinition.hh
>
32
#include "
globals.hh
"
33
#include <vector>
34
#include <fstream>
35
//#include "g4csv.hh"
36
37
38
#ifndef HADRONTHERAPYANALYSISMANAGER_HH
39
#define HADRONTHERAPYANALYSISMANAGER_HH 1
40
41
class
HadrontherapyAnalysisFileMessenger
;
42
46
class
HadrontherapyAnalysis
47
{
48
private
:
55
HadrontherapyAnalysis
();
56
57
58
59
public
:
60
~HadrontherapyAnalysis
();
61
65
static
HadrontherapyAnalysis
*
GetInstance
();
66
67
68
69
static
HadrontherapyAnalysis
*
instance
;
70
HadrontherapyAnalysisFileMessenger
*
fMess
;
71
72
};
73
74
#endif
75
76
// The information: energy deposit and position in the phantom
77
// is stored in a matrix
78
79
// type struct useful to store nucludes data
80
81
82
struct
ion
83
{
84
G4bool
isPrimary
;
// true if particle is primary
85
G4int
PDGencoding
;
// Particle data group id for the particle
86
//G4String extName; // AZ[excitation energy]: like He3[1277.4], He4[0.0], Li7[231.4], ...
87
G4String
name
;
// simple name without excitation energy: He3, He4, Li7, ...
88
std::string::size_type
len
;
// name length
89
G4int
Z
;
// atomic number
90
G4int
A
;
// mass number
91
G4double
*
dose
;
// pointer to dose matrix
92
unsigned
int
*
fluence
;
// pointer to fluence matrix
93
//friend G4bool operator<(const ion& a, const ion& b) {return (a.Z == b.Z) ? b.A < a.A : b.Z < a.Z ;}
94
G4bool
operator<
(
const
ion
&
a
)
const
{
return
(this->
Z
== a.
Z
) ? this->
A
< a.
A
: this->
Z
< a.
Z
;}
95
};
96
97
class
HadrontherapyMatrix
98
{
99
private
:
100
HadrontherapyMatrix
(
G4int
numberOfVoxelAlongX
,
101
G4int
numberOfVoxelAlongY
,
102
G4int
numberOfVoxelAlongZ
,
103
G4double
massOfVoxel
);
//< this is supposed to be a singleton
104
105
106
public
:
107
108
~HadrontherapyMatrix
();
109
// Get object instance only
110
static
HadrontherapyMatrix
*
GetInstance
();
111
// Make & Get instance
112
static
HadrontherapyMatrix
*
GetInstance
(
G4int
nX,
G4int
nY,
G4int
nZ,
G4double
mass
);
113
114
static
G4bool
secondary
;
115
// Full list of generated nuclides
116
117
118
void
PrintNuclides
();
119
// Hit array marker (useful to avoid multiple counts of fluence)
120
void
ClearHitTrack
();
121
G4int
*
GetHitTrack
(
G4int
i,
G4int
j,
G4int
k
);
122
123
// All the elements of the matrix are initialised to zero
124
void
Initialize
();
125
void
Clear
();
126
// Fill DOSE/fluence matrix for particle:
127
// if fluence parameter is true then fluence at voxel (i, j, k) is increased
128
// else energyDeposit fill the dose matrix for voxel (i,j,k)
129
G4bool
Fill
(
G4int
,
G4ParticleDefinition
* particleDef,
G4int
i,
G4int
j,
G4int
k
,
G4double
energyDeposit,
G4bool
fluence=
false
);
130
131
// Fill TOTAL DOSE matrix for primary particles only
132
void
Fill
(
G4int
i,
G4int
j,
G4int
k
,
G4double
energyDeposit);
133
// The matrix is filled with the energy deposit
134
// in the element corresponding to the voxel of the phantom where
135
// the energy deposit was registered
136
137
// Store the information of the matrix in a ntuple and in
138
// a 1D Histogram
139
//void TotalEnergyDeposit();
140
141
// Store single matrix data to filename
142
void
StoreMatrix
(
G4String
file
,
void
*
data
,
size_t
psize);
143
// Store all fluence data to filenames
144
void
StoreFluenceData
();
145
// Store all dose data to filenames
146
void
StoreDoseData
();
147
148
// Store all data (except the total dose) to ONE filename
149
void
StoreDoseFluenceAscii
(
G4String
filename
=
""
);
150
151
152
153
inline
G4int
Index
(
G4int
i,
G4int
j,
G4int
k
) {
return
(i * numberOfVoxelAlongY + j) * numberOfVoxelAlongZ +
k
; }
154
// Get a unique index from a three dimensional one
155
156
G4double
*
GetMatrix
(){
return
matrix
;}
157
158
G4int
GetNvoxel
(){
return
numberOfVoxelAlongX*numberOfVoxelAlongY*
numberOfVoxelAlongZ
;}
159
// Total number of voxels read only access
160
G4int
GetNumberOfVoxelAlongX
(){
return
numberOfVoxelAlongX
;}
161
G4int
GetNumberOfVoxelAlongY
(){
return
numberOfVoxelAlongY
;}
162
G4int
GetNumberOfVoxelAlongZ
(){
return
numberOfVoxelAlongZ
;}
163
private
:
164
165
static
HadrontherapyMatrix
*
instance
;
166
G4int
numberOfVoxelAlongX
;
167
G4int
numberOfVoxelAlongY
;
168
G4int
numberOfVoxelAlongZ
;
169
G4double
massOfVoxel
;
170
171
G4double
*
matrix
;
172
G4int
*
hitTrack
;
173
G4String
stdFile
,
filename
;
174
std::ofstream
ofs
;
175
176
// Dose&fluence data store
177
std::vector <ion>
ionStore
;
178
// want secondary particles?
179
G4double
doseUnit
;
180
};
181
#endif
182
geant4
tree
geant4-10.6-release
examples
advanced
hadrontherapy
include
HadrontherapyMatrix.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:58
using
1.8.2 with
ECCE GitHub integration