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

1import os 

2import unittest 

3import sqlite3 

4from astropy.time import Time, TimeDelta 

5from lsst.utils import getPackageDir 

6import lsst.utils.tests 

7from lsst.utils.tests import getTempFilePath 

8from lsst.sims.seeingModel import SeeingData 

9 

10# Unit test here uses oldest/original opsim seeing database, "Seeing.db". 

11# Could be updated to use a new DB, but that would require changing some of these hard-coded numbers. 

12 

13class TestSeeingData(unittest.TestCase): 

14 

15 def setUp(self): 

16 self.time = Time('2020-01-01', format='isot', scale='tai') 

17 self.seeing_db = os.path.join(getPackageDir('sims_seeingModel'), 'data', 'seeing.db') 

18 

19 def test_basic_information_after_creation(self): 

20 seeingData = SeeingData(self.time, seeing_db=self.seeing_db) 

21 self.assertEqual(seeingData.start_time, self.time) 

22 self.assertEqual(seeingData.seeing_db, self.seeing_db) 

23 # And check sets seeing_db appropriately if not provided. 

24 seeingData = SeeingData(self.time, seeing_db=None) 

25 self.assertIsNotNone(seeingData.seeing_db) 

26 

27 def test_information_after_read(self): 

28 seeingData = SeeingData(self.time, seeing_db=self.seeing_db) 

29 seeingData.read_data() 

30 self.assertTrue(len(seeingData.seeing_values) > 0) 

31 self.assertTrue(len(seeingData.seeing_dates) > 0) 

32 

33 def test_fwhm500_at_time(self): 

34 seeingData = SeeingData(self.time, self.seeing_db, offset_year=0) 

35 seeingData.read_data() 

36 dt = TimeDelta(75400, format='sec') 

37 self.assertEqual(seeingData(self.time + dt), 0.859431982040405) 

38 dt = TimeDelta(76700, format='sec') 

39 self.assertEqual(seeingData(self.time + dt), 0.646009027957916) 

40 dt = TimeDelta(63190400, format='sec') 

41 self.assertEqual(seeingData(self.time + dt), 0.64860999584198) 

42 dt = TimeDelta(189424900, format='sec') 

43 self.assertEqual(seeingData(self.time + dt), 0.699440002441406) 

44 # Test time selection from seeing data. 

45 dt = TimeDelta(800, format='sec') 

46 fwhm500 = seeingData(self.time + dt) 

47 # Hack seeing data to remove first date, thus db does not start at zero. 

48 seeingData.seeing_dates = seeingData.seeing_dates[:-1] 

49 seeingData.seeing_values = seeingData.seeing_values[:-1] 

50 seeingData.time_range = seeingData.seeing_dates[-1] - seeingData.seeing_dates[0] 

51 seeingData.min_time = seeingData.seeing_dates[0] 

52 self.assertEqual(fwhm500, seeingData(self.time + dt)) 

53 

54 def test_using_different_start_month(self): 

55 t2 = Time('2020-05-24', format='isot', scale='tai') 

56 seeingData = SeeingData(t2, self.seeing_db, offset_year=0) 

57 self.assertEqual(seeingData.start_time, self.time) 

58 seeingData.read_data() 

59 dt = TimeDelta(75400, format='sec') 

60 self.assertEqual(seeingData(t2 + dt), 0.437314003705978) 

61 dt = TimeDelta(63190400, format='sec') 

62 self.assertEqual(seeingData(t2 + dt), 0.453994989395142) 

63 

64 def test_alternate_db(self): 

65 # Create temporary data file, use it as the seeing_db. 

66 with getTempFilePath('.alt_seeing.db') as tmpdb: 

67 seeing_table = [] 

68 seeing_table.append("seeingId INTEGER PRIMARY KEY") 

69 seeing_table.append("s_date INTEGER") 

70 seeing_table.append("seeing DOUBLE") 

71 with sqlite3.connect(tmpdb) as conn: 

72 cur = conn.cursor() 

73 cur.execute("DROP TABLE IF EXISTS Seeing") 

74 cur.execute("CREATE TABLE Seeing({})".format(",".join(seeing_table))) 

75 cur.executemany("INSERT INTO Seeing VALUES(?, ?, ?)", [(1, 9997, 0.5), (2, 10342, 0.3)]) 

76 cur.close() 

77 seeingData = SeeingData(self.time, seeing_db=tmpdb) 

78 seeingData.read_data() 

79 self.assertEqual(seeingData.seeing_values.size, 2) 

80 self.assertEqual(seeingData.seeing_values[1], 0.3) 

81 

82 

83class TestMemory(lsst.utils.tests.MemoryTestCase): 

84 pass 

85 

86def setup_module(module): 

87 lsst.utils.tests.init() 

88 

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

90 lsst.utils.tests.init() 

91 unittest.main()