Skip to content

Commit 5944217

Browse files
committed
baselines
1 parent e6b6105 commit 5944217

File tree

3 files changed

+271
-13
lines changed

3 files changed

+271
-13
lines changed

2019_runs/baseline/baseline_2019.py

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import numpy as np
2+
import matplotlib.pylab as plt
3+
import healpy as hp
4+
from lsst.sims.featureScheduler.modelObservatory import Model_observatory
5+
from lsst.sims.featureScheduler.schedulers import Core_scheduler
6+
from lsst.sims.featureScheduler.utils import standard_goals, calc_norm_factor
7+
import lsst.sims.featureScheduler.basis_functions as bf
8+
from lsst.sims.featureScheduler.surveys import (generate_dd_surveys, Greedy_survey,
9+
Blob_survey, Pairs_survey_scripted)
10+
from lsst.sims.featureScheduler import sim_runner
11+
12+
13+
def gen_greedy_surveys(nside):
14+
"""
15+
Make a quick set of greedy surveys
16+
"""
17+
target_map = standard_goals(nside=nside)
18+
norm_factor = calc_norm_factor(target_map)
19+
# Let's remove the bluer filters since this should only be near twilight
20+
filters = ['r', 'i', 'z', 'y']
21+
surveys = []
22+
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+
norm_factor=norm_factor))
30+
bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside))
31+
bfs.append(bf.Strict_filter_basis_function(filtername=filtername))
32+
# Masks, give these 0 weight
33+
bfs.append(bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.))
34+
bfs.append(bf.Moon_avoidance_basis_function(nside=nside, moon_distance=40.))
35+
bfs.append(bf.Clouded_out_basis_function())
36+
37+
bfs.append(bf.Filter_loaded_basis_function(filternames=filtername))
38+
39+
weights = np.array([3.0, 0.3, 3., 3., 0., 0., 0., 0.])
40+
surveys.append(Greedy_survey(bfs, weights, block_size=1, filtername=filtername,
41+
dither=True, nside=nside, ignore_obs='DD'))
42+
43+
return surveys
44+
45+
46+
def generate_blobs(nside):
47+
target_map = standard_goals(nside=nside)
48+
norm_factor = calc_norm_factor(target_map)
49+
50+
# List to hold all the surveys (for easy plotting later)
51+
surveys = []
52+
53+
# Set up observations to be taken in blocks
54+
filter1s = ['u', 'g', 'r', 'i', 'z', 'y']
55+
filter2s = [None, 'g', 'r', 'i', None, None]
56+
# Ideal time between taking pairs
57+
pair_time = 22.
58+
times_needed = [pair_time, pair_time*2]
59+
for filtername, filtername2 in zip(filter1s, filter2s):
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+
filternames = [fn for fn in [filtername, filtername2] if fn is not None]
80+
bfs.append(bf.Filter_loaded_basis_function(filternames=filternames))
81+
if filtername2 is None:
82+
time_needed = times_needed[0]
83+
else:
84+
time_needed = times_needed[1]
85+
bfs.append(bf.Time_to_twilight_basis_function(time_needed=time_needed))
86+
bfs.append(bf.Not_twilight_basis_function())
87+
weights = np.array([3.0, 3.0, .3, .3, 3., 3., 0., 0., 0., 0., 0., 0.])
88+
if filtername2 is None:
89+
# Need to scale weights up so filter balancing still works properly.
90+
weights = np.array([6.0, 0.6, 3., 3., 0., 0., 0., 0., 0., 0.])
91+
if filtername2 is None:
92+
survey_name = 'blob, %s' % filtername
93+
else:
94+
survey_name = 'blob, %s%s' % (filtername, filtername2)
95+
surveys.append(Blob_survey(bfs, weights, filtername1=filtername, filtername2=filtername2,
96+
ideal_pair_time=pair_time, nside=nside,
97+
survey_note=survey_name, ignore_obs='DD', dither=True))
98+
99+
return surveys
100+
101+
102+
if __name__ == "__main__":
103+
nside = 32
104+
survey_length = 365.25*10 # Days
105+
years = int(survey_length/365.25)
106+
107+
greedy = gen_greedy_surveys(nside)
108+
ddfs = generate_dd_surveys(nside=nside)
109+
blobs = generate_blobs(nside)
110+
111+
surveys = [ddfs, blobs, greedy]
112+
113+
n_visit_limit = None
114+
scheduler = Core_scheduler(surveys, nside=nside)
115+
observatory = Model_observatory(nside=nside)
116+
observatory, scheduler, observations = sim_runner(observatory, scheduler,
117+
survey_length=survey_length,
118+
filename='baseline2019_%i.db' % years,
119+
n_visit_limit=n_visit_limit)
+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import numpy as np
2+
import matplotlib.pylab as plt
3+
import healpy as hp
4+
from lsst.sims.featureScheduler.modelObservatory import Model_observatory
5+
from lsst.sims.featureScheduler.schedulers import Core_scheduler
6+
from lsst.sims.featureScheduler.utils import standard_goals, calc_norm_factor
7+
import lsst.sims.featureScheduler.basis_functions as bf
8+
from lsst.sims.featureScheduler.surveys import (generate_dd_surveys, Greedy_survey,
9+
Blob_survey, Pairs_survey_scripted)
10+
from lsst.sims.featureScheduler import sim_runner
11+
12+
13+
def gen_greedy_surveys(nside):
14+
"""
15+
Make a quick set of greedy surveys
16+
"""
17+
target_map = standard_goals(nside=nside)
18+
norm_factor = calc_norm_factor(target_map)
19+
# Let's remove the bluer filters since this should only be near twilight
20+
filters = ['r', 'i', 'z', 'y']
21+
surveys = []
22+
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+
norm_factor=norm_factor))
30+
bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside))
31+
bfs.append(bf.Strict_filter_basis_function(filtername=filtername))
32+
# Masks, give these 0 weight
33+
bfs.append(bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.))
34+
bfs.append(bf.Moon_avoidance_basis_function(nside=nside, moon_distance=40.))
35+
bfs.append(bf.Clouded_out_basis_function())
36+
37+
bfs.append(bf.Filter_loaded_basis_function(filternames=filtername))
38+
39+
weights = np.array([3.0, 0.3, 3., 3., 0., 0., 0., 0.])
40+
surveys.append(Greedy_survey(bfs, weights, block_size=1, filtername=filtername,
41+
dither=True, nside=nside, ignore_obs='DD'))
42+
43+
return surveys
44+
45+
46+
def generate_blobs(nside):
47+
target_map = standard_goals(nside=nside)
48+
norm_factor = calc_norm_factor(target_map)
49+
50+
# List to hold all the surveys (for easy plotting later)
51+
surveys = []
52+
53+
# Set up observations to be taken in blocks
54+
filter1s = ['u', 'g', 'r', 'i', 'z', 'y']
55+
filter2s = [None, 'r', 'i', 'z', None, None]
56+
# Ideal time between taking pairs
57+
pair_time = 22.
58+
times_needed = [pair_time, pair_time*2]
59+
for filtername, filtername2 in zip(filter1s, filter2s):
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+
filternames = [fn for fn in [filtername, filtername2] if fn is not None]
80+
bfs.append(bf.Filter_loaded_basis_function(filternames=filternames))
81+
if filtername2 is None:
82+
time_needed = times_needed[0]
83+
else:
84+
time_needed = times_needed[1]
85+
bfs.append(bf.Time_to_twilight_basis_function(time_needed=time_needed))
86+
bfs.append(bf.Not_twilight_basis_function())
87+
weights = np.array([3.0, 3.0, .3, .3, 3., 3., 0., 0., 0., 0., 0., 0.])
88+
if filtername2 is None:
89+
# Need to scale weights up so filter balancing still works properly.
90+
weights = np.array([6.0, 0.6, 3., 3., 0., 0., 0., 0., 0., 0.])
91+
if filtername2 is None:
92+
survey_name = 'blob, %s' % filtername
93+
else:
94+
survey_name = 'blob, %s%s' % (filtername, filtername2)
95+
surveys.append(Blob_survey(bfs, weights, filtername1=filtername, filtername2=filtername2,
96+
ideal_pair_time=pair_time, nside=nside,
97+
survey_note=survey_name, ignore_obs='DD', dither=True))
98+
99+
return surveys
100+
101+
102+
if __name__ == "__main__":
103+
nside = 32
104+
survey_length = 365.25*10 # Days
105+
years = int(survey_length/365.25)
106+
107+
greedy = gen_greedy_surveys(nside)
108+
ddfs = generate_dd_surveys(nside=nside)
109+
blobs = generate_blobs(nside)
110+
111+
surveys = [ddfs, blobs, greedy]
112+
113+
n_visit_limit = None
114+
scheduler = Core_scheduler(surveys, nside=nside)
115+
observatory = Model_observatory(nside=nside)
116+
observatory, scheduler, observations = sim_runner(observatory, scheduler,
117+
survey_length=survey_length,
118+
filename='baseline_colors2019_%i.db' % years,
119+
n_visit_limit=n_visit_limit)

2019_runs/better_roll/debug.ipynb

+33-13
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)