def gen_greedy_surveys(nside, nexp=1, target_maps=None, mod_year=None, day_offset=None, norm_factor=None, max_season=10): """ Make a quick set of greedy surveys """ target_map = standard_goals(nside=nside) norm_factor = calc_norm_factor(target_map) # Let's remove the bluer filters since this should only be near twilight filters = ['r', 'i', 'z', 'y'] surveys = [] detailer = detailers.Camera_rot_detailer(min_rot=-87., max_rot=87.) for filtername in filters: bfs = [] bfs.append( bf.M5_diff_basis_function(filtername=filtername, nside=nside)) target_list = [tm[filtername] for tm in target_maps] bfs.append( bf.Target_map_modulo_basis_function(filtername=filtername, target_maps=target_list, season_modulo=mod_year, day_offset=day_offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=norm_factor, max_season=max_season)) bfs.append( bf.Slewtime_basis_function(filtername=filtername, nside=nside)) bfs.append(bf.Strict_filter_basis_function(filtername=filtername)) # Masks, give these 0 weight bfs.append( bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.)) bfs.append( bf.Moon_avoidance_basis_function(nside=nside, moon_distance=40.)) bfs.append(bf.Filter_loaded_basis_function(filternames=filtername)) bfs.append(bf.Planet_mask_basis_function(nside=nside)) weights = np.array([3.0, 0.3, 3., 3., 0., 0., 0., 0.]) surveys.append( Greedy_survey(bfs, weights, block_size=1, filtername=filtername, dither=True, nside=nside, ignore_obs='DD', nexp=nexp, detailers=[detailer])) return surveys
filter2s = [None, 'g', 'r', 'i', None, None] for filtername, filtername2 in zip(filter1s, filter2s): bfs = [] bfs.append(bf.M5_diff_basis_function(filtername=filtername, nside=nside)) if filtername2 is not None: bfs.append( bf.M5_diff_basis_function(filtername=filtername2, nside=nside)) target_list = [ even_year_target[filtername], odd_year_target[filtername], zero_year_target[filtername] ] bfs.append( bf.Target_map_modulo_basis_function(filtername=filtername, target_maps=target_list, season_modulo=mod_year, day_offset=offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=even_norm, max_season=max_season)) if filtername2 is not None: bfs.append( bf.Target_map_modulo_basis_function(filtername=filtername2, target_maps=target_list, season_modulo=mod_year, day_offset=offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=even_norm, max_season=max_season)) bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside)) bfs.append(bf.Strict_filter_basis_function(filtername=filtername))
def generate_blobs(nside, mixed_pairs=False, nexp=1, no_pairs=False, offset=None, template_weight=0.6, target_maps=None, norm_factor=None, mod_year=2, max_season=10, day_offset=None, footprint_weight=6.): target_map = standard_goals(nside=nside) norm_factor = calc_norm_factor(target_map) wfd_halves = wfd_half() # List to hold all the surveys (for easy plotting later) surveys = [] # Set up observations to be taken in blocks filter1s = ['u', 'g', 'r', 'i', 'z', 'y'] if mixed_pairs: filter2s = [None, 'r', 'i', 'z', None, None] else: filter2s = [None, 'g', 'r', 'i', None, None] if no_pairs: filter2s = [None, None, None, None, None, None] # Ideal time between taking pairs pair_time = 22. times_needed = [pair_time, pair_time*2] for filtername, filtername2 in zip(filter1s, filter2s): detailer_list = [] detailer_list.append(detailers.Camera_rot_detailer(min_rot=-87., max_rot=87.)) detailer_list.append(detailers.Close_alt_detailer()) bfs = [] bfs.append(bf.M5_diff_basis_function(filtername=filtername, nside=nside)) if filtername2 is not None: bfs.append(bf.M5_diff_basis_function(filtername=filtername2, nside=nside)) target_list = [tm[filtername] for tm in target_maps] bfs.append(bf.Target_map_modulo_basis_function(filtername=filtername, target_maps=target_list, season_modulo=mod_year, day_offset=day_offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=norm_factor, max_season=max_season)) if filtername2 is not None: target_list = [tm[filtername2] for tm in target_maps] bfs.append(bf.Target_map_modulo_basis_function(filtername=filtername2, target_maps=target_list, season_modulo=mod_year, day_offset=day_offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=norm_factor, max_season=max_season)) bfs.append(bf.Slewtime_basis_function(filtername=filtername, nside=nside)) bfs.append(bf.Strict_filter_basis_function(filtername=filtername)) bfs.append(bf.N_obs_per_year_basis_function(filtername=filtername, nside=nside, footprint=target_map[filtername], n_obs=3, season=300.)) if filtername2 is not None: bfs.append(bf.N_obs_per_year_basis_function(filtername=filtername2, nside=nside, footprint=target_map[filtername2], n_obs=3, season=300.)) bfs.append(bf.Map_modulo_basis_function(wfd_halves)) # Masks, give these 0 weight bfs.append(bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.)) bfs.append(bf.Moon_avoidance_basis_function(nside=nside, moon_distance=30.)) filternames = [fn for fn in [filtername, filtername2] if fn is not None] bfs.append(bf.Filter_loaded_basis_function(filternames=filternames)) if filtername2 is None: time_needed = times_needed[0] else: time_needed = times_needed[1] bfs.append(bf.Time_to_twilight_basis_function(time_needed=time_needed)) bfs.append(bf.Not_twilight_basis_function()) bfs.append(bf.Planet_mask_basis_function(nside=nside)) weights = np.array([3., 3., footprint_weight/2., footprint_weight/2., 3., 3., template_weight, template_weight, 3., 0., 0., 0., 0., 0., 0.]) if filtername2 is None: # Need to scale weights up so filter balancing still works properly. weights = np.array([6., footprint_weight, 3., 3., template_weight*2, 3., 0., 0., 0., 0., 0., 0.]) if filtername2 is None: survey_name = 'blob, %s' % filtername else: survey_name = 'blob, %s%s' % (filtername, filtername2) if filtername2 is not None: detailer_list.append(detailers.Take_as_pairs_detailer(filtername=filtername2)) surveys.append(Blob_survey(bfs, weights, filtername1=filtername, filtername2=filtername2, ideal_pair_time=pair_time, nside=nside, survey_note=survey_name, ignore_obs='DD', dither=True, nexp=nexp, detailers=detailer_list)) return surveys
def generate_blobs(nside, mixed_pairs=False, nexp=1, target_maps=None, norm_factor=None, mod_year=2, max_season=10, day_offset=None): # List to hold all the surveys (for easy plotting later) surveys = [] # Set up observations to be taken in blocks filter1s = ['u', 'g', 'r', 'i', 'z', 'y'] if mixed_pairs: filter2s = [None, 'r', 'i', 'z', None, None] else: filter2s = [None, 'g', 'r', 'i', None, None] # Ideal time between taking pairs pair_time = 22. times_needed = [pair_time, pair_time * 2] for filtername, filtername2 in zip(filter1s, filter2s): bfs = [] bfs.append( bf.M5_diff_basis_function(filtername=filtername, nside=nside)) if filtername2 is not None: bfs.append( bf.M5_diff_basis_function(filtername=filtername2, nside=nside)) target_list = [tm[filtername] for tm in target_maps] bfs.append( bf.Target_map_modulo_basis_function(filtername=filtername, target_maps=target_list, season_modulo=mod_year, day_offset=day_offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=norm_factor, max_season=max_season)) if filtername2 is not None: target_list = [tm[filtername2] for tm in target_maps] bfs.append( bf.Target_map_modulo_basis_function(filtername=filtername2, target_maps=target_list, season_modulo=mod_year, day_offset=day_offset, out_of_bounds_val=np.nan, nside=nside, norm_factor=norm_factor, max_season=max_season)) bfs.append( bf.Slewtime_basis_function(filtername=filtername, nside=nside)) bfs.append(bf.Strict_filter_basis_function(filtername=filtername)) # Masks, give these 0 weight bfs.append( bf.Zenith_shadow_mask_basis_function(nside=nside, shadow_minutes=60., max_alt=76.)) bfs.append( bf.Moon_avoidance_basis_function(nside=nside, moon_distance=30.)) bfs.append(bf.Clouded_out_basis_function()) filternames = [ fn for fn in [filtername, filtername2] if fn is not None ] bfs.append(bf.Filter_loaded_basis_function(filternames=filternames)) if filtername2 is None: time_needed = times_needed[0] else: time_needed = times_needed[1] bfs.append(bf.Time_to_twilight_basis_function(time_needed=time_needed)) bfs.append(bf.Not_twilight_basis_function()) weights = np.array([3.0, 3.0, .3, .3, 3., 3., 0., 0., 0., 0., 0., 0.]) if filtername2 is None: # Need to scale weights up so filter balancing still works properly. weights = np.array([6.0, 0.6, 3., 3., 0., 0., 0., 0., 0., 0.]) if filtername2 is None: survey_name = 'blob, %s' % filtername else: survey_name = 'blob, %s%s' % (filtername, filtername2) surveys.append( Blob_survey(bfs, weights, filtername1=filtername, filtername2=filtername2, ideal_pair_time=pair_time, nside=nside, survey_note=survey_name, ignore_obs='DD', dither=True, nexp=nexp)) return surveys