Coverage for tests/test_Baseline.py : 17%

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 numpy as np
2import unittest
3import lsst.sims.featureScheduler.basis_functions as bf
4from lsst.sims.featureScheduler.utils import standard_goals, calc_norm_factor
5from lsst.sims.featureScheduler.surveys import (generate_dd_surveys, Greedy_survey,
6 Blob_survey, Pairs_survey_scripted)
7from lsst.sims.featureScheduler.schedulers import Core_scheduler
8import lsst.utils.tests
9import healpy as hp
10from lsst.sims.featureScheduler import sim_runner
11from lsst.sims.featureScheduler.modelObservatory import Model_observatory
12import lsst.sims.featureScheduler.detailers as detailers
15def gen_greedy_surveys(nside):
16 """
17 Make a quick set of greedy surveys
18 """
19 target_map = standard_goals(nside=nside)
20 filters = ['g', 'r', 'i', 'z', 'y']
21 surveys = []
23 for filtername in filters:
24 bfs = []
25 bfs.append(bf.M5_diff_basis_function(filtername=filtername, nside=nside))
26 bfs.append(bf.Target_map_basis_function(filtername=filtername,
27 target_map=target_map[filtername],
28 out_of_bounds_val=np.nan, nside=nside))
29 bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside))
30 bfs.append(bf.Strict_filter_basis_function(filtername=filtername))
31 # Masks, give these 0 weight
32 bfs.append(bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.))
33 bfs.append(bf.Moon_avoidance_basis_function(nside=nside, moon_distance=30.))
34 bfs.append(bf.Clouded_out_basis_function())
36 bfs.append(bf.Filter_loaded_basis_function(filternames=filtername))
37 bfs.append(bf.Planet_mask_basis_function(nside=nside))
39 weights = np.array([3.0, 0.3, 3., 3., 0., 0., 0., 0., 0.])
40 surveys.append(Greedy_survey(bfs, weights, block_size=1, filtername=filtername,
41 dither=True, nside=nside))
42 return surveys
45def gen_blob_surveys(nside):
46 """
47 make a quick set of blob surveys
48 """
49 target_map = standard_goals(nside=nside)
50 norm_factor = calc_norm_factor(target_map)
52 filter1s = ['u', 'g'] # , 'r', 'i', 'z', 'y']
53 filter2s = [None, 'g'] # , 'r', 'i', None, None]
54 filter1s = ['g'] # , 'r', 'i', 'z', 'y']
55 filter2s = ['g'] # , 'r', 'i', None, None]
57 pair_surveys = []
58 for filtername, filtername2 in zip(filter1s, filter2s):
59 detailer_list = []
60 bfs = []
61 bfs.append(bf.M5_diff_basis_function(filtername=filtername, nside=nside))
62 if filtername2 is not None:
63 bfs.append(bf.M5_diff_basis_function(filtername=filtername2, nside=nside))
64 bfs.append(bf.Target_map_basis_function(filtername=filtername,
65 target_map=target_map[filtername],
66 out_of_bounds_val=np.nan, nside=nside,
67 norm_factor=norm_factor))
68 if filtername2 is not None:
69 bfs.append(bf.Target_map_basis_function(filtername=filtername2,
70 target_map=target_map[filtername2],
71 out_of_bounds_val=np.nan, nside=nside,
72 norm_factor=norm_factor))
73 bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside))
74 bfs.append(bf.Strict_filter_basis_function(filtername=filtername))
75 # Masks, give these 0 weight
76 bfs.append(bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.))
77 bfs.append(bf.Moon_avoidance_basis_function(nside=nside, moon_distance=30.))
78 bfs.append(bf.Clouded_out_basis_function())
79 # feasibility basis fucntions. Also give zero weight.
80 filternames = [fn for fn in [filtername, filtername2] if fn is not None]
81 bfs.append(bf.Filter_loaded_basis_function(filternames=filternames))
82 bfs.append(bf.Time_to_twilight_basis_function(time_needed=22.))
83 bfs.append(bf.Not_twilight_basis_function())
84 bfs.append(bf.Planet_mask_basis_function(nside=nside))
86 weights = np.array([3.0, 3.0, .3, .3, 3., 3., 0., 0., 0., 0., 0., 0., 0.])
87 if filtername2 is None:
88 # Need to scale weights up so filter balancing still works properly.
89 weights = np.array([6.0, 0.6, 3., 3., 0., 0., 0., 0., 0., 0., 0.])
90 if filtername2 is None:
91 survey_name = 'blob, %s' % filtername
92 else:
93 survey_name = 'blob, %s%s' % (filtername, filtername2)
94 if filtername2 is not None:
95 detailer_list.append(detailers.Take_as_pairs_detailer(filtername=filtername2))
96 pair_surveys.append(Blob_survey(bfs, weights, filtername1=filtername, filtername2=filtername2,
97 survey_note=survey_name, ignore_obs='DD', detailers=detailer_list))
98 return pair_surveys
101class TestFeatures(unittest.TestCase):
103 def testGreedy(self):
104 """
105 Set up a greedy survey and run for a few days. A crude way to touch lots of code.
106 """
107 nside = 32
108 survey_length = 2.0 # days
110 surveys = gen_greedy_surveys(nside)
111 # Depricating Pairs_survey_scripted
112 #surveys.append(Pairs_survey_scripted(None, ignore_obs='DD'))
114 # Set up the DD
115 dd_surveys = generate_dd_surveys(nside=nside)
116 surveys.extend(dd_surveys)
118 scheduler = Core_scheduler(surveys, nside=nside)
119 observatory = Model_observatory(nside=nside)
120 observatory, scheduler, observations = sim_runner(observatory, scheduler,
121 survey_length=survey_length,
122 filename=None)
124 # Check that greedy observed some
125 assert('' in observations['note'])
126 # Check that the a DD was observed
127 assert('DD:ELAISS1' in observations['note'])
128 # Make sure a few different filters were observed
129 assert(len(np.unique(observations['filter'])) > 3)
130 # Make sure lots of observations executed
131 assert(observations.size > 1000)
132 # Make sure nothing tried to look through the earth
133 assert(np.min(observations['alt']) > 0)
135 def testBlobs(self):
136 """
137 Set up a blob selection survey
138 """
139 nside = 32
140 survey_length = 2.0 # days
142 surveys = []
143 # Set up the DD
144 dd_surveys = generate_dd_surveys(nside=nside)
145 surveys.append(dd_surveys)
147 surveys.append(gen_blob_surveys(nside))
148 surveys.append(gen_greedy_surveys(nside))
150 scheduler = Core_scheduler(surveys, nside=nside)
151 observatory = Model_observatory(nside=nside)
152 observatory, scheduler, observations = sim_runner(observatory, scheduler,
153 survey_length=survey_length,
154 filename=None)
156 # Make sure some blobs executed
157 assert('blob, gg, b' in observations['note'])
158 assert('blob, gg, a' in observations['note'])
159 # assert('blob, u' in observations['note'])
161 # Make sure some greedy executed
162 assert('' in observations['note'])
163 # Check that the a DD was observed
164 assert('DD:ELAISS1' in observations['note'])
165 # Make sure a few different filters were observed
166 assert(len(np.unique(observations['filter'])) > 3)
167 # Make sure lots of observations executed
168 assert(observations.size > 1000)
169 # Make sure nothing tried to look through the earth
170 assert(np.min(observations['alt']) > 0)
173class TestMemory(lsst.utils.tests.MemoryTestCase):
174 pass
177def setup_module(module):
178 lsst.utils.tests.init()
181if __name__ == "__main__": 181 ↛ 182line 181 didn't jump to line 182, because the condition on line 181 was never true
182 lsst.utils.tests.init()
183 unittest.main()