nucleus_class.py
Go to the documentation of this file.
1
2
from
scipy.interpolate
import
interp1d
3
import
numpy
as
np
4
import
math
5
import
os
6
import
sys
7
import
inspect
8
9
class
nucleus
(object):
10
"""
11
nucleus: contains basic information of a nuclei. For example the name, the name in the network, the amount of protons, neutrons and the mass number
12
"""
13
14
# constructor
15
def
__init__
(self,name='',Z=-1,N=-1,Y=0.,quiet=False,init_prop=False):
16
"""
17
Input:
18
name - name of the nuclei. All informations are extracted from this name.
19
"""
20
self.
__input_name
= name
21
self.
__name
= name.lower()
22
self.
__A
= -1
23
self.
__Z
= -1
24
self.
__N
= -1
25
self.
__warn
=
False
26
self.
__quiet
= quiet
27
self.
__ab
= Y
28
self.
__is_stable
=
False
29
#Sorting criteria
30
self.
__sort_Z
=
True
31
32
#Special cases
33
if
self.
__name
==
'p'
:
34
self.
__name
=
'h1'
35
if
self.
__name
==
'n'
or
self.
__name
==
'neutrons'
:
36
self.
__name
=
'neutron'
37
if
self.
__name
==
'd'
:
38
self.
__name
=
'h2'
39
if
self.
__name
==
't'
:
40
self.
__name
=
'h3'
41
if
self.
__name
==
'al-6'
:
42
self.
__name
=
'al26'
43
if
self.
__name
==
'al*6'
:
44
self.
__name
=
'al26'
45
46
self.
__elementname
=
''
47
self.
__elname
= (
'neutron'
,
'h'
,
'he'
,
'li'
,
'be'
,
'b'
,
'c'
,
'n'
,
'o'
,
'f'
,
'ne'
,
'na'
,
'mg'
,
'al'
,
'si'
,
'p'
,
's'
,
'cl'
,
'ar'
,
'k'
,
'ca'
,
'sc'
,
'ti'
,
'v'
,
'cr'
,
'mn'
,
'fe'
,
48
'co'
,
'ni'
,
'cu'
,
'zn'
,
'ga'
,
'ge'
,
'as'
,
'se'
,
'br'
,
'kr'
,
'rb'
,
'sr'
,
'y'
,
'zr'
,
'nb'
,
'mo'
,
'tc'
,
'ru'
,
'rh'
,
'pd'
,
'ag'
,
'cd'
,
'in'
,
'sn'
,
'sb'
,
49
'te'
,
'i'
,
'xe'
,
'cs'
,
'ba'
,
'la'
,
'ce'
,
'pr'
,
'nd'
,
'pm'
,
'sm'
,
'eu'
,
'gd'
,
'tb'
,
'dy'
,
'ho'
,
'er'
,
'tm'
,
'yb'
,
'lu'
,
'hf'
,
'ta'
,
'w'
,
're'
,
'os'
,
50
'ir'
,
'pt'
,
'au'
,
'hg'
,
'tl'
,
'pb'
,
'bi'
,
'po'
,
'at'
,
'rn'
,
'fr'
,
'ra'
,
'ac'
,
'th'
,
'pa'
,
'u'
,
'np'
,
'pu'
,
'am'
,
'cm'
,
'bk'
,
'cf'
,
'es'
,
'fm'
,
'md'
,
51
'no'
,
'lr'
,
'rf'
,
'db'
,
'sg'
,
'bh'
,
'hs'
,
'mt'
,
'ds'
,
'rg'
,
'cn'
,
'nh'
,
'fl'
,
'mc'
,
'lv'
,
'ts'
,
'og'
,
"uue"
,
"ubn"
,
"ubu"
,
"ubb"
,
"ubt"
,
"ubq"
,
"ubp"
,
52
"ubh"
,
"ubs"
,
"ubo"
,
"ube"
,
"utn"
,
"utu"
,
"utb"
,
"utt"
,
"utq"
,
"utp"
,
"uth"
,
"uts"
,
"uto"
,
"ute"
,
"uqn"
,
"uqu"
)
53
54
55
if
(Z!=-1
and
N!=-1):
56
if
((Z >= len(self.
__elname
))
and
not
self.
__quiet
):
57
print(
'Proton number exceeds the one of database '
,Z)
58
self.
__A
= Z + N
59
self.
__name
= self.
__elname
[Z] + str(self.
__A
)
60
61
self.
__initialize
()
62
63
if
init_prop:
64
self.
__init_properties
()
65
66
# Check if an error occured
67
self.
__not_a_isotope
= (self.
__Z
== -1)
68
69
70
71
def
__init_properties
(self):
72
"""
73
Initialize basic properties, like stableness etc.
74
"""
75
# Check if it is stable
76
stable_nuc = np.loadtxt(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))+
'/data/stableiso.dat'
,unpack=
True
,usecols=[0],dtype=str)
77
if
self.
__name
in
stable_nuc:
78
self.
__is_stable
=
True
79
else
:
80
self.
__is_stable
=
False
81
82
83
84
def
is_stable
(self):
85
"""
86
Is it a stable nucleus?
87
"""
88
return
self.
__is_stable
89
90
91
def
get_not_a_isotope
(self):
92
"""
93
Check if the input was a valid isotope. True if not, False if it is valid
94
"""
95
return
self.
__not_a_isotope
96
97
def
__initialize
(self):
98
"""
99
Extract the information of protonnumber neutronnumber out of the name.
100
"""
101
self.
__A
=
''
.join([x
for
x
in
self.
__name
if
x.isdigit()])
102
103
if
(self.
__A
!=
''
):
104
self.
__A
= int(self.
__A
)
105
else
:
106
self.
__A
= 1
107
108
self.
__elementname
=
''
.join([x
for
x
in
self.
__name
if
not
x.isdigit()]).strip()
109
110
if
self.
__elementname
in
self.
__elname
:
111
self.
__Z
= self.
__elname
.index(self.
__elementname
)
#protonnumber
112
else
:
113
self.
__Z
= -1
114
if
not
self.
__quiet
:
115
print(
'Warning: The element '
+self.
__elementname
+
' is not known by nuclei class.'
)
116
self.
__warn
=
True
117
118
self.
__N
= self.
__A
- self.
__Z
119
self.
__nrnname
=
'i'
+self.
__name
120
self.
__A
=
''
.join([x
for
x
in
self.
__name
if
x.isdigit()])
121
122
if
(self.
__A
!=
''
):
123
self.
__A
= int(self.
__A
)
124
else
:
125
self.
__A
= 1
126
127
self.
__elementname
=
''
.join([x
for
x
in
self.
__name
if
not
x.isdigit()]).strip()
128
if
self.
__elementname
in
self.
__elname
:
129
self.
__Z
= self.
__elname
.index(self.
__elementname
)
#protonnumber
130
else
:
131
self.
__Z
= -1
132
if
not
self.
__quiet
:
133
print(
'Warning: The element '
+self.
__elementname
+
' is not known by nuclei class.'
)
134
self.
__warn
=
True
135
136
self.
__N
= self.
__A
- self.
__Z
137
138
#~ Getters
139
def
get_A
(self):
140
"""
141
get_A : Get the mass number of the nucleus
142
"""
143
return
self.
__A
144
145
def
get_elnames
(self):
146
"""
147
get_elnames : Get elementnames
148
"""
149
return
self.
__elname
150
151
def
get_Z
(self):
152
"""
153
get_Z : Get the proton number of the nucleus
154
"""
155
return
self.
__Z
156
157
def
get_N
(self):
158
"""
159
get_N : Get the neutron number of the nucleus
160
"""
161
return
self.
__N
162
163
def
get_Y
(self):
164
"""
165
get_Y : Get the abundance of the nucleus
166
"""
167
return
self.
__ab
168
169
def
get_X
(self):
170
"""
171
get_X : Get the mass fraction of the nucleus
172
"""
173
return
self.
__ab
* self.
__A
174
175
def
get_elementname
(self):
176
"""
177
get_elementname : Get the corresponding name of the element (as a string)
178
"""
179
return
self.
__elementname
180
181
def
get_name
(self):
182
"""
183
get_name : Get the full name of the nucleus. The name is the elementname plus the massnumber as a string
184
"""
185
return
self.
__name
186
187
def
get_input_name
(self):
188
"""
189
get_input_name : Get the name as it was inputted
190
"""
191
return
self.
__input_name
192
193
194
195
196
def
get_seedline
(self):
197
"""
198
get_seedline : Get the line for the nucleus as it is necessary for the seed file
199
"""
200
mafra =
'%1.6e'
% float(self.
get_X
())
201
nam = self.
get_name
()
202
if
nam.strip() ==
'neutron'
:
203
nam =
'n'
204
elif
nam.strip() ==
'h1'
:
205
nam =
'p'
206
elif
nam.strip() ==
'h2'
:
207
nam =
'd'
208
elif
nam.strip() ==
'h3'
:
209
nam =
't'
210
211
line = nam.rjust(5) +
' '
*7 + mafra
212
return
line
213
214
def
set_X
(self,X):
215
"""
216
set_X : set the massfraction of the nucleus
217
"""
218
self.
__ab
= X / self.
__A
219
220
def
set_Y
(self,Y):
221
"""
222
set_X : set the massfraction of the nucleus
223
"""
224
self.
__ab
= Y
225
226
def
set_sortcriteria
(self,criteria):
227
"""
228
set_sortcriteria : Set the criteria for sorting (possible values are "A" and "Z")
229
"""
230
if
criteria ==
'Z'
:
231
self.
__sort_Z
=
True
232
if
criteria ==
'A'
:
233
self.
__sort_Z
=
False
234
235
def
__gt__
(self,other):
236
"""
237
A nucleus is greater if it has an higher proton number
238
"""
239
if
self.
__sort_Z
==
True
:
#Sort Z
240
if
(self.
__Z
> other.get_Z()):
241
return
True
242
elif
(self.
__Z
== other.get_Z()):
243
if
(self.
__A
>= other.get_A()):
244
return
True
245
else
:
246
return
False
247
else
:
248
return
False
249
else
:
#Sort A
250
if
(self.
__A
> other.get_A()):
251
return
True
252
elif
(self.
__A
== other.get_A()):
253
if
(self.
__Z
>= other.get_Z()):
254
return
True
255
else
:
256
return
False
257
else
:
258
return
False
bin.class_files.nucleus_class.nucleus.__warn
__warn
Definition:
nucleus_class.py:25
bin.class_files.nucleus_class.nucleus.get_Y
def get_Y(self)
Definition:
nucleus_class.py:163
bin.class_files.nucleus_class.nucleus.__elname
__elname
Definition:
nucleus_class.py:47
bin.class_files.nucleus_class.nucleus.get_elnames
def get_elnames(self)
Definition:
nucleus_class.py:145
bin.class_files.nucleus_class.nucleus.get_name
def get_name(self)
Definition:
nucleus_class.py:181
bin.class_files.nucleus_class.nucleus.__init__
def __init__(self, name='', Z=-1, N=-1, Y=0., quiet=False, init_prop=False)
Definition:
nucleus_class.py:15
bin.class_files.nucleus_class.nucleus.__initialize
def __initialize(self)
Definition:
nucleus_class.py:97
bin.class_files.nucleus_class.nucleus.get_N
def get_N(self)
Definition:
nucleus_class.py:157
bin.class_files.nucleus_class.nucleus.__elementname
__elementname
Definition:
nucleus_class.py:46
bin.class_files.nucleus_class.nucleus.is_stable
def is_stable(self)
Definition:
nucleus_class.py:84
bin.class_files.nucleus_class.nucleus.__input_name
__input_name
Definition:
nucleus_class.py:20
bin.class_files.nucleus_class.nucleus.__sort_Z
__sort_Z
Definition:
nucleus_class.py:30
bin.class_files.nucleus_class.nucleus.get_X
def get_X(self)
Definition:
nucleus_class.py:169
bin.class_files.nucleus_class.nucleus.__Z
__Z
Definition:
nucleus_class.py:23
bin.class_files.nucleus_class.nucleus.__ab
__ab
Definition:
nucleus_class.py:27
bin.class_files.nucleus_class.nucleus.get_not_a_isotope
def get_not_a_isotope(self)
Definition:
nucleus_class.py:91
bin.class_files.nucleus_class.nucleus.get_Z
def get_Z(self)
Definition:
nucleus_class.py:151
bin.class_files.nucleus_class.nucleus.set_X
def set_X(self, X)
Definition:
nucleus_class.py:214
bin.class_files.nucleus_class.nucleus.get_input_name
def get_input_name(self)
Definition:
nucleus_class.py:187
bin.class_files.nucleus_class.nucleus.__quiet
__quiet
Definition:
nucleus_class.py:26
bin.class_files.nucleus_class.nucleus.__name
__name
Definition:
nucleus_class.py:21
bin.class_files.nucleus_class.nucleus
Definition:
nucleus_class.py:9
bin.class_files.nucleus_class.nucleus.__nrnname
__nrnname
Definition:
nucleus_class.py:119
bin.class_files.nucleus_class.nucleus.get_A
def get_A(self)
Definition:
nucleus_class.py:139
bin.class_files.nucleus_class.nucleus.get_seedline
def get_seedline(self)
Definition:
nucleus_class.py:196
bin.class_files.nucleus_class.nucleus.__gt__
def __gt__(self, other)
Definition:
nucleus_class.py:235
bin.class_files.nucleus_class.nucleus.set_Y
def set_Y(self, Y)
Definition:
nucleus_class.py:220
bin.class_files.nucleus_class.nucleus.set_sortcriteria
def set_sortcriteria(self, criteria)
Definition:
nucleus_class.py:226
bin.class_files.nucleus_class.nucleus.get_elementname
def get_elementname(self)
Definition:
nucleus_class.py:175
bin.class_files.nucleus_class.nucleus.__A
__A
Definition:
nucleus_class.py:22
bin.class_files.nucleus_class.nucleus.__not_a_isotope
__not_a_isotope
Definition:
nucleus_class.py:67
bin.class_files.nucleus_class.nucleus.__is_stable
__is_stable
Definition:
nucleus_class.py:28
bin.class_files.nucleus_class.nucleus.__init_properties
def __init_properties(self)
Definition:
nucleus_class.py:71
bin.class_files.nucleus_class.nucleus.__N
__N
Definition:
nucleus_class.py:24
bin
class_files
nucleus_class.py