def plot_phot_compare(): """ make a comparison plot showing aperture and psf photometry """ from matplotlib import pyplot as pl import sncosmo import numpy as np from .import _ALPHA2FILTER datadir='/Users/rodney/Dropbox/Papers/snTomas/LCFIT/' ap = sncosmo.read_snana_ascii( datadir+'HST_FFSN_tomas.snana_apphot.dat') psf = sncosmo.read_snana_ascii(datadir+'HST_FFSN_tomas.snana_psfphot.dat') apdat = ap[1]['OBS'] psfdat = psf[1]['OBS'] fig = pl.gcf() pl.clf() iax = 0 for band, color in zip( ['Y','J','N','H'], ['c','r','g','m'] ): iax += 1 fig.add_subplot( 2, 2, iax ) for dat,marker,c in zip( [apdat,psfdat], ['o','D'], ['k',color]): iband = np.where( dat['FLT']==band ) pl.errorbar( dat['MJD'][iband], dat['FLUXCAL'][iband], dat['FLUXCALERR'][iband], marker=marker, color=c, ms=10, alpha=0.5 ) ax = pl.gca() pl.text(0.95,0.95,_ALPHA2FILTER[band],color=c,ha='right',va='top',transform=ax.transAxes) pl.draw()
def plot_lightcurve_snana(): from matplotlib import pyplot as pl import sncosmo import numpy as np from .import _ALPHA2FILTER datadir='/Users/rodney/Dropbox/Papers/snTomas/LCFIT/' dat = sncosmo.read_snana_ascii( datadir+'HST_FFSN_tomas.snana.dat') obsdat = dat[1]['OBS'] fig = pl.gcf() pl.clf() iax = 0 marker='o' for band, color in zip( ['B','V','I','Y','J','N','H'], ['c','g','r','c','g','r','k'] ): iax += 1 fig.add_subplot( 2, 4, iax ) iband = np.where( obsdat['FLT']==band ) pl.errorbar( obsdat['MJD'][iband], obsdat['FLUXCAL'][iband], obsdat['FLUXCALERR'][iband], marker=marker, color=color, ms=10, alpha=0.5 ) ax = pl.gca() pl.text(0.95,0.95,_ALPHA2FILTER[band],color=color,ha='right',va='top',transform=ax.transAxes) pl.draw()
def read_snana_datafile(datafile): """ Read in a SN data table that was written in the old SNANA format, modify it, and return an astropy Table object that can be handled by sncosmo functions. """ metadata, datatable = sncosmo.read_snana_ascii(datafile, default_tablename='OBS') sntable = standardize_snana_data(datatable['OBS']) return sntable
def test_read_snana_ascii(): fname = join(dirname(__file__), "data", "snana_ascii_example.dat") meta, tables = sncosmo.read_snana_ascii(fname, default_tablename="OBS") # only 1 table assert len(tables) == 1 data = tables["OBS"] assert len(data) == 4 # 4 rows. assert len(data.colnames) == 13 # 13 columns.
def test_read_snana_ascii(): fname = join(dirname(__file__), "data", "snana_ascii_example.dat") meta, tables = sncosmo.read_snana_ascii(fname, default_tablename="OBS") # test a few different types of metadata assert meta['SURVEY'] == 'DES' assert meta['FAKE'] == 0 assert_allclose(meta['REDSHIFT_HELIO'], 0.3614) # only 1 table assert len(tables) == 1 data = tables["OBS"] assert len(data) == 4 # 4 rows. assert len(data.colnames) == 13 # 13 columns.
def snana_to_sncosmo( snanafile='HST_FFSN_tomas_snana_ab.dat') : """ make the SN Tomas light curve fit figure""" import sncosmo import numpy as np from . import _ALPHA2FILTER snanadat = sncosmo.read_snana_ascii(snanafile) mjd = snanadat[1]['OBS']['MJD'] band = snanadat[1]['OBS']['FLT'] fluxcal = snanadat[1]['OBS']['FLUXCAL'] fluxcalerr = snanadat[1]['OBS']['FLUXCALERR'] mag = snanadat[1]['OBS']['MAG'] magerr = snanadat[1]['OBS']['MAGERR'] zptab = snanadat[1]['OBS']['ZPTAB'] flux = fluxcal * 10**(-0.4*(27.5-zptab)) fluxerr = fluxcalerr * 10**(-0.4*(27.5-zptab)) magab = -2.5*np.log10( flux ) + zptab magaberr = 1.0857 * fluxerr / flux filter = [ _ALPHA2FILTER[b] for b in band ] fout = open('HST_FFSN_tomas.sncosmo.dat','w') print >> fout, "# mjd filter flux fluxerr mag magerr zpt magsys" for i in range(len(mjd)) : if flux[i]>0 : print >> fout, "%8.2f %6s %8.3f %8.3f %8.2f %6.2f %7.3f AB"%( mjd[i], filter[i], flux[i], fluxerr[i], magab[i], magaberr[i], zptab[i] ) else : print >> fout, "%8.2f %6s %8.3f %8.3f %8.2f %6.2f %7.3f AB"%( mjd[i], filter[i], flux[i], fluxerr[i], -2.5*np.log10(3*fluxerr[i]) + zptab[i], -9.0, zptab[i] ) fout.close()
def convert_light_curve_file( ): """ read in the SNANA-style light curve file (from D.Scolnic) and convert it into normal fluxes (not SNANA fluxcal) and AB and Vega mags :return: """ import sncosmo import numpy as np from .import _ALPHA2FILTER from hstphot import hstzpt from astropy import table from astropy.utils import OrderedDict import sys import os thisfile = sys.argv[0] if 'ipython' in thisfile : thisfile = __file__ thisdir = os.path.dirname( os.path.abspath(thisfile)) datadir = os.path.join(thisdir,'data/') dat = sncosmo.read_snana_ascii( datadir+'HST_FFSN_tomas.snana.dat') obsdat = dat[1]['OBS'] filtname= np.array([_ALPHA2FILTER[obsdat['FLT'][i]].lower() for i in range(len(obsdat))]) iIR = np.array([ i for i in range(len(obsdat)) if filtname[i].startswith('f1') ] ) iACS = np.array([ i for i in range(len(obsdat)) if not filtname[i].startswith('f1') ] ) zpt = np.ones(len(obsdat)) zpt[iIR] = hstzpt.getzptWFC3IR(filtname[iIR],'AB') zpt[iACS] = hstzpt.getzptACS(filtname[iACS],'AB') zptsys = ['AB' for i in range(len(obsdat))] zptVega = np.ones(len(obsdat)) zptVega[iIR] = hstzpt.getzptWFC3IR(filtname[iIR],'Vega') zptVega[iACS] = hstzpt.getzptACS(filtname[iACS],'Vega') fAB = obsdat['FLUXCAL'] * 10**(0.4*(27.5-zpt)) ferrAB = obsdat['FLUXCALERR'] * 10**(0.4*(27.5-zpt)) mAB = np.where( fAB>0, -2.5*np.log10(fAB)+zpt, -2.5*np.log10(3*np.abs(ferrAB))+zpt,) merr = np.where( fAB>0, 1.0857*(ferrAB/fAB), -9*np.ones(len(fAB))) fcalVega = obsdat['FLUXCAL'] * 10**(0.4*(zpt-zptVega)) fcalerrVega = obsdat['FLUXCALERR'] * 10**(0.4*(zpt-zptVega)) mVega = np.where( fcalVega>0, -2.5*np.log10(fcalVega)+27.5, -2.5*np.log10(3*np.abs(fcalerrVega))+27.5,) data=OrderedDict( [ ['mjd',obsdat['MJD']], ['filter',filtname], ['flux',fAB], ['fluxerr',ferrAB], ['mag',mAB], ['magerr',merr], ['zpt',zpt], ['zptsys',zptsys], ['fluxcalVega',fcalVega], ['fluxcalerrVega',fcalerrVega], ['magVega',mVega], ['zptVega',zptVega], ]) outdat = table.Table(data=data) outdat['mjd'].format='%.1f' for colname in ['flux','fluxerr','fluxcalVega','fluxcalerrVega']: outdat[colname].format='%8.5f' for colname in ['mag','magerr','magVega']: outdat[colname].format='%8.3f' outdat.write( datadir+'HST_FFSN_tomas.dat', format='ascii.fixed_width') # format='ascii.commented_header') return(outdat)