nucleardatapy 0.2.1__py3-none-any.whl → 1.0.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.
Files changed (142) hide show
  1. nucleardatapy/__init__.py +3 -1
  2. nucleardatapy/astro/setup_gw.py +18 -18
  3. nucleardatapy/astro/setup_mr.py +9 -1
  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/crust/setup_crust.py +363 -125
  9. nucleardatapy/data/astro/NICER/J0740+6620.dat +1 -0
  10. nucleardatapy/data/matter/micro/2006-BHF/2006-BHF-Av18-E2A-NM.dat +8 -8
  11. nucleardatapy/data/matter/nep/NEPESkyrme.dat +2 -3
  12. nucleardatapy/data/matter/nep/NEPGSkyrme.dat +7 -0
  13. nucleardatapy/data/matter/nep/NEPSkyrme.dat +4 -2
  14. nucleardatapy/data/matter/nep/NEPxEFT.dat +8 -0
  15. nucleardatapy/data/matter/nep/best67DDSkyrme.dat +28 -0
  16. nucleardatapy/data/matter/nep/best90DDSkyrme.dat +46 -0
  17. nucleardatapy/data/matter/nep/best95DDSkyrme.dat +54 -0
  18. nucleardatapy/data/matter/pheno/ESkyrme/BSk31-NM.dat +996 -996
  19. nucleardatapy/data/matter/pheno/ESkyrme/BSk31-SM.dat +991 -991
  20. nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-NM.dat +1002 -0
  21. nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-SM.dat +1002 -0
  22. nucleardatapy/data/matter/pheno/Skyrme/BSkG1-NM.dat +102 -0
  23. nucleardatapy/data/matter/pheno/Skyrme/BSkG1-SM.dat +102 -0
  24. nucleardatapy/data/matter/pheno/Skyrme/BSkG2-NM.dat +102 -0
  25. nucleardatapy/data/matter/pheno/Skyrme/BSkG2-SM.dat +102 -0
  26. nucleardatapy/env.py +1 -1
  27. nucleardatapy/eos/__init__.py +4 -3
  28. nucleardatapy/eos/setupCC.py +429 -0
  29. nucleardatapy/eos/setup_am.py +39 -14
  30. nucleardatapy/eos/setup_am_Beq.py +40 -15
  31. nucleardatapy/eos/setup_am_Leq.py +40 -15
  32. nucleardatapy/fig/__init__.py +24 -15
  33. nucleardatapy/fig/astro_setupGW_fig.py +5 -5
  34. nucleardatapy/fig/astro_setupMR_fig.py +12 -10
  35. nucleardatapy/fig/astro_setupMasses_fig.py +4 -4
  36. nucleardatapy/fig/astro_setupMtov_fig.py +4 -4
  37. nucleardatapy/fig/astro_setupMup_fig.py +5 -5
  38. nucleardatapy/fig/corr_setupEsymDen_fig.py +12 -5
  39. nucleardatapy/fig/corr_setupEsymLsym_fig.py +18 -5
  40. nucleardatapy/fig/corr_setupKsatQsat_fig.py +19 -15
  41. nucleardatapy/fig/crust_setupCrust_fig.py +5 -5
  42. nucleardatapy/fig/eos_setupAMBeq_fig.py +523 -66
  43. nucleardatapy/fig/eos_setupAMLeq_fig.py +18 -18
  44. nucleardatapy/fig/eos_setupAM_asy_lep_fig.py +364 -0
  45. nucleardatapy/fig/eos_setupAM_asy_nuc_fig.py +337 -0
  46. nucleardatapy/fig/eos_setupAM_asy_tot_fig.py +343 -0
  47. nucleardatapy/fig/eos_setupAM_fig.py +504 -0
  48. nucleardatapy/fig/eos_setupCC_fig.py +240 -0
  49. nucleardatapy/fig/hnuc_setupChart_fig.py +2 -2
  50. nucleardatapy/fig/hnuc_setupRE1LExp_fig.py +3 -3
  51. nucleardatapy/fig/matter_all_fig.py +954 -0
  52. nucleardatapy/fig/matter_setupCheck_fig.py +103 -0
  53. nucleardatapy/fig/matter_setupFFGLep_fig.py +70 -0
  54. nucleardatapy/fig/matter_setupFFGNuc_fig.py +267 -104
  55. nucleardatapy/fig/matter_setupHIC_fig.py +98 -58
  56. nucleardatapy/fig/matter_setupMicroEsym_fig.py +248 -63
  57. nucleardatapy/fig/matter_setupMicro_LP_fig.py +175 -78
  58. nucleardatapy/fig/matter_setupMicro_band_fig.py +115 -47
  59. nucleardatapy/fig/matter_setupMicro_effmass_fig.py +248 -73
  60. nucleardatapy/fig/matter_setupMicro_err_NM_fig.py +41 -18
  61. nucleardatapy/fig/matter_setupMicro_fig.py +299 -67
  62. nucleardatapy/fig/matter_setupMicro_gap_fig.py +219 -92
  63. nucleardatapy/fig/matter_setupNEPStats_fig.py +96 -0
  64. nucleardatapy/fig/matter_setupPhenoEsym_fig.py +193 -55
  65. nucleardatapy/fig/matter_setupPheno_fig.py +385 -88
  66. nucleardatapy/fig/nuc_setupBEExp_chart_fig.py +59 -48
  67. nucleardatapy/fig/nuc_setupBEExp_fig.py +48 -41
  68. nucleardatapy/fig/nuc_setupBETheo_fig.py +59 -31
  69. nucleardatapy/fig/nuc_setupISGMRExp_fig.py +5 -5
  70. nucleardatapy/fig/nuc_setupRchExp_fig.py +2 -2
  71. nucleardatapy/fig/nuc_setupRchTheo_fig.py +21 -20
  72. nucleardatapy/fig/nuc_setupRnpExp_fig.py +77 -109
  73. nucleardatapy/fig/nuc_setupRnpTheo_fig.py +92 -93
  74. nucleardatapy/hello.py +6 -0
  75. nucleardatapy/hnuc/setup_re1L_exp.py +6 -6
  76. nucleardatapy/hnuc/setup_re1Xi_exp.py +5 -5
  77. nucleardatapy/hnuc/setup_re2L_exp.py +6 -6
  78. nucleardatapy/matter/__init__.py +14 -14
  79. nucleardatapy/matter/setup_check.py +6 -6
  80. nucleardatapy/matter/setup_ffg.py +66 -39
  81. nucleardatapy/matter/setup_hic.py +91 -74
  82. nucleardatapy/matter/setup_micro.py +1623 -1009
  83. nucleardatapy/matter/setup_micro_band.py +6 -6
  84. nucleardatapy/matter/setup_micro_esym.py +11 -13
  85. nucleardatapy/matter/setup_micro_gap.py +24 -17
  86. nucleardatapy/matter/setup_micro_lp.py +2 -2
  87. nucleardatapy/matter/setup_nep.py +175 -92
  88. nucleardatapy/matter/{setup_nep_model_dist.py → setup_nep_stat_model.py} +13 -8
  89. nucleardatapy/matter/{setup_nep_dist.py → setup_nep_stat_models.py} +12 -8
  90. nucleardatapy/matter/setup_pheno.py +121 -45
  91. nucleardatapy/matter/setup_pheno_esym.py +8 -13
  92. nucleardatapy/nuc/setup_be_exp.py +304 -292
  93. nucleardatapy/nuc/setup_be_theo.py +273 -97
  94. nucleardatapy/nuc/setup_isgmr_exp.py +4 -4
  95. nucleardatapy/nuc/setup_rnp_exp.py +1 -0
  96. nucleardatapy/nuc/setup_rnp_theo.py +2 -1
  97. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.0.dist-info}/METADATA +48 -16
  98. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.0.dist-info}/RECORD +127 -120
  99. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.0.dist-info}/WHEEL +1 -1
  100. tests/test_corr_setupKsatQsat.py +3 -1
  101. tests/test_matter_setupMicro.py +37 -10
  102. nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-NM.dat +0 -1002
  103. nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-SM.dat +0 -1002
  104. nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-NM.dat +0 -1002
  105. nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-SM.dat +0 -1002
  106. nucleardatapy/fig/eos_setupAM_e_asy_lep_fig.py +0 -125
  107. nucleardatapy/fig/eos_setupAM_e_asy_nuc_fig.py +0 -115
  108. nucleardatapy/fig/eos_setupAM_e_asy_tot_fig.py +0 -117
  109. nucleardatapy/fig/eos_setupAM_e_fig.py +0 -173
  110. nucleardatapy/fig/matter_ENM_fig.py +0 -128
  111. nucleardatapy/fig/matter_ESM_fig.py +0 -140
  112. nucleardatapy/fig/matter_Esym_fig.py +0 -134
  113. nucleardatapy/fig/matter_cs2_fig.py +0 -83
  114. nucleardatapy/fig/matter_preNM_fig.py +0 -146
  115. nucleardatapy/fig/matter_preSM_fig.py +0 -144
  116. nucleardatapy/fig/matter_setupNEPModelDist_fig.py +0 -68
  117. /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-NM-AV18.dat → 2006-EBHF-NM-AV18.dat} +0 -0
  118. /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-SM-AV18.dat → 2006-EBHF-SM-AV18.dat} +0 -0
  119. /nucleardatapy/data/crust/{2022-crustGMRS-BSK14.dat → 2022-GMRS-BSK14.dat} +0 -0
  120. /nucleardatapy/data/crust/{2022-crustGMRS-BSK16.dat → 2022-GMRS-BSK16.dat} +0 -0
  121. /nucleardatapy/data/crust/{2022-crustGMRS-DHSL59.dat → 2022-GMRS-DHSL59.dat} +0 -0
  122. /nucleardatapy/data/crust/{2022-crustGMRS-DHSL69.dat → 2022-GMRS-DHSL69.dat} +0 -0
  123. /nucleardatapy/data/crust/{2022-crustGMRS-F0.dat → 2022-GMRS-F0.dat} +0 -0
  124. /nucleardatapy/data/crust/{2022-crustGMRS-H1.dat → 2022-GMRS-H1.dat} +0 -0
  125. /nucleardatapy/data/crust/{2022-crustGMRS-H2.dat → 2022-GMRS-H2.dat} +0 -0
  126. /nucleardatapy/data/crust/{2022-crustGMRS-H3.dat → 2022-GMRS-H3.dat} +0 -0
  127. /nucleardatapy/data/crust/{2022-crustGMRS-H4.dat → 2022-GMRS-H4.dat} +0 -0
  128. /nucleardatapy/data/crust/{2022-crustGMRS-H5.dat → 2022-GMRS-H5.dat} +0 -0
  129. /nucleardatapy/data/crust/{2022-crustGMRS-H7.dat → 2022-GMRS-H7.dat} +0 -0
  130. /nucleardatapy/data/crust/{2022-crustGMRS-LNS5.dat → 2022-GMRS-LNS5.dat} +0 -0
  131. /nucleardatapy/data/crust/{2022-crustGMRS-RATP.dat → 2022-GMRS-RATP.dat} +0 -0
  132. /nucleardatapy/data/crust/{2022-crustGMRS-SGII.dat → 2022-GMRS-SGII.dat} +0 -0
  133. /nucleardatapy/data/crust/{2022-crustGMRS-SLY5.dat → 2022-GMRS-SLY5.dat} +0 -0
  134. /nucleardatapy/data/matter/micro/{2013-QMC-NM.dat → 2013-MBPT-NM.dat} +0 -0
  135. /nucleardatapy/data/{NeutronSkin/ddrhNskin-208Pb.dat → rnp/ddrhrnp-208Pb.dat} +0 -0
  136. /nucleardatapy/data/{NeutronSkin/ddrhNskin-48Ca.dat → rnp/ddrhrnp-48Ca.dat} +0 -0
  137. /nucleardatapy/data/{NeutronSkin/nlrhNskin-208Pb.dat → rnp/nlrhrnp-208Pb.dat} +0 -0
  138. /nucleardatapy/data/{NeutronSkin/nlrhNskin-48Ca.dat → rnp/nlrhrnp-48Ca.dat} +0 -0
  139. /nucleardatapy/data/{NeutronSkin/skyrmeNskin-208Pb.dat → rnp/skyrmernp-208Pb.dat} +0 -0
  140. /nucleardatapy/data/{NeutronSkin/skyrmeNskin-48Ca.dat → rnp/skyrmernp-48Ca.dat} +0 -0
  141. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.0.dist-info}/licenses/LICENSE +0 -0
  142. {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.0.dist-info}/top_level.txt +0 -0
@@ -5,22 +5,23 @@ import numpy as np # 1.15.0
5
5
 
6
6
  import nucleardatapy as nuda
7
7
 
8
- def delta_emp( A, Z, formula ):
9
- if formula == 'classic':
10
- return 12.0 / A**0.5
11
- elif formula == 'Vogel':
12
- return ( 7.2 - 44.0 * ( 1.0 - 2.0 * Z / A )**2 ) / A**0.3333
13
- else:
14
- print('setup_be_theo: formula is badly defined ',formula)
15
- print('setup_be_theo: exit')
16
- exit()
8
+ def delta_emp( N, Z, formula ):
9
+ A = N + Z
10
+ if formula == 'classic':
11
+ return 12.0 / A**0.5
12
+ elif formula == 'Vogel':
13
+ return ( 7.2 - 44.0 * ( 1.0 - 2.0 * Z / A )**2 ) / A**0.3333
14
+ else:
15
+ print('setup_be_theo: formula is badly defined ',formula)
16
+ print('setup_be_theo: exit')
17
+ exit()
17
18
 
18
19
  def be_theo_tables():
19
20
  """
20
21
  Return a list of the tables available in this toolkit for the masses
21
22
  predicted by theoretical approaches and print them all on the prompt.
22
23
  These tables are the following ones: \
23
- [ '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
24
+ [ '1988-GK', '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
24
25
  '2005-KTUY', '2007-HFB14', '2010-WS*', '2010-HFB21', '2011-WS3', '2013-HFB22', \
25
26
  '2013-HFB23', '2013-HFB24', '2013-HFB25', '2013-HFB26', '2021-BSkG1', \
26
27
  '2022-BSkG2', '2023-BSkG3', '2025-BSkG4' ]
@@ -31,7 +32,7 @@ def be_theo_tables():
31
32
  #
32
33
  if nuda.env.verb: print("\nEnter be_theo_tables()")
33
34
  #
34
- tables = [ '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
35
+ tables = [ '1988-GK', '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
35
36
  '2005-KTUY', '2007-HFB14', '2010-WS*', '2010-HFB21','2011-WS3', '2013-HFB22', \
36
37
  '2013-HFB23', '2013-HFB24', '2013-HFB25', '2013-HFB26', '2021-BSkG1', \
37
38
  '2022-BSkG2', '2023-BSkG3', '2025-BSkG4' ]
@@ -62,7 +63,7 @@ class setupBETheo():
62
63
  This choice is defined in the variable `table`.
63
64
 
64
65
  `table` can chosen among the following ones: \
65
- [ '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
66
+ [ '1988-GK', '1988-MJ', '1995-DZ', '1995-ETFSI', '1995-FRDM', \
66
67
  '2005-KTUY', '2007-HFB14', '2010-WS*', '2010-HFB21','2011-WS3', '2013-HFB26', '2021-BSkG1', \
67
68
  '2022-BSkG2', '2023-BSkG3', '2025-BSkG4' ]
68
69
 
@@ -488,6 +489,7 @@ class setupBETheo():
488
489
  self.nucBE2A = self.nucBE / self.nucA
489
490
  self.Zmax = int( max( self.nucZ ) )
490
491
  #
492
+ self.nucI = ( self.nucN - self.nucZ ) / self.nucA
491
493
  #
492
494
  if nuda.env.verb: print("Exit setupBETheo()")
493
495
  #
@@ -511,117 +513,172 @@ class setupBETheo():
511
513
  #
512
514
  if nuda.env.verb: print("Exit print_outputs()")
513
515
  #
514
- def S2n( self, Zmin = 1, Zmax = 95 ):
516
+ def isotopes(self, Zref = 50 ):
517
+ """
518
+ Method which find the first and last isotopes for Z=Zref.
519
+
520
+ :param Zref: Fix the charge for the search of isotopes.
521
+ :type Zref: int, optional. Default: 50.
522
+
523
+ **Attributes:**
524
+ """
525
+ #
526
+ if nuda.env.verb: print("Enter isotopes()")
527
+ #
528
+ if Zref < 0:
529
+ print('setup_be_exp.py: issue with the function isotopes.')
530
+ print('setup_be_exp.py: Bad definition for Zref')
531
+ print('setup_be_exp.py: It is expected that Zref>0')
532
+ print('setup_be_exp.py: Zref:',Zref)
533
+ print('setup_be_exp.py: exit')
534
+ exit()
535
+ #
536
+ Nstable, Zstable = nuda.nuc.stable_fit_Z( Zmin = Zref, Zmax = Zref )
537
+ #
538
+ nucNmin = Nstable[0]
539
+ nucNmax = Nstable[0]
540
+ #
541
+ for ind,A in enumerate(self.nucA):
542
+ if self.nucZ[ind] == Zref and self.nucN[ind] < nucNmin:
543
+ nucNmin = self.nucN[ind]
544
+ if self.nucZ[ind] == Zref and self.nucN[ind] > nucNmax:
545
+ nucNmax = self.nucN[ind]
546
+ self.itp_nucZ = Zref
547
+ self.itp_nucNmin = nucNmin
548
+ self.itp_nucNmax = nucNmax
549
+ #
550
+ if nuda.env.verb: print("Exit isotopes()")
551
+ #
552
+ return self
553
+ #
554
+ def isotones(self, Nref = 50 ):
555
+ """
556
+ Method which find the first and last isotones for N=Nref.
557
+
558
+ :param Nref: Fix the neutron number for the search of isotones.
559
+ :type Nref: int, optional. Default: 50.
560
+
561
+ **Attributes:**
562
+ """
563
+ #
564
+ if nuda.env.verb: print("Enter isotones()")
565
+ #
566
+ if Nref < 0:
567
+ print('setup_be_exp.py: issue with the function isotones.')
568
+ print('setup_be_exp.py: Bad definition for Nref')
569
+ print('setup_be_exp.py: It is expected that Nref>0')
570
+ print('setup_be_exp.py: Nref:',Nref)
571
+ print('setup_be_exp.py: exit')
572
+ exit()
573
+ #
574
+ Nstable, Zstable = nuda.nuc.stable_fit_N( Nmin = Nref, Nmax = Nref )
575
+ #
576
+ nucZmin = Zstable[0]
577
+ nucZmax = Zstable[0]
578
+ #
579
+ for ind,A in enumerate(self.nucA):
580
+ if self.nucN[ind] == Nref and self.nucZ[ind] < nucZmin:
581
+ nucZmin = self.nucZ[ind]
582
+ if self.nucN[ind] == Nref and self.nucZ[ind] > nucZmax:
583
+ nucZmax = self.nucZ[ind]
584
+ self.itn_nucN = Nref
585
+ self.itn_nucZmin = nucZmin
586
+ self.itn_nucZmax = nucZmax
587
+ #
588
+ if nuda.env.verb: print("Exit isotones()")
589
+ #
590
+ return self
591
+ #
592
+ def S2n( self, Zref = 50 ):
515
593
  """
516
594
  Compute the two-neutron separation energy (S2n)
517
- S2n = E(Z,N)-E(Z,N+2)
595
+ S2n = E(Z,N)-E(Z,N-2)
518
596
  """
519
597
  #
520
598
  if nuda.env.verb: print("Enter S2n()")
521
599
  #
522
- if Zmin > Zmax:
600
+ if Zref < 0:
523
601
  print('setup_be_theo: In S2n attribute function of setup_be_theo.py:')
524
- print('setup_be_theo: Bad definition of Zmin and Zmax')
525
- print('setup_be_theo: It is expected that Zmin<=Zmax')
526
- print('setup_be_theo: Zmin,Zmax:',Zmin,Zmax)
602
+ print('setup_be_theo: Bad definition of Zref')
603
+ print('setup_be_theo: It is expected that Zref>=0')
604
+ print('setup_be_theo: Zref:',Zref)
527
605
  print('setup_be_theo: exit')
528
606
  exit()
529
607
  #
530
- S2n_Z = []
531
608
  S2n_N = []
532
- S2n = []
533
- #
534
- for ind,Z in enumerate(self.nucZ):
535
- #
536
- if Z > Zmax :
537
- break
538
- if Z < Zmin :
539
- continue
540
- #
541
- N = self.nucN[ind]
542
- #
543
- #print('For Z,N:',Z,N)
544
- #
545
- # search index for Z,N+2
546
- #
547
- flag_find = 0
548
- for ind2,Z2 in enumerate(self.nucZ):
549
- if Z == Z2 and self.nucN[ind2] == N-2:
550
- flag_find = 1
551
- break
552
- if flag_find == 1:
553
- N2 = self.nucN[ind2]
554
- #print('N,N2:',N,N2,'ind,ind2:',ind,ind2)
555
- S2n_Z.append( self.nucZ[ind] )
556
- S2n_N.append( self.nucN[ind] )
557
- S2n.append( self.nucBE[ind2] - self.nucBE[ind] )
609
+ S2n_E = []
610
+ #
611
+ Nmin=self.itp_nucNmin
612
+ Nmax=self.itp_nucNmax
613
+ #
614
+ for N in range(Nmin+2,Nmax+1):
615
+ #
616
+ flagN = False; flagNm2 = False;
617
+ #
618
+ for ind,Z in enumerate(self.nucZ):
619
+ #
620
+ if Z == Zref and self.nucN[ind] == N:
621
+ indN = ind
622
+ flagN = True
623
+ if Z == Zref and self.nucN[ind] == N-2:
624
+ indNm2 = ind
625
+ flagNm2 = True
626
+ #
627
+ if flagN and flagNm2:
628
+ S2n_N.append( N )
629
+ S2n_E.append( self.nucBE[indN] - self.nucBE[indNm2] )
558
630
  self.S2n_N = np.array( S2n_N, dtype = int )
559
- self.S2n_Z = np.array( S2n_Z, dtype = int )
560
- self.S2n = np.array( S2n, dtype = float )
561
- #print('Z:',self.S2n_Z)
562
- #print('N:',self.S2n_N)
563
- #print('S2n:',self.S2n)
631
+ self.S2n_E = np.array( S2n_E, dtype = float )
564
632
  #
565
633
  if nuda.env.verb: print("Exit S2n()")
566
634
  #
567
635
  return self
568
- #
569
- def S2p( self, Nmin = 1, Nmax = 95 ):
636
+ #
637
+ def S2p( self, Nref = 50 ):
570
638
  """
571
- Compute the two-proton separation energy (S2n)
572
- S2p = E(Z,N)-E(Z-2,N)
639
+ Compute the two-proton separation energy (S2p)
640
+ S2p(Z,Nref) = E(Z,Nref)-E(Z-2,Nref)
573
641
  """
574
642
  #
575
643
  if nuda.env.verb: print("Enter S2p()")
576
644
  #
577
- if Nmin > Nmax:
578
- print('setup_be_theo: In S2p attribute function of setup_be_exp.py:')
579
- print('setup_be_theo: Bad definition of Nmin and Nmax')
580
- print('setup_be_theo: It is expected that Nmin<=Nmax')
581
- print('setup_be_theo: Nmin,Nmax:',Nmin,Nmax)
582
- print('setup_be_theo: exit')
645
+ if Nref < 0:
646
+ print('setup_be_exp.py: In S2p attribute function of setup_be_exp.py:')
647
+ print('setup_be_exp.py: Bad definition of Nref')
648
+ print('setup_be_exp.py: It is expected that Nref>=0')
649
+ print('setup_be_exp.py: Nref:',Nref)
650
+ print('setup_be_exp.py: exit')
583
651
  exit()
584
652
  #
585
653
  S2p_Z = []
586
- S2p_N = []
587
- S2p = []
588
- #
589
- for ind,N in enumerate(self.nucN):
590
- #
591
- if N > Nmax :
592
- continue
593
- if N < Nmin :
594
- continue
595
- #
596
- Z = self.nucZ[ind]
597
- #
598
- #print('For Z,N:',Z,N)
599
- #
600
- # search index for Z-2,N
601
- #
602
- flag_find = 0
603
- for ind2,N2 in enumerate(self.nucN):
604
- if N == N2 and self.nucZ[ind2] == Z-2:
605
- flag_find = 1
606
- break
607
- if flag_find == 1:
608
- Z2 = self.nucZ[ind2]
609
- #print('N,N2:',N,N2,'ind,ind2:',ind,ind2)
610
- S2p_Z.append( self.nucZ[ind] )
611
- S2p_N.append( self.nucN[ind] )
612
- S2p.append( self.nucBE[ind2] - self.nucBE[ind] )
613
- self.S2p_N = np.array( S2p_N, dtype = int )
654
+ S2p_E = []
655
+ #
656
+ Zmin=self.itn_nucZmin
657
+ Zmax=self.itn_nucZmax
658
+ #
659
+ for Z in range(Zmin+2,Zmax+1):
660
+ #
661
+ flagZ = False; flagZm2 = False;
662
+ #
663
+ for ind,N in enumerate(self.nucN):
664
+ #
665
+ if N == Nref and self.nucZ[ind] == Z:
666
+ indZ = ind
667
+ flagZ = True
668
+ if N == Nref and self.nucZ[ind] == Z-2:
669
+ indZm2 = ind
670
+ flagZm2 = True
671
+ #
672
+ if flagZ and flagZm2:
673
+ S2p_Z.append( Z )
674
+ S2p_E.append( self.nucBE[indZ] - self.nucBE[indZm2] )
614
675
  self.S2p_Z = np.array( S2p_Z, dtype = int )
615
- self.S2p = np.array( S2p, dtype = float )
616
- #print('Z:',self.S2n_Z)
617
- #print('N:',self.S2n_N)
618
- #print('S2n:',self.S2n)
619
- #print('Z:',self.S2n_Z)
676
+ self.S2p_E = np.array( S2p_E, dtype = float )
620
677
  #
621
678
  if nuda.env.verb: print("Exit S2p()")
622
679
  #
623
680
  return self
624
- #
681
+ #
625
682
  def drip_S2n(self, Zmin = 1, Zmax = 95 ):
626
683
  """
627
684
  Method which find the drip-line nuclei from S2n (neutron side).
@@ -726,8 +783,127 @@ class setupBETheo():
726
783
  #
727
784
  return self
728
785
  #
729
- #
730
- def D3n( self, Zmin = 1, Zmax = 95 ):
786
+ def D3n( self, Zref = 50 ):
787
+ """
788
+ Compute the three-points odd-even mass staggering (D3n)
789
+ D3n = (-)**N * ( 2*E(Z,N)-E(Z,N+1)-E(Z,N-1) ) / 2
790
+ """
791
+ #
792
+ if nuda.env.verb: print("Enter D3n()")
793
+ #
794
+ if Zref < 0:
795
+ print('setup_be_theo: In D3n attribute function of setup_be_theo.py:')
796
+ print('setup_be_theo: Bad definition of Zref')
797
+ print('setup_be_theo: It is expected that Zref>=0')
798
+ print('setup_be_theo: Zref:',Zref)
799
+ print('setup_be_theo: exit')
800
+ exit()
801
+ #
802
+ D3n_N_even = []
803
+ D3n_E_even = []
804
+ D3n_N_odd = []
805
+ D3n_E_odd = []
806
+ #
807
+ Nmin=self.itp_nucNmin
808
+ Nmax=self.itp_nucNmax
809
+ #
810
+ for N in range(Nmin+1,Nmax+1):
811
+ #
812
+ flagN = False; flagNm1 = False; flagNp1 = False;
813
+ #
814
+ for ind,Z in enumerate(self.nucZ):
815
+ #
816
+ if Z == Zref and self.nucN[ind] == N:
817
+ indN = ind
818
+ flagN = True
819
+ if N % 2:
820
+ sign = -1.0 # odd
821
+ else:
822
+ sign = 1.0 # even
823
+ if Z == Zref and self.nucN[ind] == N-1:
824
+ indNm1 = ind
825
+ flagNm1 = True
826
+ if Z == Zref and self.nucN[ind] == N+1:
827
+ indNp1 = ind
828
+ flagNp1 = True
829
+ #
830
+ if flagN and flagNm1 and flagNp1:
831
+ if sign > 0.0: #even
832
+ D3n_N_even.append( N )
833
+ D3n_E_even.append( sign/2.0*( -2*self.nucBE[indN] + self.nucBE[indNm1] + self.nucBE[indNp1] ) )
834
+ else:
835
+ D3n_N_odd.append( N )
836
+ D3n_E_odd.append( sign/2.0*( -2*self.nucBE[indN] + self.nucBE[indNm1] + self.nucBE[indNp1] ) )
837
+ self.D3n_N_even = np.array( D3n_N_even, dtype = int )
838
+ self.D3n_E_even = np.array( D3n_E_even, dtype = float )
839
+ self.D3n_N_odd = np.array( D3n_N_odd, dtype = int )
840
+ self.D3n_E_odd = np.array( D3n_E_odd, dtype = float )
841
+ #
842
+ if nuda.env.verb: print("Exit D3n()")
843
+ #
844
+ return self
845
+ #
846
+ def D3p( self, Nref = 50 ):
847
+ """
848
+ Compute the three-points odd-even mass staggering (D3n)
849
+ D3p = (-)**Z * ( 2*E(Z,N)-E(Z+1,N)-E(Z-1,N) ) / 2
850
+ """
851
+ #
852
+ if nuda.env.verb: print("Enter D3p()")
853
+ #
854
+ if Nref < 0:
855
+ print('setup_be_theo: In D3p attribute function of setup_be_theo.py:')
856
+ print('setup_be_theo: Bad definition of Nref')
857
+ print('setup_be_theo: It is expected that Nref>=0')
858
+ print('setup_be_theo: Nref:',Nref)
859
+ print('setup_be_theo: exit')
860
+ exit()
861
+ #
862
+ D3p_Z_even = []
863
+ D3p_E_even = []
864
+ D3p_Z_odd = []
865
+ D3p_E_odd = []
866
+ #
867
+ Zmin=self.itn_nucZmin
868
+ Zmax=self.itn_nucZmax
869
+ #
870
+ for Z in range(Zmin+1,Zmax+1):
871
+ #
872
+ flagZ = False; flagZm1 = False; flagZp1 = False;
873
+ #
874
+ for ind,N in enumerate(self.nucN):
875
+ #
876
+ if N == Nref and self.nucZ[ind] == Z:
877
+ indZ = ind
878
+ flagZ = True
879
+ if Z % 2:
880
+ sign = -1.0 # odd
881
+ else:
882
+ sign = 1.0 # even
883
+ if N == Nref and self.nucZ[ind] == Z-1:
884
+ indZm1 = ind
885
+ flagZm1 = True
886
+ if N == Nref and self.nucZ[ind] == Z+1:
887
+ indZp1 = ind
888
+ flagZp1 = True
889
+ #
890
+ if flagZ and flagZm1 and flagZp1:
891
+ if sign > 0.0: #even
892
+ D3p_Z_even.append( Z )
893
+ D3p_E_even.append( sign/2.0*( -2*self.nucBE[indZ] + self.nucBE[indZm1] + self.nucBE[indZp1] ) )
894
+ else:
895
+ D3p_Z_odd.append( Z )
896
+ D3p_E_odd.append( sign/2.0*( -2*self.nucBE[indZ] + self.nucBE[indZm1] + self.nucBE[indZp1] ) )
897
+ self.D3p_Z_even = np.array( D3p_Z_even, dtype = int )
898
+ self.D3p_E_even = np.array( D3p_E_even, dtype = float )
899
+ self.D3p_Z_odd = np.array( D3p_Z_odd, dtype = int )
900
+ self.D3p_E_odd = np.array( D3p_E_odd, dtype = float )
901
+ #
902
+ if nuda.env.verb: print("Exit D3p()")
903
+ #
904
+ return self
905
+ #
906
+ def D3n_old( self, Zmin = 1, Zmax = 95 ):
731
907
  """
732
908
  Compute the three-points odd-even mass staggering (D3n)
733
909
  D3N = (-)**N * ( 2*E(Z,N)-E(Z,N+1)-E(Z,N-1) ) / 2
@@ -798,7 +974,7 @@ class setupBETheo():
798
974
  #
799
975
  return self
800
976
  #
801
- def D3p( self, Nmin = 1, Nmax = 95 ):
977
+ def D3p_old( self, Nmin = 1, Nmax = 95 ):
802
978
  """
803
979
  Compute the three-points odd-even mass staggering (D3p)
804
980
  D3Z = (-)**Z * ( 2*E(Z,N)-E(Z+1,N)-E(Z-1,N) ) / 2
@@ -20,7 +20,7 @@ def isgmr_exp_tables():
20
20
  #
21
21
  if nuda.env.verb: print("\nEnter isgmr_exp_tables()")
22
22
  #
23
- tables = [ '2010-ISGMR-LI', '2018-ISGMR-GARG', '2018-ISGMR-GARG-LATEX', '2022-ISGMR-average' ]
23
+ tables = [ '2010-ISGMR-LI', '2018-ISGMR-GARG', '2018-ISGMR-GARG-few', '2022-ISGMR-average' ]
24
24
  #print('tables available in the toolkit:',tables)
25
25
  tables_lower = [ item.lower() for item in tables ]
26
26
  #print('tables available in the toolkit:',tables_lower)
@@ -100,12 +100,12 @@ class setupISGMRExp():
100
100
  nucM32M1.append( None ); nucM32M1_errp.append( None ); nucM32M1_errm.append( None )
101
101
  nuc = len( nucZ ); nbk = nuc
102
102
  #
103
- elif table.lower() == '2018-isgmr-garg':
103
+ elif table.lower() == '2018-isgmr-garg-few':
104
104
  #
105
105
  file_in = os.path.join(nuda.param.path_data,'nuclei/isgmr/2018-ISGMR-Garg.dat')
106
106
  if nuda.env.verb: print('Reads file:',file_in)
107
107
  self.ref = 'U. Garg and G. Colo, Prog. Part. Nucl. Phys. 101, 55 (2018)'
108
- self.label = 'Garg-Colo-2018'
108
+ self.label = 'Garg-Colo-2018-few'
109
109
  self.note = "write here notes about this table."
110
110
  nucZ, nucA, nucM12Mm1, nucM12Mm1_errp, nucM12Mm1_errm = \
111
111
  np.loadtxt( file_in, usecols=(0,1,2,3,4), comments='#', unpack = True )
@@ -122,7 +122,7 @@ class setupISGMRExp():
122
122
  nucM32M1.append( None ); nucM32M1_errp.append( None ); nucM32M1_errm.append( None )
123
123
  nuc = len( nucZ ); nbk = nuc
124
124
  #
125
- elif table.lower() == '2018-isgmr-garg-latex':
125
+ elif table.lower() == '2018-isgmr-garg':
126
126
  #
127
127
  file_in = os.path.join(nuda.param.path_data,'nuclei/isgmr/2018-ISGMR-Garg.tex')
128
128
  if nuda.env.verb: print('Reads file:',file_in)
@@ -1,3 +1,4 @@
1
+ import numpy as np
1
2
  import math
2
3
  #import numpy as np # 1.15.0
3
4
 
@@ -1,4 +1,5 @@
1
1
  import numpy as np # 1.15.0
2
+ import os
2
3
  from scipy.interpolate import CubicSpline
3
4
 
4
5
  import nucleardatapy as nuda
@@ -149,7 +150,7 @@ class setupRnpTheo():
149
150
  # #
150
151
  if model.lower() == 'skyrme':
151
152
  #
152
- file_in1 = os.path.join(nuda.param.path_data,'Neutrornp/skyrmernp-'+nucleus+'.dat')
153
+ file_in1 = os.path.join(nuda.param.path_data,'rnp/skyrmernp-'+nucleus+'.dat')
153
154
  if nuda.env.verb: print('Reads file1:',file_in1)
154
155
  name = np.loadtxt( file_in1, usecols=(0), comments='#', unpack = True, dtype=str )
155
156
  Rn, Rp, Rnp = np.loadtxt( file_in1, usecols=(1,2,3), comments='#', unpack = True )
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nucleardatapy
3
- Version: 0.2.1
4
- Summary: A toolkit for nuclear data processing and analysis.
3
+ Version: 1.0.0
4
+ Summary: A toolkit for nuclear data processing and meta-analyses.
5
5
  Author: Jerome Margueron, Sudhanva Lalit, Mariana Dutra, Guilherme Grams, Rohit Kumar
6
6
  License: Attribution-NonCommercial-NoDerivatives 4.0 International
7
7
 
@@ -423,22 +423,36 @@ Dynamic: license-file
423
423
 
424
424
  ## Purpose:
425
425
 
426
- The purpose of this toolkit is to simply the access to data, that can be theoretical data or experimental ones. All data are provided with their reference, so when using these data in a scientific paper, reference to data should be provided explicitely. The reference to this toolkit could be given, but it should not mask the reference to data.
426
+ <img align="right" width="250" src="book/logo.png">
427
427
 
428
- This python toolkit is designed to provide:
429
- 1) microscopic calculations in nuclear matter,
430
- 2) phenomenological predictions in nuclear matter,
431
- 3) experimental data for finite nuclei.
428
+ The purpose of this toolkit is to provide an easy access to theoretical or experimental or observational data and allows meta-analyses in a straightforward way.
429
+
430
+ This python toolkit is designed to provide:
431
+
432
+ 1. microscopic calculations in nuclear matter,
433
+ 2. phenomenological predictions in nuclear matter,
434
+ 3. experimental data for finite nuclei,
435
+ 4. astrophysical observations and theoretical predictions.
436
+
437
+ All data are provided with their reference, so when using these data in a scientific paper, reference to data should be provided explicitly. The reference to this toolkit could be given, but it should not mask the reference to the original source of data.
432
438
 
433
439
  ## Installation of the toolkit:
434
440
 
435
441
  To install the toolkit, launch:
442
+
436
443
  ```
437
444
  $ pip install nucleardatapy
438
445
  ```
439
- This installs the lattest version of the toolkit.
440
446
 
441
- Now everything is done about the installation.
447
+ This installs the latest version of the toolkit.
448
+
449
+ If the github repository is downloaded, one can also install the toolkit using
450
+
451
+ ```
452
+ $ pip install -e .
453
+ ```
454
+
455
+ from within the root folder of the nucleardatapy directory.
442
456
 
443
457
  ## Test the python toolkit
444
458
 
@@ -453,37 +467,58 @@ $ bash run_tests.sh
453
467
  ## Short introduction to the toolkit:
454
468
 
455
469
  The call of the toolkit in python code is performed in the usual way:
470
+
456
471
  ```Python
457
472
  import nucleardatapy as nuda
458
473
  ```
459
474
 
460
475
  The list of functions and global variables available in the toolkit can be printed from the following instruction:
476
+
461
477
  ```Python
462
478
  print(dir(nuda))
463
479
  ```
464
480
 
465
481
  A detailed view of the function can be obtained in the following way
482
+
466
483
  ```Python
467
484
  print(help(nuda))
468
485
  ```
469
486
 
470
- The principle of the toolkit is that it instantiates objects that contain all the information available. For instance, the following command
487
+ The toolkit classes instantiate objects that contain all the information available. For instance, the following command
488
+
471
489
  ```Python
472
490
  mass = nuda.astro.setupMasses()
473
491
  ```
474
- instantiate the object `mass` with the default mass of pulsars. In this case, it is the mass of PSR J1614-2230. All the properties that this object provide can be listed in the following way:
492
+
493
+ instantiates the object `mass` with the mass of PSR J1614-2230 which is the default case. All the properties of this object can be listed in the following way:
494
+
475
495
  ```Python
476
496
  mass.__dict__
477
497
  ```
478
498
 
499
+ ## Documentation
500
+
501
+ The documentation for the toolkit can be found here: [https://nucleardatapy.readthedocs.io/en/latest/index.html](https://nucleardatapy.readthedocs.io/en/latest/index.html). The documentation is also available in the docs/ folder and can be built using the following command:
502
+
503
+ ```
504
+ sphinx-build -b html docs docs/build_html
505
+ ```
506
+
507
+ The pdf version of the documentation can be found by clicking this [link](https://github.com/jeromemargueron/nucleardatapy/blob/main/docs/nucleardatapy.pdf).
508
+
509
+ ## Tutorials
510
+
511
+ The tutorials to get started with nucleardatapy toolkit can be found here: [https://jeromemargueron.github.io/nucleardatapy/landing.html](https://jeromemargueron.github.io/nucleardatapy/landing.html). The tutorials are written using `jupyter notebook` and can be tried on your computer by downloading them or by using `google-colab`. In the github repository, the tutorials are available in the book/notebooks folder.
512
+
479
513
  ## Use nucleardatapy python toolkit
480
514
 
481
515
  The GitHub folder `nucleardatapy/nucleardatapy_samples/` contains a lot of examples on how to use the function and to draw figures. They are all python scripts that can be launched with `python3`. For instance, you can grab these samples anywhere in your computer and try:
516
+
482
517
  ```
483
518
  $ python3 matter_setupMicro_script.py
484
519
  ```
485
520
 
486
- There are also tutorials that can be employed to learn how to use the different functions in the toolkit. The tutorials are written for `jupyter notebook`.
521
+ There are also tutorials that can be employed to learn how to use the different functions in the toolkit.
487
522
 
488
523
  ## Get started
489
524
 
@@ -501,7 +536,6 @@ micro.print_outputs( )
501
536
 
502
537
  More examples are shown in the associated paper[Give reference here], as well as in the sample folder or tutorials as previously written.
503
538
 
504
-
505
539
  ## Contributing
506
540
 
507
541
  The file `how_to_contribute.md` details how contributors could join our team or share their results.
@@ -512,10 +546,8 @@ CC BY-NC-ND 4.0
512
546
 
513
547
  ## Report issues
514
548
 
515
- Issues can be reported using GitHub.
549
+ Issues can be reported using [GitHub Issues](https://github.com/jeromemargueron/nucleardatapy/issues).
516
550
 
517
551
  ## Thanks
518
552
 
519
553
  A special thanks to all contributors who accepted to share their results in this toolkit.
520
-
521
-