Esempio n. 1
0
    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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
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
Esempio n. 6
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
Esempio n. 7
0
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)
Esempio n. 8
0
 def setUp(self):
     self.slew = Slew()
     self.slew_conf = SALPY_scheduler.scheduler_slewConfigC()
Esempio n. 9
0
 def setUp(self):
     self.olc = OpticsLoopCorr()
     self.olc_conf = SALPY_scheduler.scheduler_opticsLoopCorrConfigC()
Esempio n. 10
0
    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)
Esempio n. 11
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 = "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
Esempio n. 12
0
 def setUp(self):
     self.slew = Slew()
     self.slew_conf = SALPY_scheduler.scheduler_slewConfigC()
Esempio n. 13
0
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)