Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from builtins import zip 

2from builtins import range 

3import unittest 

4import os 

5import sqlite3 

6import numpy as np 

7import tempfile 

8import shutil 

9 

10import lsst.utils.tests 

11from lsst.sims.catUtils.utils import ObservationMetaDataGenerator 

12from lsst.sims.utils.CodeUtilities import sims_clean_up 

13 

14ROOT = os.path.abspath(os.path.dirname(__file__)) 

15 

16 

17def setup_module(module): 

18 lsst.utils.tests.init() 

19 

20 

21class ObsMetaDataGenDitherTestClass(unittest.TestCase): 

22 """ 

23 This TestCase will verify that the ObservationMetaDataGenerator 

24 puts summary columns which are not hardcoded into its interface 

25 into the OpsimMetaData of the ObservationMetaData it creates. 

26 """ 

27 

28 @classmethod 

29 def tearDownClass(cls): 

30 sims_clean_up() 

31 if os.path.exists(cls.fake_db_name): 

32 os.unlink(cls.fake_db_name) 

33 if os.path.exists(cls.scratch_space): 

34 shutil.rmtree(cls.scratch_space, ignore_errors=True) 

35 

36 @classmethod 

37 def setUpClass(cls): 

38 cls.scratch_space = tempfile.mkdtemp(dir=ROOT, prefix='ObsMetaDataGenDitherTestClass-') 

39 

40 cls.fake_db_name = os.path.join(cls.scratch_space, 

41 'dither_test_fake_opsim_sqlite.db') 

42 

43 conn = sqlite3.connect(cls.fake_db_name) 

44 curs = conn.cursor() 

45 curs.execute('''CREATE TABLE Summary (fieldRA real, fieldDec real, 

46 obsHistID int, rotSkyPos real, m5 real, 

47 raTestDithering real, decTestDithering real, expMJD real, 

48 filter text)''') 

49 

50 conn.commit() 

51 

52 n_ptngs = 10 

53 rng = np.random.RandomState(18341) 

54 ra_list = rng.random_sample(n_ptngs)*2.0*np.pi 

55 dec_list = rng.random_sample(n_ptngs)*np.pi-0.5*np.pi 

56 rotSkyPos_list = rng.random_sample(n_ptngs)*np.pi 

57 m5_list = rng.random_sample(n_ptngs)*20.0 

58 ra_dither_list = ra_list + rng.random_sample(n_ptngs)*0.1+0.1 

59 dec_dither_list = dec_list + rng.random_sample(n_ptngs)*0.1+0.1 

60 expMJD_list = rng.random_sample(n_ptngs)*1000.0 

61 

62 cls.db_control = [] 

63 

64 for obsid, (ra, dec, rot, m5, raDith, decDith, mjd) in \ 

65 enumerate(zip(ra_list, dec_list, rotSkyPos_list, m5_list, 

66 ra_dither_list, dec_dither_list, expMJD_list)): 

67 

68 cls.db_control.append({'ra': ra, 'dec': dec, 'rot': rot, 'm5': m5, 

69 'raDith': raDith, 'decDith': decDith, 'mjd': mjd}) 

70 curs.execute('''INSERT INTO Summary VALUES 

71 (%.12f, %.12f, %d, %.12f, %.12f, %.12f, %.12f, %.12f, '%s')''' % 

72 (ra, dec, obsid, rot, m5, raDith, decDith, mjd, 'g')) 

73 

74 conn.commit() 

75 conn.close() 

76 

77 def test_query(self): 

78 """ 

79 Use ObservationMetaData to query an OpSim-like database that contains 

80 dithering columns. Make sure that the dithering columns get carried 

81 over into the OpsimMetaData of the resulting ObservationMetaData. 

82 """ 

83 

84 gen = ObservationMetaDataGenerator(database=self.fake_db_name, driver='sqlite') 

85 obs_list = gen.getObservationMetaData(fieldRA=(0.0, 180.0)) 

86 self.assertGreater(len(obs_list), 0) 

87 found_list = [] 

88 for obs in obs_list: 

89 obsid = obs.OpsimMetaData['obsHistID'] 

90 control_dict = self.db_control[obsid] 

91 self.assertAlmostEqual(obs._pointingRA, control_dict['ra'], 11) 

92 self.assertAlmostEqual(obs._pointingDec, control_dict['dec'], 11) 

93 self.assertAlmostEqual(obs._rotSkyPos, control_dict['rot'], 11) 

94 self.assertAlmostEqual(obs.OpsimMetaData['m5'], control_dict['m5'], 11) 

95 self.assertAlmostEqual(obs.OpsimMetaData['raTestDithering'], control_dict['raDith'], 11) 

96 self.assertAlmostEqual(obs.OpsimMetaData['decTestDithering'], control_dict['decDith'], 11) 

97 self.assertAlmostEqual(obs.mjd.TAI, control_dict['mjd'], 11) 

98 self.assertEqual(obs.bandpass, 'g') 

99 self.assertGreaterEqual(obs.pointingRA, 0.0) 

100 self.assertLessEqual(obs.pointingRA, 180.0) 

101 found_list.append(obs.OpsimMetaData['obsHistID']) 

102 

103 # check that the entries not returned do, in fact, violate the query 

104 for ix in range(len(self.db_control)): 

105 if ix not in found_list: 

106 self.assertGreater(self.db_control[ix]['ra'], np.radians(180.0)) 

107 

108 

109class MemoryTestClass(lsst.utils.tests.MemoryTestCase): 

110 pass 

111 

112if __name__ == "__main__": 112 ↛ 113line 112 didn't jump to line 113, because the condition on line 112 was never true

113 lsst.utils.tests.init() 

114 unittest.main()