def set_maps(self, map1, map2, mjd1, mjd2): """ set the two cloud maps to use to generate cloud motion predictions """ # Put things in correct order if not already if mjd2 < mjd1: self.mjd1 = mjd2 self.mjd2 = mjd1 self.map2 = map1 self.map1 = map2 else: self.mjd1 = mjd1 self.mjd2 = mjd2 self.map2 = map2 self.map1 = map1 self.nside = hp.npix2nside(map1.size) if hp.npix2nside(map2.size) != self.nside: raise ValueError('nside of map1 and map2 do not match.') # What is the time between images self.dt = self.mjd2 - self.mjd1 # Diff the maps, project to a screen. # hmm, should probably change this to be a diff on screen rather than on sphere? diff = diff_hp(self.map1, self.map2) cloudyArea, self.cloudmask = cloudyness(diff) self._find_dx_dy()
def set_maps(self, map1, map2, mjd1, mjd2): """ set the two cloud maps to use to generate cloud motion predictions """ # Put things in correct order if not already if mjd2 < mjd1: self.mjd1 = mjd2 self.mjd2 = mjd1 self.map2 = map1 self.map1 = map2 else: self.mjd1 = mjd1 self.mjd2 = mjd2 self.map2 = map2 self.map1 = map1 self.nside = hp.npix2nside(map1.size) if hp.npix2nside(map2.size) != self.nside: raise ValueError('nside of map1 and map2 do not match.') # What is the time between images self.dt = self.mjd2-self.mjd1 # Diff the maps, project to a screen. # hmm, should probably change this to be a diff on screen rather than on sphere? diff = diff_hp(self.map1, self.map2) cloudyArea, self.cloudmask = cloudyness(diff) self._find_dx_dy()
dec = np.pi / 2. - dec lmst, last = calcLmstLast(mjd, site.longitude_rad) lmst = lmst / 12. * 180. alt, az = stupidFast_RaDec2AltAz(ra, dec, site.latitude_rad, site.longitude_rad, mjd) frame = single_frame(mjd, filter_name='R') seen = np.where((frame != hp.UNSEEN) & (previous != hp.UNSEEN)) unseen = np.where((frame == hp.UNSEEN) | (previous == hp.UNSEEN)) frame = fixBias(frame) previous = fixBias(previous) diff = frame - previous diff[unseen] = hp.UNSEEN diff_frac = diff / previous diff_frac[unseen] = hp.UNSEEN diff_frac[np.where(previous == 0)] = hp.UNSEEN gdiff = np.where((diff != hp.UNSEEN) & (~np.isnan(diff)))[0] if np.size(gdiff) > 0: cf = cloudyness(diff_frac) / (gdiff.size * hp.nside2pixarea(nside) * (180. / np.pi)**2) print 'cloudy fraction, 5 deg scale = %.2f' % cf cf = cloudyness(diff_frac, fwhm=30.) / (gdiff.size * hp.nside2pixarea(nside) * (180. / np.pi)**2) print 'cloudy fraction, 30 deg scale = %.2f' % cf
dec, ra = hp.pix2ang(nside, np.arange(previous.size)) dec = np.pi/2. - dec lmst, last = calcLmstLast(mjd, site.longitude_rad) lmst = lmst/12.*180. alt, az = stupidFast_RaDec2AltAz(ra, dec, site.latitude_rad, site.longitude_rad, mjd) frame = single_frame(mjd, filter_name='R') seen = np.where((frame != hp.UNSEEN) & (previous != hp.UNSEEN)) unseen = np.where((frame == hp.UNSEEN) | (previous == hp.UNSEEN)) frame = fixBias(frame) previous = fixBias(previous) diff = frame - previous diff[unseen] = hp.UNSEEN diff_frac = diff/previous diff_frac[unseen] = hp.UNSEEN diff_frac[np.where(previous == 0)] = hp.UNSEEN gdiff = np.where((diff != hp.UNSEEN) & (~np.isnan(diff)))[0] if np.size(gdiff) > 0: cf = cloudyness(diff_frac) / (gdiff.size*hp.nside2pixarea(nside)*(180./np.pi)**2) print 'cloudy fraction, 5 deg scale = %.2f' % cf cf = cloudyness(diff_frac, fwhm=30.) / (gdiff.size*hp.nside2pixarea(nside)*(180./np.pi)**2) print 'cloudy fraction, 30 deg scale = %.2f' % cf
def gen_cloud_maps(): sm = sb.SkyModel(mags=True) hpindx = np.arange(hp.nside2npix(32)) ra, dec = utils._hpid2RaDec(32, hpindx) do_query = False dbAddress = 'sqlite:///meddata.sqlite' engine = sqla.create_engine(dbAddress) connection = engine.raw_connection() cursor = connection.cursor() # Check all the mjd values in the db if do_query: query = 'select distinct(mjd) from medskybrightness;' cursor.execute(query) data = cursor.fetchall() mjd_clean = [ack[0] for ack in data] mjd_clean = np.array(mjd_clean) # Let's go 57200 as a start mjd_start = 57200 mjd_length = 40. query = 'select distinct(mjd) from medskybrightness where mjd > %f and mjd < %f;' % ( mjd_start, mjd_start + mjd_length) cursor.execute(query) data = cursor.fetchall() mjd_clean = np.array([ack[0] for ack in data]) cloud_maps = [] mjd_final = [] moon_limit = np.radians(30.) am_limit = 2.5 maxI = mjd_clean[1:].size for i, mjd in enumerate(mjd_clean[1:]): if (mjd_clean[i] - mjd_clean[i - 1]) < (2. / 60. / 24.): sf = single_frame(mjd_clean[i - 1]) sf2 = single_frame(mjd_clean[i]) if (sf.max() != hp.UNSEEN) & (sf2.max() != hp.UNSEEN): diff = (sf - sf2) / sf mask = np.where((sf == hp.UNSEEN) | (sf2 == hp.UNSEEN)) diff[mask] = hp.UNSEEN if diff.max() != hp.UNSEEN: cf, cloud_mask = cloudyness(diff, skyRMS_max=0.05) sm.setRaDecMjd(ra, dec, mjd) skymap = sm.returnMags()['r'] mask = np.where((skymap == hp.UNSEEN) | np.isnan(skymap))[0] cloud_mask[mask] = 2 moon_dist = utils.haversine(ra, dec, sm.moonRA, sm.moonDec) mask = np.where((moon_dist < moon_limit) | (sm.airmass < 1.) | (sm.airmass > am_limit)) cloud_mask[mask] = 2 cloud_maps.append(cloud_mask) # put in some masking near the moon mjd_final.append(mjd) progress = i / float(maxI) * 100 text = "\r progress = %.1f%%" % progress sys.stdout.write(text) sys.stdout.flush() cloud_maps = np.array(cloud_maps) map_key = { 'good': 0, 'masked': 2, 'bright_in_current': -1, 'bright_in_last': 1 } np.savez('month_o_clouds.npz', cloud_maps=cloud_maps, mjds=mjd_final, map_key=map_key)
diff[out] = hp.UNSEEN frame[out] = hp.UNSEEN diff_frac[out] = hp.UNSEEN diff_frac[np.where(previous == 0)] = hp.UNSEEN # maybe rotate based on LMST and latitude? gdiff = np.where((diff != hp.UNSEEN) & (~np.isnan(diff)))[0] if np.size(gdiff) > 0: rms = robustRMS(diff_frac[gdiff]) median_value = np.median(diff_frac[gdiff]) nout = np.size( np.where(( np.abs(diff[gdiff] - np.median(diff[gdiff])) > outlier_mag) & (alt[gdiff] > alt_limit))[0]) nabove = float(np.size(np.where(alt[gdiff] > alt_limit)[0])) * 100 cf, cloud_mask = cloudyness(diff_frac, skyRMS_max=0.05) cf = cf / (gdiff.size * hp.nside2pixarea(nside) * (180. / np.pi)**2) if nabove != 0: nout = nout / nabove else: nout = -666 else: rms = hp.UNSEEN median_value = hp.UNSEEN nout = -666 cf = -666 cloud_mask = diff_frac * 0 rms_diff_frame.append(rms) med_diff_frame.append(median_value)
def gen_cloud_maps(): sm = sb.SkyModel(mags=True) hpindx = np.arange(hp.nside2npix(32)) ra, dec = utils._hpid2RaDec(32, hpindx) do_query = False dbAddress = 'sqlite:///meddata.sqlite' engine = sqla.create_engine(dbAddress) connection = engine.raw_connection() cursor = connection.cursor() # Check all the mjd values in the db if do_query: query = 'select distinct(mjd) from medskybrightness;' cursor.execute(query) data = cursor.fetchall() mjd_clean = [ack[0] for ack in data] mjd_clean = np.array(mjd_clean) # Let's go 57200 as a start mjd_start = 57200 mjd_length = 40. query = 'select distinct(mjd) from medskybrightness where mjd > %f and mjd < %f;' % (mjd_start, mjd_start+mjd_length) cursor.execute(query) data = cursor.fetchall() mjd_clean = np.array([ack[0] for ack in data]) cloud_maps = [] mjd_final = [] moon_limit = np.radians(30.) am_limit = 2.5 maxI = mjd_clean[1:].size for i, mjd in enumerate(mjd_clean[1:]): if (mjd_clean[i]-mjd_clean[i-1]) < (2./60./24.): sf = single_frame(mjd_clean[i-1]) sf2 = single_frame(mjd_clean[i]) if (sf.max() != hp.UNSEEN) & (sf2.max() != hp.UNSEEN): diff = (sf-sf2)/sf mask = np.where((sf == hp.UNSEEN) | (sf2 == hp.UNSEEN)) diff[mask] = hp.UNSEEN if diff.max() != hp.UNSEEN: cf, cloud_mask = cloudyness(diff, skyRMS_max=0.05) sm.setRaDecMjd(ra, dec, mjd) skymap = sm.returnMags()['r'] mask = np.where((skymap == hp.UNSEEN) | np.isnan(skymap))[0] cloud_mask[mask] = 2 moon_dist = utils.haversine(ra, dec, sm.moonRA, sm.moonDec) mask = np.where((moon_dist < moon_limit) | (sm.airmass < 1.) | (sm.airmass > am_limit)) cloud_mask[mask] = 2 cloud_maps.append(cloud_mask) # put in some masking near the moon mjd_final.append(mjd) progress = i/float(maxI)*100 text = "\r progress = %.1f%%" % progress sys.stdout.write(text) sys.stdout.flush() cloud_maps = np.array(cloud_maps) map_key = {'good': 0, 'masked': 2, 'bright_in_current': -1, 'bright_in_last': 1} np.savez('month_o_clouds.npz', cloud_maps=cloud_maps, mjds=mjd_final, map_key=map_key)
(previous == hp.UNSEEN) | (alt < np.radians(10.))) previous = frame.copy() diff[out] = hp.UNSEEN frame[out] = hp.UNSEEN diff_frac[out] = hp.UNSEEN diff_frac[np.where(previous == 0)] = hp.UNSEEN # maybe rotate based on LMST and latitude? gdiff = np.where((diff != hp.UNSEEN) & (~np.isnan(diff)))[0] if np.size(gdiff) > 0: rms = robustRMS(diff_frac[gdiff]) median_value = np.median(diff_frac[gdiff]) nout = np.size(np.where((np.abs(diff[gdiff] - np.median(diff[gdiff])) > outlier_mag) & (alt[gdiff] > alt_limit))[0]) nabove = float(np.size(np.where(alt[gdiff] > alt_limit)[0]))*100 cf, cloud_mask = cloudyness(diff_frac, skyRMS_max=0.05) cf = cf / (gdiff.size*hp.nside2pixarea(nside)*(180./np.pi)**2) if nabove != 0: nout = nout/nabove else: nout = -666 else: rms = hp.UNSEEN median_value = hp.UNSEEN nout = -666 cf = -666 cloud_mask = diff_frac*0 rms_diff_frame.append(rms) med_diff_frame.append(median_value) above_limit = np.where(alt > alt_limit)[0]