Loading src/lsst_inaf_agile/mbh.py +35 −3 Original line number Diff line number Diff line Loading @@ -45,9 +45,20 @@ def get_log_mbh_reines_volonteri2015(log_mstar, alpha=7.45, beta=1.05): return alpha + beta * (log_mstar - 11) def get_log_mbh_kormendy_ho2013(log_mstar, alpha=8.56, beta=1.58): """Return Kormendy & Ho 2013.""" return 8.56 + 1.58 * (log_mstar - 11) def get_log_mbh_kormendy_ho2013(log_mstar, alpha=8.56, beta=1.58, from_rv15=False): """Return Kormendy & Ho 2013. If from rv15 = True, then return the "scaled" K&H13 relation from their Fig. 8 """ if not from_rv15: return alpha + beta * (log_mstar - 11) # NOTE: estimated visually from RV15 data on 20251214. Values are # approximate ones but reproduce the line in Fig. 8 c = -4.20 m = 1.17 return m * log_mstar + c def get_log_mbh_haring_rix2004(log_mstar, a=8.20, b=1.12, da=0.10, db=0.06, add_error=False): Loading Loading @@ -106,6 +117,27 @@ def get_log_mbh_zou2024(log_mstar, z=0.0, is_tng300=False): return np.interp(log_mstar, x, y, left=np.nan, right=np.nan) GRAHAM2023_ROWS = [ "E/Es,e", "E/ES,e/S0(dust=Y)", "BCG∗", "major_mergers", "S", "S_(w/o_Circinus)", "S0/Es,b_(dust=Y)", ] def get_log_mbh_graham2023(log_mstar, which="E/Es,e"): """ Return a MBH relation from Graham+2023 Table 1: https://arxiv.org/pdf/2305.03242 """ row = GRAHAM2023_ROWS.index(which) data = np.loadtxt("data/graham2023/table1.txt", usecols=(2, 4, 5)) A, C, B = data[row, :] return A * (log_mstar - C) + B def get_delta_log_mbh_shankar2019(log_mstar, low=0.0, high=np.inf): """Return equation 6 from Shankar+2019.""" delta_mbh = 0.32 - 0.1 * (log_mstar - 12) Loading src/scripts/plots/plot_mbh_mstar.py +21 −4 Original line number Diff line number Diff line Loading @@ -25,8 +25,9 @@ lw1 = 2.5 lw2 = 2.0 alpha = 0.80 cmap = mpl.colormaps["gist_heat"] cmap2 = mpl.colormaps["cool"] norm = mpl.colors.Normalize(vmin=0.0, vmax=5.5) cmap2 = mpl.colormaps["rainbow"] norm2 = mpl.colors.Normalize(vmin=0.0, vmax=4.0) ############################################################################### Loading @@ -40,7 +41,7 @@ def main(): # log_mbh = mbh.get_log_mbh_continuity_new(log_mstar, z) ls = "solid" if z < 4 else "dotted" log_mbh = mbh.get_log_mbh_continuity_new2(log_mstar, np.full_like(log_mstar, z)) axes[0].plot(log_mstar, log_mbh, color=cmap(norm(z)), lw=lw1, label=f"$z = {z:d}$", ls=ls) axes[0].plot(log_mstar, log_mbh, color=cmap(norm(z)), lw=lw1, label=f"$z = {z:.0f}$", ls=ls) # Right panel: Plots the local Con Eq against literature # log_mbh = mbh.get_log_mbh_continuity(log_mstar, 0.0) Loading @@ -53,7 +54,9 @@ def main(): color="k", # label="Continuity equation, $z=0$" ) axes[1].fill_between(log_mstar, log_mbh - 0.50, log_mbh + 0.50, color="k", alpha=0.20) axes[1].plot( log_mstar, mbh.get_log_mbh_haring_rix2004(log_mstar), Loading @@ -63,14 +66,26 @@ def main(): alpha=alpha, ls="dashdot", ) # axes[1].plot( # log_mstar, # mbh.get_log_mbh_kormendy_ho2013(log_mstar), # lw=lw2, # label="K&H13", # alpha=alpha, # ls="dashed", # ) axes[1].plot( log_mstar, mbh.get_log_mbh_kormendy_ho2013(log_mstar), mbh.get_log_mbh_kormendy_ho2013(log_mstar, from_rv15=True), lw=lw2, # label="K&H13 (R&V15)", label="K&H13", alpha=alpha, ls="dashed", ) axes[1].plot( log_mstar, mbh.get_log_mbh_reines_volonteri2015(log_mstar), Loading @@ -93,7 +108,9 @@ def main(): print("Plotting Zou+2024") for z in [0.0, 2.0, 4.0]: log_mbh = mbh.get_log_mbh_zou2024(log_mstar, np.full_like(log_mstar, z), is_tng300=True) axes[0].plot(log_mstar, log_mbh, color=cmap2(norm(z)), lw=lw1, label=f"$z = {z:d}$ (Z24)" % z) axes[0].plot( log_mstar, log_mbh, color=cmap2(norm2(z)), lw=lw1, label=f"$z = {z:.0f}$ (Z24)", ls="dashed" ) axes[0].legend() fig.tight_layout() Loading Loading
src/lsst_inaf_agile/mbh.py +35 −3 Original line number Diff line number Diff line Loading @@ -45,9 +45,20 @@ def get_log_mbh_reines_volonteri2015(log_mstar, alpha=7.45, beta=1.05): return alpha + beta * (log_mstar - 11) def get_log_mbh_kormendy_ho2013(log_mstar, alpha=8.56, beta=1.58): """Return Kormendy & Ho 2013.""" return 8.56 + 1.58 * (log_mstar - 11) def get_log_mbh_kormendy_ho2013(log_mstar, alpha=8.56, beta=1.58, from_rv15=False): """Return Kormendy & Ho 2013. If from rv15 = True, then return the "scaled" K&H13 relation from their Fig. 8 """ if not from_rv15: return alpha + beta * (log_mstar - 11) # NOTE: estimated visually from RV15 data on 20251214. Values are # approximate ones but reproduce the line in Fig. 8 c = -4.20 m = 1.17 return m * log_mstar + c def get_log_mbh_haring_rix2004(log_mstar, a=8.20, b=1.12, da=0.10, db=0.06, add_error=False): Loading Loading @@ -106,6 +117,27 @@ def get_log_mbh_zou2024(log_mstar, z=0.0, is_tng300=False): return np.interp(log_mstar, x, y, left=np.nan, right=np.nan) GRAHAM2023_ROWS = [ "E/Es,e", "E/ES,e/S0(dust=Y)", "BCG∗", "major_mergers", "S", "S_(w/o_Circinus)", "S0/Es,b_(dust=Y)", ] def get_log_mbh_graham2023(log_mstar, which="E/Es,e"): """ Return a MBH relation from Graham+2023 Table 1: https://arxiv.org/pdf/2305.03242 """ row = GRAHAM2023_ROWS.index(which) data = np.loadtxt("data/graham2023/table1.txt", usecols=(2, 4, 5)) A, C, B = data[row, :] return A * (log_mstar - C) + B def get_delta_log_mbh_shankar2019(log_mstar, low=0.0, high=np.inf): """Return equation 6 from Shankar+2019.""" delta_mbh = 0.32 - 0.1 * (log_mstar - 12) Loading
src/scripts/plots/plot_mbh_mstar.py +21 −4 Original line number Diff line number Diff line Loading @@ -25,8 +25,9 @@ lw1 = 2.5 lw2 = 2.0 alpha = 0.80 cmap = mpl.colormaps["gist_heat"] cmap2 = mpl.colormaps["cool"] norm = mpl.colors.Normalize(vmin=0.0, vmax=5.5) cmap2 = mpl.colormaps["rainbow"] norm2 = mpl.colors.Normalize(vmin=0.0, vmax=4.0) ############################################################################### Loading @@ -40,7 +41,7 @@ def main(): # log_mbh = mbh.get_log_mbh_continuity_new(log_mstar, z) ls = "solid" if z < 4 else "dotted" log_mbh = mbh.get_log_mbh_continuity_new2(log_mstar, np.full_like(log_mstar, z)) axes[0].plot(log_mstar, log_mbh, color=cmap(norm(z)), lw=lw1, label=f"$z = {z:d}$", ls=ls) axes[0].plot(log_mstar, log_mbh, color=cmap(norm(z)), lw=lw1, label=f"$z = {z:.0f}$", ls=ls) # Right panel: Plots the local Con Eq against literature # log_mbh = mbh.get_log_mbh_continuity(log_mstar, 0.0) Loading @@ -53,7 +54,9 @@ def main(): color="k", # label="Continuity equation, $z=0$" ) axes[1].fill_between(log_mstar, log_mbh - 0.50, log_mbh + 0.50, color="k", alpha=0.20) axes[1].plot( log_mstar, mbh.get_log_mbh_haring_rix2004(log_mstar), Loading @@ -63,14 +66,26 @@ def main(): alpha=alpha, ls="dashdot", ) # axes[1].plot( # log_mstar, # mbh.get_log_mbh_kormendy_ho2013(log_mstar), # lw=lw2, # label="K&H13", # alpha=alpha, # ls="dashed", # ) axes[1].plot( log_mstar, mbh.get_log_mbh_kormendy_ho2013(log_mstar), mbh.get_log_mbh_kormendy_ho2013(log_mstar, from_rv15=True), lw=lw2, # label="K&H13 (R&V15)", label="K&H13", alpha=alpha, ls="dashed", ) axes[1].plot( log_mstar, mbh.get_log_mbh_reines_volonteri2015(log_mstar), Loading @@ -93,7 +108,9 @@ def main(): print("Plotting Zou+2024") for z in [0.0, 2.0, 4.0]: log_mbh = mbh.get_log_mbh_zou2024(log_mstar, np.full_like(log_mstar, z), is_tng300=True) axes[0].plot(log_mstar, log_mbh, color=cmap2(norm(z)), lw=lw1, label=f"$z = {z:d}$ (Z24)" % z) axes[0].plot( log_mstar, log_mbh, color=cmap2(norm2(z)), lw=lw1, label=f"$z = {z:.0f}$ (Z24)", ls="dashed" ) axes[0].legend() fig.tight_layout() Loading