Source code for beast.plotting.plot_ast_histogram

import numpy as np
import matplotlib.pyplot as plt
import argparse
from astropy.table import Table

from beast.physicsmodel.grid import SEDGrid
from beast.observationmodel.vega import Vega

__all__ = ["plot_ast_histogram"]


[docs] def plot_ast_histogram(ast_file, sed_grid_file=None): """ Make a histogram of the AST fluxes. If an SED grid is given, also plot a comparison histogram of the SED fluxes. The histogram bins are set by the bins originally used to create the ASTs (using the flux bin method), which are saved in ast_file.replace('inputAST','ASTfluxbins') and are automatically read in. Output plot is saved in the same location/name as ast_file, but with a .png instead of .txt. Parameters ---------- ast_file : string name of AST input file sed_grid_file : string (default=None) name of SED grid file """ # read in AST info ast_table = Table.read(ast_file, format="ascii") ast_fluxbins = Table.read( ast_file.split("inputAST")[0] + "ASTfluxbins.txt", format="ascii" ) # get filter names (and it's even in order!) filter_cols = [col for col in ast_table.colnames if "_" in col] filter_list = [col[-5:] for col in filter_cols] n_filter = len(filter_list) # if chosen, read in model grid if sed_grid_file is not None: modelsedgrid = SEDGrid(sed_grid_file) with Vega() as v: _, vega_flux, _ = v.getFlux(filter_cols) sedsMags = -2.5 * np.log10(modelsedgrid.seds[:] / vega_flux) # make a histogram for each filter fig = plt.figure(figsize=(7, 4 * n_filter)) for f, filt in enumerate(filter_list): # names of table columns with bin values min_bin_col = [b for b in ast_fluxbins.colnames if ("mins" in b and filt in b)][ 0 ] max_bin_col = [b for b in ast_fluxbins.colnames if ("maxs" in b and filt in b)][ 0 ] # use those to make a bin list bin_list = np.append(ast_fluxbins[min_bin_col], ast_fluxbins[max_bin_col][-1]) # make histograms ax = plt.subplot(n_filter, 1, f + 1) ast_col = [b for b in ast_table.colnames if filt in b][0] plt.hist( ast_table[ast_col], bins=bin_list, density=True, facecolor="black", edgecolor="none", alpha=0.3, label="ASTs", ) if sed_grid_file is not None: plt.hist( sedsMags[:, f], bins=bin_list, density=True, histtype="step", facecolor="none", edgecolor="black", label="Model grid", ) # labels ax.tick_params(axis="both", which="major", labelsize=13) ax.set_xlim(ax.get_xlim()[::-1]) plt.xlabel(filt + " (Vega mag)", fontsize=14) plt.ylabel("Normalized Histogram", fontsize=14) # add legend in first plot if f == 0: ax.legend(fontsize=14) plt.tight_layout() fig.savefig(ast_file.replace(".txt", ".png")) plt.close(fig)
if __name__ == "__main__": # pragma: no cover parser = argparse.ArgumentParser() parser.add_argument("ast_file", type=str, help="name of AST input file") parser.add_argument( "--sed_grid_file", type=str, default=None, help="name of SED grid file" ) args = parser.parse_args() plot_ast_histogram(args.ast_file, sed_grid_file=args.sed_grid_file)