TDCRPy 1.8.16__py3-none-any.whl → 1.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of TDCRPy might be problematic. Click here for more details.
- {TDCRPy-1.8.16.dist-info → TDCRPy-1.9.0.dist-info}/METADATA +4 -3
- {TDCRPy-1.8.16.dist-info → TDCRPy-1.9.0.dist-info}/RECORD +9 -9
- tdcrpy/TDCRPy.py +12 -16
- tdcrpy/TDCR_model_lib.py +1 -1
- tdcrpy/config.toml +1 -10
- tdcrpy/test/test_tdcrpy.py +54 -33
- {TDCRPy-1.8.16.dist-info → TDCRPy-1.9.0.dist-info}/LICENCE.md +0 -0
- {TDCRPy-1.8.16.dist-info → TDCRPy-1.9.0.dist-info}/WHEEL +0 -0
- {TDCRPy-1.8.16.dist-info → TDCRPy-1.9.0.dist-info}/top_level.txt +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: TDCRPy
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.9.0
|
|
4
4
|
Summary: TDCR model
|
|
5
5
|
Home-page: https://pypi.org/project/TDCRPy/
|
|
6
6
|
Author: RomainCoulon (Romain Coulon)
|
|
7
7
|
Author-email: <romain.coulon@bipm.org>
|
|
8
|
-
License: MIT
|
|
9
8
|
Project-URL: Documentation, https://github.com/RomainCoulon/TDCRPy/
|
|
10
9
|
Keywords: Python,TDCR,Monte-Carlo,radionuclide,scintillation,counting
|
|
11
10
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -224,10 +223,12 @@ By default, the Monte-Carlo model is not applied for the following list radionuc
|
|
|
224
223
|
An advanced setting can be configured in the `config.toml` file for functions `TDCRPy.TDCRPy()` and `TDCRoptimize.eff()`. In this file:
|
|
225
224
|
* By default `Y = True` so that the analytical model is applied for solution containing only pure beta emitting radionuclides. If you would like to apply the MC calculation also for these nuclides, set `Y = False`.
|
|
226
225
|
* The list of radionuclides for which the analytical model is applied is defined by default such as `radListPureBeta = H-3, C-14, S-35, Ca-45, Ni-63, Sr-89, Sr-90, Tc-99, Pm-147, Pu-241`.
|
|
227
|
-
* The number of bins to discretize the linear energy space for quenching calculation for the radionuclides listed above has been set to induce an error from numerical approximation below 10^-4^. Thus the parameter `nE = 7000, 1000, 1000, 500, 2000,
|
|
226
|
+
* The number of bins to discretize the linear energy space for quenching calculation for the radionuclides listed above has been set to induce an error from numerical approximation below 10^-4^. Thus the parameter `nE = 7000, 1000, 1000, 500, 2000, 500, 200, 500, 1000, 7000`.
|
|
228
227
|
* In the case of Monte-Carlo calculation, the number of bins to discretize the linear energy space for quenching calculation can be adjusted. `nE_electron` and `nE_alpha` parameters for respectively electrons and alpha particles are respectiveley set by default such as `nE_electron = 1000`
|
|
229
228
|
and `nE_alpha = 1000`. These values ensure an error on quenched energy estimation from numerical approximation below 10^-3^.
|
|
230
229
|
* By default the calculation is set for Ultima-Gold cocktail mixed with a small amount of aqueous solution. You can adapt for a specific scintillator by changing the `density` (default `density=0.96`), the mean charge number `Z` (default `Z=5.2`) and the mean mass number `A` (default `A=11.04`) of the scintillator.
|
|
230
|
+
* To process photoelectric interactions, the atomic concentration of the scintillator is spectified. By default `pH = 0.578772`, `pC = 0.338741`, `pN = 0.000302`, `pO = 0.082022`, `pP = 0.000092`, `pCl = 0.000071`
|
|
231
|
+
* A correction due reverse micelles in the scintillator is implemented. The diameter of the micelles and the fraction of aqueous solution is specified. By defaut `diam_micelle = 2`, `fAq = 0.1`
|
|
231
232
|
* To optimize the speed of the Monte-Carlo calculation, a spline interpolation on precalculated quenched energy is applied. The parameter `depthSpline` (default `depthSpline = 5`) sets the number of bins on each side of the energy point on which the interpolation is applied. The parameter `Einterp` (default `Einterp = 1`) set the energy (in keV) above which the interpolation is applied.
|
|
232
233
|
|
|
233
234
|
### TDCRoptimize.eff()
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
tdcrpy/TDCRPy.py,sha256=
|
|
1
|
+
tdcrpy/TDCRPy.py,sha256=PTLcVHocXvnkO-LmDbWTtMCMfdUavveB-YtOFNGHtIM,53603
|
|
2
2
|
tdcrpy/TDCRPy1.py,sha256=QTBZh5B5JWnGB0BQfD-cFmwA9W080OD4sG-aj50-ejo,38106
|
|
3
|
-
tdcrpy/TDCR_model_lib.py,sha256=
|
|
3
|
+
tdcrpy/TDCR_model_lib.py,sha256=pXzxdFEheBHHBbwbqi2CLNezgiIThm9tkAyIJ8NQdRg,98155
|
|
4
4
|
tdcrpy/TDCRoptimize.py,sha256=c2XIGveeLdVYYek4Rg6dygMvVA2xIrIkMb3L-_jUucM,6496
|
|
5
5
|
tdcrpy/__init__.py,sha256=vQslGLsoZPIceaitnSHOqN6lUdjEyJ3YhfJ6tYdXt-s,127
|
|
6
|
-
tdcrpy/config.toml,sha256=
|
|
6
|
+
tdcrpy/config.toml,sha256=rHuuM520HZquGrEd8LAVUdvnzZGtk90pigudy-MXnm8,1389
|
|
7
7
|
tdcrpy/test2.py,sha256=poLLXJyIaCeqh1VSkwgbi-udvY7lQjxz_YStKjJXGhU,501
|
|
8
8
|
tdcrpy/EfficiencyCurves/Ag-108/EffD_Ag-108_[1]_1e-05.txt,sha256=OUoMuqPTw3fXLu5qaHUFN2iW0dPJ9cRyh99a6mUcEus,43
|
|
9
9
|
tdcrpy/EfficiencyCurves/Ag-108/EffS_Ag-108_[1]_1e-05.txt,sha256=hojCq_MFAw8ONjoDmQfeE9gCXISwhScgAk-N0Pjbg00,45
|
|
@@ -1079,9 +1079,9 @@ tdcrpy/docs/_build/html/search.html,sha256=IeTP6CsRdqKWOJttbtskg1oBgdN8norKlzai4
|
|
|
1079
1079
|
tdcrpy/docs/_build/html/source/modules.html,sha256=Jf-qxVBId0UgpwyvYuyjtMNG-ezPOK1oH_IxRXAWTRs,3601
|
|
1080
1080
|
tdcrpy/docs/_build/html/source/tdcrpy.html,sha256=-38lHMNFB22p1tWJEeN3yDqfDiCYE304vxDamO1-iRc,3779
|
|
1081
1081
|
tdcrpy/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1082
|
-
tdcrpy/test/test_tdcrpy.py,sha256=
|
|
1083
|
-
TDCRPy-1.
|
|
1084
|
-
TDCRPy-1.
|
|
1085
|
-
TDCRPy-1.
|
|
1086
|
-
TDCRPy-1.
|
|
1087
|
-
TDCRPy-1.
|
|
1082
|
+
tdcrpy/test/test_tdcrpy.py,sha256=MTMiE0N7RiyE8Rom2Yu8kCDR03pJga9D6_o7wr7leVA,4675
|
|
1083
|
+
TDCRPy-1.9.0.dist-info/LICENCE.md,sha256=ZTpWyGU3qv_iwEpgvCijoCuCYpOPpyzJCgOk46WpUKU,1066
|
|
1084
|
+
TDCRPy-1.9.0.dist-info/METADATA,sha256=9EclWWZsFjnCopuEJDOI2yuJHFwR8-B-m9M67mWpI-4,15995
|
|
1085
|
+
TDCRPy-1.9.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
1086
|
+
TDCRPy-1.9.0.dist-info/top_level.txt,sha256=f4vzFFcKSEnonAACs0ZXuRczmroLLqtPTqXFymU_VU0,14
|
|
1087
|
+
TDCRPy-1.9.0.dist-info/RECORD,,
|
tdcrpy/TDCRPy.py
CHANGED
|
@@ -10,8 +10,6 @@ Bureau International des Poids et Mesures
|
|
|
10
10
|
|
|
11
11
|
## IMPORT PYTHON MODULES
|
|
12
12
|
import tdcrpy.TDCR_model_lib as tl
|
|
13
|
-
# import TDCR_model_lib as tl
|
|
14
|
-
# import tdcrpy.TDCR_model_lib as tl
|
|
15
13
|
import importlib.resources
|
|
16
14
|
from importlib.resources import files
|
|
17
15
|
import configparser
|
|
@@ -83,7 +81,7 @@ def relaxAtom(daughter_relax,particle_vec,energy_vec,rad,Display=False,uncData=F
|
|
|
83
81
|
relaxation = False
|
|
84
82
|
return particle_vec, energy_vec
|
|
85
83
|
|
|
86
|
-
def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=False, barp=False,uncData=False):
|
|
84
|
+
def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=False, barp=False, Smodel=True, uncData=False):
|
|
87
85
|
"""
|
|
88
86
|
This is the main function of the TDCRPy package running the Monte-Carlo Triple-to-Double Coincidence Ratio model.
|
|
89
87
|
The computation is made for a given solution containing a radionuclide (or a mixture of radionuclides), a given volume of scintillator V and a given Birks constant kB.
|
|
@@ -142,6 +140,8 @@ def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=Fals
|
|
|
142
140
|
"True" to display details on the decay sampling. The default is False.
|
|
143
141
|
barp : Boolean, optional
|
|
144
142
|
"True" to display the calculation progress. The default is True.
|
|
143
|
+
Smodel : Boolean, optional
|
|
144
|
+
"True" to run the stochastic TDCR model. False to run the analytical caclulation (available only for pure beta emitters).
|
|
145
145
|
|
|
146
146
|
Returns
|
|
147
147
|
-------
|
|
@@ -166,17 +166,10 @@ def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=Fals
|
|
|
166
166
|
file_conf = data_path
|
|
167
167
|
config.read(file_conf)
|
|
168
168
|
tau=config["Inputs"].getfloat("tau")
|
|
169
|
-
Y=config["Inputs"].getboolean("Y")
|
|
170
169
|
micCorr=config["Inputs"].getboolean("micCorr")
|
|
171
|
-
radListPureBeta=
|
|
172
|
-
radListPureBeta
|
|
173
|
-
|
|
174
|
-
X = Rad in radListPureBeta
|
|
175
|
-
if X:
|
|
176
|
-
nElist=config["Inputs"].get("nE")
|
|
177
|
-
nElist=nElist.split(',')
|
|
178
|
-
nElist = [int(i) for i in nElist]
|
|
179
|
-
if X and Y:
|
|
170
|
+
radListPureBeta = ["H-3", "C-14", "S-35", "Ca-45", "Ni-63", "Sr-89", "Sr-90", "Tc-99", "Pm-147", "Pu-241"]
|
|
171
|
+
if (Rad in radListPureBeta) and (not Smodel):
|
|
172
|
+
nElist = [7000, 1000, 1000, 500, 2000, 500, 200, 500, 1000, 7000] # discretization
|
|
180
173
|
inE = radListPureBeta.index(Rad)
|
|
181
174
|
nE = nElist[inE]
|
|
182
175
|
print(f"Analytical model used for {Rad}")
|
|
@@ -185,6 +178,8 @@ def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=Fals
|
|
|
185
178
|
return out
|
|
186
179
|
if mode == "eff":
|
|
187
180
|
return out[0], 0, out[1], 0, out[2], 0
|
|
181
|
+
elif (not Smodel) and (not Rad in radListPureBeta):
|
|
182
|
+
print("cannot be processed by the analytical model.")
|
|
188
183
|
else:
|
|
189
184
|
nE_electron = config["Inputs"].getint("nE_electron")
|
|
190
185
|
nE_alpha = config["Inputs"].getint("nE_alpha")
|
|
@@ -830,16 +825,17 @@ def TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=Fals
|
|
|
830
825
|
# TAB = 0.992232838598821
|
|
831
826
|
# TBC = 0.992343419459002
|
|
832
827
|
# TAC = 0.99275350064608
|
|
833
|
-
# Rad="
|
|
828
|
+
# Rad="H-3"
|
|
834
829
|
# pmf_1="1"
|
|
835
|
-
# N =
|
|
830
|
+
# N = 100
|
|
836
831
|
# kB =1.0e-5
|
|
837
832
|
# V = 10
|
|
838
833
|
# mode = "eff"
|
|
839
834
|
# mode2 = "sym"
|
|
840
835
|
|
|
841
|
-
# out = TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=
|
|
836
|
+
# out = TDCRPy(L, TD, TAB, TBC, TAC, Rad, pmf_1, N, kB, V, mode, mode2, Display=False, barp=False, Smodel=False, uncData=False)
|
|
842
837
|
|
|
838
|
+
# print(out)
|
|
843
839
|
|
|
844
840
|
# L = 1
|
|
845
841
|
# TD = 0.977667386529166
|
tdcrpy/TDCR_model_lib.py
CHANGED
|
@@ -2385,7 +2385,7 @@ def modelAnalytical(L,TD,TAB,TBC,TAC,rad,kB,V,mode,mode2,ne):
|
|
|
2385
2385
|
for i, ei in enumerate(e):
|
|
2386
2386
|
# ed = energie_dep_beta2(ei,V)
|
|
2387
2387
|
# em[i] = E_quench_e(ei*1e3,ed*1e3,kB*1e3,ne)*1e-3
|
|
2388
|
-
em[i] = Em_e(ei*1e3,
|
|
2388
|
+
em[i] = Em_e(ei*1e3,ei*1e3,kB*1e3,ne)*1e-3
|
|
2389
2389
|
|
|
2390
2390
|
|
|
2391
2391
|
if mode2=="sym":
|
tdcrpy/config.toml
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
## This is the configuration file of the TDCRPy code
|
|
2
2
|
|
|
3
3
|
[Inputs]
|
|
4
|
-
##
|
|
5
|
-
# Analytical model for pure beta emitting radionuclides (True or False)
|
|
6
|
-
Y = True
|
|
7
|
-
# List of radionuclides for which the analytical model is applied
|
|
8
|
-
radListPureBeta = H-3, C-14, S-35, Ca-45, Ni-63, Sr-89, Sr-90, Tc-99, Pm-147, Pu-241
|
|
9
|
-
# Number of bins to discretize the linear energy space for quenching calculation
|
|
10
|
-
# and achieve a relative standard uncertainty below 1e-4.
|
|
11
|
-
nE = 7000, 1000, 1000, 500, 2000, 500, 200, 500, 1000, 7000
|
|
12
|
-
|
|
13
|
-
## OTHER CASES
|
|
4
|
+
## QUENCHING
|
|
14
5
|
# Number of bins to discretize the linear energy space for quenching calculation
|
|
15
6
|
# to achieve a relative standard uncertainty below 1e-4 on the estimated quenched energy: nE_electron = nE_alpha = 10000
|
|
16
7
|
# to achieve a relative standard uncertainty below 1e-3 on the estimated quenched energy: nE_electron = nE_alpha = 1000
|
tdcrpy/test/test_tdcrpy.py
CHANGED
|
@@ -43,8 +43,12 @@ class TestMyModule(unittest.TestCase):
|
|
|
43
43
|
|
|
44
44
|
def test_readBetaShape(self):
|
|
45
45
|
result = np.mean(tdcrpy.TDCR_model_lib.readBetaShape("H-3","beta-","tot"))
|
|
46
|
-
self.assertEqual(result, 4.
|
|
47
|
-
|
|
46
|
+
self.assertEqual(result, 4.661922025723472)
|
|
47
|
+
|
|
48
|
+
def test_readBetaSpectra(self):
|
|
49
|
+
result = np.mean(tdcrpy.TDCR_model_lib.readBetaSpectra("H-3"))
|
|
50
|
+
self.assertEqual(result, 4.6155)
|
|
51
|
+
|
|
48
52
|
def test_E_quench_e(self):
|
|
49
53
|
result = np.mean(tdcrpy.TDCR_model_lib.E_quench_e(100*1e3,100*1e3,0.01,20000)*1e-3)
|
|
50
54
|
self.assertEqual(result, 91.24694728992633)
|
|
@@ -55,54 +59,71 @@ class TestMyModule(unittest.TestCase):
|
|
|
55
59
|
|
|
56
60
|
def test_E_quench_a(self):
|
|
57
61
|
result = np.mean(tdcrpy.TDCR_model_lib.E_quench_a(5000,1e-5,20000))
|
|
58
|
-
self.assertEqual(result, 344.
|
|
62
|
+
self.assertEqual(result, 344.28633759073443)
|
|
63
|
+
|
|
64
|
+
# run_interpolate tested inside Em_a() and Em_e()
|
|
65
|
+
|
|
66
|
+
def test_Em_a(self):
|
|
67
|
+
result = tdcrpy.TDCR_model_lib.Em_a(5000, 1e-5, 10000)
|
|
68
|
+
self.assertLessEqual(result, 344.12105896)
|
|
69
|
+
|
|
70
|
+
def test_Em_e(self):
|
|
71
|
+
result = tdcrpy.TDCR_model_lib.Em_e(50000, 50000, 1e-5, 10000)
|
|
72
|
+
self.assertLessEqual(result, 48568.14392205286)
|
|
73
|
+
|
|
74
|
+
def test_Em_e2(self):
|
|
75
|
+
result = tdcrpy.TDCR_model_lib.Em_e(50000, 25000, 1e-5, 10000)
|
|
76
|
+
self.assertLessEqual(result, 25000.754895953367)
|
|
77
|
+
|
|
78
|
+
def test_micelleLoss(self):
|
|
79
|
+
result = tdcrpy.TDCR_model_lib.micelleLoss(5)
|
|
80
|
+
self.assertLessEqual(result, 0.9)
|
|
81
|
+
|
|
82
|
+
def test_micelleLoss2(self):
|
|
83
|
+
result = tdcrpy.TDCR_model_lib.micelleLoss(0.2)
|
|
84
|
+
self.assertLessEqual(result, 0.86)
|
|
59
85
|
|
|
60
86
|
def test_read_matrice(self):
|
|
61
87
|
result = tdcrpy.TDCR_model_lib.read_matrice(fp1,0)[50][50]
|
|
62
88
|
self.assertEqual(result, 0.000718)
|
|
63
|
-
|
|
89
|
+
|
|
90
|
+
# energie_dep_gamma() no more used.
|
|
91
|
+
|
|
64
92
|
def test_energie_dep_gamma(self):
|
|
65
|
-
result = tdcrpy.TDCR_model_lib.
|
|
93
|
+
result = tdcrpy.TDCR_model_lib.energie_dep_gamma2(100,10)
|
|
66
94
|
self.assertLessEqual(result, 100)
|
|
67
|
-
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
# self.assertLessEqual(result, 100)
|
|
71
|
-
|
|
95
|
+
|
|
96
|
+
# energie_dep_beta() no more used.
|
|
97
|
+
|
|
72
98
|
def test_energie_dep_beta(self):
|
|
73
|
-
result = tdcrpy.TDCR_model_lib.
|
|
99
|
+
result = tdcrpy.TDCR_model_lib.energie_dep_beta2(100,10)
|
|
74
100
|
self.assertLessEqual(result, 100)
|
|
75
101
|
|
|
76
|
-
#
|
|
77
|
-
# result = tdcrpy.TDCR_model_lib.energie_dep_beta2(100)
|
|
78
|
-
# self.assertLessEqual(result, 100)
|
|
79
|
-
|
|
80
|
-
# writeEffcurves(x,y,uy,rad,p,kB,SDT)
|
|
102
|
+
# writeEffcurves() no more used.
|
|
81
103
|
|
|
82
104
|
def test_transf_name(self):
|
|
83
105
|
result = tdcrpy.TDCR_model_lib.transf_name("108Ag")
|
|
84
106
|
self.assertLessEqual(result, "Ag108")
|
|
85
107
|
|
|
86
|
-
def
|
|
87
|
-
result = tdcrpy.TDCR_model_lib.
|
|
88
|
-
self.assertLessEqual(result[0]
|
|
89
|
-
self.assertLessEqual(result[1][0], [21.0203, 21.1774, 23.874466666666667, 24.3217, 20.580333333333332, 2.65])
|
|
90
|
-
self.assertLessEqual(result[2][0], [0.44, 0.84, 0.23, 0.0391, 0.341, 1.97])
|
|
91
|
-
|
|
92
|
-
def test_Em_a(self):
|
|
93
|
-
result = tdcrpy.TDCR_model_lib.Em_a(5000, 1e-5, 10000)
|
|
94
|
-
self.assertLessEqual(result, 344.12105896)
|
|
108
|
+
def test_read_ENSDF(self):
|
|
109
|
+
result = tdcrpy.TDCR_model_lib.read_ENSDF("Co-60")
|
|
110
|
+
self.assertLessEqual(result[0][0], 'NI60')
|
|
95
111
|
|
|
96
|
-
def
|
|
97
|
-
result = tdcrpy.TDCR_model_lib.
|
|
98
|
-
self.assertLessEqual(result,
|
|
112
|
+
def test_incer(self):
|
|
113
|
+
result = tdcrpy.TDCR_model_lib.incer(["0.9", "0.2"],["1", "1"])
|
|
114
|
+
self.assertLessEqual(result, [[1.0], [1.0]])
|
|
99
115
|
|
|
100
|
-
def
|
|
101
|
-
result = tdcrpy.TDCR_model_lib.
|
|
102
|
-
self.assertLessEqual(result,
|
|
116
|
+
def test_relaxation_atom(self):
|
|
117
|
+
result = tdcrpy.TDCR_model_lib.relaxation_atom("NI60","Co-60",lacune="Atom_L")
|
|
118
|
+
self.assertLessEqual(result, ('Auger L', 0.8))
|
|
103
119
|
|
|
104
|
-
|
|
105
|
-
|
|
120
|
+
def test_format_modif(self):
|
|
121
|
+
result = tdcrpy.TDCR_model_lib.format_modif("17-3")
|
|
122
|
+
self.assertLessEqual(result, '17E-3')
|
|
123
|
+
|
|
124
|
+
def test_reperer_energie_index(self):
|
|
125
|
+
result = tdcrpy.TDCR_model_lib.reperer_energie_index(17,[5,11,13,17,52,64])
|
|
126
|
+
self.assertLessEqual(result, 3)
|
|
106
127
|
|
|
107
128
|
# modelAnalytical(L,TD,TAB,TBC,TAC,rad,kB,V,mode,mode2,ne)
|
|
108
129
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|