Source code for beorn.plotting.mass_accretion

"""Plotting helpers for halo mass evolution.

This module contains utilities to visualize halo mass growth and its
time derivative from a :class:`~beorn.structs.RadiationProfiles`.
"""
import matplotlib.pyplot as plt
import logging

from ..structs import RadiationProfiles
from ..precomputation.massaccretion import mass_accretion

logger = logging.getLogger(__name__)


# TODO - make better
[docs] def plot_halo_mass_evolution( profiles: RadiationProfiles, mass_bin: int = None, ): """Plot halo mass evolution and its derivative for a mass bin. Args: profiles (RadiationProfiles): RadiationProfiles which also contains halo mass evolution arrays and parameters. mass_bin (int, optional): Index of the mass bin to plot. If None, the central mass bin is used. """ if mass_bin is None: # use the middle mass bin mass_bin = profiles.halo_mass_bins.size // 2 m0_string = fr"$M_0 = {profiles.parameters.solver.halo_mass_bin_centers[mass_bin]:.2g} M_{{\odot}}$" masses, mass_derivatives = mass_accretion( profiles.parameters, profiles.z_history, profiles.parameters.solver.halo_mass_bin_centers, profiles.parameters.solver.halo_mass_accretion_alpha_bin_centers ) alphas = profiles.parameters.solver.halo_mass_accretion_alpha plt.figure() plt.xscale('log') plt.xlabel('Redshift z') plt.ylabel('Halo Mass [Msol]') plt.yscale('log') plt.title(f"Halo Mass - {m0_string}") for i in range(len(alphas) - 1): # plot a given starting mass for all alpha values plt.plot(profiles.z_history, masses[mass_bin, i, :], label=f"$\\alpha = {alphas[i]:.2f}$") plt.legend() plt.show() plt.figure() plt.xscale('log') plt.yscale('log') plt.title(f"Halo Mass derivative - {m0_string}") for i in range(len(alphas) - 1): # plot a given starting mass for all alpha values plt.plot(profiles.z_history, mass_derivatives[mass_bin, i, :], label=f"$\\alpha = {alphas[i]:.2f}$") plt.show()