Here we show aggregated SFHs for simulated WFI photometry of semi-resolved stellar populations at a range of ages, metallicities, and distances.
import pandas as pd
import holoviews as hv
hv.notebook_extension('bokeh')
df = pd.read_csv('data/MIST_good_allruns.csv', usecols=list(range(1,7)) + [8])
# do some trimming; get rid of youngest ages and X606 data
df = df.where((df.age_bin >= 8.85) & (df.filt != "WFIRST_X606")).dropna()
# get rid of 'WFIRST_' from filter column
df['filt'] = df['filt'].str.split('_').str[-1]
# get cumulative sum of differential masses
df = df.assign(mass_formed = df.groupby(['filt','dist','age','feh','runs']).massdiff.cumsum())
df.head()
# aggregate star formation histories over all 10 runs
gr = df.groupby(['filt','dist','age','feh','age_bin'])
df_agg = gr.mean()
df_agg = df_agg.assign(mass_formed_min = gr.mass_formed.min())
df_agg = df_agg.assign(mass_formed_max = gr.mass_formed.max())
df_agg = df_agg.drop('runs', axis=1).reset_index()
df_agg.head()
# dimensions & labels
kdims = [('filt', 'Filter'), ('dist', 'Distance (Mpc)'),
('age', 'Input age (log yr)'),
('feh', 'Input [Fe/H]')]
vdims = [('age_bin', 'Age (log yr)'),
('mass_formed', 'Fraction of mass formed'),
('mass_formed_min', 'Fraction of mass formed'),
('mass_formed_max', 'Fraction of mass formed')]
sfhs = hv.Table(df_agg, kdims=kdims, vdims=vdims)
c_mean = sfhs.to.curve('age_bin','mass_formed', label='mean')
c_min = sfhs.to.curve('age_bin','mass_formed_min', label='min')
c_max = sfhs.to.curve('age_bin','mass_formed_max', label='max')
%opts Overlay [legend_position='top_left' width=700] \
Curve.min Curve.max (color='grey' line_dash='dashed' line_width=1.5) Curve.mean (line_width=2)
# plot SFHs
c_mean * c_min * c_max