def read_and_eval(interpfns): f = fits.open("input/LSST_Ia_HEAD.FITS") head = f[1].data f.close() dat = sncosmo.read_snana_fits("input/LSST_Ia_HEAD.FITS", "input/LSST_Ia_PHOT.FITS") pdf = PdfPages("LC_plots.pdf") for i in range(len(head.PEAKMJD)): if (head.REDSHIFT_HELIO[i] > 0.4) and (head.REDSHIFT_HELIO[i] < 0.6): plt.figure() phase = (dat[i]["MJD"] - head.PEAKMJD[i])/(1. + head.REDSHIFT_HELIO[i]) errs = LC_eval(interpfns, phase, magerr = dat[i]["MAGERR"], filt = dat[i]["FLT"], redshift = head.REDSHIFT_HELIO[i]) for filt in 'ugrizY': inds = np.where((dat[i]["FLT"] == filt)*(dat[i]["MAGERR"] > 0)) plt.plot(phase[inds], dat[i]["MAGERR"][inds], '.', color = {'u': 'm', 'g': 'b', 'r': 'cyan', 'i': 'g', 'z': 'orange', 'Y': 'r'}[filt], label = filt) plt.legend(loc = 'best') plt.ylim(0, 0.2) title = "$\sigma$Mag=%.3f" % errs[0] for pc in range(1,5): title += " $\sigma$PC%i=%.3f" % (pc, errs[pc]) plt.title(title) plt.xlabel("Phase") plt.ylabel("Mag Err") pdf.savefig(plt.gcf(), bbox_inches = 'tight') pdf.close()
def fromSNANAfileroot(cls, snanafileroot, location='./', snids=None, n=None): """ Class constructor from a root file and a location Parameters ---------- snanafileroot : string, mandatory root file name for the SNANA which is the prefix to '_HEAD.FITS', or '_PHOT.FITS' location : string, optional defaults to current working directory './' Relative or absolute path to the directory where the head and phot files are located snids : integer/string, optional defaults to None if not None, only SN observations corresponding to SNID snid are loaded n : Integer, defaults to None if not None, only the first n SN light curves are loaded """ headfile = cls.snanadatafile(snanafileroot, filetype='head', location=location) photfile = cls.snanadatafile(snanafileroot, filetype='phot', location=location) print headfile data = sncosmo.read_snana_fits(head_file=headfile, phot_file=photfile, snids=snids, n=n) return cls(headFile=headfile, photFile=photfile, snids=snids, n=n)
def get_sndataset(headfile): photfile = headfile.replace('HEAD', 'PHOT') sndataset = sncosmo.read_snana_fits(headfile, photfile) for i in xrange(len(sndataset)): sndataset[i] = standardize_sn_data(sndataset[i], headfile=os.path.basename(headfile)) return sndataset
def get_test_sn(headfile='random', snid='random', verbose=True): if headfile == 'random': headfilelist = glob('data/*HEAD.FITS') headfile = choice(headfilelist) if snid == 'random': # Get metadata for all the SNe head_data = pyfits.getdata(headfile, 1, view=np.ndarray) # Strip trailing whitespace characters from SNID. if 'SNID' in head_data.dtype.names: snidlist = np.char.strip(head_data['SNID']) snid = choice(snidlist) sndataset = sncosmo.read_snana_fits(headfile, headfile.replace('HEAD', 'PHOT'), snids=[str(snid)]) sn = sndataset[0] if verbose: print "SNID=%s from %s" % (snid, os.path.basename(headfile)) excludelist = get_sncosmo_excludelist(sn) if excludelist: modelname = excludelist[0] elif sn.meta['SIM_NON1a']: modelname = 'NON1a.%03i' % sn.meta['SIM_MODEL_INDEX'] else: modelname = sn.meta['SIM_MODEL_NAME'] print "Type=%s model=%s" % (sn.meta['SIM_TYPE_NAME'].strip(), modelname) return sn
def loadSNANAData(snanafileroot, location='/.', snids=None, n=None): ''' load a SNANA fits file into a list of `~astropy.Table.table` objects. Parameters ---------- snanafileroot: string, mandatory root file name for the SNANA which is the prefix to '_HEAD.FITS', or '_PHOT.FITS' location: string, optional defaults to current working directory './' directory where the head and phot files are located snids: integer/string, optional defaults to None if not None, only SN observations corresponding to SNID snid are loaded n: Integer, defaults to None if not None, only the first n SN light curves are loaded Returns: data list of `~astropy.Table.Table` each Table containing a light curve of a SN. ..note: The column names of the SNANA data files are not reformated for SNCosmo use ''' headfile = snanadatafile(snanafileroot, filetype='head', location=location) photfile = snanadatafile(snanafileroot, filetype='phot', location=location) data = sncosmo.read_snana_fits(head_file=headfile, phot_file=photfile, snids=snids, n=None) return data
def __init__(self, headfile, photfile, snids=None, n=None): """ Instantiate class from SNANA simulation output files in fits format Parameters ---------- snids : integer/string, optional defaults to None if not None, only SN observations corresponding to SNID snid are loaded n : Integer, defaults to None if not None, only the first n SN light curves are loaded ..note: The column names of the SNANA data files are not reformated for SNCosmo use """ self.snList = sncosmo.read_snana_fits( head_file=headfile, phot_file=photfile, snids=snids, n=n)
def test_read_snana_fits(): fname1 = join(dirname(__file__), "data", "snana_fits_example_head.fits") fname2 = join(dirname(__file__), "data", "snana_fits_example_phot.fits") sne = sncosmo.read_snana_fits(fname1, fname2) assert len(sne) == 2