def read_simlib(libfile): '''function to read snana like simlib file''' if bench: print "Reading the simlib file. This might take a few minutes..." meta, obs = sncosmo.read_snana_simlib(libfile) for id in obs.keys(): #obs[id].rename_column('FLT', 'band') obs[id]['band'] = ['desg'] * len(obs[id]['FLT']) for ii, val in enumerate(obs[id]['FLT']): if val == 'g': obs[id]['band'][ii] = 'desg' if val == 'r': obs[id]['band'][ii] = 'desr' if val == 'i': obs[id]['band'][ii] = 'desi' if val == 'z': obs[id]['band'][ii] = 'desz' obs[id].rename_column('MJD', 'time') obs[id].rename_column('CCD_GAIN', 'gain') obs[id].rename_column('SKYSIG', 'skynoise') obs[id].rename_column('ZPTAVG', 'zp') obs[id]['zpsys'] = ['ab'] * len(obs[id]['gain']) return meta, obs
def test_read_snana_simlib_noend(): fname = join(dirname(__file__), "data", "snana_simlib_example_noend.dat") meta, obs_sets = sncosmo.read_snana_simlib(fname) assert len(obs_sets) == 2
particular strategy. """ simlibfilename = '/home/kushner/src/lsstpipeline/cache/RBtest_opsim.simlib' # simlibfilename = 'cache/RBtest_opsim.simlib' # set up bandpasses for LSST sl.getlsstbandpassobjs(plot=False) def prefixbandname(prefix, obstable): _bb = np.array(obstable['FLT']) _lsst = np.array([prefix]*len(_bb), dtype='S6') return map ( ''.join, zip(_lsst,_bb)) #Read the simlib file, get the libids which index different fields meta, obstables = sncosmo.read_snana_simlib(simlibfilename) print "META\n" print meta print "\n\n OBSTABLE LIBIDS \n" print obstables.keys() #Choose a field: for example the one indexed by 519 minmjd = obstables[519]['MJD'].min() maxmjd = obstables[519]['MJD'].max() obstable = obstables[519] print "Number of observations in obstable: ", len(obstable) print "min and max MJD in the set: ", minmjd, maxmjd #Set SNCosmo model and set its t0 aritificially to values I know are in the above table model = sncosmo.Model(source='salt2-extended') params = []
def test_read_snana_simlib_invalid(): """Test that we fails on simlib files with bad co-add columns.""" fname = join(dirname(__file__), "data", "snana_simlib_example_invalid.dat") with pytest.raises(ValueError) as e_info: _ = sncosmo.read_snana_simlib(fname)
def test_read_snana_simlib_coadd(): """Test when co-added `ID*NEXPOSE` key is used.""" fname = join(dirname(__file__), "data", "snana_simlib_example_coadd.dat") meta, obs_sets = sncosmo.read_snana_simlib(fname) assert "NEXPOSE" in obs_sets[0].colnames
def test_read_snana_simlib_doc(): """Test when DOCANA header is present in simlib""" fname = join(dirname(__file__), "data", "snana_simlib_example_doc.dat") meta, _ = sncosmo.read_snana_simlib(fname) assert "DOCUMENTATION" in meta
lw=2, bins=zbins) plt.xlabel('Redshift') plt.ylabel('Normed PDF') plt.legend(loc='upper left', frameon=False) plt.title('Redshift Distribution Before Cuts') #plt.hist(testz,normed=True) plt.show() ##PART 2: READING IN THE SIMLIB ##--------------------------------- print 'READING THE SNANA SIMLIB. THIS MIGHT TAKE A FEW MINUTES - BE PATIENT!' snana_simlib_file = 'DES_DIFFIMG.SIMLIB' snana_simlib_meta, snana_simlib_obs_sets = sncosmo.read_snana_simlib( snana_simlib_file) #NOTE: THE SIMLIB INDEX STARTS AT 1, NOT 0# #print snana_simlib_obs_sets.keys() #print snana_simlib_obs_sets[1].meta #print snana_simlib_obs_sets[1].colnames ##PART 3: GENERATING THE COLOR ## AND STRETCH DISTRIBUTIONS ##--------------------------------- print 'DRAWING THE COLOR AND STRETCH' ## LET'S ASSUME WE JUST WANT TO DRAW COLOR AND STRETCH ## FROM INDEPENDENT NORMAL DISTRIBUTIONS simxmean, simxscale = 0.5, 1.2 simcmean, simcscale = -0.05, 0.15
def simulate_simlib(simlibfile, snmodelsource, outfile="LC/simulatedlc.dat", restrict=10): """ Simulate SN based on the simlibfile using SNCosmo SALT models Parameters ---------- simlibfile : snmodelsource: outfile: Returns ------- """ from astropy.units import Unit from astropy.coordinates import SkyCoord # read the simlibfile into obstables meta, obstables = sncosmo.read_snana_simlib(simlibfilename) # set the SNCosmo model source dustmaproot = os.getenv("SIMS_DUSTMAPS_DIR") map_dir = os.path.join(dustmaproot, "DustMaps") dust = sncosmo.CCM89Dust() model = Model( source=snmodelsource, effects=[dust, dust], effect_frames=["rest", "obs"], effect_names=["host", "mw"] ) maxSNperField = restrict # Different fields in SIMLIB are indexed by libids libids = obstables.keys() lcs = [] for libid in libids: # Get the obstable corresponding to each field obstable = obstables[libid] manipulateObsTable(obstable) # Need Area from PixSize ra = obstable.meta["RA"] dec = obstable.meta["DECL"] area = obstable.meta["PIXSIZE"] maxmjd = obstable["time"].max() minmjd = obstable["time"].min() rangemjd = maxmjd - minmjd skycoords = SkyCoord(ra, dec, unit="deg") t_mwebv = sncosmo.get_ebv_from_map(skycoords, mapdir=map_dir, interpolate=False) model.set(mwebv=t_mwebv) params = [] # col = Table.Column(obstable['SEARCH'].size*['ab'], name='zpsys') # obstable['FLT'].name = 'band' # obstable['MJD'].name = 'time' # obstable['ZPTAVG'].name = 'zp' # obstable['CCD_GAIN'].name = 'gain' # obstable['SKYSIG'].name = 'skynoise' # obstable.add_column(col) redshifts = list(sncosmo.zdist(0.0, 1.2, ratefunc=cosmoRate, time=rangemjd, area=area)) print "num SN generated ", len(redshifts) for i, z in enumerate(redshifts): mabs = normal(-19.3, 0.3) model.set(z=z) model.set_source_peakabsmag(mabs, "bessellb", "ab") x0 = model.get("x0") # RB: really should not be min, max but done like in catalogs p = {"z": z, "t0": uniform(minmjd, maxmjd), "x0": x0, "x1": normal(0.0, 1.0), "c": normal(0.0, 0.1)} params.append(p) if maxSNperField is not None: if i == maxSNperField: break print "realizing SN" lcslib = sncosmo.realize_lcs(obstable, model, params, trim_observations=True) lcs.append(lcslib) # alllcsintables = vstack(lcslib) # print alllcsintables[0] # print alllcsintables[MJD].size # write light curves to disk for i, field in enumerate(lcs): for snid, lc in enumerate(field): sncosmo.write_lc(lc, fname=outfile + "_" + str(i) + "_" + str(snid) + ".dat", format="ascii") return lcs