예제 #1
0
    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()
예제 #3
0
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
예제 #4
0
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)
예제 #6
0
        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)
예제 #8
0
                       (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]