def initialize(self): """Perform initialization steps. This function handles creation of the Scheduler SAL manager and sets the debugging level. """ self.manager = SALPY_scheduler.SAL_scheduler() self.manager.setDebugLevel(self.debug_level)
def test_topic_setting(self): seeing_topic = SALPY_scheduler.scheduler_seeingC() self.th.update_time(8, "days") self.initialize() self.seeing.set_topic(self.th, seeing_topic) self.assertEqual(seeing_topic.timestamp, 1578528000.0) self.assertEqual(seeing_topic.seeing, 0.715884983539581)
def test_topic_setting(self): seeing_topic = SALPY_scheduler.scheduler_seeingC() th = TimeHandler("2020-05-24") th.update_time(8, "days") self.initialize() self.seeing.set_topic(th, seeing_topic) self.assertEqual(seeing_topic.timestamp, 1590969600.0) self.assertEqual(seeing_topic.seeing, 0.715884983539581)
def test_topic_setting(self): cloud_topic = SALPY_scheduler.scheduler_cloudC() th = TimeHandler("2020-05-24") th.update_time(8, "days") self.cloud.initialize() self.cloud.set_topic(th, cloud_topic) self.assertEqual(cloud_topic.timestamp, 1590969600.0) self.assertEqual(cloud_topic.cloud, 0.5)
import SALPY_scheduler seqprop = SALPY_scheduler.scheduler_sequencePropConfigC() seqprop.name = "SequenceProposal1" seqprop.prop_id = 1 seqprop.twilight_boundary = -18.0 seqprop.delta_lst = 60.0 seqprop.dec_window = 90.0 seqprop.max_airmass = 1.5 seqprop.max_cloud = 0.7 seqprop.min_distance_moon = 30.0 seqprop.exclude_planets = True seqprop.num_user_regions = 4 seqprop.user_region_ids[0] = 1 seqprop.user_region_ids[1] = 20 seqprop.user_region_ids[2] = 350 seqprop.user_region_ids[3] = 4015 seqprop.num_sub_sequences = 1 seqprop.sub_sequence_names = "test1" seqprop.num_sub_sequence_filters[0] = 5 seqprop.sub_sequence_filters = "g,r,i,z,y" seqprop.num_sub_sequence_filter_visits[0] = 20 seqprop.num_sub_sequence_filter_visits[1] = 25 seqprop.num_sub_sequence_filter_visits[2] = 30 seqprop.num_sub_sequence_filter_visits[3] = 20 seqprop.num_sub_sequence_filter_visits[4] = 27 seqprop.num_sub_sequence_events[0] = 30 seqprop.num_sub_sequence_max_missed[0] = 2 seqprop.sub_sequence_time_intervals[0] = 5 * 24 * 3600 seqprop.sub_sequence_time_window_starts[0] = 0.0 seqprop.sub_sequence_time_window_maximums[0] = 1.0
#import collections import SALPY_scheduler import lsst.sims.ocs.kernel import lsst.sims.ocs.observatory target = SALPY_scheduler.scheduler_targetC() target.targetId = 10 target.fieldId = 300 target.groupId = 2 target.filter = "r" target.ra = 1.000 target.dec = -3.00 target.angle = 0.5 target.alt = 60.0 target.az = 240.0 target.num_exposures = 2 target.exposure_times[0] = 15 target.exposure_times[1] = 15 target.request_time = 1640995200.0 target.request_mdj = 59280.0 target.airmass = 1.4 target.sky_brightness = 20.4 target.cloud = 0.0 target.seeing = 0.5 target.need = 0.001 target.slew_time = 4.75 target.cost_bonus = 0.1 target.rank = 0.013 target.prop_boost = 0.005 target.num_proposals = 2
def run(opts): manager = SALPY_scheduler.SAL_scheduler() manager.setDebugLevel(0) manager.salTelemetrySub("scheduler_observation") obs = SALPY_scheduler.scheduler_observationC() if opts.verbose > 0: print("After setting up subscriber") plt.ion() fig, ax1 = plt.subplots(subplot_kw={"projection": PROJECTION}) axisSetup(ax1) for i, (band_filter, filter_color) in enumerate(FILTER_DICT.items()): fig.text(0.41 + i * 0.035, 0.15, band_filter, color=filter_color) fig.show() num_obs = 0 try: if opts.verbose > 0: print("Starting topic loop.") field_list = [] while True: rcode = manager.getNextSample_observation(obs) if opts.verbose > 1: print("A: {}, {}, {}".format(rcode, obs.num_exposures, obs.filter)) if rcode == 0 and obs.num_exposures != 0 and obs.filter != '': plt.cla() ra = np.radians(obs.ra) dec = np.radians(obs.dec) color = FILTER_DICT[obs.filter] zenith_ra = np.radians(obs.observation_start_lst) ra = -(ra - zenith_ra - np.pi) % (np.pi * 2.) - np.pi ellipse = patches.Ellipse((ra, dec), LSST_FOV / np.cos(dec), LSST_FOV, edgecolor='k', facecolor=color) field_list.append(ellipse) for field in field_list: ax1.add_patch(field) if obs.moon_alt > -0.25 * MOON_SCALE: moon_ra = np.radians(obs.moon_ra) moon_ra = -(moon_ra - zenith_ra - np.pi) % (np.pi * 2.) - np.pi moon_dec = np.radians(obs.moon_dec) alpha = np.max([obs.moon_phase / 100., MOON_ALPHA]) moon = patches.Ellipse((moon_ra, moon_dec), MOON_DIA / np.cos(moon_dec), MOON_DIA, color='k', alpha=alpha) ax1.add_patch(moon) axisSetup(ax1) fig_title = "Night {}, MJD {}".format(obs.night, obs.observation_start_mjd) plt.text(0.5, 1.18, fig_title, horizontalalignment='center', transform=ax1.transAxes) moon_phase_text = "Moon Phase: {:.1f}%".format(obs.moon_phase) plt.text(0.8, 1.0, moon_phase_text, transform=ax1.transAxes) if obs.sun_alt <= ASTRO_TWILIGHT: tom_text = "Night" else: tom_text = "Twilight" plt.text(0.8, 0.0, tom_text, transform=ax1.transAxes) plt.draw() plt.pause(0.0001) field_list[-1].set_alpha(ALPHA) field_list[-1].set_edgecolor('none') if len(field_list) > opts.trail: field_list.pop(0) num_obs += 1 if opts.verbose > 1: print("Observation number {}".format(num_obs)) except KeyboardInterrupt: manager.salShutdown() if opts.verbose > 0: print("Total observations received: {}".format(num_obs)) sys.exit(0)
def setUp(self): self.slew = Slew() self.slew_conf = SALPY_scheduler.scheduler_slewConfigC()
def setUp(self): self.olc = OpticsLoopCorr() self.olc_conf = SALPY_scheduler.scheduler_opticsLoopCorrConfigC()
parser = argparse.ArgumentParser(description=" ".join(description)) parser.add_argument("dbfile", help="The full path to the OpSim SQLite database file.") parser.add_argument("-l", "--limit", default=0, help="Look at the first N fields.") parser.add_argument("-3", dest="v3", action="store_true", default=False, help="Query an OpSim v3 DB.") parser.add_argument("-n", "--night", nargs="*", default=[], type=int, help="Set the night or night range (min, max) to view.") parser.set_defaults() args = parser.parse_args() use_limit = args.limit > 0 try: manager = SALPY_scheduler.SAL_scheduler() manager.setDebugLevel(0) manager.salTelemetryPub("scheduler_observation") obs = SALPY_scheduler.scheduler_observationC() num_obs = 0 with sqlite3.connect(args.dbfile) as conn: cur = conn.cursor() if args.v3: query = SQL_3 else: query = SQL_4 night_query = None if len(args.night): try: min_night = args.night[0] max_night = args.night[1] night_query = " (night>={} and night<={})".format(min_night, max_night)
#import collections import SALPY_scheduler import lsst.sims.ocs.kernel import lsst.sims.ocs.observatory target = SALPY_scheduler.scheduler_targetC() target.targetId = 10 target.fieldId = 300 target.groupId = 2 target.filter = "z" target.ra = 1.000 target.dec = -3.00 target.angle = 0.5 target.alt = 60.0 target.az = 240.0 target.num_exposures = 2 target.exposure_times[0] = 15 target.exposure_times[1] = 15 target.request_time = 1640995200.0 target.request_mdj = 59280.0 target.airmass = 1.4 target.sky_brightness = 20.4 target.cloud = 0.0 target.seeing = 0.5 target.need = 0.001 target.slew_time = 4.75 target.cost = 0.1 target.rank = 0.013 target.prop_boost = 0.005 target.num_proposals = 2
def run(opts): manager = SALPY_scheduler.SAL_scheduler() manager.setDebugLevel(0) manager.salTelemetrySub("scheduler_observation") obs = SALPY_scheduler.scheduler_observationC() if opts.verbose > 0: print("After setting up subscriber") plt.ion() fig, ax1 = plt.subplots(subplot_kw={"projection": PROJECTION}) fig.set_facecolor(CANVAS_BACKGROUND_COLOR) axisSetup(ax1) for i, (band_filter, filter_color) in enumerate(FILTER_DICT.items()): fig.text(0.1 + i * 0.035, 0.05, band_filter, color=filter_color) fig.show() num_obs = 0 try: if opts.verbose > 0: print("Starting topic loop.") field_list = [] while True: rcode = manager.getNextSample_observation(obs) if opts.verbose > 1: print("A: {}, {}, {}".format(rcode, obs.num_exposures, obs.filter)) if rcode == 0 and obs.num_exposures != 0 and obs.filter != '': plt.cla() az = np.radians(obs.azimuth) alt = 1.0 - math.radians(obs.altitude) / PI_OVER_2 color = FILTER_DICT[obs.filter] ellipse = patches.Ellipse((az, alt), LSST_FOV / alt, LSST_FOV, edgecolor='k', facecolor=color) field_list.append(ellipse) for field in field_list: ax1.add_patch(field) if obs.moon_alt > -0.25 * MOON_SCALE: moon_az = np.radians(obs.moon_az) moon_alt = 1.0 - math.radians(obs.moon_alt) / PI_OVER_2 alpha = np.max([obs.moon_phase / 100., MOON_ALPHA]) moon = patches.Ellipse((moon_az, moon_alt), MOON_DIA / moon_alt, MOON_DIA, color='w', alpha=alpha) ax1.add_patch(moon) if obs.sun_alt <= ASTRO_TWILIGHT: tom_text = "Night" background_color = (0, 0, 0) else: tom_text = "Twilight" blue_color = normalize_color((1 / 6) * obs.sun_alt + 3) red_color = normalize_color((35 / 600) * obs.sun_alt + 105 / 100) background_color = (red_color, 0, blue_color) axisSetup(ax1, background_color) fig_title = "Night {}, MJD {}".format(obs.night, obs.observation_start_mjd) plt.text(-0.3, 1.0, fig_title, transform=ax1.transAxes) moon_phase_text = "Moon Phase: {:.1f}%".format(obs.moon_phase) plt.text(0.9, 1.0, moon_phase_text, transform=ax1.transAxes) plt.text(0.9, 0.0, tom_text, transform=ax1.transAxes) plt.draw() if opts.save is not None: filename = "mjd_{:15.0f}.png".format(obs.observation_start_mjd * 1e10) filepath = os.path.join(opts.save, filename) plt.savefig(filepath, facecolor=CANVAS_BACKGROUND_COLOR) plt.pause(0.0001) field_list[-1].set_alpha(ALPHA) field_list[-1].set_edgecolor('none') if len(field_list) > opts.trail: field_list.pop(0) num_obs += 1 if opts.verbose > 1: print("Observation number {}".format(num_obs)) except KeyboardInterrupt: manager.salShutdown() if opts.verbose > 0: print("Total observations received: {}".format(num_obs)) sys.exit(0)