Coverage for tests/testDitherColumnDetection.py : 26%

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.utils import getPackageDir
12from lsst.sims.catUtils.utils import ObservationMetaDataGenerator
13from lsst.sims.utils.CodeUtilities import sims_clean_up
15ROOT = os.path.abspath(os.path.dirname(__file__))
18def setup_module(module):
19 lsst.utils.tests.init()
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 """
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)
37 @classmethod
38 def setUpClass(cls):
39 cls.scratch_space = tempfile.mkdtemp(dir=ROOT, prefix='ObsMetaDataGenDitherTestClass-')
41 cls.fake_db_name = os.path.join(cls.scratch_space,
42 'dither_test_fake_opsim_sqlite.db')
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)''')
51 conn.commit()
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
63 cls.db_control = []
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)):
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'))
75 conn.commit()
76 conn.close()
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 """
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'])
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))
110class MemoryTestClass(lsst.utils.tests.MemoryTestCase):
111 pass
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()