TDCRPy 2.4.0__py3-none-any.whl → 2.5.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/TDCRPy.py CHANGED
@@ -1236,20 +1236,20 @@ def effA(TD, Rad, pmf_1, kB, V, L=1, maxiter=20, xatol=1e-7, disp=False):
1236
1236
 
1237
1237
 
1238
1238
  # mode = "eff" # ask for efficiency calculation
1239
- # Rad="Na-22" # radionuclides
1239
+ # Rad="Fe-55" # radionuclides
1240
1240
  # pmf_1="1" # relatives fractions of the radionulides
1241
1241
  # N = 1000 # number of Monte Carlo trials
1242
1242
  # kB =1.0e-5 # Birks constant in cm keV-1
1243
1243
  # V = 10 # volume of scintillator in mL
1244
- # L=np.logspace(-3,2,num=100) # free parameter in keV-1
1244
+ # L=np.logspace(-1,2,num=100) # free parameter in keV-1
1245
1245
 
1246
- # # TDCRPy(1, Rad, pmf_1, 10, kB, V, mode, Display= True, barp=False, record=True)
1247
1246
  # # Record decay histories in temporary files
1248
- # TDCRPy(L[0], Rad, pmf_1, N, kB, V, mode, barp=False, record=True)
1247
+ # TDCRPy(L[0], Rad, pmf_1, N, kB, V, mode, barp=False, record=True, fullMC=False)
1248
+ # # TDCRPy(100, Rad, pmf_1, N, kB, V, mode, barp=False, record=True, fullMC=True)
1249
1249
 
1250
1250
  # effS, u_effS, effD, u_effD, effT, u_effT, effD2, u_effD2 = [], [],[], [],[], [], [], []
1251
1251
  # for l in tqdm(L, desc="free parameters ", unit=" iterations"):
1252
- # out = TDCRPy(l, Rad, pmf_1, N, kB, V, mode, readRecHist=True)
1252
+ # out = TDCRPy(l, Rad, pmf_1, N, kB, V, mode, readRecHist=True, fullMC=False)
1253
1253
  # effS.append(out[2])
1254
1254
  # u_effS.append(out[3])
1255
1255
  # effD.append(out[2])
tdcrpy/TDCR_model_lib.py CHANGED
@@ -60,6 +60,7 @@ def readParameters(disp=False):
60
60
  diam_micelle = config["Inputs"].getfloat("diam_micelle")
61
61
  fAq = config["Inputs"].getfloat("fAq")
62
62
  micCorr = config["Inputs"].getboolean("micCorr")
63
+ alphaDir = config["Inputs"].getfloat("alphaDir")
63
64
 
64
65
  if disp:
65
66
  print(f"number of integration bins for electrons = {nE_electron}")
@@ -76,13 +77,14 @@ def readParameters(disp=False):
76
77
  print(f"activation of the micelle correction = {micCorr}")
77
78
  print(f"diameter of micelle = {diam_micelle} nm")
78
79
  print(f"acqueous fraction = {fAq}")
80
+ print(f"alpha parameter of the hidden Dirichlet process = {alphaDir}")
79
81
  print(f"coincidence resolving time = {tau} ns")
80
82
  print(f"extended dead time = {extDT} µs")
81
83
  print(f"measurement time = {measTime} min")
82
84
 
83
- return nE_electron, nE_alpha, RHO, Z, A, depthSpline, Einterp_a, Einterp_e, diam_micelle, fAq, tau, extDT, measTime, micCorr, pH,pC,pN,pO,pP,pCl
85
+ return nE_electron, nE_alpha, RHO, Z, A, depthSpline, Einterp_a, Einterp_e, diam_micelle, fAq, tau, extDT, measTime, micCorr, alphaDir, pH,pC,pN,pO,pP,pCl
84
86
 
85
- nE_electron, nE_alpha, RHO, Z, A, depthSpline, Einterp_a, Einterp_e, diam_micelle, fAq, tau, extDT, measTime, micCorr, pH,pC,pN,pO,pP,pCl = readParameters()
87
+ nE_electron, nE_alpha, RHO, Z, A, depthSpline, Einterp_a, Einterp_e, diam_micelle, fAq, tau, extDT, measTime, micCorr, alphaDir, pH,pC,pN,pO,pP,pCl = readParameters()
86
88
 
87
89
  p_atom = np.array([pH,pC,pN,pO,pP,pCl]) # atom abondance in the scintillator
88
90
  p_atom /= sum(p_atom)
@@ -192,6 +194,12 @@ def modifyMicCorr(x):
192
194
  x0 = readParameters()[13]
193
195
  data1 = data0.replace(f"micCorr = {x0}",f"micCorr= {x}")
194
196
  writeConfifAsstr(data1)
197
+
198
+ def modifyAlphaDir(x):
199
+ data0 = readConfigAsstr()
200
+ x0 = readParameters()[14]
201
+ data1 = data0.replace(f"alphaDir = {x0}",f"alphaDir = {x}")
202
+ writeConfifAsstr(data1)
195
203
 
196
204
  def read_temp_files(copy=False, path="C:"):
197
205
 
@@ -3004,7 +3012,7 @@ def detectProbabilities(L, e_quenching, e_quenching2, t1, evenement, extDT, meas
3004
3012
  return efficiency0_S, efficiency0_D, efficiency0_T, efficiency0_AB, efficiency0_BC, efficiency0_AC, efficiency0_D2
3005
3013
 
3006
3014
 
3007
- def detectProbabilitiesMC(L, e_quenching, e_quenching2, t1, evenement, extDT, measTime):
3015
+ def detectProbabilitiesMC(L, e_quenching, e_quenching2, t1, evenement, extDT, measTime, dir_param = alphaDir):
3008
3016
  """
3009
3017
  Calculate detection probabilities for LS counting systems - see Broda, R., Cassette, P., Kossert, K., 2007. Radionuclide metrology using liquid scintillation counting. Metrologia 44. https://doi.org/10.1088/0026-1394/44/4/S06
3010
3018
 
@@ -3048,115 +3056,77 @@ def detectProbabilitiesMC(L, e_quenching, e_quenching2, t1, evenement, extDT, me
3048
3056
  else:
3049
3057
  symm = True
3050
3058
 
3059
+ alpha = 1
3060
+
3061
+ if alpha < 1000:
3062
+ dirichTD = np.random.dirichlet([alpha, alpha, alpha])
3063
+ dirichCN = np.random.dirichlet([alpha, alpha])
3064
+ else:
3065
+ dirichTD = [1/3, 1/3, 1/3]
3066
+ dirichCN = [1/2, 1/2]
3067
+
3068
+ efficiency0_S = 0; efficiency0_T = 0; efficiency0_D = 0
3069
+ efficiency0_AB = 0; efficiency0_BC = 0; efficiency0_AC = 0
3070
+ efficiency0_D2 = 0;
3071
+
3051
3072
  if symm:
3052
- if evenement !=1 and t1 > extDT*1e-6 and t1 < measTime*60:
3053
- m = len(e_quenching)
3054
- n_ph = np.random.poisson(np.asarray((e_quenching+e_quenching2)*L))
3055
- n_S = 0; n_D = 0; n_T = 0; n_AB = 0; n_BC = 0; n_AC = 0; n_D2 = 0; n_A2 = 0; n_B2 = 0;
3056
- for j in n_ph:
3057
- n_phPMT = np.random.multinomial(j, [1/3, 1/3, 1/3])
3058
- if sum(n_phPMT>1)>0: n_S +=1
3059
- if sum(n_phPMT>1)>1: n_D +=1
3060
- if sum(n_phPMT>1)>2: n_T +=1
3061
- if n_phPMT[0]>1 and n_phPMT[1]>1: n_AB +=1
3062
- if n_phPMT[1]>1 and n_phPMT[2]>1: n_BC +=1
3063
- if n_phPMT[0]>1 and n_phPMT[2]>1: n_AC +=1
3064
- efficiency0_S = n_S/m
3065
- efficiency0_T = n_T/m
3066
- efficiency0_D = n_D/m
3067
- efficiency0_AB = n_AB/m
3068
- efficiency0_BC = n_BC/m
3069
- efficiency0_AC = n_AC/m
3070
- for j in n_ph:
3071
- n_phPMT = np.random.multinomial(j, [1/2, 1/2])
3072
- if sum(n_phPMT>1)>1: n_D2 +=1
3073
- if n_phPMT[0]>1: n_A2 +=1
3074
- if n_phPMT[1]>1: n_B2 +=1
3075
- # efficiency0_A2 = n_A2/m
3076
- # efficiency0_B2 = n_B2/m
3077
- efficiency0_D2 = n_D2/m
3078
- else: # symm and no deleayed event sum
3079
- m = len(e_quenching)
3080
- n_ph = np.random.poisson(np.asarray(e_quenching*L))
3081
- n_S = 0; n_D = 0; n_T = 0; n_AB = 0; n_BC = 0; n_AC = 0; n_D2 = 0; n_A2 = 0; n_B2 = 0;
3082
- for j in n_ph:
3083
- n_phPMT = np.random.multinomial(j, [1/3, 1/3, 1/3])
3084
- if sum(n_phPMT>1)>0: n_S +=1
3085
- if sum(n_phPMT>1)>1: n_D +=1
3086
- if sum(n_phPMT>1)>2: n_T +=1
3087
- if n_phPMT[0]>1 and n_phPMT[1]>1: n_AB +=1
3088
- if n_phPMT[1]>1 and n_phPMT[2]>1: n_BC +=1
3089
- if n_phPMT[0]>1 and n_phPMT[2]>1: n_AC +=1
3090
- efficiency0_S = n_S/m
3091
- efficiency0_T = n_T/m
3092
- efficiency0_D = n_D/m
3093
- efficiency0_AB = n_AB/m
3094
- efficiency0_BC = n_BC/m
3095
- efficiency0_AC = n_AC/m
3096
- for j in n_ph:
3097
- n_phPMT = np.random.multinomial(j, [1/2, 1/2])
3098
- if sum(n_phPMT>1)>1: n_D2 +=1
3099
- if n_phPMT[0]>1: n_A2 +=1
3100
- if n_phPMT[1]>1: n_B2 +=1
3101
- # efficiency0_A2 = n_A2/m
3102
- # efficiency0_B2 = n_B2/m
3103
- efficiency0_D2 = n_D2/m
3073
+ n_ph = np.random.poisson(sum(np.asarray(e_quenching))*L)
3074
+ # TDCR
3075
+ n_phPMT = np.random.multinomial(n_ph, dirichTD)
3076
+ if sum(n_phPMT>1)>0: efficiency0_S =1
3077
+ if sum(n_phPMT>1)>1: efficiency0_D =1
3078
+ if sum(n_phPMT>1)>2: efficiency0_T =1
3079
+ if n_phPMT[0]>1 and n_phPMT[1]>1: efficiency0_AB =1
3080
+ if n_phPMT[1]>1 and n_phPMT[2]>1: efficiency0_BC =1
3081
+ if n_phPMT[0]>1 and n_phPMT[2]>1: efficiency0_AC =1
3082
+ # C/N
3083
+ n_phPMT = np.random.multinomial(n_ph, dirichCN)
3084
+ if sum(n_phPMT>1)>1: efficiency0_D2 =1
3085
+
3086
+ if evenement !=1 and t1 > extDT*1e-6 and t1 < measTime*60:
3087
+ n_ph2 = np.random.poisson(sum(np.asarray(e_quenching2))*L)
3088
+ # TDCR
3089
+ n_phPMT2 = np.random.multinomial(n_ph2, dirichTD)
3090
+ if sum(n_phPMT2>1)>0: efficiency0_S +=1
3091
+ if sum(n_phPMT2>1)>1: efficiency0_D +=1
3092
+ if sum(n_phPMT2>1)>2: efficiency0_T +=1
3093
+ if n_phPMT2[0]>1 and n_phPMT2[1]>1: efficiency0_AB +=1
3094
+ if n_phPMT2[1]>1 and n_phPMT2[2]>1: efficiency0_BC +=1
3095
+ if n_phPMT2[0]>1 and n_phPMT2[2]>1: efficiency0_AC +=1
3096
+ # C/N
3097
+ n_phPMT2 = np.random.multinomial(n_ph2, dirichCN)
3098
+ if sum(n_phPMT2>1)>1: efficiency0_D2 +=1
3099
+
3104
3100
  else: # asym
3105
- if evenement !=1 and t1 > extDT*1e-6 and t1 < measTime*60: # sum of delayed event
3106
- m = len(e_quenching)
3107
- Lm = np.mean(L)
3108
- n_ph = np.random.poisson(np.asarray(e_quenching+e_quenching2)*Lm)
3109
- n_S = 0; n_D = 0; n_T = 0; n_AB = 0; n_BC = 0; n_AC = 0; n_D2 = 0; n_A2 = 0; n_B2 = 0;
3110
- for j in n_ph:
3111
- n_phPMT = np.random.multinomial(j, [L[0]/(3*Lm), L[1]/(3*Lm), L[2]/(3*Lm)])
3112
- if sum(n_phPMT>1)>0: n_S +=1
3113
- if sum(n_phPMT>1)>1: n_D +=1
3114
- if sum(n_phPMT>1)>2: n_T +=1
3115
- if n_phPMT[0]>1 and n_phPMT[1]>1: n_AB +=1
3116
- if n_phPMT[1]>1 and n_phPMT[2]>1: n_BC +=1
3117
- if n_phPMT[0]>1 and n_phPMT[2]>1: n_AC +=1
3118
- efficiency0_S = n_S/m
3119
- efficiency0_T = n_T/m
3120
- efficiency0_D = n_D/m
3121
- efficiency0_AB = n_AB/m
3122
- efficiency0_BC = n_BC/m
3123
- efficiency0_AC = n_AC/m
3124
- for j in n_ph:
3125
- n_phPMT = np.random.multinomial(j, [L[0]/(2*Lm), L[1]/(2*Lm)])
3126
- if sum(n_phPMT>1)>1: n_D2 +=1
3127
- if n_phPMT[0]>1: n_A2 +=1
3128
- if n_phPMT[1]>1: n_B2 +=1
3129
- # efficiency0_A2 = n_A2/m
3130
- # efficiency0_B2 = n_B2/m
3131
- efficiency0_D2 = n_D2/m
3132
- else: # asym and no sum of delayed events
3133
- m = len(e_quenching)
3134
- Lm = np.mean(L)
3135
- n_ph = np.random.poisson(np.asarray((e_quenching+e_quenching2)*Lm))
3136
- n_S = 0; n_D = 0; n_T = 0; n_AB = 0; n_BC = 0; n_AC = 0; n_D2 = 0; n_A2 = 0; n_B2 = 0;
3137
- for j in n_ph:
3138
- n_phPMT = np.random.multinomial(j, [L[0]/(3*Lm), L[1]/(3*Lm), L[2]/(3*Lm)])
3139
- if sum(n_phPMT>1)>0: n_S +=1
3140
- if sum(n_phPMT>1)>1: n_D +=1
3141
- if sum(n_phPMT>1)>2: n_T +=1
3142
- if n_phPMT[0]>1 and n_phPMT[1]>1: n_AB +=1
3143
- if n_phPMT[1]>1 and n_phPMT[2]>1: n_BC +=1
3144
- if n_phPMT[0]>1 and n_phPMT[2]>1: n_AC +=1
3145
- efficiency0_S = n_S/m
3146
- efficiency0_T = n_T/m
3147
- efficiency0_D = n_D/m
3148
- efficiency0_AB = n_AB/m
3149
- efficiency0_BC = n_BC/m
3150
- efficiency0_AC = n_AC/m
3151
- for j in n_ph:
3152
- n_phPMT = np.random.multinomial(j, [L[0]/(2*Lm), L[1]/(2*Lm)])
3153
- if sum(n_phPMT>1)>1: n_D2 +=1
3154
- if n_phPMT[0]>1: n_A2 +=1
3155
- if n_phPMT[1]>1: n_B2 +=1
3156
- # efficiency0_A2 = n_A2/m
3157
- # efficiency0_B2 = n_B2/m
3158
- efficiency0_D2 = n_D2/m
3159
- return efficiency0_S, efficiency0_D, efficiency0_T, efficiency0_AB, efficiency0_BC, efficiency0_AC, efficiency0_D2
3101
+ Lm = np.mean(L)
3102
+ n_ph = np.random.poisson(sum(np.asarray((e_quenching))*Lm))
3103
+ # TDCR
3104
+ n_phPMT = np.random.multinomial(n_ph, [L[0]*dirichTD[0]/Lm, L[1]*dirichTD[1]/Lm, L[2]*dirichTD[2]/Lm])
3105
+ if sum(n_phPMT>1)>0: efficiency0_S =1
3106
+ if sum(n_phPMT>1)>1: efficiency0_D =1
3107
+ if sum(n_phPMT>1)>2: efficiency0_T =1
3108
+ if n_phPMT[0]>1 and n_phPMT[1]>1: efficiency0_AB =1
3109
+ if n_phPMT[1]>1 and n_phPMT[2]>1: efficiency0_BC =1
3110
+ if n_phPMT[0]>1 and n_phPMT[2]>1: efficiency0_AC =1
3111
+ # C/N
3112
+ n_phPMT = np.random.multinomial(n_ph, [L[0]/(2*Lm), L[1]/(2*Lm)])
3113
+ if sum(n_phPMT>1)>1: efficiency0_D2 =1
3114
+
3115
+ if evenement !=1 and t1 > extDT*1e-6 and t1 < measTime*60:
3116
+ n_ph2 = np.random.poisson(sum(np.asarray(e_quenching2))*Lm)
3117
+ # TDCR
3118
+ n_phPMT2 = np.random.multinomial(n_ph2, [L[0]*dirichCN[0]/Lm, L[1]*dirichCN[1]/Lm, L[2]*dirichCN[2]/Lm])
3119
+ if sum(n_phPMT2>1)>0: efficiency0_S +=1
3120
+ if sum(n_phPMT2>1)>1: efficiency0_D +=1
3121
+ if sum(n_phPMT2>1)>2: efficiency0_T +=1
3122
+ if n_phPMT2[0]>1 and n_phPMT2[1]>1: efficiency0_AB +=1
3123
+ if n_phPMT2[1]>1 and n_phPMT2[2]>1: efficiency0_BC +=1
3124
+ if n_phPMT2[0]>1 and n_phPMT2[2]>1: efficiency0_AC +=1
3125
+ # C/N
3126
+ n_phPMT2 = np.random.multinomial(n_ph2, [L[0]/(2*Lm), L[1]/(2*Lm)])
3127
+ if sum(n_phPMT2>1)>1: efficiency0_D2 +=1
3128
+
3129
+ return efficiency0_S, efficiency0_D, efficiency0_T, efficiency0_AB, efficiency0_BC, efficiency0_AC, efficiency0_D2
3160
3130
 
3161
3131
 
3162
3132
 
tdcrpy/config.toml CHANGED
@@ -31,6 +31,10 @@ diam_micelle = 2
31
31
  # acqueous fraction of the scintillator
32
32
  fAq = 0.1
33
33
 
34
+ ## OPTICAL PROPERTIES
35
+ # Dirichlet parameter
36
+ alphaDir = 100000
37
+
34
38
  ## PROPERTIES OF THE COUNTER
35
39
  # Coincidence resolving time (ns)
36
40
  tau = 50
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TDCRPy
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: TDCR model
5
5
  Home-page: https://pypi.org/project/TDCRPy/
6
6
  Author: RomainCoulon (Romain Coulon)
@@ -1,9 +1,9 @@
1
- tdcrpy/TDCRPy.py,sha256=of9b8U2-Zl1pHj4YqoWLJ6Ibjpb8xFgdE7_-9gO-hEg,67823
1
+ tdcrpy/TDCRPy.py,sha256=VIwZJHtpjBt5e87KUqatCC6eTMr2sFVRl52LAc3PZq8,67850
2
2
  tdcrpy/TDCRPy1.py,sha256=QTBZh5B5JWnGB0BQfD-cFmwA9W080OD4sG-aj50-ejo,38106
3
- tdcrpy/TDCR_model_lib.py,sha256=yGvth6Fu1a6tWRu6Uajnpv604qyUMCviBXeifQ6-4Xg,133469
3
+ tdcrpy/TDCR_model_lib.py,sha256=GZ6z7WtSnefJQ3OEUWPLTcaxUaeDH--JQeSJ1DN6-DE,131968
4
4
  tdcrpy/TDCRoptimize.py,sha256=c2XIGveeLdVYYek4Rg6dygMvVA2xIrIkMb3L-_jUucM,6496
5
5
  tdcrpy/__init__.py,sha256=9Djir8dPNchcJVQvhl-oRHEOsoDkiZlkOhWT-eHR7wQ,95
6
- tdcrpy/config.toml,sha256=d_olKEgxfobBHkZ2wEj9EgKE7I8Wbpim9ZAsi5ImFxk,1470
6
+ tdcrpy/config.toml,sha256=-9LbdX_d2mPd9O5OCiHlYN-FhQ83DPvOGrlQKPu7BxU,1533
7
7
  tdcrpy/test2.py,sha256=poLLXJyIaCeqh1VSkwgbi-udvY7lQjxz_YStKjJXGhU,501
8
8
  tdcrpy/MCNP-MATRIX/Spectra_for_analytical_model/dep_spectrum_C-14.txt,sha256=Eh3KaNbfYHakk_uStLu8K1aFciO6_i_rS2yKxGGppDE,8416
9
9
  tdcrpy/MCNP-MATRIX/Spectra_for_analytical_model/dep_spectrum_Ca-45.txt,sha256=TymodcK4ttoO1duZuW3RGOwHFwPPzw2ESPc_H_QQN8k,8830
@@ -74,8 +74,8 @@ tdcrpy/docs/_build/html/source/modules.html,sha256=Jf-qxVBId0UgpwyvYuyjtMNG-ezPO
74
74
  tdcrpy/docs/_build/html/source/tdcrpy.html,sha256=-38lHMNFB22p1tWJEeN3yDqfDiCYE304vxDamO1-iRc,3779
75
75
  tdcrpy/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  tdcrpy/test/test_tdcrpy.py,sha256=JINqSEMFoNpptE4f3h6ZzTYW1rBx90KkaoQzltSg-No,4692
77
- tdcrpy-2.4.0.dist-info/licenses/LICENCE.md,sha256=ZTpWyGU3qv_iwEpgvCijoCuCYpOPpyzJCgOk46WpUKU,1066
78
- tdcrpy-2.4.0.dist-info/METADATA,sha256=gjwfho2j7db0Q52y3Lg79Y9q1r2sg82zl9vS31004m8,45298
79
- tdcrpy-2.4.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
80
- tdcrpy-2.4.0.dist-info/top_level.txt,sha256=f4vzFFcKSEnonAACs0ZXuRczmroLLqtPTqXFymU_VU0,14
81
- tdcrpy-2.4.0.dist-info/RECORD,,
77
+ tdcrpy-2.5.0.dist-info/licenses/LICENCE.md,sha256=ZTpWyGU3qv_iwEpgvCijoCuCYpOPpyzJCgOk46WpUKU,1066
78
+ tdcrpy-2.5.0.dist-info/METADATA,sha256=pR933h4caiTZ3DVsNyInOpmiu1Gqj13hcWh3mTPQBng,45298
79
+ tdcrpy-2.5.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
80
+ tdcrpy-2.5.0.dist-info/top_level.txt,sha256=f4vzFFcKSEnonAACs0ZXuRczmroLLqtPTqXFymU_VU0,14
81
+ tdcrpy-2.5.0.dist-info/RECORD,,
File without changes