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.
- nucleardatapy/__init__.py +3 -1
- nucleardatapy/astro/setup_gw.py +18 -18
- nucleardatapy/astro/setup_mr.py +123 -33
- nucleardatapy/astro/setup_mup.py +10 -10
- nucleardatapy/corr/setup_EsymDen.py +0 -5
- nucleardatapy/corr/setup_EsymLsym.py +50 -17
- nucleardatapy/corr/setup_KsatQsat.py +170 -69
- nucleardatapy/create_folder.py +2 -2
- nucleardatapy/crust/setup_crust.py +364 -126
- nucleardatapy/data/astro/HESS/J1731-347.dat +4 -0
- nucleardatapy/data/astro/NICER/J0030+0451.dat +6 -6
- nucleardatapy/data/astro/NICER/J0437-4715.dat +4 -3
- nucleardatapy/data/astro/NICER/J0614-3329.dat +4 -0
- nucleardatapy/data/astro/NICER/J0740+6620.dat +5 -4
- nucleardatapy/data/hnuclei/1991-2L-Yamamoto.csv +6 -0
- nucleardatapy/data/hnuclei/2013-2L-Ahn.csv +1 -1
- nucleardatapy/data/hnuclei/2019-2L-Ekawa.csv +7 -0
- nucleardatapy/data/matter/micro/2006-BHF/2006-BHF-Av18-E2A-NM.dat +8 -8
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-414-E2A.dat +21 -0
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-414-TD.dat +22 -0
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-450-E2A.dat +20 -0
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-450-TD.dat +22 -0
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-500-E2A.dat +23 -0
- nucleardatapy/data/matter/micro/2020-SCGF-NM-N3LO-500-TD.dat +22 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-414-E2A.dat +15 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-414-TD.dat +21 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-450-E2A.dat +15 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-450-TD.dat +21 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-500-E2A.dat +20 -0
- nucleardatapy/data/matter/micro/2020-SCGF-SM-N3LO-500-TD.dat +20 -0
- nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLO450.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLO500.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLOgo394.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-NM-DeltaNNLOgo450.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-NM-NNLOsat.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLO450.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLO500.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLOgo394.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-SM-DeltaNNLOgo450.dat +28 -0
- nucleardatapy/data/matter/micro/2024-ABI-SM-NNLOsat.dat +28 -0
- nucleardatapy/data/matter/nep/NEPESkyrme.dat +2 -3
- nucleardatapy/data/matter/nep/NEPGSkyrme.dat +7 -0
- nucleardatapy/data/matter/nep/NEPSkyrme.dat +4 -2
- nucleardatapy/data/matter/nep/NEPxEFT.dat +8 -0
- nucleardatapy/data/matter/nep/best67DDSkyrme.dat +28 -0
- nucleardatapy/data/matter/nep/best90DDSkyrme.dat +46 -0
- nucleardatapy/data/matter/nep/best95DDSkyrme.dat +54 -0
- nucleardatapy/data/matter/pheno/ESkyrme/BSk31-NM.dat +996 -996
- nucleardatapy/data/matter/pheno/ESkyrme/BSk31-SM.dat +991 -991
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-NM.dat +1002 -0
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG4-SM.dat +1002 -0
- nucleardatapy/data/matter/pheno/Skyrme/BSkG1-NM.dat +102 -0
- nucleardatapy/data/matter/pheno/Skyrme/BSkG1-SM.dat +102 -0
- nucleardatapy/data/matter/pheno/Skyrme/BSkG2-NM.dat +102 -0
- nucleardatapy/data/matter/pheno/Skyrme/BSkG2-SM.dat +102 -0
- nucleardatapy/env.py +1 -1
- nucleardatapy/eos/__init__.py +4 -3
- nucleardatapy/eos/setupCC.py +429 -0
- nucleardatapy/eos/setup_am.py +39 -14
- nucleardatapy/eos/setup_am_Beq.py +40 -15
- nucleardatapy/eos/setup_am_Leq.py +40 -15
- nucleardatapy/fig/__init__.py +24 -15
- nucleardatapy/fig/astro_setupGW_fig.py +9 -7
- nucleardatapy/fig/astro_setupMR_fig.py +26 -18
- nucleardatapy/fig/astro_setupMasses_fig.py +8 -6
- nucleardatapy/fig/astro_setupMtov_fig.py +10 -6
- nucleardatapy/fig/astro_setupMup_fig.py +9 -7
- nucleardatapy/fig/corr_setupEsymDen_fig.py +22 -9
- nucleardatapy/fig/corr_setupEsymLsym_fig.py +25 -8
- nucleardatapy/fig/corr_setupKsatQsat_fig.py +23 -17
- nucleardatapy/fig/crust_setupCrust_fig.py +11 -9
- nucleardatapy/fig/eos_setupAMBeq_fig.py +641 -156
- nucleardatapy/fig/eos_setupAMLeq_fig.py +53 -50
- nucleardatapy/fig/eos_setupAM_asy_lep_fig.py +373 -0
- nucleardatapy/fig/eos_setupAM_asy_nuc_fig.py +346 -0
- nucleardatapy/fig/eos_setupAM_asy_tot_fig.py +352 -0
- nucleardatapy/fig/eos_setupAM_fig.py +519 -0
- nucleardatapy/fig/eos_setupCC_fig.py +270 -0
- nucleardatapy/fig/hnuc_setupChart_fig.py +19 -16
- nucleardatapy/fig/hnuc_setupRE1LExp_fig.py +15 -5
- nucleardatapy/fig/matter_all_fig.py +971 -0
- nucleardatapy/fig/matter_setupCheck_fig.py +106 -0
- nucleardatapy/fig/matter_setupFFGLep_fig.py +74 -0
- nucleardatapy/fig/matter_setupFFGNuc_fig.py +286 -115
- nucleardatapy/fig/matter_setupHIC_fig.py +107 -67
- nucleardatapy/fig/matter_setupMicroEsym_fig.py +259 -73
- nucleardatapy/fig/matter_setupMicro_LP_fig.py +185 -82
- nucleardatapy/fig/matter_setupMicro_band_fig.py +126 -53
- nucleardatapy/fig/matter_setupMicro_effmass_fig.py +253 -77
- nucleardatapy/fig/matter_setupMicro_err_NM_fig.py +45 -20
- nucleardatapy/fig/matter_setupMicro_fig.py +317 -77
- nucleardatapy/fig/matter_setupMicro_gap_fig.py +237 -100
- nucleardatapy/fig/matter_setupNEPStats_fig.py +106 -0
- nucleardatapy/fig/matter_setupPhenoEsym_fig.py +204 -65
- nucleardatapy/fig/matter_setupPheno_fig.py +395 -93
- nucleardatapy/fig/nuc_setupBEExp_chart_fig.py +93 -73
- nucleardatapy/fig/nuc_setupBEExp_fig.py +97 -87
- nucleardatapy/fig/nuc_setupBETheo_fig.py +114 -81
- nucleardatapy/fig/nuc_setupISGMRExp_fig.py +12 -15
- nucleardatapy/fig/nuc_setupRchExp_fig.py +14 -22
- nucleardatapy/fig/nuc_setupRchTheo_fig.py +37 -40
- nucleardatapy/fig/nuc_setupRnpExp_fig.py +86 -106
- nucleardatapy/fig/nuc_setupRnpTheo_fig.py +105 -94
- nucleardatapy/hello.py +6 -0
- nucleardatapy/hnuc/setup_re1L_exp.py +6 -6
- nucleardatapy/hnuc/setup_re1Xi_exp.py +5 -5
- nucleardatapy/hnuc/setup_re2L_exp.py +36 -13
- nucleardatapy/matter/__init__.py +14 -14
- nucleardatapy/matter/setup_check.py +6 -6
- nucleardatapy/matter/setup_ffg.py +66 -39
- nucleardatapy/matter/setup_hic.py +91 -74
- nucleardatapy/matter/setup_micro.py +2033 -1007
- nucleardatapy/matter/setup_micro_band.py +6 -6
- nucleardatapy/matter/setup_micro_esym.py +56 -54
- nucleardatapy/matter/setup_micro_gap.py +24 -17
- nucleardatapy/matter/setup_micro_lp.py +2 -2
- nucleardatapy/matter/setup_nep.py +175 -92
- nucleardatapy/matter/{setup_nep_model_dist.py → setup_nep_stat_model.py} +13 -8
- nucleardatapy/matter/{setup_nep_dist.py → setup_nep_stat_models.py} +12 -8
- nucleardatapy/matter/setup_pheno.py +129 -49
- nucleardatapy/matter/setup_pheno_esym.py +22 -19
- nucleardatapy/nuc/setup_be_exp.py +306 -292
- nucleardatapy/nuc/setup_be_theo.py +288 -105
- nucleardatapy/nuc/setup_isgmr_exp.py +4 -4
- nucleardatapy/nuc/setup_rnp_exp.py +1 -0
- nucleardatapy/nuc/setup_rnp_theo.py +2 -1
- {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/METADATA +48 -16
- {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/RECORD +157 -124
- {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/WHEEL +1 -1
- tests/test_corr_setupKsatQsat.py +3 -1
- tests/test_matter_setupMicro.py +37 -10
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-NM.dat +0 -1002
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG1-SM.dat +0 -1002
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-NM.dat +0 -1002
- nucleardatapy/data/matter/pheno/ESkyrme/BSkG2-SM.dat +0 -1002
- nucleardatapy/fig/eos_setupAM_e_asy_lep_fig.py +0 -125
- nucleardatapy/fig/eos_setupAM_e_asy_nuc_fig.py +0 -115
- nucleardatapy/fig/eos_setupAM_e_asy_tot_fig.py +0 -117
- nucleardatapy/fig/eos_setupAM_e_fig.py +0 -173
- nucleardatapy/fig/matter_ENM_fig.py +0 -128
- nucleardatapy/fig/matter_ESM_fig.py +0 -140
- nucleardatapy/fig/matter_Esym_fig.py +0 -134
- nucleardatapy/fig/matter_cs2_fig.py +0 -83
- nucleardatapy/fig/matter_preNM_fig.py +0 -146
- nucleardatapy/fig/matter_preSM_fig.py +0 -144
- nucleardatapy/fig/matter_setupNEPModelDist_fig.py +0 -68
- /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-NM-AV18.dat → 2006-EBHF-NM-AV18.dat} +0 -0
- /nucleardatapy/data/LandauParameters/micro/{2006-IBHF-SM-AV18.dat → 2006-EBHF-SM-AV18.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-BSK14.dat → 2022-GMRS-BSK14.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-BSK16.dat → 2022-GMRS-BSK16.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-DHSL59.dat → 2022-GMRS-DHSL59.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-DHSL69.dat → 2022-GMRS-DHSL69.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-F0.dat → 2022-GMRS-F0.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H1.dat → 2022-GMRS-H1.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H2.dat → 2022-GMRS-H2.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H3.dat → 2022-GMRS-H3.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H4.dat → 2022-GMRS-H4.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H5.dat → 2022-GMRS-H5.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-H7.dat → 2022-GMRS-H7.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-LNS5.dat → 2022-GMRS-LNS5.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-RATP.dat → 2022-GMRS-RATP.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-SGII.dat → 2022-GMRS-SGII.dat} +0 -0
- /nucleardatapy/data/crust/{2022-crustGMRS-SLY5.dat → 2022-GMRS-SLY5.dat} +0 -0
- /nucleardatapy/data/matter/micro/{2013-QMC-NM.dat → 2013-MBPT-NM.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/ddrhNskin-208Pb.dat → rnp/ddrhrnp-208Pb.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/ddrhNskin-48Ca.dat → rnp/ddrhrnp-48Ca.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/nlrhNskin-208Pb.dat → rnp/nlrhrnp-208Pb.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/nlrhNskin-48Ca.dat → rnp/nlrhrnp-48Ca.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/skyrmeNskin-208Pb.dat → rnp/skyrmernp-208Pb.dat} +0 -0
- /nucleardatapy/data/{NeutronSkin/skyrmeNskin-48Ca.dat → rnp/skyrmernp-48Ca.dat} +0 -0
- {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/licenses/LICENSE +0 -0
- {nucleardatapy-0.2.1.dist-info → nucleardatapy-1.0.1.dist-info}/top_level.txt +0 -0
|
@@ -1,120 +1,100 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import numpy as np
|
|
2
3
|
import matplotlib.pyplot as plt
|
|
3
|
-
from matplotlib.ticker import AutoMinorLocator
|
|
4
|
+
from matplotlib.ticker import AutoMinorLocator
|
|
4
5
|
|
|
5
6
|
import nucleardatapy as nuda
|
|
6
7
|
|
|
7
|
-
# Dictionary to map sources to LaTeX names
|
|
8
8
|
SOURCE_LABELS_LATEX = {
|
|
9
9
|
"48Ca": r"$^{48}\mathrm{Ca}$",
|
|
10
10
|
"208Pb": r"$^{208}\mathrm{Pb}$"
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
def nuc_setupRnpExp_fig(
|
|
13
|
+
def nuc_setupRnpExp_fig(pname=None, source=None):
|
|
14
14
|
"""
|
|
15
|
-
|
|
15
|
+
Plot the experimental np radii (neutron skin).
|
|
16
|
+
|
|
17
|
+
The plot is 1x1 with:
|
|
18
|
+
|
|
19
|
+
[0]: Rch as a function of N.
|
|
20
|
+
|
|
21
|
+
:param pname: name of the figure (*.png)
|
|
22
|
+
:type pname: str.
|
|
23
|
+
:param source: experimental table.
|
|
24
|
+
:type source: str.
|
|
16
25
|
"""
|
|
26
|
+
print(f"Using source: {source}")
|
|
27
|
+
|
|
28
|
+
# subplot_label = "(a)"
|
|
29
|
+
subplot_label = " "
|
|
30
|
+
|
|
31
|
+
if source is None:
|
|
32
|
+
print("Erro: nenhum source fornecido.")
|
|
33
|
+
return
|
|
34
|
+
|
|
35
|
+
labels = []
|
|
36
|
+
rskin_values = []
|
|
37
|
+
error_lower = []
|
|
38
|
+
error_upper = []
|
|
39
|
+
markers = []
|
|
40
|
+
|
|
41
|
+
cals = nuda.nuc.rnp_exp_source(source)
|
|
42
|
+
|
|
43
|
+
for cal in cals:
|
|
44
|
+
neutron_skin_calc = nuda.nuc.setupRnpExp(source=source, cal=cal)
|
|
45
|
+
|
|
46
|
+
if neutron_skin_calc.rnp is not None:
|
|
47
|
+
labels.append(neutron_skin_calc.label)
|
|
48
|
+
rskin_values.append(neutron_skin_calc.rnp)
|
|
17
49
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
err_down = neutron_skin_calc.nskin_sig_do if neutron_skin_calc.nskin_sig_do is not None else 0.0
|
|
49
|
-
err_up = neutron_skin_calc.nskin_sig_up if neutron_skin_calc.nskin_sig_up is not None else 0.0
|
|
50
|
-
error_lower.append(err_down)
|
|
51
|
-
error_upper.append(err_up)
|
|
52
|
-
|
|
53
|
-
# Ensure the marker is valid
|
|
54
|
-
marker = neutron_skin_calc.marker if neutron_skin_calc.marker else 'o'
|
|
55
|
-
markers.append(marker)
|
|
56
|
-
|
|
57
|
-
# Check if there is data to plot
|
|
58
|
-
if not rskin_values:
|
|
59
|
-
print(f"No data available for {source}.")
|
|
60
|
-
continue
|
|
61
|
-
|
|
62
|
-
# Plot configuration
|
|
63
|
-
fig, ax = plt.subplots(figsize=(10, 8))
|
|
64
|
-
x_positions = range(len(labels)+1) # X-axis positions
|
|
65
|
-
|
|
66
|
-
# Add each point to the plot with vertical error bars
|
|
67
|
-
for i, (x, y, err_down, err_up, marker) in enumerate(zip(x_positions, rskin_values, error_lower, error_upper, markers)):
|
|
68
|
-
# Handle large errors (>= 1000) by limiting the bar to 0.1
|
|
69
|
-
adjusted_err_down = min(err_down, 0.2)
|
|
70
|
-
adjusted_err_up = min(err_up, 0.2)
|
|
71
|
-
|
|
72
|
-
# Add adjusted error bars
|
|
73
|
-
ax.errorbar(x, y, yerr=[[adjusted_err_down], [adjusted_err_up]], fmt=marker, markersize=8, capsize=0, label=labels[i])
|
|
74
|
-
|
|
75
|
-
# Add arrow as cap for err_down >= 1000
|
|
76
|
-
if err_down >= 1000:
|
|
77
|
-
ax.plot([x], [y - adjusted_err_down], marker="v", color="grey", markersize=8)
|
|
78
|
-
|
|
79
|
-
# Add arrow as cap for err_up >= 1000
|
|
80
|
-
if err_up >= 1000:
|
|
81
|
-
ax.plot([x], [y + adjusted_err_up], marker="^", color="grey", markersize=8)
|
|
82
|
-
|
|
83
|
-
nsav = nuda.nuc.setupRnpAverage(source=source)
|
|
84
|
-
# print('label:', nsav.label)
|
|
85
|
-
if nsav.nskin_cen is not None:
|
|
86
|
-
ax.errorbar(len(labels), nsav.nskin_cen, yerr=nsav.sig_std, label=nsav.label,
|
|
87
|
-
color='red', marker='o', markersize=10, linestyle='solid', linewidth=3)
|
|
50
|
+
err_down = neutron_skin_calc.rnp_sig_lo if neutron_skin_calc.rnp_sig_lo is not None else 0.0
|
|
51
|
+
err_up = neutron_skin_calc.rnp_sig_up if neutron_skin_calc.rnp_sig_up is not None else 0.0
|
|
52
|
+
error_lower.append(err_down)
|
|
53
|
+
error_upper.append(err_up)
|
|
54
|
+
|
|
55
|
+
marker = getattr(neutron_skin_calc, "marker", 'o')
|
|
56
|
+
markers.append(marker)
|
|
57
|
+
|
|
58
|
+
if not rskin_values:
|
|
59
|
+
print(f"Nenhum dado disponível para {source}.")
|
|
60
|
+
return
|
|
61
|
+
|
|
62
|
+
fig, ax = plt.subplots(figsize=(10, 8))
|
|
63
|
+
x_positions = range(len(labels) + 1)
|
|
64
|
+
|
|
65
|
+
for i, (x, y, err_down, err_up, marker) in enumerate(zip(x_positions, rskin_values, error_lower, error_upper, markers)):
|
|
66
|
+
adjusted_err_down = min(err_down, 0.2)
|
|
67
|
+
adjusted_err_up = min(err_up, 0.2)
|
|
68
|
+
|
|
69
|
+
ax.errorbar(x, y, yerr=[[adjusted_err_down], [adjusted_err_up]], fmt=marker, markersize=8, capsize=0, label=labels[i])
|
|
70
|
+
|
|
71
|
+
if err_down >= 1000:
|
|
72
|
+
ax.plot([x], [y - adjusted_err_down], marker="v", color="grey", markersize=8)
|
|
73
|
+
if err_up >= 1000:
|
|
74
|
+
ax.plot([x], [y + adjusted_err_up], marker="^", color="grey", markersize=8)
|
|
75
|
+
|
|
76
|
+
nsav = nuda.nuc.setupRnpAverage(source=source)
|
|
77
|
+
if nsav.rnp_cen is not None:
|
|
78
|
+
ax.errorbar(len(labels), nsav.rnp_cen, yerr=nsav.sig_std, label=nsav.label,
|
|
79
|
+
color='red', marker='o', markersize=10, linestyle='solid', linewidth=3)
|
|
88
80
|
labels.append(nsav.label)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
# Add minor ticks on y-axis
|
|
111
|
-
ax.yaxis.set_minor_locator(AutoMinorLocator())
|
|
112
|
-
ax.tick_params(axis='y', which='minor', length=4, color='gray') # Style for minor ticks
|
|
113
|
-
|
|
114
|
-
# Final adjustments and save the plot
|
|
115
|
-
#plt.tight_layout()
|
|
116
|
-
if pname is not None:
|
|
117
|
-
plt.savefig(pname, dpi=200)
|
|
118
|
-
plt.close()
|
|
119
|
-
|
|
120
|
-
print(f"Plot saved: {pname}")
|
|
81
|
+
|
|
82
|
+
ax.set_ylim([0, 0.5])
|
|
83
|
+
ax.set_xticks(x_positions)
|
|
84
|
+
ax.set_xticklabels(labels, rotation=45, ha="right", fontsize=15)
|
|
85
|
+
ax.tick_params(axis='y', labelsize=15)
|
|
86
|
+
ax.set_ylabel(rf"$R_{{\rm{{skin}}}}$ {SOURCE_LABELS_LATEX[source]} (fm)", fontsize=15)
|
|
87
|
+
ax.text(0.95, 0.95, subplot_label, transform=ax.transAxes, fontsize=15,
|
|
88
|
+
verticalalignment='top', horizontalalignment='right')
|
|
89
|
+
ax.yaxis.set_minor_locator(AutoMinorLocator())
|
|
90
|
+
ax.tick_params(axis='y', which='minor', length=4, color='gray')
|
|
91
|
+
|
|
92
|
+
if pname is None:
|
|
93
|
+
output_dir = os.path.abspath("figs/")
|
|
94
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
95
|
+
pname = os.path.join(output_dir, f"plot_nuc_setupRnp_Exp_{source.replace(' ', '_')}.png")
|
|
96
|
+
|
|
97
|
+
plt.tight_layout()
|
|
98
|
+
plt.savefig(pname, dpi=200)
|
|
99
|
+
plt.close()
|
|
100
|
+
print(f"Plot saved: {pname}")
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
import matplotlib.pyplot as plt
|
|
3
3
|
from matplotlib.ticker import AutoMinorLocator # Import para minor ticks
|
|
4
|
+
import os
|
|
4
5
|
|
|
5
6
|
import nucleardatapy as nuda
|
|
6
7
|
|
|
7
8
|
# Dictionary to map sources to LaTeX names
|
|
8
9
|
SOURCE_LABELS_LATEX = {
|
|
9
|
-
"48Ca": r"$^{48}
|
|
10
|
-
"208Pb": r"$^{208}
|
|
10
|
+
"48Ca": r"$^{48}$Ca",
|
|
11
|
+
"208Pb": r"$^{208}$Pb"
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
# Directory containing the model data tables
|
|
14
|
-
MODEL_TABLES_DIR = nuda.param.path_data + '/
|
|
15
|
+
MODEL_TABLES_DIR = nuda.param.path_data + '/rnp/'
|
|
15
16
|
|
|
16
17
|
# Define markers and colors for each model
|
|
17
18
|
MODEL_STYLES = {
|
|
@@ -24,7 +25,7 @@ def read_model_data(directory, source):
|
|
|
24
25
|
model_data = {}
|
|
25
26
|
for filename in os.listdir(directory):
|
|
26
27
|
if filename.endswith(".dat") and source in filename:
|
|
27
|
-
model_name = filename.split("
|
|
28
|
+
model_name = filename.split("rnp")[0].lower()
|
|
28
29
|
filepath = os.path.join(directory, filename)
|
|
29
30
|
data = []
|
|
30
31
|
with open(filepath, 'r') as file:
|
|
@@ -40,95 +41,105 @@ def read_model_data(directory, source):
|
|
|
40
41
|
print(f"Loaded model data for {model_name}: {model_data[model_name]}")
|
|
41
42
|
return model_data
|
|
42
43
|
|
|
43
|
-
def
|
|
44
|
+
def nuc_setupRnpTheo_fig(pname, source):
|
|
45
|
+
"""
|
|
46
|
+
Plot the theoretical np radii (neutron skin).
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
The plot is 1x1 with:
|
|
49
|
+
|
|
50
|
+
[0]: Rch as a function of N.
|
|
46
51
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
ax.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
52
|
+
:param pname: name of the figure (*.png)
|
|
53
|
+
:type pname: str.
|
|
54
|
+
:param source: experimental table.
|
|
55
|
+
:type source: str.
|
|
56
|
+
"""
|
|
57
|
+
print(f'Plot name: {pname}')
|
|
58
|
+
print(f'Using source: {source}')
|
|
59
|
+
|
|
60
|
+
# subplot_label = "(a)" # remove this if you don't want any labels
|
|
61
|
+
subplot_label = " "
|
|
62
|
+
|
|
63
|
+
labels = []
|
|
64
|
+
rskin_values = []
|
|
65
|
+
error_lower = []
|
|
66
|
+
error_upper = []
|
|
67
|
+
xexp = []
|
|
68
|
+
|
|
69
|
+
cals = nuda.nuc.rnp_exp_source(source)
|
|
70
|
+
for i, cal in enumerate(cals):
|
|
71
|
+
neutron_skin_calc = nuda.nuc.setupRnpExp(source=source, cal=cal)
|
|
72
|
+
if neutron_skin_calc.rnp is not None:
|
|
73
|
+
labels.append(neutron_skin_calc.label)
|
|
74
|
+
rskin_values.append(neutron_skin_calc.rnp)
|
|
75
|
+
xexp.append(i)
|
|
76
|
+
err_down = neutron_skin_calc.rnp_sig_lo if neutron_skin_calc.rnp_sig_lo is not None else 0.0
|
|
77
|
+
err_up = neutron_skin_calc.rnp_sig_up if neutron_skin_calc.rnp_sig_up is not None else 0.0
|
|
78
|
+
error_lower.append(err_down)
|
|
79
|
+
error_upper.append(err_up)
|
|
80
|
+
|
|
81
|
+
model_data = read_model_data(MODEL_TABLES_DIR, source)
|
|
82
|
+
combined_rskin = []
|
|
83
|
+
combined_errors = []
|
|
84
|
+
combined_markers = []
|
|
85
|
+
combined_colors = []
|
|
86
|
+
xtheo = []
|
|
87
|
+
|
|
88
|
+
for model_name, data in model_data.items():
|
|
89
|
+
for j, (_, _, _, rskin) in enumerate(data):
|
|
90
|
+
x_position = xexp[j % len(xexp)] + 0.5 # Cycle through xexp and offset by 0.5
|
|
91
|
+
xtheo.append(x_position)
|
|
92
|
+
combined_rskin.append(rskin)
|
|
93
|
+
combined_errors.append((0.0, 0.0))
|
|
94
|
+
combined_markers.append(MODEL_STYLES[model_name]["marker"])
|
|
95
|
+
combined_colors.append(MODEL_STYLES[model_name]["color"])
|
|
96
|
+
|
|
97
|
+
if nuda.env.verb:
|
|
98
|
+
print(f"Experimental positions for {source}: {xexp}")
|
|
99
|
+
print(f"Theoretical positions for {source}: {xtheo}")
|
|
100
|
+
|
|
101
|
+
fig, ax = plt.subplots(figsize=(10, 8))
|
|
102
|
+
for i, (x, y, err_down, err_up) in enumerate(zip(xexp, rskin_values, error_lower, error_upper)):
|
|
103
|
+
adjusted_err_down = min(err_down, 0.2)
|
|
104
|
+
adjusted_err_up = min(err_up, 0.2)
|
|
105
|
+
ax.errorbar(x, y, yerr=[[adjusted_err_down], [adjusted_err_up]], fmt='o', markersize=8, capsize=0, color='black', markerfacecolor='none')
|
|
106
|
+
if err_down >= 1000:
|
|
107
|
+
ax.plot([x], [y - adjusted_err_down], marker="v", color="black", markersize=8)
|
|
108
|
+
if err_up >= 1000:
|
|
109
|
+
ax.plot([x], [y + adjusted_err_up], marker="^", color="black", markersize=8)
|
|
110
|
+
|
|
111
|
+
nsav = nuda.nuc.setupRnpAverage(source=source)
|
|
112
|
+
if nsav.rnp_cen is not None:
|
|
113
|
+
ax.errorbar(len(labels), nsav.rnp_cen, yerr=nsav.sig_std, label=nsav.label,
|
|
114
|
+
color='k', marker='o', markersize=10, linestyle='solid', linewidth=3)
|
|
115
|
+
|
|
116
|
+
for i, (x, y, marker, color) in enumerate(zip(xtheo, combined_rskin, combined_markers, combined_colors)):
|
|
117
|
+
ax.plot(x, y, marker=marker, markersize=8, color=color)
|
|
118
|
+
|
|
119
|
+
# Add legend for experimental points
|
|
120
|
+
ax.scatter([], [], color='black', marker='o', facecolors='none', label='Experimental/Analysis')
|
|
121
|
+
|
|
122
|
+
# Add legend for theoretical models
|
|
123
|
+
for model_name, style in MODEL_STYLES.items():
|
|
124
|
+
ax.scatter([], [], color=style["color"], marker=style["marker"], label=style["label"])
|
|
125
|
+
|
|
126
|
+
ax.set_ylim([0, 0.5])
|
|
127
|
+
ax.set_xticks(xexp)
|
|
128
|
+
ax.set_xticklabels(labels, rotation=45, ha="right", fontsize=15)
|
|
129
|
+
ax.set_ylabel(rf"$R_{{\rm{{skin}}}}$ {SOURCE_LABELS_LATEX[source]} (fm)", fontsize=15)
|
|
130
|
+
ax.text(0.95, 0.95, subplot_label, transform=ax.transAxes, fontsize=15, verticalalignment='top', horizontalalignment='right')
|
|
131
|
+
|
|
132
|
+
# Add minor ticks on y-axis
|
|
133
|
+
ax.yaxis.set_minor_locator(AutoMinorLocator())
|
|
134
|
+
ax.tick_params(axis='y', which='minor', length=4, color='gray')
|
|
135
|
+
|
|
136
|
+
ax.legend(loc="upper right", bbox_to_anchor=(0.5, 1), fontsize=12)
|
|
137
|
+
|
|
138
|
+
output_dir = "figs/"
|
|
139
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
140
|
+
fig_name = os.path.join(output_dir, f"plot_nuc_setupRnpTheo_source{source.replace(' ', '_')}.png")
|
|
141
|
+
plt.tight_layout()
|
|
142
|
+
plt.savefig(fig_name, dpi=200)
|
|
143
|
+
plt.close()
|
|
144
|
+
|
|
145
|
+
print(f"Plot saved: {fig_name}")
|
nucleardatapy/hello.py
ADDED
|
@@ -150,16 +150,16 @@ class setupRE1LExp():
|
|
|
150
150
|
#: Attribute A (mass of the nucleus).
|
|
151
151
|
self.A = self.Z + self.N + np.ones(len(self.N),dtype=int)
|
|
152
152
|
#: charge of the hypernuclei (=Z, since Lamnda is charged 0)
|
|
153
|
-
self.
|
|
153
|
+
self.Q = self.Z
|
|
154
154
|
#: Strangness number
|
|
155
|
-
self.S = -
|
|
155
|
+
self.S = -1*np.ones(len(self.N),dtype=int)
|
|
156
156
|
#: symbol representing the nucleus
|
|
157
157
|
self.symb = nucSymb
|
|
158
|
-
#: Attribute the
|
|
158
|
+
#: Attribute the s.p. state.
|
|
159
159
|
self.sps = nucsps
|
|
160
160
|
#: Attribute the angular momentum of the state.
|
|
161
161
|
self.ell = np.array( nucell, dtype = int )
|
|
162
|
-
#: Attribute 1L
|
|
162
|
+
#: Attribute 1L removal energy in MeV.
|
|
163
163
|
self.lre = np.array( nuclre, dtype = float )
|
|
164
164
|
#: Attribute 1L binding energy error in MeV.
|
|
165
165
|
self.lre_err = np.array( nuclre_err, dtype = float )
|
|
@@ -204,7 +204,7 @@ class setupRE1LExp():
|
|
|
204
204
|
if any(self.Z): print(f" Z: {self.Z}")
|
|
205
205
|
if any(self.N): print(f" N: {self.N}")
|
|
206
206
|
if any(self.S): print(f" S: {self.S}")
|
|
207
|
-
if any(self.
|
|
207
|
+
if any(self.Q): print(f" Q: {self.Q}")
|
|
208
208
|
if any(self.symb): print(f" symb: {self.symb}")
|
|
209
209
|
if any(self.ell): print(f" ell: {self.ell}")
|
|
210
210
|
if any(self.lre): print(f" re: {self.lre}")
|
|
@@ -225,7 +225,7 @@ class setupRE1LExp():
|
|
|
225
225
|
print(rf" index & Z & N & S & ch & symb & $RE$ & Ref. \\\\")
|
|
226
226
|
print(rf" & & & & & & (MeV) & \\\\")
|
|
227
227
|
for ind,A in enumerate(self.A):
|
|
228
|
-
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.
|
|
228
|
+
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.Q[ind]} & {self.symb[ind]} & ${self.lre[ind]:.3f}\pm {self.lre_err[ind]:.3f}$ & \cite{{"+self.keyref+"} \\\\")
|
|
229
229
|
else:
|
|
230
230
|
print(f"- No table for source {self.table} (average). To get table, write 'verb_latex = True' in env.py.")
|
|
231
231
|
#
|
|
@@ -117,12 +117,12 @@ class setupRE1XiExp():
|
|
|
117
117
|
#: Strangness number (to be checked)
|
|
118
118
|
self.S = -2*np.ones(len(self.N),dtype=int)
|
|
119
119
|
#: charge of the hypernuclei (=Z-1, since Xi is charged -1)
|
|
120
|
-
self.
|
|
120
|
+
self.Q = self.Z - np.ones(len(self.N),dtype=int)
|
|
121
121
|
#: symbol representing the nucleus
|
|
122
122
|
self.symb = nucSymb
|
|
123
|
-
#: Attribute
|
|
123
|
+
#: Attribute 1Xi removal energy in MeV.
|
|
124
124
|
self.xire = np.array( nucxire, dtype = float )
|
|
125
|
-
#: Attribute
|
|
125
|
+
#: Attribute 1Xi removal energy error in MeV.
|
|
126
126
|
self.xire_err = np.array( nucxire_err, dtype = float )
|
|
127
127
|
#: Attribute the probe.
|
|
128
128
|
self.probe = probe
|
|
@@ -162,7 +162,7 @@ class setupRE1XiExp():
|
|
|
162
162
|
if any(self.Z): print(f" Z: {self.Z}")
|
|
163
163
|
if any(self.N): print(f" N: {self.N}")
|
|
164
164
|
if any(self.S): print(f" S: {self.S}")
|
|
165
|
-
if any(self.
|
|
165
|
+
if any(self.Q): print(f" Q: {self.Q}")
|
|
166
166
|
if any(self.symb): print(f" symb: {self.symb}")
|
|
167
167
|
if any(self.xire): print(f" xibe: {self.xire}")
|
|
168
168
|
if any(self.xire_err): print(f" xibe_err: {self.xire_err}")
|
|
@@ -183,7 +183,7 @@ class setupRE1XiExp():
|
|
|
183
183
|
print(rf" index & Z & N & S & ch & symb & RE & & Ref. \\\\")
|
|
184
184
|
print(rf" & & & & & & (MeV) & & \\\\")
|
|
185
185
|
for ind,A in enumerate(self.A):
|
|
186
|
-
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.
|
|
186
|
+
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.Q[ind]} & {self.symb[ind]} & ${self.xire[ind]:.3f}\pm {self.xire_err[ind]:.3f}$ & & \\cite{{"+self.keyref+"} \\\\")
|
|
187
187
|
else:
|
|
188
188
|
print(f"- No table for source {self.table} (average). To get table, write 'verb_latex = True' in env.py.")
|
|
189
189
|
#
|
|
@@ -16,7 +16,8 @@ def re2L_exp_tables():
|
|
|
16
16
|
#
|
|
17
17
|
if nuda.env.verb: print("\nEnter re2L_exp_tables()")
|
|
18
18
|
#
|
|
19
|
-
tables = [ '2013-2L-Ahn' ]
|
|
19
|
+
#tables = [ '2013-2L-Ahn' ]
|
|
20
|
+
tables = [ '1991-2L-Yamamoto', '2013-2L-Ahn', '2019-2L-Ekawa' ]
|
|
20
21
|
#
|
|
21
22
|
#print('tables available in the toolkit:',tables)
|
|
22
23
|
tables_lower = [ item.lower() for item in tables ]
|
|
@@ -78,7 +79,18 @@ class setupRE2LExp():
|
|
|
78
79
|
color = []
|
|
79
80
|
mark = []
|
|
80
81
|
#
|
|
81
|
-
if table.lower() == '
|
|
82
|
+
if table.lower() == '1991-2l-yamamoto':
|
|
83
|
+
#
|
|
84
|
+
file_in = os.path.join(nuda.param.path_data,'hnuclei/1991-2L-Yamamoto.csv')
|
|
85
|
+
if nuda.env.verb: print('Reads file:',file_in)
|
|
86
|
+
#: Attribute providing the full reference to the paper to be citted.
|
|
87
|
+
self.ref = 'Y. Yamamoto, H. Takaki, K. Ikeda, Prog. Theo. Phys. 86, 867 (1991).'
|
|
88
|
+
self.keyref = 'YYamamoto:1991'
|
|
89
|
+
#: Attribute providing additional notes about the data.
|
|
90
|
+
self.note = "https://doi.org/10.1143/ptp/86.4.867"
|
|
91
|
+
#
|
|
92
|
+
|
|
93
|
+
elif table.lower() == '2013-2l-ahn':
|
|
82
94
|
#
|
|
83
95
|
file_in = os.path.join(nuda.param.path_data,'hnuclei/2013-2L-Ahn.csv')
|
|
84
96
|
if nuda.env.verb: print('Reads file:',file_in)
|
|
@@ -88,6 +100,16 @@ class setupRE2LExp():
|
|
|
88
100
|
#: Attribute providing additional notes about the data.
|
|
89
101
|
self.note = "write here notes about this table."
|
|
90
102
|
#
|
|
103
|
+
if table.lower() == '2019-2l-ekawa':
|
|
104
|
+
#
|
|
105
|
+
file_in = os.path.join(nuda.param.path_data,'hnuclei/2019-2L-Ekawa.csv')
|
|
106
|
+
if nuda.env.verb: print('Reads file:',file_in)
|
|
107
|
+
#: Attribute providing the full reference to the paper to be citted.
|
|
108
|
+
self.ref = 'H. Ekawa et al., PTEP 2019, 021D02.'
|
|
109
|
+
self.keyref = 'HEkawa:2019'
|
|
110
|
+
#: Attribute providing additional notes about the data.
|
|
111
|
+
self.note = "write here notes about this table."
|
|
112
|
+
#
|
|
91
113
|
#
|
|
92
114
|
with open(file_in,'r') as file:
|
|
93
115
|
for line in file:
|
|
@@ -102,11 +124,12 @@ class setupRE2LExp():
|
|
|
102
124
|
nuclre_err.append(linesplit[4].strip())
|
|
103
125
|
nucldre.append(linesplit[5].strip())
|
|
104
126
|
nucldre_err.append(linesplit[6].strip())
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
label.append(linesplit[7].strip('\n'))
|
|
128
|
+
probe.append(linesplit[7].strip().strip('\n'))
|
|
129
|
+
color.append('blue')
|
|
130
|
+
mark.append('s')
|
|
131
|
+
print('label:',label[-1])
|
|
132
|
+
print('probe:',probe[-1])
|
|
110
133
|
else:
|
|
111
134
|
break
|
|
112
135
|
#
|
|
@@ -119,14 +142,14 @@ class setupRE2LExp():
|
|
|
119
142
|
#: Attribute A (mass of the nucleus).
|
|
120
143
|
self.A = self.Z + self.N + 2*np.ones(len(self.N),dtype=int)
|
|
121
144
|
#: charge of the hypernuclei (=Z, since Lamnda is charged 0)
|
|
122
|
-
self.
|
|
145
|
+
self.Q = self.Z
|
|
123
146
|
#: Strangness number
|
|
124
|
-
self.S = -2*
|
|
147
|
+
self.S = -2*np.ones(len(self.N),dtype=int)
|
|
125
148
|
#: symbol representing the nucleus
|
|
126
149
|
self.symb = nucSymb
|
|
127
|
-
#: Attribute 2L
|
|
150
|
+
#: Attribute 2L removal energy in MeV.
|
|
128
151
|
self.llre = np.array( nuclre, dtype = float )
|
|
129
|
-
#: Attribute 2L
|
|
152
|
+
#: Attribute 2L removal energy error in MeV.
|
|
130
153
|
self.llre_err = np.array( nuclre_err, dtype = float )
|
|
131
154
|
#: Attribute 2L bond energy in MeV.
|
|
132
155
|
self.lldre = np.array( nucldre, dtype = float )
|
|
@@ -171,7 +194,7 @@ class setupRE2LExp():
|
|
|
171
194
|
if any(self.Z): print(f" Z: {self.Z}")
|
|
172
195
|
if any(self.N): print(f" N: {self.N}")
|
|
173
196
|
if any(self.S): print(f" S: {self.S}")
|
|
174
|
-
if any(self.
|
|
197
|
+
if any(self.Q): print(f" Q: {self.Q}")
|
|
175
198
|
if any(self.symb): print(f" symb: {self.symb}")
|
|
176
199
|
if any(self.llre): print(f" be: {self.llre}")
|
|
177
200
|
if any(self.llre_err): print(f" be_err: {self.llre_err}")
|
|
@@ -193,7 +216,7 @@ class setupRE2LExp():
|
|
|
193
216
|
print(rf" index & Z & N & S & ch & symb & $RE$ & $\Delta RE$ & Ref. \\\\")
|
|
194
217
|
print(rf" & & & & & & (MeV) & (MeV) & \\\\")
|
|
195
218
|
for ind,A in enumerate(self.A):
|
|
196
|
-
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.
|
|
219
|
+
print(rf" {ind} & {self.Z[ind]} & {self.N[ind]} & {self.S[ind]} & {self.Q[ind]} & {self.symb[ind]} & ${self.llre[ind]:.3f}\pm {self.llre_err[ind]:.3f}$ & ${self.lldre[ind]:.3f}\pm {self.lldre_err[ind]:.3f}$ & \\cite{{"+self.keyref+"} \\\\")
|
|
197
220
|
else:
|
|
198
221
|
print(f"- No table for source {self.table} (average). To get table, write 'verb_latex = True' in env.py.")
|
|
199
222
|
#
|