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.utils import getPackageDir 

12from lsst.sims.catUtils.utils import ObservationMetaDataGenerator 

13from lsst.sims.utils.CodeUtilities import sims_clean_up 

14 

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

16 

17 

18def setup_module(module): 

19 lsst.utils.tests.init() 

20 

21 

22class ObsMetaDataGenDitherTestClass(unittest.TestCase): 

23 """ 

24 This TestCase will verify that the ObservationMetaDataGenerator 

25 puts summary columns which are not hardcoded into its interface 

26 into the OpsimMetaData of the ObservationMetaData it creates. 

27 """ 

28 

29 @classmethod 

30 def tearDownClass(cls): 

31 sims_clean_up() 

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

33 os.unlink(cls.fake_db_name) 

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

35 shutil.rmtree(cls.scratch_space) 

36 

37 @classmethod 

38 def setUpClass(cls): 

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

40 

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

42 'dither_test_fake_opsim_sqlite.db') 

43 

44 conn = sqlite3.connect(cls.fake_db_name) 

45 curs = conn.cursor() 

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

47 obsHistID int, rotSkyPos real, m5 real, 

48 raTestDithering real, decTestDithering real, expMJD real, 

49 filter text)''') 

50 

51 conn.commit() 

52 

53 n_ptngs = 10 

54 rng = np.random.RandomState(18341) 

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

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

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

58 m5_list = rng.random_sample(n_ptngs)*20.0 

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

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

61 expMJD_list = rng.random_sample(n_ptngs)*1000.0 

62 

63 cls.db_control = [] 

64 

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

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

67 ra_dither_list, dec_dither_list, expMJD_list)): 

68 

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

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

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

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

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

74 

75 conn.commit() 

76 conn.close() 

77 

78 def test_query(self): 

79 """ 

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

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

82 over into the OpsimMetaData of the resulting ObservationMetaData. 

83 """ 

84 

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

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

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

88 found_list = [] 

89 for obs in obs_list: 

90 obsid = obs.OpsimMetaData['obsHistID'] 

91 control_dict = self.db_control[obsid] 

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

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

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

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

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

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

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

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

100 self.assertGreaterEqual(obs.pointingRA, 0.0) 

101 self.assertLessEqual(obs.pointingRA, 180.0) 

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

103 

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

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

106 if ix not in found_list: 

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

108 

109 

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

111 pass 

112 

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

114 lsst.utils.tests.init() 

115 unittest.main()