def main(ramax=58, ramin=56, decmin=-32, decmax=-31, t0=59215, tm=61406): query = query_tmpl.format(ramin, ramax, decmin, decmax) sntab = pd.read_sql_query(query, conn) #sntab.to_csv('./catalogs+tables/sn_cat_rectangle.csv') #if os.path.isfile('./catalogs+tables/full_t_visits_from_minion.csv'): # visitab = pd.read_csv('./catalogs+tables/full_t_visits_from_minion.csv') #else: res = ObsMetaData.getObservationMetaData(boundLength=2, boundType='circle', fieldRA=(ramin - 3, ramax + 3), fieldDec=(decmin - 3, decmax + 3), expMJD=(t0, tm)) parsed = [Odict(obsmd.summary['OpsimMetaData']) for obsmd in res] for obsmd, summ in zip(res, parsed): ditherRa = np.rad2deg(summ['descDitheredRA']) ditherDec = np.rad2deg(summ['descDitheredDec']) ditherRot = np.rad2deg(summ['descDitheredRotTelPos']) summ['descDitheredRotSkyPos'] = getRotSkyPos(ditherRa, ditherDec, obsmd, ditherRot) df = pd.DataFrame(parsed) df = df[df['filter'].isin(('g', 'r', 'i', 'z'))] X = df[[ 'obsHistID', 'filter', 'FWHMeff', 'descDitheredRA', 'descDitheredDec', 'descDitheredRotTelPos', 'airmass', 'fiveSigmaDepth', 'expMJD', 'descDitheredRotSkyPos', 'fieldRA', 'fieldDec', 'rotSkyPos', 'rotTelPos' ]].copy() X.descDitheredRA = np.rad2deg(X.descDitheredRA) X.descDitheredDec = np.rad2deg(X.descDitheredDec) X.descDitheredRotTelPos = np.rad2deg(X.descDitheredRotTelPos) #X.descDitheredRotSkyPos = np.rad2deg(X.descDitheredRotSkyPos) already in deg X.fieldRA = np.rad2deg(X.fieldRA) X.fieldDec = np.rad2deg(X.fieldDec) X.rotTelPos = np.rad2deg(X.rotTelPos) X.rotSkyPos = np.rad2deg(X.rotSkyPos) X['d1'] = angularSeparation(ramin, decmax, X.descDitheredRA.values, X.descDitheredDec.values) X['d2'] = angularSeparation(ramin, decmin, X.descDitheredRA.values, X.descDitheredDec.values) X['d3'] = angularSeparation(ramax, decmax, X.descDitheredRA.values, X.descDitheredDec.values) X['d4'] = angularSeparation(ramax, decmin, X.descDitheredRA.values, X.descDitheredDec.values) visitab = X.query('d1 < 1.75 | d2 < 1.75 | d3 < 1.75 |d4 < 1.75') del (X) del (df) visitab.to_csv('./catalogs+tables/full_t_visits_from_minion.csv') # setting the observation telescope status boresight = [] orientation = [] wcs_list = [] for avisit in visitab.itertuples(): bsight = geom.SpherePoint(avisit.descDitheredRA * geom.degrees, avisit.descDitheredDec * geom.degrees) orient = (90 - avisit.descDitheredRotSkyPos) * geom.degrees wcs_list.append([ makeSkyWcs(t, orient, flipX=False, boresight=bsight, projection='TAN') for t in trans ]) orientation.append(orient) boresight.append(bsight) times = visitab['expMJD'] bands = visitab['filter'] depths = visitab['fiveSigmaDepth'] #colnames = ['mjd', 'filter'] data_cols = {'mjd': times, 'filter': bands, 'visitn': visitab['obsHistID']} n_observ = [] n_trueobserv = [] for asn in sntab.itertuples(): sn_mod = SNObject(ra=asn.snra_in, dec=asn.sndec_in) sn_mod.set(z=asn.z_in, t0=asn.t0_in, x1=asn.x1_in, c=asn.c_in, x0=asn.x0_in) sn_skyp = afwGeom.SpherePoint(asn.snra_in, asn.sndec_in, afwGeom.degrees) size = len(times) sn_flxs = np.zeros(size) sn_mags = np.zeros(size) sn_flxe = np.zeros(size) sn_mage = np.zeros(size) sn_obsrvd = [] sn_observable = [] ii = 0 for mjd, filt, wcsl, m5 in zip(times, bands, wcs_list, depths): flux = sn_mod.catsimBandFlux(mjd, LSST_BPass[filt]) mag = sn_mod.catsimBandMag(LSST_BPass[filt], mjd, flux) flux_er = sn_mod.catsimBandFluxError(mjd, LSST_BPass[filt], m5, flux) mag_er = sn_mod.catsimBandMagError(mjd, LSST_BPass[filt], m5, magnitude=mag) # checking sensors containing this object contain = [box.contains(afwGeom.Point2I(wcs.skyToPixel(sn_skyp))) \ for box, wcs in zip(boxes, wcsl)] observed = np.sum(contain) > 0 observable = observed & (flux > 0.0 ) #(mag + mag_er < 27.0) & (mag_er < 0.5) # if observed: # print('Overlaps ccd', names[np.where(contain)[0][0]]) sn_observable.append(observable) sn_obsrvd.append(observed) sn_flxs[ii] = flux # done sn_mags[ii] = mag sn_flxe[ii] = flux_er sn_mage[ii] = mag_er ii += 1 data_cols[asn.snid_in + '_observable'] = sn_observable data_cols[asn.snid_in + '_observed'] = sn_obsrvd data_cols[asn.snid_in + '_flux'] = sn_flxs data_cols[asn.snid_in + '_fluxErr'] = sn_flxe data_cols[asn.snid_in + '_mag'] = sn_mags data_cols[asn.snid_in + '_magErr'] = sn_mage n_observ.append(np.sum(sn_obsrvd)) n_trueobserv.append(np.sum(sn_observable)) sntab['Nobserv'] = n_observ sntab['N_trueobserv'] = n_trueobserv lightcurves = pd.DataFrame(data_cols) dest_lc = './lightcurves/lightcurves_cat_rect_{}_{}_{}_{}.csv' lightcurves.to_csv(dest_lc.format(ramax, ramin, decmax, decmin)) dest_snfile = './catalogs+tables/supernovae_cat_rect_{}_{}_{}_{}.csv' sntab.to_csv(dest_snfile.format(ramax, ramin, decmax, decmin)) print("""Stored the lightcurves in {}, the SN catalog in {}""".format( dest_lc.format(ramax, ramin, decmax, decmin), dest_snfile.format(ramax, ramin, decmax, decmin))) return
def get_snbrightness(self): """ getters for brightness related parameters of sn """ if self._sn_object_cache is None or len( self._sn_object_cache) > 1000000: self._sn_object_cache = {} c, x1, x0, t0, _z, ra, dec = self.column_by_name('c'),\ self.column_by_name('x1'),\ self.column_by_name('x0'),\ self.column_by_name('t0'),\ self.column_by_name('redshift'),\ self.column_by_name('raJ2000'),\ self.column_by_name('decJ2000') raDeg = np.degrees(ra) decDeg = np.degrees(dec) ebv = self.column_by_name('EBV') id_list = self.column_by_name('snid') bandname = self.obs_metadata.bandpass if isinstance(bandname, list): raise ValueError('bandname expected to be string, but is list\n') bandpass = self.lsstBandpassDict[bandname] # Initialize return array so that it contains the values you would get # if you passed through a t0=self.badvalues supernova vals = np.array([[0.0] * len(t0), [np.inf] * len(t0), [np.nan] * len(t0), [np.inf] * len(t0), [0.0] * len(t0)]).transpose() for i in np.where( np.logical_and( np.isfinite(t0), np.abs(self.mjdobs - t0) < self.maxTimeSNVisible))[0]: if id_list[i] in self._sn_object_cache: SNobject = self._sn_object_cache[id_list[i]] else: SNobject = SNObject() SNobject.set(z=_z[i], c=c[i], x1=x1[i], t0=t0[i], x0=x0[i]) SNobject.setCoords(ra=raDeg[i], dec=decDeg[i]) SNobject.set_MWebv(ebv[i]) self._sn_object_cache[id_list[i]] = SNobject if self.mjdobs <= SNobject.maxtime( ) and self.mjdobs >= SNobject.mintime(): # Calculate fluxes fluxinMaggies = SNobject.catsimBandFlux( time=self.mjdobs, bandpassobject=bandpass) mag = SNobject.catsimBandMag(time=self.mjdobs, fluxinMaggies=fluxinMaggies, bandpassobject=bandpass) vals[i, 0] = fluxinMaggies vals[i, 1] = mag flux_err = SNobject.catsimBandFluxError( time=self.mjdobs, bandpassobject=bandpass, m5=self.obs_metadata.m5[bandname], photParams=self.photometricparameters, fluxinMaggies=fluxinMaggies, magnitude=mag) mag_err = SNobject.catsimBandMagError( time=self.mjdobs, bandpassobject=bandpass, m5=self.obs_metadata.m5[bandname], photParams=self.photometricparameters, magnitude=mag) sed = SNobject.SNObjectSED(time=self.mjdobs, bandpass=self.lsstBandpassDict, applyExtinction=True) adu = sed.calcADU(bandpass, photParams=self.photometricparameters) vals[i, 2] = flux_err vals[i, 3] = mag_err vals[i, 4] = adu return (vals[:, 0], vals[:, 1], vals[:, 2], vals[:, 3], vals[:, 4])
def get_snbrightness(self): """ getters for brightness related parameters of sn """ if self._sn_object_cache is None or len(self._sn_object_cache) > 1000000: self._sn_object_cache = {} c, x1, x0, t0, _z, ra, dec = self.column_by_name('c'),\ self.column_by_name('x1'),\ self.column_by_name('x0'),\ self.column_by_name('t0'),\ self.column_by_name('redshift'),\ self.column_by_name('raJ2000'),\ self.column_by_name('decJ2000') raDeg = np.degrees(ra) decDeg = np.degrees(dec) ebv = self.column_by_name('EBV') id_list = self.column_by_name('snid') bandname = self.obs_metadata.bandpass if isinstance(bandname, list): raise ValueError('bandname expected to be string, but is list\n') bandpass = self.lsstBandpassDict[bandname] # Initialize return array so that it contains the values you would get # if you passed through a t0=self.badvalues supernova vals = np.array([[0.0]*len(t0), [np.inf]*len(t0), [np.nan]*len(t0), [np.inf]*len(t0), [0.0]*len(t0)]).transpose() for i in np.where(np.logical_and(np.isfinite(t0), np.abs(self.mjdobs - t0) < self.maxTimeSNVisible))[0]: if id_list[i] in self._sn_object_cache: SNobject = self._sn_object_cache[id_list[i]] else: SNobject = SNObject() SNobject.set(z=_z[i], c=c[i], x1=x1[i], t0=t0[i], x0=x0[i]) SNobject.setCoords(ra=raDeg[i], dec=decDeg[i]) SNobject.set_MWebv(ebv[i]) self._sn_object_cache[id_list[i]] = SNobject if self.mjdobs <= SNobject.maxtime() and self.mjdobs >= SNobject.mintime(): # Calculate fluxes fluxinMaggies = SNobject.catsimBandFlux(time=self.mjdobs, bandpassobject=bandpass) mag = SNobject.catsimBandMag(time=self.mjdobs, fluxinMaggies=fluxinMaggies, bandpassobject=bandpass) vals[i, 0] = fluxinMaggies vals[i, 1] = mag flux_err = SNobject.catsimBandFluxError(time=self.mjdobs, bandpassobject=bandpass, m5=self.obs_metadata.m5[ bandname], photParams=self.photometricparameters, fluxinMaggies=fluxinMaggies, magnitude=mag) mag_err = SNobject.catsimBandMagError(time=self.mjdobs, bandpassobject=bandpass, m5=self.obs_metadata.m5[ bandname], photParams=self.photometricparameters, magnitude=mag) sed = SNobject.SNObjectSED(time=self.mjdobs, bandpass=self.lsstBandpassDict, applyExtinction=True) adu = sed.calcADU(bandpass, photParams=self.photometricparameters) vals[i, 2] = flux_err vals[i, 3] = mag_err vals[i, 4] = adu return (vals[:, 0], vals[:, 1], vals[:, 2], vals[:, 3], vals[:, 4])