Geant4
v4-10.4-release
메인 페이지
관련된 페이지
모듈
네임스페이스
클래스
파일들
파일 목록
파일 멤버
모두
클래스
네임스페이스들
파일들
함수
변수
타입정의
열거형 타입
열거형 멤버
Friends
매크로
그룹들
페이지들
source
processes
electromagnetic
lowenergy
src
G4PenelopeSamplingData.cc
이 파일의 문서화 페이지로 가기
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
// $Id: G4PenelopeSamplingData.cc 66241 2012-12-13 18:34:42Z gunter $
27
//
28
// Author: Luciano Pandola
29
//
30
// History:
31
// --------
32
// 09 Dec 2009 L Pandola First implementation
33
//
34
#include "
G4PenelopeSamplingData.hh
"
35
36
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...
37
G4PenelopeSamplingData::G4PenelopeSamplingData
(
G4int
nPoints) :
38
np(nPoints)
39
{
40
//create vectors
41
x
=
new
G4DataVector
();
42
pac
=
new
G4DataVector
();
43
a
=
new
G4DataVector
();
44
b
=
new
G4DataVector
();
45
ITTL
=
new
std::vector<size_t>;
46
ITTU
=
new
std::vector<size_t>;
47
}
48
49
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...
50
G4PenelopeSamplingData::~G4PenelopeSamplingData
()
51
{
52
if
(
x
)
delete
x
;
53
if
(
pac
)
delete
pac
;
54
if
(
a
)
delete
a
;
55
if
(
b
)
delete
b
;
56
if
(
ITTL
)
delete
ITTL
;
57
if
(
ITTU
)
delete
ITTU
;
58
}
59
60
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.......oooOO0OOooo...
61
size_t
G4PenelopeSamplingData::GetNumberOfStoredPoints
()
62
{
63
size_t
points =
x
->size();
64
65
//check everything is all right
66
if
(
pac
->size() != points ||
a
->size() != points ||
67
b
->size() != points ||
ITTL
->size() != points ||
68
ITTU
->size() != points)
69
{
70
G4ExceptionDescription
ed;
71
ed <<
"Data vectors look to have different dimensions !"
<<
G4endl
;
72
G4Exception
(
"G4PenelopeSamplingData::GetNumberOfStoredPoints()"
,
"em2040"
,
73
FatalException
,ed);
74
}
75
return
points;
76
}
77
78
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...
79
void
G4PenelopeSamplingData::Clear
()
80
{
81
if
(
x
)
delete
x
;
82
if
(
pac
)
delete
pac
;
83
if
(
a
)
delete
a
;
84
if
(
b
)
delete
b
;
85
if
(
ITTL
)
delete
ITTL
;
86
if
(
ITTU
)
delete
ITTU
;
87
//create vectors
88
x
=
new
G4DataVector
();
89
pac
=
new
G4DataVector
();
90
a
=
new
G4DataVector
();
91
b
=
new
G4DataVector
();
92
ITTL
=
new
std::vector<size_t>;
93
ITTU
=
new
std::vector<size_t>;
94
}
95
96
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...
97
void
G4PenelopeSamplingData::AddPoint
(
G4double
x0,
G4double
pac0,
G4double
a0
,
G4double
b0,
98
size_t
ITTL0,
size_t
ITTU0)
99
{
100
x
->push_back(x0);
101
pac
->push_back(pac0);
102
a
->push_back(a0);
103
b
->push_back(b0);
104
ITTL
->push_back(ITTL0);
105
ITTU
->push_back(ITTU0);
106
107
//check how many points we do have now
108
size_t
nOfPoints =
GetNumberOfStoredPoints
();
109
110
if
(nOfPoints > ((
size_t
)
np
))
111
{
112
G4cout
<<
"G4PenelopeSamplingData::AddPoint() "
<<
G4endl
;
113
G4cout
<<
"WARNING: Up to now there are "
<< nOfPoints <<
" points in the table"
<<
G4endl
;
114
G4cout
<<
"while the anticipated (declared) number is "
<< np <<
G4endl
;
115
}
116
return
;
117
}
118
119
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
120
void
G4PenelopeSamplingData::DumpTable
()
121
{
122
123
G4cout
<<
"*************************************************************************"
<<
G4endl
;
124
G4cout
<<
GetNumberOfStoredPoints
() <<
" points"
<<
G4endl
;
125
G4cout
<<
"*************************************************************************"
<<
G4endl
;
126
for
(
size_t
i=0;i<
GetNumberOfStoredPoints
();i++)
127
{
128
G4cout
<< i <<
" "
<< (*x)[i] <<
" "
<< (*pac)[i] <<
" "
<< (*a)[i] <<
" "
<<
129
(*b)[i] <<
" "
<< (*ITTL)[i] <<
" "
<< (*ITTU)[i] <<
G4endl
;
130
}
131
G4cout
<<
"*************************************************************************"
<<
G4endl
;
132
}
133
134
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
135
G4double
G4PenelopeSamplingData::GetX
(
size_t
index)
136
{
137
if
(index < x->size())
138
return
(*
x
)[index];
139
else
140
return
0;
141
}
142
143
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
144
G4double
G4PenelopeSamplingData::GetPAC
(
size_t
index)
145
{
146
if
(index < pac->size())
147
return
(*
pac
)[index];
148
else
149
return
0;
150
}
151
152
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
153
G4double
G4PenelopeSamplingData::GetA
(
size_t
index)
154
{
155
if
(index < a->size())
156
return
(*
a
)[index];
157
else
158
return
0;
159
}
160
161
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
162
G4double
G4PenelopeSamplingData::GetB
(
size_t
index)
163
{
164
if
(index < b->size())
165
return
(*
b
)[index];
166
else
167
return
0;
168
}
169
170
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
171
G4double
G4PenelopeSamplingData::SampleValue
(
G4double
maxRand)
172
{
173
//One passes here a random number in (0,1).
174
//Notice: it possible that is between (0,b) with b<1
175
size_t
points =
GetNumberOfStoredPoints
();
176
177
size_t
itn = (size_t) (maxRand*(points-1));
178
size_t
i = (*ITTL)[itn];
179
size_t
j = (*ITTU)[itn];
180
181
while
((j-i) > 1)
182
{
183
size_t
k = (i+j)/2;
184
if
(maxRand > (*
pac
)[k])
185
i = k;
186
else
187
j = k;
188
}
189
190
//Sampling from the rational inverse cumulative distribution
191
G4double
result
= 0;
192
193
G4double
rr = maxRand - (*pac)[i];
194
if
(rr > 1
e
-16)
195
{
196
G4double
d
= (*pac)[i+1]-(*pac)[i];
197
result = (*x)[i]+
198
((1.0+(*a)[i]+(*b)[i])*d*rr/
199
(d*d+((*
a
)[i]*d+(*b)[i]*rr)*rr))*((*
x
)[i+1]-(*x)[i]);
200
}
201
else
202
result = (*x)[i];
203
204
return
result
;
205
}
G4ExceptionDescription
std::ostringstream G4ExceptionDescription
Definition:
G4Exception.hh:45
G4PenelopeSamplingData::Clear
void Clear()
Definition:
G4PenelopeSamplingData.cc:79
G4PenelopeSamplingData::ITTL
std::vector< size_t > * ITTL
Definition:
G4PenelopeSamplingData.hh:81
G4PenelopeSamplingData::GetB
G4double GetB(size_t index)
Definition:
G4PenelopeSamplingData.cc:162
G4endl
#define G4endl
Definition:
G4ios.hh:61
G4DataVector
Definition:
G4DataVector.hh:50
G4PenelopeSamplingData::DumpTable
void DumpTable()
Definition:
G4PenelopeSamplingData.cc:120
G4PenelopeSamplingData::~G4PenelopeSamplingData
~G4PenelopeSamplingData()
Definition:
G4PenelopeSamplingData.cc:50
G4PenelopeSamplingData::GetA
G4double GetA(size_t index)
Definition:
G4PenelopeSamplingData.cc:153
G4double
double G4double
Definition:
G4Types.hh:76
G4PenelopeSamplingData::b
G4DataVector * b
Definition:
G4PenelopeSamplingData.hh:79
G4PenelopeSamplingData::AddPoint
void AddPoint(G4double x0, G4double pac0, G4double a0, G4double b0, size_t ITTL0, size_t ITTU0)
Definition:
G4PenelopeSamplingData.cc:97
G4PenelopeSamplingData::GetX
G4double GetX(size_t index)
Definition:
G4PenelopeSamplingData.cc:135
G4PenelopeSamplingData.hh
G4PenelopeSamplingData::GetNumberOfStoredPoints
size_t GetNumberOfStoredPoints()
Definition:
G4PenelopeSamplingData.cc:61
G4PenelopeSamplingData::G4PenelopeSamplingData
G4PenelopeSamplingData(G4int npoints=150)
Definition:
G4PenelopeSamplingData.cc:37
G4PenelopeSamplingData::x
G4DataVector * x
Definition:
G4PenelopeSamplingData.hh:76
d
Float_t d
Definition:
advanced/microbeam/plot.C:236
G4PenelopeSamplingData::SampleValue
G4double SampleValue(G4double rndm)
Definition:
G4PenelopeSamplingData.cc:171
result
G4double G4ParticleHPJENDLHEData::G4double result
Definition:
G4ParticleHPJENDLHEData.cc:257
FatalException
Definition:
G4ExceptionSeverity.hh:60
G4Exception
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition:
G4Exception.hh:65
a0
const G4double a0
Definition:
G4IonCoulombCrossSection.cc:68
G4PenelopeSamplingData::np
G4int np
Definition:
G4PenelopeSamplingData.hh:84
G4int
int G4int
Definition:
G4Types.hh:78
G4cout
G4GLOB_DLL std::ostream G4cout
G4PenelopeSamplingData::a
G4DataVector * a
Definition:
G4PenelopeSamplingData.hh:78
G4PenelopeSamplingData::GetPAC
G4double GetPAC(size_t index)
Definition:
G4PenelopeSamplingData.cc:144
e
Float_t e
Definition:
extended/medical/dna/range/plot.C:35
G4PenelopeSamplingData::pac
G4DataVector * pac
Definition:
G4PenelopeSamplingData.hh:77
G4PenelopeSamplingData::ITTU
std::vector< size_t > * ITTU
Definition:
G4PenelopeSamplingData.hh:82
다음에 의해 생성됨 :
1.8.5