Stellar mass profiles based on sg_fluxtable

Preliminary stellar mass profiles of the HST sample based on the radial aperture photometry sg_fluxtable_nm.txt generated in July 2017 at Bates.


In [1]:
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

import fitsio
import astropy.units as u
from astropy.io import ascii
from astropy.table import Table
from astropy.cosmology import FlatLambdaCDM

In [2]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [3]:
mpl.rcParams.update({'font.size': 18})
cosmo = FlatLambdaCDM(H0=70, Om0=0.3)

Read the original photometry, the fitting results, and the K-corrections.


In [4]:
massdir = os.path.join( os.getenv('HIZEA_PROJECT'), 'massprofiles', 'isedfit' )
etcdir = os.path.join( os.getenv('HIZEA_DIR'), 'etc' )

In [5]:
photfile = os.path.join(etcdir, 'sg_fluxtable_nm.txt')
isedfile = os.path.join(massdir, 'massprofiles_fsps_v2.4_miles_chab_charlot_sfhgrid01.fits.gz')
kcorrfile = os.path.join(massdir, 'massprofiles_fsps_v2.4_miles_chab_charlot_sfhgrid01_kcorr.z0.0.fits.gz')

In [6]:
print('Reading {}'.format(photfile))
phot = ascii.read(photfile)
phot[:2]


Reading /Users/ioannis/repos/hizea/etc/sg_fluxtable_nm.txt
Out[6]:
<Table length=2>
IDf_475ivar_475f_814ivar_814f_1600ivar_1600z
str8float64float64float64float64float64float64float64
J0826_002.5085180927563.56609254683.1257661912940.93992213931.66482813428144.318224860.603
J0826_015.4365567387213.53356276747.219142912687.675182530774.2672933662521.96620286510.603

In [7]:
print('Reading {}'.format(isedfile))
ised = Table(fitsio.read(isedfile, ext=1, upper=True))
ised[:2]


Reading /Users/ioannis/research/projects/hizea/massprofiles/isedfit/massprofiles_fsps_v2.4_miles_chab_charlot_sfhgrid01.fits.gz
Out[7]:
<Table length=2>
ISEDFIT_IDRADECZMAGGIES [4]IVARMAGGIES [4]BESTMAGGIES [4]CHUNKINDXMODELINDXDELAYEDBURSTTYPECHI2TOTALMASSTOTALMASS_ERRMSTARAGESFRAGETAUZMETALAVMUOIIIHBNLYCSFRSFR100B100B1000EWOIIEWOIIIHBEWNIIHANBURSTTRUNCTAUTBURSTDTBURSTFBURSTMSTAR_50AGE_50SFRAGE_50TAU_50ZMETAL_50AV_50MU_50OIIIHB_50SFR_50SFR100_50B100_50B1000_50EWOII_50EWOIIIHB_50EWNIIHA_50MSTAR_AVGAGE_AVGSFRAGE_AVGTAU_AVGZMETAL_AVGAV_AVGMU_AVGOIIIHB_AVGSFR_AVGSFR100_AVGB100_AVGB1000_AVGEWOII_AVGEWOIIIHB_AVGEWNIIHA_AVGMSTAR_ERRAGE_ERRSFRAGE_ERRTAU_ERRZMETAL_ERRAV_ERRMU_ERROIIIHB_ERRSFR_ERRSFR100_ERRB100_ERRB1000_ERREWOII_ERREWOIIIHB_ERREWNIIHA_ERR
int32float64float64float32float32float32float32int16int16int32int32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32int16float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32float32
0239.5468254639.955781220.4020.0 .. 1.67473e-090.0 .. 1.42617e+202.01102e-09 .. 2.04697e-09312400120.40173.9705e+081.16618e+078.47245.581260.9943255.477260.02785930.1250960.357175-0.99836753.79310.6980530.4373661.585250.61327522.142483.0176670.94810.02431295.579730.03973914.458928.477195.581260.9943255.477260.02785930.1250960.357175-0.9983670.7028490.4421621.585250.61327522.142483.0176670.9488.486225.605811.023475.550070.02741930.1301810.363263-0.9877750.7004580.4429371.577670.61052922.998382.6027665.7780.09512880.2587620.3072910.7676570.004639460.05361530.06418970.1116780.02520360.00817490.07995690.02895299.024084.3743854.5064
1239.5468254639.955781220.4020.0 .. 4.25669e-090.0 .. 2.20758e+194.48658e-09 .. 4.56677e-0931240012.171538.85814e+082.56177e+078.82095.581260.9943255.477260.02785930.1250960.357175-0.99836754.14161.046550.7858641.585250.61327522.142483.0176670.94810.02431295.579730.03973914.458928.82695.581260.9943255.477260.02785930.1250960.357175-0.9983671.052550.7918641.585250.61327522.142483.0176670.9488.918385.827681.287736.209130.02342880.1762980.418449-0.8914411.029020.8002311.508750.58552430.76678.8688618.8290.09573010.2587620.3072910.7676570.004639460.05361530.06418970.1116780.02460230.008776190.07995690.02895299.024084.3743854.5064

In [8]:
print('Reading {}'.format(kcorrfile))
kcorr = Table(fitsio.read(kcorrfile, ext=1, upper=True))
kcorr[:2]


Reading /Users/ioannis/research/projects/hizea/massprofiles/isedfit/massprofiles_fsps_v2.4_miles_chab_charlot_sfhgrid01_kcorr.z0.0.fits.gz
Out[8]:
<Table length=2>
ISEDFIT_IDZMAGGIES [4]IVARMAGGIES [4]CHI2FLAM_1500CFLUX_3727KCORRECT [5]ABSMAG [5]IVARABSMAG [5]SYNTH_ABSMAG [5]ABSMAG_FILTERLIST [5]
int32float32float32float32float32float32float32float32float32float32float32bytes13
00.4020.0 .. 1.67473e-090.0 .. 1.42617e+2020.40176.68999e-171.00071e-17-0.362645 .. -0.549211-19.7825 .. -19.6787339.322 .. 339.322-19.5848 .. -19.4908bessell_U.par .. bessell_I.par
10.4020.0 .. 4.25669e-090.0 .. 2.20758e+192.171531.49286e-162.23306e-17-0.362646 .. -0.549209-20.4676 .. -20.4461339.322 .. 339.321-20.4563 .. -20.3623bessell_U.par .. bessell_I.par

In [9]:
galaxy = [gg[:5] for gg in phot['ID'].data]
galaxy = np.unique(galaxy)
ngal = len(galaxy)

Plot the individual stellar mass profiles.

Fluxes were measured in circular apertures with radii ranging from 1-40 pixels (0.05-2 arcsec). Below we calculate the surface mass density in units of Mstar per comoving kpc2.


In [10]:
nrad = 40
radpix = np.linspace(1.0, 40.0, nrad) # [pixels]
radarcsec = radpix * 0.05             # [arcsec]

In [11]:
mstar = ised['MSTAR_AVG'].data.reshape(ngal, nrad)
mstar_err = ised['MSTAR_ERR'].data.reshape(ngal, nrad)
redshift = phot['z'].data.reshape(ngal, nrad)[:, 0]

In [12]:
area = np.pi * np.insert(np.diff(radarcsec**2), 0, radarcsec[0]**2) # aperture annulus [arcsec2]

In [13]:
sigma = np.zeros_like(mstar)  # surface mass density [Mstar/kpc2]
radkpc = np.zeros_like(mstar) # radius [comoving kpc]

In [14]:
for igal in range(ngal):
    arcsec2kpc = cosmo.arcsec_per_kpc_comoving(redshift[igal]).value
    radkpc[igal, :] = radarcsec / arcsec2kpc
    areakpc2 = area / arcsec2kpc**2
    sigma[igal, :] = np.log10( 10**mstar[igal, :] / areakpc2 )

In [15]:
massrange = (8, 10.2)
sigmarange = (6, 9.6)

In [16]:
fig, ax = plt.subplots(3, 4, figsize=(14, 8), sharey=True, sharex=True)
for ii, thisax in enumerate(ax.flat):
    thisax.errorbar(radarcsec, mstar[ii, :], yerr=mstar_err[ii, :], 
                    label=galaxy[ii])
    thisax.set_ylim(massrange)
    #thisax.legend(loc='upper right', frameon=False)  
    thisax.annotate(galaxy[ii], xy=(0.9, 0.9), xycoords='axes fraction', 
                    size=16, ha='right', va='top')
fig.text(0.0, 0.5, r'$\log_{10}\, (M / M_{\odot})$', ha='center', 
         va='center', rotation='vertical')
fig.text(0.5, 0.0, 'Radius (arcsec)', ha='center', 
         va='center')
fig.subplots_adjust(wspace=0.05, hspace=0.05)
fig.tight_layout()



In [17]:
fig, ax = plt.subplots(figsize=(10, 7))
for igal in range(ngal):
    ax.plot(radkpc[igal, :], np.log10(np.cumsum(10**mstar[igal, :])), label=galaxy[igal])
ax.legend(loc='lower right', fontsize=16, ncol=3, frameon=False)
ax.set_xlabel(r'Galactocentric Radius $r_{kpc}$ (Comoving kpc)')
ax.set_ylabel(r'$\log_{10}\, M(<r_{kpc})\ (M_{\odot})$')


Out[17]:
<matplotlib.text.Text at 0x1103d9278>

In [18]:
fig, ax = plt.subplots(figsize=(10, 7))
for igal in range(ngal):
    ax.plot(radkpc[igal, :], sigma[igal, :], label=galaxy[igal])
ax.legend(loc='upper right', fontsize=16, ncol=3, frameon=False)
ax.set_xlabel(r'Galactocentric Radius $r_{kpc}$ (Comoving kpc)')
ax.set_ylabel(r'$\log_{10}\, \Sigma\ (M_{\odot}\ /\ {\rm kpc}^2)$')
ax.set_ylim(sigmarange)


Out[18]:
(6, 9.6)

In [ ]: