def test_sne_light_curves(self): """ Generate some super nova light curves. Verify that they come up with the same magnitudes and uncertainties as supernova catalogs. """ gen = SNIaLightCurveGenerator(self.db, self.opsimDb) raRange = (78.0, 85.0) decRange = (-69.0, -65.0) bandpass = '******' pointings = gen.get_pointings(raRange, decRange, bandpass=bandpass) gen.sn_universe._midSurveyTime = 49000.0 gen.sn_universe._snFrequency = 0.001 self.assertGreater(len(pointings), 1) lc_dict, truth = gen.light_curves_from_pointings(pointings) self.assertGreater(len(lc_dict), 0) for group in pointings: self.assertGreater(len(group), 1) for obs in group: cat = SNIaLightCurveControlCatalog(self.db, obs_metadata=obs) for sn in cat.iter_catalog(): if sn[1] > 0.0: lc = lc_dict[sn[0]][bandpass] dex = np.argmin(np.abs(lc['mjd'] - obs.mjd.TAI)) self.assertLess(np.abs(lc['mjd'][dex] - obs.mjd.TAI), 1.0e-7) self.assertLess(np.abs(lc['flux'][dex] - sn[1]), 1.0e-7) self.assertLess(np.abs(lc['error'][dex] - sn[2]), 1.0e-7)
def test_sne_multiband_light_curves(self): """ Generate some super nova light curves. Verify that they come up with the same magnitudes and uncertainties as supernova catalogs. Use multiband light curves. """ gen = SNIaLightCurveGenerator(self.db, self.opsimDb) raRange = (78.0, 85.0) decRange = (-69.0, -65.0) pointings = gen.get_pointings(raRange, decRange, bandpass=('r', 'z')) gen.sn_universe._midSurveyTime = 49000.0 gen.sn_universe._snFrequency = 0.001 self.assertGreater(len(pointings), 1) lc_dict, truth = gen.light_curves_from_pointings(pointings) self.assertGreater(len(lc_dict), 0) obs_gen = ObservationMetaDataGenerator(database=self.opsimDb, driver='sqlite') control_obs_r = obs_gen.getObservationMetaData(fieldRA=raRange, fieldDec=decRange, telescopeFilter='r', boundLength=1.75) control_obs_z = obs_gen.getObservationMetaData(fieldRA=raRange, fieldDec=decRange, telescopeFilter='z', boundLength=1.75) self.assertGreater(len(control_obs_r), 0) self.assertGreater(len(control_obs_z), 0) ct_r = 0 for obs in control_obs_r: cat = SNIaLightCurveControlCatalog(self.db, obs_metadata=obs) for sn in cat.iter_catalog(): if sn[1] > 0.0: ct_r += 1 lc = lc_dict[sn[0]]['r'] dex = np.argmin(np.abs(lc['mjd'] - obs.mjd.TAI)) self.assertLess(np.abs(lc['mjd'][dex] - obs.mjd.TAI), 1.0e-7) self.assertLess(np.abs(lc['flux'][dex] - sn[1]), 1.0e-7) self.assertLess(np.abs(lc['error'][dex] - sn[2]), 1.0e-7) self.assertGreater(ct_r, 0) ct_z = 0 for obs in control_obs_z: cat = SNIaLightCurveControlCatalog(self.db, obs_metadata=obs) for sn in cat.iter_catalog(): if sn[1] > 0.0: ct_z += 1 lc = lc_dict[sn[0]]['z'] dex = np.argmin(np.abs(lc['mjd'] - obs.mjd.TAI)) self.assertLess(np.abs(lc['mjd'][dex] - obs.mjd.TAI), 1.0e-7) self.assertLess(np.abs(lc['flux'][dex] - sn[1]), 1.0e-7) self.assertLess(np.abs(lc['error'][dex] - sn[2]), 1.0e-7) self.assertGreater(ct_z, 0)
def test_sne_light_curves_z_cut(self): """ Generate some super nova light curves. Add a cutoff in redshift. Verify that they come up with the same magnitudes and uncertainties as supernova catalogs and that objects with z>z_cutoff are not returned. """ z_cut = 0.9 gen = SNIaLightCurveGenerator(self.db, self.opsimDb) gen.z_cutoff = z_cut raRange = (78.0, 85.0) decRange = (-69.0, -65.0) bandpass = '******' pointings = gen.get_pointings(raRange, decRange, bandpass=bandpass) gen.sn_universe._midSurveyTime = 49000.0 gen.sn_universe._snFrequency = 0.001 self.assertGreater(len(pointings), 1) lc_dict, truth = gen.light_curves_from_pointings(pointings) self.assertGreater(len(lc_dict), 0) over_z = 0 for group in pointings: self.assertGreater(len(group), 1) for obs in group: cat = SNIaLightCurveControlCatalog(self.db, obs_metadata=obs) for sn in cat.iter_catalog(): if sn[1] > 0.0: if sn[3] > z_cut: self.assertNotIn(sn[0], lc_dict) over_z += 1 else: lc = lc_dict[sn[0]][bandpass] dex = np.argmin(np.abs(lc['mjd'] - obs.mjd.TAI)) self.assertLess( np.abs(lc['mjd'][dex] - obs.mjd.TAI), 1.0e-7) self.assertLess(np.abs(lc['flux'][dex] - sn[1]), 1.0e-7) self.assertLess(np.abs(lc['error'][dex] - sn[2]), 1.0e-7, msg='%e vs %e' % (lc['error'][dex], sn[2])) self.assertGreater(over_z, 0)
def test_limit_sne_light_curves(self): """ Test that we can limit the number of light curves returned per field of view """ lc_limit = 2 gen = SNIaLightCurveGenerator(self.db, self.opsimDb) gen.sn_universe._midSurveyTime = 49000.0 gen.sn_universe._snFrequency = 0.001 raRange = (78.0, 85.0) decRange = (-69.0, -65.0) pointings = gen.get_pointings(raRange, decRange, bandpass=('r', 'z')) control_lc, truth = gen.light_curves_from_pointings(pointings) test_lc, truth = gen.light_curves_from_pointings(pointings, lc_per_field=lc_limit) self.assertGreater(len(control_lc), len(test_lc)) self.assertLessEqual(len(test_lc), lc_limit*len(pointings))
def test_sne_light_curves_z_cut(self): """ Generate some super nova light curves. Add a cutoff in redshift. Verify that they come up with the same magnitudes and uncertainties as supernova catalogs and that objects with z>z_cutoff are not returned. """ z_cut = 0.9 gen = SNIaLightCurveGenerator(self.db, self.opsimDb) gen.z_cutoff = z_cut raRange = (78.0, 85.0) decRange = (-69.0, -65.0) bandpass = '******' pointings = gen.get_pointings(raRange, decRange, bandpass=bandpass) gen.sn_universe._midSurveyTime = 49000.0 gen.sn_universe._snFrequency = 0.001 self.assertGreater(len(pointings), 1) lc_dict, truth = gen.light_curves_from_pointings(pointings) self.assertGreater(len(lc_dict), 0) over_z = 0 for group in pointings: self.assertGreater(len(group), 1) for obs in group: cat = SNIaLightCurveControlCatalog(self.db, obs_metadata=obs) for sn in cat.iter_catalog(): if sn[1] > 0.0: if sn[3] > z_cut: self.assertNotIn(sn[0], lc_dict) over_z += 1 else: lc = lc_dict[sn[0]][bandpass] dex = np.argmin(np.abs(lc['mjd'] - obs.mjd.TAI)) self.assertLess(np.abs(lc['mjd'][dex] - obs.mjd.TAI), 1.0e-7) self.assertLess(np.abs(lc['flux'][dex] - sn[1]), 1.0e-7) self.assertLess(np.abs(lc['error'][dex] - sn[2]), 1.0e-7, msg='%e vs %e' % (lc['error'][dex], sn[2])) self.assertGreater(over_z, 0)
print("Could not load lsst.sims") print("Did you remember to setup sims with EUPS using:") print() print("source eups-setups.sh") print("setup lsst_sims") sys.exit(0) # Need a database connection via: # ssh -L 51433:fatboy.phys.washington.edu:1433 gateway.astro.washington.edu if __name__ == '__main__': # Twinkles: RA 53.01, Dec -27.44 raRange = (52.0, 54.5) decRange = (-28.5, -26.5) bandpass = ('u', 'g', 'r', 'i', 'z') opsimdb_filename = "minion_1016_sqlite.db" catalogdb = GalaxyTileObj() sn_gen = SNIaLightCurveGenerator(catalogdb, opsimdb_filename) sn_pointings = sn_gen.get_pointings(raRange, decRange, bandpass=bandpass) sn_lc_dict, sn_truth_dict = sn_gen.light_curves_from_pointings( sn_pointings, lc_per_field=1000) print("Number of light curves: ", len(sn_lc_dict.keys())) f_out = open("sne_dd_lightcurves.pkl", "w") cPickle.dump((sn_lc_dict, sn_truth_dict), f_out) f_out.close()