Coverage for tests/testDitherColumnDetection.py : 27%

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
10import lsst.utils.tests
11from lsst.sims.catUtils.utils import ObservationMetaDataGenerator
12from lsst.sims.utils.CodeUtilities import sims_clean_up
14ROOT = os.path.abspath(os.path.dirname(__file__))
17def setup_module(module):
18 lsst.utils.tests.init()
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 """
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)
36 @classmethod
37 def setUpClass(cls):
38 cls.scratch_space = tempfile.mkdtemp(dir=ROOT, prefix='ObsMetaDataGenDitherTestClass-')
40 cls.fake_db_name = os.path.join(cls.scratch_space,
41 'dither_test_fake_opsim_sqlite.db')
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)''')
50 conn.commit()
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
62 cls.db_control = []
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)):
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'))
74 conn.commit()
75 conn.close()
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 """
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'])
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))
109class MemoryTestClass(lsst.utils.tests.MemoryTestCase):
110 pass
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()