import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import nucleardatapy as nuda
mpl.use("Agg") # Use a non-interactive backend
[docs]
def matter_setupFFGLep_fig( pname, den_el=None, den_mu1=None, den_mu2=None, den_mu3=None ):
"""
Plot leptonic FFG energy per particle E/A and pressure in NM and SM.
The plot is 2x1 with:
[0]: E/A versus den. [1]: pre versus den.
:param pname: name of the figure (*.png)
:type pname: str.
:param den_el: electron densities.
:type den_el: float or numpy vector of real numbers.
:param den_mu1: muon densities (set 1).
:type den_mu1: float or numpy vector of real numbers.
:param den_mu2: muon densities (set 2).
:type den_mu2: float or numpy vector of real numbers.
:param den_mu3: muon densities (set 3).
:type den_mu3: float or numpy vector of real numbers.
"""
#
print(f"Plot name: {pname}")
#
if den_el is None: den_el=np.linspace(0.01, 0.1, num=20)
if den_mu1 is None: den_mu1 = 0.1*np.linspace(0.01, 0.1, num=20)
if den_mu2 is None: den_mu2 = 0.2*np.linspace(0.01, 0.1, num=20)
if den_mu3 is None: den_mu3 = 0.5*np.linspace(0.01, 0.1, num=20)
#
fig, axs = plt.subplots(2, 1)
fig.tight_layout() # Or equivalently, "plt.tight_layout()"
fig.subplots_adjust( left=0.12, bottom=0.12, right=None, top=0.9, wspace=0.05, hspace=0.05 )
#
axs[0].set_ylabel(r"$e^\text{FFG}$ (MeV)", fontsize="14")
axs[0].set_xlim([0, 0.1])
axs[0].set_ylim([0, 200])
axs[0].tick_params("x", labelbottom=False)
#
axs[1].set_xlabel(r"$n_\text{el}$ (fm$^{-3}$)", fontsize="14")
axs[1].set_ylabel(r"$p^\text{FFG}$ (MeV fm$^{-3}$)", fontsize="14")
axs[1].set_xlim([0, 0.1])
axs[1].set_ylim([-0.01, 6])
#
lep1 = nuda.matter.setupFFGLep( den_el=den_el, den_mu=den_mu1 )
lep2 = nuda.matter.setupFFGLep( den_el=den_el, den_mu=den_mu2 )
lep3 = nuda.matter.setupFFGLep( den_el=den_el, den_mu=den_mu3 )
#
if any(lep1.e2n_el):
print(r"plot $\delta=0$ (SM)")
axs[0].plot( lep1.den_el, lep1.e2n_el, linestyle="solid", color=nuda.param.col[0], label='electrons' )
axs[0].plot( lep1.den_el, lep1.e2n_mu, linestyle="dashed", color=nuda.param.col[1], label='muons (10%)' )
axs[0].plot( lep1.den_el, lep2.e2n_mu, linestyle="dashed", color=nuda.param.col[2], label='muons (20%)' )
axs[0].plot( lep1.den_el, lep3.e2n_mu, linestyle="dashed", color=nuda.param.col[3], label='muons (50%)' )
axs[1].plot( lep1.den_el, lep1.pre_el, linestyle="solid", color=nuda.param.col[0] )
axs[1].plot( lep1.den_el, lep1.pre_mu, linestyle="dashed", color=nuda.param.col[1] )
axs[1].plot( lep1.den_el, lep2.pre_mu, linestyle="dashed", color=nuda.param.col[2] )
axs[1].plot( lep1.den_el, lep3.pre_mu, linestyle="dashed", color=nuda.param.col[3] )
if nuda.env.verb_output: lep.print_outputs()
#
#axs[0, 0].text(0.2, 16, r"$m=$" + str(mss[0]) + "$m_N$", rotation=8)
#axs[0, 0].text(0.2, 32, r"$m=$" + str(mss[1]) + "$m_N$", rotation=13)
#axs[0, 0].text(0.2, 50, r"$m=$" + str(mss[2]) + "$m_N$", rotation=20)
axs[0].legend(loc='lower right',fontsize='10')
#fig.legend( loc="upper left", bbox_to_anchor=(0.2, 0.97), fontsize="6", ncol=4, frameon=False )
#
if pname is not None:
plt.savefig(pname, dpi=300)
plt.close()
#