Beispiel #1
0
class TestWeather(Tester):
    def setUp(self):
        self.w = Weather(seed=123, replay='Y2015')

    def test_dome_open_prob(self):
        """31+28 nights in Jan and Feb, dome should be (partially) open
        during 49 of them when replaying Y2015"""
        n_nights = self.w.num_nights
        self.assertEqual(n_nights, 31 + 28)
        open_nights = np.any(self.w._table['open'].reshape(n_nights, -1),
                             axis=1).sum()
        self.assertEqual(open_nights, 49)

    def test_same_seed(self):
        """Weather should be identical with same seed"""
        w = Weather(seed=123, replay='Y2015')
        for name in w._table.colnames:
            self.assertTrue(np.all(self.w._table[name] == w._table[name]))

    def test_different_seed(self):
        """Weather should be different with different seed"""
        w = Weather(seed=1234, replay='Y2015')
        for name in w._table.colnames:
            self.assertTrue(name == 'mjd'
                            or np.any(self.w._table[name] != w._table[name]))

    def test_get(self):
        """The get() method should return nearest time in mjd column"""
        table = self.w._table
        t_step = table['mjd'][1] - table['mjd'][0]
        dt = np.random.uniform(-0.49 * t_step, 0.49 * t_step, size=len(table))
        when = astropy.time.Time(table['mjd'] + dt, format='mjd')
        for i in range(1, len(table) - 1):
            row = self.w.get(when[i])
            self.assertEqual(row['mjd'], table[i]['mjd'])

    def test_get_multiple(self):
        """The get() method can be called with one or multiple times."""
        table = self.w._table
        mjd = table['mjd'][10]
        row = self.w.get(astropy.time.Time(mjd, format='mjd'))
        self.assertTrue(0. <= row['transparency'] <= 1.)
        rows = self.w.get(astropy.time.Time([mjd] * 5, format='mjd'))
        self.assertTrue(len(rows) == 5)
        for i in range(5):
            self.assertTrue(0. <= rows['transparency'][i] <= 1.)

    def test_save_restore(self):
        """Save and restore a weather file"""
        self.w.save('weather.fits')
        w = Weather(restore='weather.fits')
        for name in w._table.colnames:
            self.assertTrue(np.all(self.w._table[name] == w._table[name]))
        self.assertEqual(self.w._table.meta['START'], w._table.meta['START'])
        self.assertEqual(self.w._table.meta['STOP'], w._table.meta['STOP'])
        self.assertEqual(self.w._table.meta['NIGHTS'], w._table.meta['NIGHTS'])
        self.assertEqual(self.w._table.meta['STEPS'], w._table.meta['STEPS'])
Beispiel #2
0
class TestWeather(Tester):

    def setUp(self):
        self.w = Weather(seed=123, replay='Y2015')

    def test_dome_open_prob(self):
        """Dome should be (partially) open 26 nights in Dec 2019 when replaying Y2015"""
        n_nights = self.w.num_nights
        self.assertEqual(n_nights, 31)
        open_nights = np.any(self.w._table['open'].reshape(n_nights, -1), axis=1).sum()
        self.assertEqual(open_nights, 26)

    def test_same_seed(self):
        """Weather should be identical with same seed"""
        w = Weather(seed=123, replay='Y2015')
        for name in w._table.colnames:
            self.assertTrue(np.all(self.w._table[name] == w._table[name]))

    def test_different_seed(self):
        """Weather should be different with different seed"""
        w = Weather(seed=1234, replay='Y2015')
        for name in w._table.colnames:
            self.assertTrue(name == 'mjd' or
                            np.any(self.w._table[name] != w._table[name]))

    def test_get(self):
        """The get() method should return nearest time in mjd column"""
        table = self.w._table
        t_step = table['mjd'][1] - table['mjd'][0]
        dt = np.random.uniform(-0.49 * t_step, 0.49 * t_step, size=len(table))
        when = astropy.time.Time(table['mjd'] + dt, format='mjd')
        for i in range(1, len(table) - 1):
            row = self.w.get(when[i])
            self.assertEqual(row['mjd'], table[i]['mjd'])

    def test_get_multiple(self):
        """The get() method can be called with one or multiple times."""
        table = self.w._table
        mjd = table['mjd'][10]
        row = self.w.get(astropy.time.Time(mjd, format='mjd'))
        self.assertTrue(0. <= row['transparency'] <= 1.)
        rows = self.w.get(astropy.time.Time([mjd] * 5, format='mjd'))
        self.assertTrue(len(rows) == 5)
        for i in range(5):
            self.assertTrue(0. <= rows['transparency'][i] <= 1.)

    def test_save_restore(self):
        """Save and restore a weather file"""
        self.w.save('weather.fits')
        w = Weather(restore='weather.fits')
        for name in w._table.colnames:
            self.assertTrue(np.all(self.w._table[name] == w._table[name]))
        self.assertEqual(self.w._table.meta['START'], w._table.meta['START'])
        self.assertEqual(self.w._table.meta['STOP'], w._table.meta['STOP'])
        self.assertEqual(self.w._table.meta['NIGHTS'], w._table.meta['NIGHTS'])
        self.assertEqual(self.w._table.meta['STEPS'], w._table.meta['STEPS'])
 def test_save_restore(self):
     """Save and restore a weather file"""
     self.w.save('weather.fits')
     w = Weather(restore='weather.fits')
     for name in w._table.colnames:
         self.assertTrue(np.all(self.w._table[name] == w._table[name]))
     self.assertEqual(self.w._table.meta['START'], w._table.meta['START'])
     self.assertEqual(self.w._table.meta['STOP'], w._table.meta['STOP'])
     self.assertEqual(self.w._table.meta['NIGHTS'], w._table.meta['NIGHTS'])
     self.assertEqual(self.w._table.meta['STEPS'], w._table.meta['STEPS'])
Beispiel #4
0
#- Weight programs by number of times they need to be observed in dark time
program_tiles = [LQ8_tiles, LQ4_tiles, QSO_tiles, ELG_tiles, BGS_tiles, MWS_tiles]
program_weights = np.array([8.0, 4, 4, 1, 1, 1])
program_weights /= np.sum(program_weights)

#- Load pre-calculated ephemeris
os.environ['DESISURVEY_OUTPUT'] = '/project/projectdirs/desi/datachallenge/surveysim2018/shared/'
# os.environ['DESISURVEY_OUTPUT'] = '/data/desi/surveysim/shared/'
start_date = datetime.date(2019, 1, 1)
stop_date = datetime.date(2025, 12, 31)
ephem = Ephemerides(start_date, stop_date, \
    restore=os.getenv('DESISURVEY_OUTPUT')+'/ephem_2019-01-01_2025-12-31.fits')

#- Load weather model
weather = Weather(seed=args.randseed)

#- Where is KPNO?
kpno_lon, kpno_lat, kpno_height = -111.6*u.deg, 31.964*u.deg, 2120*u.m
kpno = astropy.coordinates.EarthLocation.from_geodetic(kpno_lon, kpno_lat, kpno_height)

def separation(ra1, dec1, ra2, dec2):
    '''Returns angular separation in degrees, for ra1,dec1 and ra2,dec2 in degrees'''
    #- Haversine formula
    phi1, theta1 = np.radians(dec1), np.radians(ra1)
    phi2, theta2 = np.radians(dec2), np.radians(ra2)
    r = 2*np.arcsin(np.sqrt(np.sin(0.5*(phi2-phi1))**2 + np.cos(phi1)*np.cos(phi2)*np.sin(0.5*(theta2-theta1))**2))
    return np.degrees(r)

def get_airmass(tiles, obstime):
    """
 def test_different_seed(self):
     """Weather should be different with different seed"""
     w = Weather(seed=1234, replay='Y2015')
     for name in w._table.colnames:
         self.assertTrue(name == 'mjd' or
                         np.any(self.w._table[name] != w._table[name]))
 def test_same_seed(self):
     """Weather should be identical with same seed"""
     w = Weather(seed=123, replay='Y2015')
     for name in w._table.colnames:
         self.assertTrue(np.all(self.w._table[name] == w._table[name]))
 def setUp(self):
     self.w = Weather(seed=123, replay='Y2015')