Star Formation Histories of Simulated WFI Photometry

Here we show aggregated SFHs for simulated WFI photometry of semi-resolved stellar populations at a range of ages, metallicities, and distances.

In [1]:
import pandas as pd
import holoviews as hv
hv.notebook_extension('bokeh')
In [2]:
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()
Out[2]:
filt dist age feh runs age_bin massdiff mass_formed
43190 X625 4.0 9.3 -2.2 1.0 8.85 0.0 0.0
43191 X625 4.0 9.3 -2.2 1.0 8.90 0.0 0.0
43192 X625 4.0 9.3 -2.2 1.0 8.95 0.0 0.0
43193 X625 4.0 9.3 -2.2 1.0 9.00 0.0 0.0
43194 X625 4.0 9.3 -2.2 1.0 9.05 0.0 0.0
In [3]:
# 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()
Out[3]:
filt dist age feh age_bin massdiff mass_formed mass_formed_min mass_formed_max
0 X625 4.0 9.3 -2.2 8.85 0.00002 0.00002 0.0 0.0002
1 X625 4.0 9.3 -2.2 8.90 0.00000 0.00002 0.0 0.0002
2 X625 4.0 9.3 -2.2 8.95 0.00001 0.00003 0.0 0.0002
3 X625 4.0 9.3 -2.2 9.00 0.00001 0.00004 0.0 0.0002
4 X625 4.0 9.3 -2.2 9.05 0.00002 0.00006 0.0 0.0002
In [4]:
# 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')]
In [5]:
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')
In [6]:
%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
Out[6]:
In [ ]: