nucleardatapy 0.2.1__py3-none-any.whl → 1.0.1__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.
Files changed (172) hide show
  1. nucleardatapy/__init__.py +3 -1
  2. nucleardatapy/astro/setup_gw.py +18 -18
  3. nucleardatapy/astro/setup_mr.py +123 -33
  4. nucleardatapy/astro/setup_mup.py +10 -10
  5. nucleardatapy/corr/setup_EsymDen.py +0 -5
  6. nucleardatapy/corr/setup_EsymLsym.py +50 -17
  7. nucleardatapy/corr/setup_KsatQsat.py +170 -69
  8. nucleardatapy/create_folder.py +2 -2
  9. nucleardatapy/crust/setup_crust.py +364 -126
  10. nucleardatapy/data/astro/HESS/J1731-347.dat +4 -0
  11. nucleardatapy/data/astro/NICER/J0030+0451.dat +6 -6
  12. nucleardatapy/data/astro/NICER/J0437-4715.dat +4 -3
  13. nucleardatapy/data/astro/NICER/J0614-3329.dat +4 -0
  14. nucleardatapy/data/astro/NICER/J0740+6620.dat +5 -4
  15. nucleardatapy/data/hnuclei/1991-2L-Yamamoto.csv +6 -0
  16. nucleardatapy/data/hnuclei/2013-2L-Ahn.csv +1 -1
  17. nucleardatapy/data/hnuclei/2019-2L-Ekawa.csv +7 -0
  18. nucleardatapy/data/matter/micro/2006-BHF/2006-BHF-Av18-E2A-NM.dat +8 -8
  19. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-414-E2A.dat +21 -0
  20. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-414-TD.dat +22 -0
  21. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-450-E2A.dat +20 -0
  22. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-450-TD.dat +22 -0
  23. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-500-E2A.dat +23 -0
  24. nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-500-TD.dat +22 -0
  25. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-414-E2A.dat +15 -0
  26. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-414-TD.dat +21 -0
  27. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-450-E2A.dat +15 -0
  28. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-450-TD.dat +21 -0
  29. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-500-E2A.dat +20 -0
  30. nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-500-TD.dat +20 -0
  31. nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLO450.dat +28 -0
  32. nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLO500.dat +28 -0
  33. nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLOgo394.dat +28 -0
  34. nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLOgo450.dat +28 -0
  35. nucleardatapy/data/matter/micro/2024-ABI-NM-NNLOsat.dat +28 -0
  36. nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLO450.dat +28 -0
  37. nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLO500.dat +28 -0
  38. nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLOgo394.dat +28 -0
  39. nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLOgo450.dat +28 -0
  40. nucleardatapy/data/matter/micro/2024-ABI-SM-NNLOsat.dat +28 -0
  41. nucleardatapy/data/matter/nep/NEPESkyrme.dat +2 -3
  42. nucleardatapy/data/matter/nep/NEPGSkyrme.dat +7 -0
  43. nucleardatapy/data/matter/nep/NEPSkyrme.dat +4 -2
  44. nucleardatapy/data/matter/nep/NEPxEFT.dat +8 -0
  45. nucleardatapy/data/matter/nep/best67DDSkyrme.dat +28 -0
  46. nucleardatapy/data/matter/nep/best90DDSkyrme.dat +46 -0
  47. nucleardatapy/data/matter/nep/best95DDSkyrme.dat +54 -0
  48. nucleardatapy/data/matter/pheno/ESkyrme/BSk31-NM.dat +996 -996
  49. nucleardatapy/data/matter/pheno/ESkyrme/BSk31-SM.dat +991 -991
  50. nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-NM.dat +1002 -0
  51. nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-SM.dat +1002 -0
  52. nucleardatapy/data/matter/pheno/Skyrme/BSkG1-NM.dat +102 -0
  53. nucleardatapy/data/matter/pheno/Skyrme/BSkG1-SM.dat +102 -0
  54. nucleardatapy/data/matter/pheno/Skyrme/BSkG2-NM.dat +102 -0
  55. nucleardatapy/data/matter/pheno/Skyrme/BSkG2-SM.dat +102 -0
  56. nucleardatapy/env.py +1 -1
  57. nucleardatapy/eos/__init__.py +4 -3
  58. nucleardatapy/eos/setupCC.py +429 -0
  59. nucleardatapy/eos/setup_am.py +39 -14
  60. nucleardatapy/eos/setup_am_Beq.py +40 -15
  61. nucleardatapy/eos/setup_am_Leq.py +40 -15
  62. nucleardatapy/fig/__init__.py +24 -15
  63. nucleardatapy/fig/astro_setupGW_fig.py +9 -7
  64. nucleardatapy/fig/astro_setupMR_fig.py +26 -18
  65. nucleardatapy/fig/astro_setupMasses_fig.py +8 -6
  66. nucleardatapy/fig/astro_setupMtov_fig.py +10 -6
  67. nucleardatapy/fig/astro_setupMup_fig.py +9 -7
  68. nucleardatapy/fig/corr_setupEsymDen_fig.py +22 -9
  69. nucleardatapy/fig/corr_setupEsymLsym_fig.py +25 -8
  70. nucleardatapy/fig/corr_setupKsatQsat_fig.py +23 -17
  71. nucleardatapy/fig/crust_setupCrust_fig.py +11 -9
  72. nucleardatapy/fig/eos_setupAMBeq_fig.py +641 -156
  73. nucleardatapy/fig/eos_setupAMLeq_fig.py +53 -50
  74. nucleardatapy/fig/eos_setupAM_asy_lep_fig.py +373 -0
  75. nucleardatapy/fig/eos_setupAM_asy_nuc_fig.py +346 -0
  76. nucleardatapy/fig/eos_setupAM_asy_tot_fig.py +352 -0
  77. nucleardatapy/fig/eos_setupAM_fig.py +519 -0
  78. nucleardatapy/fig/eos_setupCC_fig.py +270 -0
  79. nucleardatapy/fig/hnuc_setupChart_fig.py +19 -16
  80. nucleardatapy/fig/hnuc_setupRE1LExp_fig.py +15 -5
  81. nucleardatapy/fig/matter_all_fig.py +971 -0
  82. nucleardatapy/fig/matter_setupCheck_fig.py +106 -0
  83. nucleardatapy/fig/matter_setupFFGLep_fig.py +74 -0
  84. nucleardatapy/fig/matter_setupFFGNuc_fig.py +286 -115
  85. nucleardatapy/fig/matter_setupHIC_fig.py +107 -67
  86. nucleardatapy/fig/matter_setupMicroEsym_fig.py +259 -73
  87. nucleardatapy/fig/matter_setupMicro_LP_fig.py +185 -82
  88. nucleardatapy/fig/matter_setupMicro_band_fig.py +126 -53
  89. nucleardatapy/fig/matter_setupMicro_effmass_fig.py +253 -77
  90. nucleardatapy/fig/matter_setupMicro_err_NM_fig.py +45 -20
  91. nucleardatapy/fig/matter_setupMicro_fig.py +317 -77
  92. nucleardatapy/fig/matter_setupMicro_gap_fig.py +237 -100
  93. nucleardatapy/fig/matter_setupNEPStats_fig.py +106 -0
  94. nucleardatapy/fig/matter_setupPhenoEsym_fig.py +204 -65
  95. nucleardatapy/fig/matter_setupPheno_fig.py +395 -93
  96. nucleardatapy/fig/nuc_setupBEExp_chart_fig.py +93 -73
  97. nucleardatapy/fig/nuc_setupBEExp_fig.py +97 -87
  98. nucleardatapy/fig/nuc_setupBETheo_fig.py +114 -81
  99. nucleardatapy/fig/nuc_setupISGMRExp_fig.py +12 -15
  100. nucleardatapy/fig/nuc_setupRchExp_fig.py +14 -22
  101. nucleardatapy/fig/nuc_setupRchTheo_fig.py +37 -40
  102. nucleardatapy/fig/nuc_setupRnpExp_fig.py +86 -106
  103. nucleardatapy/fig/nuc_setupRnpTheo_fig.py +105 -94
  104. nucleardatapy/hello.py +6 -0
  105. nucleardatapy/hnuc/setup_re1L_exp.py +6 -6
  106. nucleardatapy/hnuc/setup_re1Xi_exp.py +5 -5
  107. nucleardatapy/hnuc/setup_re2L_exp.py +36 -13
  108. nucleardatapy/matter/__init__.py +14 -14
  109. nucleardatapy/matter/setup_check.py +6 -6
  110. nucleardatapy/matter/setup_ffg.py +66 -39
  111. nucleardatapy/matter/setup_hic.py +91 -74
  112. nucleardatapy/matter/setup_micro.py +2033 -1007
  113. nucleardatapy/matter/setup_micro_band.py +6 -6
  114. nucleardatapy/matter/setup_micro_esym.py +56 -54
  115. nucleardatapy/matter/setup_micro_gap.py +24 -17
  116. nucleardatapy/matter/setup_micro_lp.py +2 -2
  117. nucleardatapy/matter/setup_nep.py +175 -92
  118. nucleardatapy/matter/{setup_nep_model_dist.py → setup_nep_stat_model.py} +13 -8
  119. nucleardatapy/matter/{setup_nep_dist.py → setup_nep_stat_models.py} +12 -8
  120. nucleardatapy/matter/setup_pheno.py +129 -49
  121. nucleardatapy/matter/setup_pheno_esym.py +22 -19
  122. nucleardatapy/nuc/setup_be_exp.py +306 -292
  123. nucleardatapy/nuc/setup_be_theo.py +288 -105
  124. nucleardatapy/nuc/setup_isgmr_exp.py +4 -4
  125. nucleardatapy/nuc/setup_rnp_exp.py +1 -0
  126. nucleardatapy/nuc/setup_rnp_theo.py +2 -1
  127. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/METADATA +48 -16
  128. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/RECORD +157 -124
  129. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/WHEEL +1 -1
  130. tests/test_corr_setupKsatQsat.py +3 -1
  131. tests/test_matter_setupMicro.py +37 -10
  132. nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-NM.dat +0 -1002
  133. nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-SM.dat +0 -1002
  134. nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-NM.dat +0 -1002
  135. nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-SM.dat +0 -1002
  136. nucleardatapy/fig/eos_setupAM_e_asy_lep_fig.py +0 -125
  137. nucleardatapy/fig/eos_setupAM_e_asy_nuc_fig.py +0 -115
  138. nucleardatapy/fig/eos_setupAM_e_asy_tot_fig.py +0 -117
  139. nucleardatapy/fig/eos_setupAM_e_fig.py +0 -173
  140. nucleardatapy/fig/matter_ENM_fig.py +0 -128
  141. nucleardatapy/fig/matter_ESM_fig.py +0 -140
  142. nucleardatapy/fig/matter_Esym_fig.py +0 -134
  143. nucleardatapy/fig/matter_cs2_fig.py +0 -83
  144. nucleardatapy/fig/matter_preNM_fig.py +0 -146
  145. nucleardatapy/fig/matter_preSM_fig.py +0 -144
  146. nucleardatapy/fig/matter_setupNEPModelDist_fig.py +0 -68
  147. /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-NM-AV18.dat → 2006-EBHF-NM-AV18.dat} +0 -0
  148. /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-SM-AV18.dat → 2006-EBHF-SM-AV18.dat} +0 -0
  149. /nucleardatapy/data/crust/{2022-crustGMRS-BSK14.dat → 2022-GMRS-BSK14.dat} +0 -0
  150. /nucleardatapy/data/crust/{2022-crustGMRS-BSK16.dat → 2022-GMRS-BSK16.dat} +0 -0
  151. /nucleardatapy/data/crust/{2022-crustGMRS-DHSL59.dat → 2022-GMRS-DHSL59.dat} +0 -0
  152. /nucleardatapy/data/crust/{2022-crustGMRS-DHSL69.dat → 2022-GMRS-DHSL69.dat} +0 -0
  153. /nucleardatapy/data/crust/{2022-crustGMRS-F0.dat → 2022-GMRS-F0.dat} +0 -0
  154. /nucleardatapy/data/crust/{2022-crustGMRS-H1.dat → 2022-GMRS-H1.dat} +0 -0
  155. /nucleardatapy/data/crust/{2022-crustGMRS-H2.dat → 2022-GMRS-H2.dat} +0 -0
  156. /nucleardatapy/data/crust/{2022-crustGMRS-H3.dat → 2022-GMRS-H3.dat} +0 -0
  157. /nucleardatapy/data/crust/{2022-crustGMRS-H4.dat → 2022-GMRS-H4.dat} +0 -0
  158. /nucleardatapy/data/crust/{2022-crustGMRS-H5.dat → 2022-GMRS-H5.dat} +0 -0
  159. /nucleardatapy/data/crust/{2022-crustGMRS-H7.dat → 2022-GMRS-H7.dat} +0 -0
  160. /nucleardatapy/data/crust/{2022-crustGMRS-LNS5.dat → 2022-GMRS-LNS5.dat} +0 -0
  161. /nucleardatapy/data/crust/{2022-crustGMRS-RATP.dat → 2022-GMRS-RATP.dat} +0 -0
  162. /nucleardatapy/data/crust/{2022-crustGMRS-SGII.dat → 2022-GMRS-SGII.dat} +0 -0
  163. /nucleardatapy/data/crust/{2022-crustGMRS-SLY5.dat → 2022-GMRS-SLY5.dat} +0 -0
  164. /nucleardatapy/data/matter/micro/{2013-QMC-NM.dat → 2013-MBPT-NM.dat} +0 -0
  165. /nucleardatapy/data/{NeutronSkin/ddrhNskin-208Pb.dat → rnp/ddrhrnp-208Pb.dat} +0 -0
  166. /nucleardatapy/data/{NeutronSkin/ddrhNskin-48Ca.dat → rnp/ddrhrnp-48Ca.dat} +0 -0
  167. /nucleardatapy/data/{NeutronSkin/nlrhNskin-208Pb.dat → rnp/nlrhrnp-208Pb.dat} +0 -0
  168. /nucleardatapy/data/{NeutronSkin/nlrhNskin-48Ca.dat → rnp/nlrhrnp-48Ca.dat} +0 -0
  169. /nucleardatapy/data/{NeutronSkin/skyrmeNskin-208Pb.dat → rnp/skyrmernp-208Pb.dat} +0 -0
  170. /nucleardatapy/data/{NeutronSkin/skyrmeNskin-48Ca.dat → rnp/skyrmernp-48Ca.dat} +0 -0
  171. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/licenses/LICENSE +0 -0
  172. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/top_level.txt +0 -0
@@ -3,9 +3,6 @@ import sys
3
3
  import math
4
4
  import numpy as np # 1.15.0
5
5
 
6
- #nucleardatapy_tk = os.getenv('NUCLEARDATAPY_TK')
7
- #sys.path.insert(0, nucleardatapy_tk)
8
-
9
6
  import nucleardatapy as nuda
10
7
 
11
8
  CST_AtmMass = 931.494028
@@ -16,28 +13,33 @@ CST_mnc2 = 8.0713171
16
13
  CST_dmnc2= 0.0000005
17
14
  CST_mHc2 = 7.2889706
18
15
  CST_dmHc2= 0.0000001
19
- yearMin=1851
16
+ yearMin=1890
20
17
 
21
18
  # time conversion (using tropical year as in NUBASE2020):
22
19
  ns = 1e-9
23
- minutes = 60 # in s
24
- hours = 60 * minutes # (hours) in s
25
- days = 24 * hours # (day) in s
26
- days = 86400 # in s
27
- months = 30 * days # (month) (30 days) in s
28
- years = 365.2422 * days # (year) in s
20
+ minute = 60 # in s
21
+ hour = 60 * minute # (hours) in s
22
+ day = 24 * hour # (day) in s # days = 86400 # in s
23
+ month = 30 * day # (month) (30 days) in s
24
+ year = 365.2422 * day # (year) in s
29
25
  #print('years:',years)
30
26
  #print('type(years):',type(years))
31
- ILt = 1e30 * years # infinite Large time
27
+ ILt = 1e30 * year # infinite Large time
32
28
  ISt = 1.e-30 # infinite Short time
33
- HTvsl = 1e-3 # half-time for very short live nuclei
34
- HTsl = hours # half-time for short live nuclei
29
+ HTsl = day # half-time for short live nuclei
30
+ HTvsl = 1.0 # half-time for very short live nuclei
31
+ HThsl = 1.e-3 # half-time for hyper short live nuclei
35
32
 
36
- def stable_fit(Zmin = 1, Zmax = 120):
33
+ def stable_fit_Z(Zmin = 1, Zmax = 120):
37
34
  Z = np.linspace(start=Zmin, stop=Zmax, num=1+Zmax-Zmin, dtype = int )
38
35
  N = np.array( Z + 6.e-3*Z*Z, dtype = int )
39
36
  return N, Z
40
37
 
38
+ def stable_fit_N(Nmin = 1, Nmax = 170):
39
+ N = np.linspace(start=Nmin, stop=Nmax, num=1+Nmax-Nmin, dtype = int )
40
+ Z = np.array( N - 3.8e-3*N*N + 9.e-6*N*N*N, dtype = int )
41
+ return N, Z
42
+
41
43
  def be_exp_tables():
42
44
  """
43
45
  Return a list of the tables available in this toolkit for the experimental masses and
@@ -165,6 +167,8 @@ class setupBEExp():
165
167
  self.nucSymb = []
166
168
  #: Attribute N (number of neutrons of the nucleus).
167
169
  self.nucN = []
170
+ #: Attribute I (isospin asymmetry):
171
+ self.nucI = []
168
172
  #: Attribute I.
169
173
  self.flagI = []
170
174
  #: Attribute Interp (interpolation). Interp='y' is the nucleus\
@@ -238,6 +242,7 @@ class setupBEExp():
238
242
  #if nucZ < int(Zmin): continue
239
243
  #if int(Z) != 0 and nucZ != int(Z): continue
240
244
  NN = AA - ZZ
245
+ II = ( NN - ZZ ) / AA
241
246
  if (nuda.env.verb): print(' nucleus:',AA,ZZ,NN)
242
247
  #if ZZ == 20: print(' nucleus:',AA,ZZ,NN)
243
248
  flagI=int(line[7:8]) # if nuci==0: ground-state (GS)
@@ -312,29 +317,29 @@ class setupBEExp():
312
317
  elif htu==' s':
313
318
  fac = 1.0 # print('second')
314
319
  elif htu==' h':
315
- fac = hours # print('hours')
320
+ fac = hour # print('hours')
316
321
  elif htu==' d':
317
- fac = days # print('day')
322
+ fac = day # print('day')
318
323
  elif htu==' m':
319
- fac = months # print('month')
324
+ fac = month # print('month')
320
325
  elif htu==' y':
321
- fac = years # print('year')
326
+ fac = year # print('year')
322
327
  elif htu=='ky':
323
- fac = 1e3 * years # print('Kiloyears (1e3)')
328
+ fac = 1e3 * year # print('Kiloyears (1e3)')
324
329
  elif htu=='My':
325
- fac = 1e6 * years # print('Megayears (1e6)')
330
+ fac = 1e6 * year # print('Megayears (1e6)')
326
331
  elif htu=='Gy':
327
- fac = 1e9 * years # print('Gigayears (1e9)')
332
+ fac = 1e9 * year # print('Gigayears (1e9)')
328
333
  elif htu=='Ty':
329
- fac = 1e12 * years # print('Terayears (1e12)')
334
+ fac = 1e12 * year # print('Terayears (1e12)')
330
335
  elif htu=='Py':
331
- fac = 1e15 * years # print('Petayears (1e15)')
336
+ fac = 1e15 * year # print('Petayears (1e15)')
332
337
  elif htu=='Ey':
333
- fac = 1e18 * years # print('Exayears (1e18)')
338
+ fac = 1e18 * year # print('Exayears (1e18)')
334
339
  elif htu=='Zy':
335
- fac = 1e21 * years # print('Zettayears (1e21)')
340
+ fac = 1e21 * year # print('Zettayears (1e21)')
336
341
  elif htu=='Yy':
337
- fac = 1e24 * years # print('Yottayears (1e24)')
342
+ fac = 1e24 * year # print('Yottayears (1e24)')
338
343
  else:
339
344
  print('unknown lifetime unit')
340
345
  print('ht:',ht,' unit:',htu)
@@ -403,6 +408,7 @@ class setupBEExp():
403
408
  self.nucZ.append( ZZ )
404
409
  if ZZ > self.Zmax: self.Zmax = ZZ
405
410
  self.nucN.append( NN )
411
+ self.nucI.append( II )
406
412
  self.nucSymb.append( symb )
407
413
  self.flagI.append( flagI )
408
414
  self.flagInterp.append( interp )
@@ -433,6 +439,18 @@ class setupBEExp():
433
439
  self.dist_nbNuc[i_year] += 1
434
440
  print( 'dist:',self.dist_nbNuc )
435
441
  #
442
+ # convert to numpy array:
443
+ #
444
+ self.nucA = np.array( self.nucA , dtype = int )
445
+ self.nucN = np.array( self.nucN , dtype = int )
446
+ self.nucZ = np.array( self.nucZ , dtype = int )
447
+ self.flagI = np.array( self.flagI , dtype = int )
448
+ self.nucYear = np.array( self.nucYear , dtype = int )
449
+ self.nucI = np.array( self.nucI , dtype = float )
450
+ self.nucHT = np.array( self.nucHT , dtype = float )
451
+ self.nucBE = np.array( self.nucBE , dtype = float )
452
+ self.nucBE_err = np.array( self.nucBE_err , dtype = float )
453
+ #
436
454
  if nuda.env.verb: print("Exit SetupNucBEExp()")
437
455
  #
438
456
  #
@@ -491,7 +509,7 @@ class setupBEExp():
491
509
  self.state = state
492
510
  if nuda.env.verb: print("state:",state)
493
511
  #
494
- nuclei = [ 'stable', 'unstable', 'longlive', 'shortlive', 'veryshortlive' ]
512
+ nuclei = [ 'stable', 'unstable', 'longlive', 'shortlive', 'veryshortlive', 'hypershortlive' ]
495
513
  #
496
514
  if nucleus.lower() not in nuclei:
497
515
  print('setup_be_exp.py: Nucleus ',nucleus,' is not in the list: ',nuclei)
@@ -511,6 +529,7 @@ class setupBEExp():
511
529
  #: Attribute sel_symb (symbol of the selected nuclei).
512
530
  self.sel_nucSymb = []
513
531
  self.sel_nucN = []
532
+ self.sel_nucI = []
514
533
  self.sel_flagI = []
515
534
  self.sel_flagInterp = []
516
535
  self.sel_nucHT = [] # half-time in s
@@ -518,6 +537,7 @@ class setupBEExp():
518
537
  self.sel_nucBE = []
519
538
  self.sel_nucBE_err = []
520
539
  #
540
+ self.sel_Zmin = 100
521
541
  self.sel_Zmax = 0
522
542
  #
523
543
  for ind in range(self.nbNuc):
@@ -525,6 +545,7 @@ class setupBEExp():
525
545
  nucA = self.nucA[ind]
526
546
  nucZ = self.nucZ[ind]
527
547
  nucN = self.nucN[ind]
548
+ nucI = self.nucI[ind]
528
549
  flagI = self.flagI[ind]
529
550
  nucSymb = self.nucSymb[ind]
530
551
  flagInterp = self.flagInterp[ind]
@@ -546,7 +567,9 @@ class setupBEExp():
546
567
  pass
547
568
  elif nucleus.lower() == 'shortlive' and nucStbl == 'n' and nucHT < HTsl and nucHT > HTvsl:
548
569
  pass
549
- elif nucleus.lower() == 'veryshortlive' and nucStbl == 'n' and nucHT < HTvsl:
570
+ elif nucleus.lower() == 'veryshortlive' and nucStbl == 'n' and nucHT < HTvsl and nucHT > HThsl:
571
+ pass
572
+ elif nucleus.lower() == 'hypershortlive' and nucStbl == 'n' and nucHT < HThsl:
550
573
  pass
551
574
  else:
552
575
  continue
@@ -565,8 +588,10 @@ class setupBEExp():
565
588
  nbNucSel = nbNucSel + 1
566
589
  self.sel_nucA.append( nucA )
567
590
  self.sel_nucZ.append( nucZ )
591
+ if nucZ < self.sel_Zmin: self.sel_Zmin = nucZ
568
592
  if nucZ > self.sel_Zmax: self.sel_Zmax = nucZ
569
593
  self.sel_nucN.append( nucN )
594
+ self.sel_nucI.append( nucI )
570
595
  self.sel_nucSymb.append( nucSymb )
571
596
  self.sel_flagI.append( flagI )
572
597
  self.sel_flagInterp.append( flagInterp )
@@ -580,74 +605,22 @@ class setupBEExp():
580
605
  print('number of nuclei(Tot):',self.sel_nbNucTot)
581
606
  print('number of nuclei(Sta):',self.sel_nbNucSta)
582
607
  print('number of nuclei(Sel):',self.sel_nbNucSel)
608
+ #print(' sel_nucA:',self.sel_nucA)
609
+ # convert to numpy array:
610
+ self.sel_nucA = np.array( self.sel_nucA , dtype = int )
611
+ self.sel_nucN = np.array( self.sel_nucN , dtype = int )
612
+ self.sel_nucZ = np.array( self.sel_nucZ , dtype = int )
613
+ self.sel_flagI = np.array( self.sel_flagI , dtype = int )
614
+ self.sel_nucYear = np.array( self.sel_nucYear , dtype = int )
615
+ self.sel_nucI = np.array( self.sel_nucI , dtype = float )
616
+ self.sel_nucHT = np.array( self.sel_nucHT , dtype = float )
617
+ self.sel_nucBE = np.array( self.sel_nucBE , dtype = float )
618
+ self.sel_nucBE_err = np.array( self.sel_nucBE_err , dtype = float )
583
619
  #
584
620
  if nuda.env.verb: print("Exit select()")
585
621
  #
586
622
  return self
587
623
  #
588
- def isotopes(self, Zmin = 1, Zmax = 95 ):
589
- """
590
- Method which find the first and last isotopes for each Zmin<Z<Zmax.
591
-
592
- :param Zmin: Fix the minimum charge for the search of isotopes.
593
- :type Zmin: int, optional. Default: 1.
594
- :param Zmax: Fix the maximum charge for the search of isotopes.
595
- :type Zmax: int, optional. Default: 95.
596
-
597
- **Attributes:**
598
- """
599
- #
600
- if nuda.env.verb: print("Enter drip()")
601
- #
602
- if Zmin > Zmax:
603
- print('setup_be_exp.py: In isotopes attribute function of setup_be_exp.py:')
604
- print('setup_be_exp.py: Bad definition of Zmin and Zmax')
605
- print('setup_be_exp.py: It is expected that Zmin<=Zmax')
606
- print('setup_be_exp.py: Zmin,Zmax:',Zmin,Zmax)
607
- print('setup_be_exp.py: exit')
608
- exit()
609
- #
610
- Nstable, Zstable = stable_fit( Zmin = Zmin, Zmax = Zmax )
611
- #
612
- self.isotopes_Z = []
613
- self.isotopes_Nmin = []
614
- self.isotopes_Nmax = []
615
- #
616
- for ind,Z in enumerate(Zstable):
617
- #
618
- #print('ind,Z, Nstable:',ind,Z,Nstable[ind])
619
- #
620
- if Z > Zmax :
621
- break
622
- if Z < Zmin :
623
- continue
624
- #
625
- Nmin = Nstable[ind]
626
- Nmax = Nstable[ind]
627
- #
628
- #print('sel_Z:',self.sel_Z)
629
- #exit()
630
- for ind2 in range(self.sel_nbNucSel):
631
- #if self.sel_Z[ind] == Z:
632
- # print('sel_Z:',self.sel_Z)
633
- # exit()
634
- #print('ind:',ind,Z,self.sel_Zmax,self.sel_Z[ind2],Nmin,Nmax)
635
- #print('sel_N:',self.sel_N[ind2])
636
- if self.sel_nucZ[ind2] == Z and self.sel_nucN[ind2] < Nmin:
637
- Nmin = self.sel_nucN[ind2]
638
- if self.sel_nucZ[ind2] == Z and self.sel_nucN[ind2] > Nmax:
639
- Nmax = self.sel_nucN[ind2]
640
- self.isotopes_Z.append( Z )
641
- self.isotopes_Nmin.append( Nmin )
642
- self.isotopes_Nmax.append( Nmax )
643
- #print('drip: Z',self.drip_Z)
644
- #print('drip: Nmin:',self.drip_Nmin)
645
- #print('drip: Nmax:',self.drip_Nmax)
646
- #
647
- if nuda.env.verb: print("Exit drip()")
648
- #
649
- return self
650
- #
651
624
  def select_year(self, year_min=1940, year_max=1960, state= 'gs'):
652
625
  """
653
626
  Method which select some nuclei from the table according to the discovery year.
@@ -751,276 +724,317 @@ class setupBEExp():
751
724
  #
752
725
  return self
753
726
  #
754
- def S2n( self, Zmin = 1, Zmax = 95 ):
727
+ def isotopes(self, Zref = 50 ):
728
+ """
729
+ Method which find the first and last isotopes for Z=Zref.
730
+
731
+ :param Zref: Fix the charge for the search of isotopes.
732
+ :type Zref: int, optional. Default: 50.
733
+
734
+ **Attributes:**
735
+ """
736
+ #
737
+ if nuda.env.verb: print("Enter isotopes()")
738
+ #
739
+ if Zref < 0:
740
+ print('setup_be_exp.py: issue with the function isotopes.')
741
+ print('setup_be_exp.py: Bad definition for Zref')
742
+ print('setup_be_exp.py: It is expected that Zref>0')
743
+ print('setup_be_exp.py: Zref:',Zref)
744
+ print('setup_be_exp.py: exit')
745
+ exit()
746
+ #
747
+ Nstable, Zstable = stable_fit_Z( Zmin = Zref, Zmax = Zref )
748
+ #
749
+ nucNmin = Nstable[0]+4
750
+ nucNmax = Nstable[0]-4
751
+ #
752
+ for ind,A in enumerate(self.sel_nucA):
753
+ #
754
+ if self.sel_nucZ[ind] == Zref and self.sel_nucN[ind] < nucNmin:
755
+ nucNmin = self.sel_nucN[ind]
756
+ if self.sel_nucZ[ind] == Zref and self.sel_nucN[ind] > nucNmax:
757
+ nucNmax = self.sel_nucN[ind]
758
+ #
759
+ self.itp_nucZ = Zref
760
+ self.itp_nucNmin = nucNmin
761
+ self.itp_nucNmax = nucNmax
762
+ #
763
+ if nuda.env.verb: print("Exit isotopes()")
764
+ #
765
+ return self
766
+ #
767
+ def isotones(self, Nref = 50 ):
768
+ """
769
+ Method which find the first and last isotones for N=Nref.
770
+
771
+ :param Nref: Fix the neutron number for the search of isotones.
772
+ :type Nref: int, optional. Default: 50.
773
+
774
+ **Attributes:**
775
+ """
776
+ #
777
+ if nuda.env.verb: print("Enter isotones()")
778
+ #
779
+ if Nref < 0:
780
+ print('setup_be_exp.py: issue with the function isotones.')
781
+ print('setup_be_exp.py: Bad definition for Nref')
782
+ print('setup_be_exp.py: It is expected that Nref>0')
783
+ print('setup_be_exp.py: Nref:',Nref)
784
+ print('setup_be_exp.py: exit')
785
+ exit()
786
+ #
787
+ Nstable, Zstable = stable_fit_N( Nmin = Nref, Nmax = Nref )
788
+ #
789
+ nucZmin = Zstable[0]
790
+ nucZmax = Zstable[0]
791
+ #
792
+ for ind,A in enumerate(self.sel_nucA):
793
+ #
794
+ if self.sel_nucN[ind] == Nref and self.sel_nucZ[ind] < nucZmin:
795
+ nucZmin = self.sel_nucZ[ind]
796
+ if self.sel_nucN[ind] == Nref and self.sel_nucZ[ind] > nucZmax:
797
+ nucZmax = self.sel_nucZ[ind]
798
+ #
799
+ self.itn_nucN = Nref
800
+ self.itn_nucZmin = nucZmin
801
+ self.itn_nucZmax = nucZmax
802
+ #
803
+ if nuda.env.verb: print("Exit isotones()")
804
+ #
805
+ return self
806
+ #
807
+ def S2n( self, Zref = 50 ):
755
808
  """
756
809
  Compute the two-neutron separation energy (S2n)
757
- S2n = E(Z,N)-E(Z,N-2)
810
+ S2n(Zref,N) = E(Zref,N)-E(Zref,N-2)
758
811
  """
759
812
  #
760
813
  if nuda.env.verb: print("Enter S2n()")
761
814
  #
762
- if Zmin > Zmax:
815
+ if Zref < 0:
763
816
  print('setup_be_exp.py: In S2n attribute function of setup_be_exp.py:')
764
- print('setup_be_exp.py: Bad definition of Zmin and Zmax')
765
- print('setup_be_exp.py: It is expected that Zmin<=Zmax')
766
- print('setup_be_exp.py: Zmin,Zmax:',Zmin,Zmax)
817
+ print('setup_be_exp.py: Bad definition of Zref')
818
+ print('setup_be_exp.py: It is expected that Zref>=0')
819
+ print('setup_be_exp.py: Zref:',Zref)
767
820
  print('setup_be_exp.py: exit')
768
821
  exit()
769
822
  #
770
- S2n_Z = []
771
823
  S2n_N = []
772
- S2n = []
824
+ S2n_E = []
825
+ S2n_E_err = []
773
826
  #
774
- for ind,Z in enumerate(self.nucZ):
775
- #
776
- if Z > Zmax :
777
- continue
778
- if Z < Zmin :
779
- continue
780
- #
781
- if self.flagI[ind] != 0:
782
- continue
783
- if self.flagInterp[ind] == 'y':
784
- continue
785
- N = self.nucN[ind]
786
- #
787
- #print('For Z,N:',Z,N)
827
+ Nmin=self.itp_nucNmin
828
+ Nmax=self.itp_nucNmax
829
+ print('Nmin,Nmax:',Nmin,Nmax)
830
+ #
831
+ for N in range(Nmin+2,Nmax+1):
788
832
  #
789
- # search index for Z,N+2
833
+ flagN = False; flagNm2 = False;
790
834
  #
791
- flag_find = 0
792
- for ind2,Z2 in enumerate(self.nucZ):
793
- if Z == Z2 and self.nucN[ind2] == N-2 and self.flagI[ind2] == 0 and self.flagInterp[ind2] == 'n':
794
- flag_find = 1
795
- break
796
- if flag_find == 1:
797
- N2 = self.nucN[ind2]
798
- #print('N,N2:',N,N2,'ind,ind2:',ind,ind2)
799
- S2n_Z.append( self.nucZ[ind] )
800
- S2n_N.append( self.nucN[ind] )
801
- S2n.append( self.nucBE[ind2] - self.nucBE[ind] )
835
+ for ind,Z in enumerate(self.sel_nucZ):
836
+ #
837
+ if Z == Zref and self.sel_nucN[ind] == N:
838
+ indN = ind
839
+ flagN = True
840
+ if Z == Zref and self.sel_nucN[ind] == N-2:
841
+ indNm2 = ind
842
+ flagNm2 = True
843
+ #
844
+ if flagN and flagNm2:
845
+ S2n_N.append( N )
846
+ S2n_E.append( self.sel_nucBE[indN] - self.sel_nucBE[indNm2] )
847
+ S2n_E_err.append( self.sel_nucBE_err[indN] + self.sel_nucBE_err[indNm2] )
802
848
  self.S2n_N = np.array( S2n_N, dtype = int )
803
- self.S2n_Z = np.array( S2n_Z, dtype = int )
804
- self.S2n = np.array( S2n, dtype = float )
805
- #print('Z:',self.S2n_Z)
806
- #print('N:',self.S2n_N)
807
- #print('S2n:',self.S2n)
808
- #print('Z:',self.S2n_Z)
849
+ self.S2n_E = np.array( S2n_E, dtype = float )
850
+ self.S2n_E_err = np.array( S2n_E_err, dtype = float )
809
851
  #
810
852
  if nuda.env.verb: print("Exit S2n()")
811
853
  #
812
854
  return self
813
- #
814
- def S2p( self, Nmin = 1, Nmax = 95 ):
855
+ #
856
+ def S2p( self, Nref = 50 ):
815
857
  """
816
- Compute the two-proton separation energy (S2n)
817
- S2p = E(Z,N)-E(Z-2,N)
858
+ Compute the two-proton separation energy (S2p)
859
+ S2p(Z,Nref) = E(Z,Nref)-E(Z-2,Nref)
818
860
  """
819
861
  #
820
862
  if nuda.env.verb: print("Enter S2p()")
821
863
  #
822
- if Nmin > Nmax:
864
+ if Nref < 0:
823
865
  print('setup_be_exp.py: In S2p attribute function of setup_be_exp.py:')
824
- print('setup_be_exp.py: Bad definition of Nmin and Nmax')
825
- print('setup_be_exp.py: It is expected that Nmin<=Nmax')
826
- print('setup_be_exp.py: Nmin,Nmax:',Nmin,Nmax)
866
+ print('setup_be_exp.py: Bad definition of Nref')
867
+ print('setup_be_exp.py: It is expected that Nref>=0')
868
+ print('setup_be_exp.py: Nref:',Nref)
827
869
  print('setup_be_exp.py: exit')
828
870
  exit()
829
871
  #
830
872
  S2p_Z = []
831
- S2p_N = []
832
- S2p = []
873
+ S2p_E = []
874
+ S2p_E_err = []
833
875
  #
834
- for ind,N in enumerate(self.nucN):
835
- #
836
- if N > Nmax :
837
- continue
838
- if N < Nmin :
839
- continue
840
- #
841
- if self.flagI[ind] != 0:
842
- continue
843
- if self.flagInterp[ind] == 'y':
844
- continue
845
- Z = self.nucZ[ind]
846
- #
847
- #print('For Z,N:',Z,N)
876
+ Zmin=self.itn_nucZmin
877
+ Zmax=self.itn_nucZmax
878
+ print('Zmin,Zmax:',Zmin,Zmax)
879
+ #
880
+ for Z in range(Zmin+2,Zmax+1,2):
848
881
  #
849
- # search index for Z-2,N
882
+ flagZ = False; flagZm2 = False;
850
883
  #
851
- flag_find = 0
852
- for ind2,N2 in enumerate(self.nucN):
853
- if N == N2 and self.nucZ[ind2] == Z-2 and self.flagI[ind2] == 0 and self.flagInterp[ind2] == 'n':
854
- flag_find = 1
855
- break
856
- if flag_find == 1:
857
- Z2 = self.nucZ[ind2]
858
- #print('N,N2:',N,N2,'ind,ind2:',ind,ind2)
859
- S2p_Z.append( self.nucZ[ind] )
860
- S2p_N.append( self.nucN[ind] )
861
- S2p.append( self.nucBE[ind2] - self.nucBE[ind] )
862
- self.S2p_N = np.array( S2p_N, dtype = int )
884
+ for ind,N in enumerate(self.sel_nucN):
885
+ #
886
+ if N == Nref and self.sel_nucZ[ind] == Z:
887
+ indZ = ind
888
+ flagZ = True
889
+ if N == Nref and self.sel_nucZ[ind] == Z-2:
890
+ indZm2 = ind
891
+ flagZm2 = True
892
+ #
893
+ if flagZ and flagZm2:
894
+ S2p_Z.append( Z )
895
+ S2p_E.append( self.sel_nucBE[indZ] - self.sel_nucBE[indZm2] )
896
+ S2p_E_err.append( self.sel_nucBE_err[indZ] + self.sel_nucBE_err[indZm2] )
863
897
  self.S2p_Z = np.array( S2p_Z, dtype = int )
864
- self.S2p = np.array( S2p, dtype = float )
865
- #print('Z:',self.S2n_Z)
866
- #print('N:',self.S2n_N)
867
- #print('S2n:',self.S2n)
868
- #print('Z:',self.S2n_Z)
898
+ self.S2p_E = np.array( S2p_E, dtype = float )
899
+ self.S2p_E_err = np.array( S2p_E_err, dtype = float )
869
900
  #
870
901
  if nuda.env.verb: print("Exit S2p()")
871
902
  #
872
903
  return self
873
- #
874
- def D3n( self, Zmin = 1, Zmax = 95 ):
904
+ #
905
+ def D3n( self, Zref = 50 ):
875
906
  """
876
907
  Compute the three-points odd-even mass staggering (D3p_n)
877
- D_3p^N = (-)**N * ( 2*E(Z,N)-E(Z,N+1)-E(Z,N-1) ) / 2
908
+ D3n(Z,N) = (-)**N * ( 2*E(Z,N)-E(Z,N+1)-E(Z,N-1) ) / 2
878
909
  """
879
910
  #
880
- if nuda.env.verb: print("Enter D3p_n()")
911
+ if nuda.env.verb: print("Enter D3n()")
881
912
  #
882
- if Zmin > Zmax:
883
- print('setup_be_exp.py: In D3p_n attribute function of setup_be_exp.py:')
884
- print('setup_be_exp.py: Bad definition of Zmin and Zmax')
885
- print('setup_be_exp.py: It is expected that Zmin<=Zmax')
886
- print('setup_be_exp.py: Zmin,Zmax:',Zmin,Zmax)
913
+ if Zref < 0:
914
+ print('setup_be_exp.py: In D3n attribute function of setup_be_exp.py:')
915
+ print('setup_be_exp.py: Bad definition of Zref')
916
+ print('setup_be_exp.py: It is expected that Zref>=0')
917
+ print('setup_be_exp.py: Zref:',Zref)
887
918
  print('setup_be_exp.py: exit')
888
919
  exit()
889
920
  #
890
- D3n_Z_even = []
891
- D3n_Z_odd = []
892
921
  D3n_N_even = []
893
922
  D3n_N_odd = []
894
- D3n_even = []
895
- D3n_odd = []
923
+ D3n_E_even = []
924
+ D3n_E_odd = []
925
+ D3n_E_err_even = []
926
+ D3n_E_err_odd = []
896
927
  #
897
- for ind,Z in enumerate(self.nucZ):
898
- #
899
- if Z > Zmax :
900
- continue
901
- if Z < Zmin :
902
- continue
903
- #
904
- if self.flagI[ind] != 0:
905
- continue
906
- if self.flagInterp[ind] == 'y':
907
- continue
908
- #
909
- N = self.nucN[ind]
910
- #
911
- if N % 2 == 0:
912
- sign = 1.0 #even
913
- else:
914
- sign = -1.0 # odd
915
- #
916
- #print('For Z,N:',Z,N)
928
+ Nmin=self.itp_nucNmin
929
+ Nmax=self.itp_nucNmax
930
+ print('Nmin,Nmax:',Nmin,Nmax)
931
+ #
932
+ for N in range(Nmin+1,Nmax):
917
933
  #
918
- # search index for Z,N+2
934
+ flagN = False; flagNm1 = False; flagNp1 = False;
919
935
  #
920
- flag_find1 = 0
921
- for ind1,Z1 in enumerate(self.nucZ):
922
- if Z == Z1 and self.nucN[ind1] == N+1 and self.flagI[ind1] == 0 and self.flagInterp[ind1] == 'n':
923
- flag_find1 = 1
924
- break
925
- flag_find2 = 0
926
- for ind2,Z2 in enumerate(self.nucZ):
927
- if Z == Z2 and self.nucN[ind2] == N-1 and self.flagI[ind2] == 0 and self.flagInterp[ind2] == 'n':
928
- flag_find2 = 1
929
- break
930
- if flag_find1*flag_find2 == 1:
931
- if sign > 0: #even
932
- D3n_Z_even.append( self.nucZ[ind] )
933
- D3n_N_even.append( self.nucN[ind] )
934
- D3n_even.append( sign/2.0*( -2*self.nucBE[ind] + self.nucBE[ind1] + self.nucBE[ind2] ) )
936
+ for ind,Z in enumerate(self.sel_nucZ):
937
+ #
938
+ if Z == Zref and self.sel_nucN[ind] == N:
939
+ indN = ind
940
+ flagN = True
941
+ if N % 2:
942
+ sign = -1.0 # odd
943
+ else:
944
+ sign = 1.0 # even
945
+ if Z == Zref and self.sel_nucN[ind] == N-1:
946
+ indNm1 = ind
947
+ flagNm1 = True
948
+ if Z == Zref and self.sel_nucN[ind] == N+1:
949
+ indNp1 = ind
950
+ flagNp1 = True
951
+ #
952
+ if flagN and flagNm1 and flagNp1:
953
+ if sign > 0.0: #even
954
+ D3n_N_even.append( N )
955
+ D3n_E_even.append( sign/2.0*( -2*self.sel_nucBE[indN] + self.sel_nucBE[indNm1] + self.sel_nucBE[indNp1] ) )
956
+ D3n_E_err_even.append( 0.5*( 2*self.sel_nucBE_err[indN] + self.sel_nucBE_err[indNm1] + self.sel_nucBE_err[indNp1] ) )
935
957
  else:
936
- D3n_Z_odd.append( self.nucZ[ind] )
937
- D3n_N_odd.append( self.nucN[ind] )
938
- D3n_odd.append( sign/2.0*( -2*self.nucBE[ind] + self.nucBE[ind1] + self.nucBE[ind2] ) )
958
+ D3n_N_odd.append( N )
959
+ D3n_E_odd.append( sign/2.0*( -2*self.sel_nucBE[indN] + self.sel_nucBE[indNm1] + self.sel_nucBE[indNp1] ) )
960
+ D3n_E_err_odd.append( 0.5*( 2*self.sel_nucBE_err[indN] + self.sel_nucBE_err[indNm1] + self.sel_nucBE_err[indNp1] ) )
961
+ #
939
962
  self.D3n_N_even = np.array( D3n_N_even, dtype = int )
940
- self.D3n_N_odd = np.array( D3n_N_odd, dtype = int )
941
- self.D3n_Z_even = np.array( D3n_Z_even, dtype = int )
942
- self.D3n_Z_odd = np.array( D3n_Z_odd, dtype = int )
943
- self.D3n_even = np.array( D3n_even, dtype = float )
944
- self.D3n_odd = np.array( D3n_odd, dtype = float )
963
+ self.D3n_E_even = np.array( D3n_E_even, dtype = float )
964
+ self.D3n_E_err_even = np.array( D3n_E_err_even, dtype = float )
965
+ self.D3n_N_odd = np.array( D3n_N_odd, dtype = int )
966
+ self.D3n_E_odd = np.array( D3n_E_odd, dtype = float )
967
+ self.D3n_E_err_odd = np.array( D3n_E_err_odd, dtype = float )
945
968
  #
946
- if nuda.env.verb: print("Exit D3p_n()")
969
+ if nuda.env.verb: print("Exit D3n()")
947
970
  #
948
971
  return self
949
- #
950
- #
951
- def D3p( self, Nmin = 1, Nmax = 95 ):
972
+ #
973
+ def D3p( self, Nref = 50 ):
952
974
  """
953
- Compute the three-points odd-even mass staggering (D3p_p)
954
- D_3p^P = (-)**Z * ( 2*E(Z,N)-E(Z+1,N)-E(Z-1,N) ) / 2
975
+ Compute the three-points odd-even mass staggering (D3p_n)
976
+ D3p(Z,N) = (-)**Z * ( 2*E(Z,N)-E(Z+1,N)-E(Z-1,N) ) / 2
955
977
  """
956
978
  #
957
- if nuda.env.verb: print("Enter D3p_p()")
979
+ if nuda.env.verb: print("Enter D3p()")
958
980
  #
959
- if Nmin > Nmax:
960
- print('setup_be_exp.py: In D3p_p attribute function of setup_be_exp.py:')
961
- print('setup_be_exp.py: Bad definition of Nmin and Nmax')
962
- print('setup_be_exp.py: It is expected that Nmin<=Nmax')
963
- print('setup_be_exp.py: Nmin,Nmax:',Nmin,Nmax)
981
+ if Nref < 0:
982
+ print('setup_be_exp.py: In D3p attribute function of setup_be_exp.py:')
983
+ print('setup_be_exp.py: Bad definition of Nref')
984
+ print('setup_be_exp.py: It is expected that Nref>=0')
985
+ print('setup_be_exp.py: Nref:',Nref)
964
986
  print('setup_be_exp.py: exit')
965
987
  exit()
966
988
  #
967
989
  D3p_Z_even = []
968
990
  D3p_Z_odd = []
969
- D3p_N_even = []
970
- D3p_N_odd = []
971
- D3p_even = []
972
- D3p_odd = []
991
+ D3p_E_even = []
992
+ D3p_E_odd = []
993
+ D3p_E_err_even = []
994
+ D3p_E_err_odd = []
973
995
  #
974
- for ind,N in enumerate(self.nucN):
975
- #
976
- if N > Nmax :
977
- continue
978
- if N < Nmin :
979
- continue
980
- #
981
- if self.flagI[ind] != 0:
982
- continue
983
- if self.flagInterp[ind] == 'y':
984
- continue
985
- #
986
- Z = self.nucZ[ind]
987
- #
988
- if Z % 2 == 0:
989
- sign = 1.0 #even
990
- else:
991
- sign = -1.0 # odd
992
- #
993
- #print('For Z,N:',Z,N)
996
+ Zmin=self.itn_nucZmin
997
+ Zmax=self.itn_nucZmax
998
+ print('Zmin,Zmax:',Zmin,Zmax)
999
+ #
1000
+ for Z in range(Zmin+1,Zmax):
994
1001
  #
995
- # search index for Z,N+2
1002
+ flagZ = False; flagZm1 = False; flagZp1 = False;
996
1003
  #
997
- flag_find1 = 0
998
- for ind1,N1 in enumerate(self.nucN):
999
- if N == N1 and self.nucZ[ind1] == Z+1 and self.flagI[ind1] == 0 and self.flagInterp[ind1] == 'n':
1000
- flag_find1 = 1
1001
- break
1002
- flag_find2 = 0
1003
- for ind2,N2 in enumerate(self.nucN):
1004
- if N == N2 and self.nucZ[ind2] == Z-1 and self.flagI[ind2] == 0 and self.flagInterp[ind2] == 'n':
1005
- flag_find2 = 1
1006
- break
1007
- if flag_find1*flag_find2 == 1:
1008
- if sign > 0: #even
1009
- D3p_Z_even.append( self.nucZ[ind] )
1010
- D3p_N_even.append( self.nucN[ind] )
1011
- D3p_even.append( sign/2.0*( -2*self.nucBE[ind] + self.nucBE[ind1] + self.nucBE[ind2] ) )
1004
+ for ind,N in enumerate(self.sel_nucN):
1005
+ #
1006
+ if N == Nref and self.sel_nucZ[ind] == Z:
1007
+ indZ = ind
1008
+ flagZ = True
1009
+ if Z % 2:
1010
+ sign = -1.0 # odd
1011
+ else:
1012
+ sign = 1.0 # even
1013
+ if N == Nref and self.sel_nucZ[ind] == Z-1:
1014
+ indZm1 = ind
1015
+ flagZm1 = True
1016
+ if N == Nref and self.sel_nucZ[ind] == Z+1:
1017
+ indZp1 = ind
1018
+ flagZp1 = True
1019
+ #
1020
+ if flagZ and flagZm1 and flagZp1:
1021
+ if sign > 0.0: #even
1022
+ D3p_Z_even.append( Z )
1023
+ D3p_E_even.append( sign/2.0*( -2*self.sel_nucBE[indZ] + self.sel_nucBE[indZm1] + self.sel_nucBE[indZp1] ) )
1024
+ D3p_E_err_even.append( 0.5*( 2*self.sel_nucBE_err[indZ] + self.sel_nucBE_err[indZm1] + self.sel_nucBE_err[indZp1] ) )
1012
1025
  else:
1013
- D3p_Z_odd.append( self.nucZ[ind] )
1014
- D3p_N_odd.append( self.nucN[ind] )
1015
- D3p_odd.append( sign/2.0*( -2*self.nucBE[ind] + self.nucBE[ind1] + self.nucBE[ind2] ) )
1016
- self.D3p_N_even = np.array( D3p_N_even, dtype = int )
1017
- self.D3p_N_odd = np.array( D3p_N_odd, dtype = int )
1026
+ D3p_Z_odd.append( Z )
1027
+ D3p_E_odd.append( sign/2.0*( -2*self.sel_nucBE[indZ] + self.sel_nucBE[indZm1] + self.sel_nucBE[indZp1] ) )
1028
+ D3p_E_err_odd.append( 0.5*( 2*self.sel_nucBE_err[indZ] + self.sel_nucBE_err[indZm1] + self.sel_nucBE_err[indZp1] ) )
1029
+ #
1018
1030
  self.D3p_Z_even = np.array( D3p_Z_even, dtype = int )
1019
- self.D3p_Z_odd = np.array( D3p_Z_odd, dtype = int )
1020
- self.D3p_even = np.array( D3p_even, dtype = float )
1021
- self.D3p_odd = np.array( D3p_odd, dtype = float )
1031
+ self.D3p_E_even = np.array( D3p_E_even, dtype = float )
1032
+ self.D3p_E_err_even = np.array( D3p_E_err_even, dtype = float )
1033
+ self.D3p_Z_odd = np.array( D3p_Z_odd, dtype = int )
1034
+ self.D3p_E_odd = np.array( D3p_E_odd, dtype = float )
1035
+ self.D3p_E_err_odd = np.array( D3p_E_err_odd, dtype = float )
1022
1036
  #
1023
- if nuda.env.verb: print("Exit D3p_p()")
1037
+ if nuda.env.verb: print("Exit D3p()")
1024
1038
  #
1025
1039
  return self
1026
- #
1040
+ #