class SelectionTest(unittest.TestCase):
    def setUp(self):
        self.selection = Selection()

    def test_basic_information_after_creation(self):
        self.assertEqual(self.selection.limit_type, "RA")
        self.assertEqual(self.selection.minimum_limit, 0.0)
        self.assertEqual(self.selection.maximum_limit, 360.0)
        self.assertTrue(math.isnan(self.selection.bounds_limit))

    def test_bad_limit_type(self):
        self.selection.limit_type = "None"
        with self.assertRaises(ValueError):
            self.selection.validate()
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "BasicProposal2"

        # -------------------------
        # Sky Region specifications
        # -------------------------

        # Dec Band
        dec_limit = Selection()
        dec_limit.limit_type = SELECTION_LIMIT_TYPES[1]
        dec_limit.minimum_limit = -50
        dec_limit.maximum_limit = -20

        # RA Band
        ra_limit = Selection()
        ra_limit.limit_type = SELECTION_LIMIT_TYPES[0]
        ra_limit.minimum_limit = 45.0
        ra_limit.maximum_limit = 90.0

        self.sky_region.selections = {0: dec_limit, 1: ra_limit}

        # Combine the Dec and RA bands
        self.sky_region.combiners = ["and"]

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 2.5

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 100
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False

        # --------------------------
        # Band Filter specifications
        # --------------------------

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 105
        g_filter.bright_limit = 21.0
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 1.5
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 240
        r_filter.bright_limit = 20.25
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 1.5
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 240
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 1.5
        i_filter.exposures = [15.0, 15.0]

        self.filters = {g_filter.name: g_filter,
                        r_filter.name: r_filter,
                        i_filter.name: i_filter}
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "GalacticPlane"

        # -------------------------
        # Sky Region specifications
        # -------------------------

        # Galactic Plane
        gal_plane = Selection()
        gal_plane.limit_type = SELECTION_LIMIT_TYPES[6]
        gal_plane.minimum_limit = 0.0
        gal_plane.maximum_limit = 10.0
        gal_plane.bounds_limit = 90.0

        self.sky_region.selections = {0: gal_plane}

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 2.5
        self.sky_constraints.max_cloud = 0.7

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 100
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False
        self.scheduling.airmass_bonus = 0.5

        # --------------------------
        # Band Filter specifications
        # --------------------------

        u_filter = GeneralBandFilter()
        u_filter.name = 'u'
        u_filter.num_visits = 30
        u_filter.bright_limit = 20.8
        u_filter.dark_limit = 30.0
        u_filter.max_seeing = 3.0
        u_filter.exposures = [15.0, 15.0]

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 30
        g_filter.bright_limit = 20.8
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 3.0
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 30
        r_filter.bright_limit = 20.0
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 2.0
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 30
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 2.0
        i_filter.exposures = [15.0, 15.0]

        z_filter = GeneralBandFilter()
        z_filter.name = 'z'
        z_filter.num_visits = 30
        z_filter.bright_limit = 17.0
        z_filter.dark_limit = 21.4
        z_filter.max_seeing = 2.0
        z_filter.exposures = [15.0, 15.0]

        y_filter = GeneralBandFilter()
        y_filter.name = 'y'
        y_filter.num_visits = 30
        y_filter.bright_limit = 16.0
        y_filter.dark_limit = 21.4
        y_filter.max_seeing = 2.0
        y_filter.exposures = [15.0, 15.0]

        self.filters = {u_filter.name: u_filter,
                        g_filter.name: g_filter,
                        r_filter.name: r_filter,
                        i_filter.name: i_filter,
                        z_filter.name: z_filter,
                        y_filter.name: y_filter}
Exemplo n.º 4
0
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "BasicProposal4"

        # -------------------------
        # Sky Region specifications
        # -------------------------

        # Dec Band 1
        dec_limit1 = Selection()
        dec_limit1.limit_type = SELECTION_LIMIT_TYPES[1]
        dec_limit1.minimum_limit = -60
        dec_limit1.maximum_limit = -30

        # Dec Band 2
        dec_limit2 = Selection()
        dec_limit2.limit_type = SELECTION_LIMIT_TYPES[1]
        dec_limit2.minimum_limit = -30
        dec_limit2.maximum_limit = 0

        self.sky_region.selections = {0: dec_limit1, 1: dec_limit2}

        # Set time ordering information
        # Dec Band 1
        time_range1 = TimeRange()
        time_range1.start = 1
        time_range1.end = 1825

        # Dec Band 2
        time_range2 = TimeRange()
        time_range2.start = 1826
        time_range2.end = 3650

        self.sky_region.time_ranges = {0: time_range1, 1: time_range2}

        # Set selection mapping information
        # Dec Band 1
        selection_list1 = SelectionList()
        selection_list1.indexes = [0]

        # Dec Band 2
        selection_list2 = SelectionList()
        selection_list2.indexes = [1]

        self.sky_region.selection_mapping = {
            0: selection_list1,
            1: selection_list2
        }

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 2.5

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 100
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False
        self.scheduling.restrict_grouped_visits = False
        self.scheduling.time_interval = 30 * 60
        self.scheduling.time_window_start = -0.5
        self.scheduling.time_window_max = 0.5
        self.scheduling.time_window_end = 1.0
        self.scheduling.time_weight = 1.0

        # --------------------------
        # Band Filter specifications
        # --------------------------

        u_filter = GeneralBandFilter()
        u_filter.name = 'u'
        u_filter.num_visits = 75
        u_filter.num_grouped_visits = 1
        u_filter.bright_limit = 21.0
        u_filter.dark_limit = 30.0
        u_filter.max_seeing = 1.5
        u_filter.exposures = [15.0, 15.0]

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 105
        g_filter.num_grouped_visits = 2
        g_filter.bright_limit = 21.0
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 1.5
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 240
        r_filter.num_grouped_visits = 2
        r_filter.bright_limit = 20.25
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 1.5
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 240
        i_filter.num_grouped_visits = 2
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 1.5
        i_filter.exposures = [15.0, 15.0]

        self.filters = {
            u_filter.name: u_filter,
            g_filter.name: g_filter,
            r_filter.name: r_filter,
            i_filter.name: i_filter
        }
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "BasicProposal7"

        # -------------------------
        # Sky Region specifications
        # -------------------------
        sel0 = Selection()
        sel0.limit_type = SELECTION_LIMIT_TYPES[1]
        sel0.minimum_limit = -60.0
        sel0.maximum_limit = -30.0

        sel1 = Selection()
        sel1.limit_type = SELECTION_LIMIT_TYPES[0]
        sel1.minimum_limit = 45.0
        sel1.maximum_limit = 90.0

        sel2 = Selection()
        sel2.limit_type = SELECTION_LIMIT_TYPES[1]
        sel2.minimum_limit = -60.0
        sel2.maximum_limit = -30.0

        sel3 = Selection()
        sel3.limit_type = SELECTION_LIMIT_TYPES[0]
        sel3.minimum_limit = 90.0
        sel3.maximum_limit = 135.0

        self.sky_region.selections = {0: sel0, 1: sel1, 2: sel2, 3: sel3}

        time_range0 = TimeRange()
        time_range0.start = 1
        time_range0.end = 1825

        time_range1 = TimeRange()
        time_range1.start = 1
        time_range1.end = 1825

        time_range2 = TimeRange()
        time_range2.start = 1826
        time_range2.end = 3650

        time_range3 = TimeRange()
        time_range3.start = 1826
        time_range3.end = 3650

        self.sky_region.time_ranges = {
            0: time_range0,
            1: time_range1,
            2: time_range2,
            3: time_range3
        }

        sel_map0 = SelectionList()
        sel_map0.indexes = [0, 1]

        sel_map1 = SelectionList()
        sel_map1.indexes = [2, 3]

        self.sky_region.selection_mapping = {0: sel_map0, 1: sel_map1}

        self.sky_region.combiners = ['and', 'and']

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 2.5

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 100
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False
        self.scheduling.restrict_grouped_visits = False
        self.scheduling.time_interval = 30 * 60
        self.scheduling.time_window_start = -0.5
        self.scheduling.time_window_max = 0.5
        self.scheduling.time_window_end = 1.0
        self.scheduling.time_weight = 1.0

        # --------------------------
        # Band Filter specifications
        # --------------------------

        u_filter = GeneralBandFilter()
        u_filter.name = 'u'
        u_filter.num_visits = 75
        u_filter.num_grouped_visits = 1
        u_filter.bright_limit = 21.0
        u_filter.dark_limit = 30.0
        u_filter.max_seeing = 1.5
        u_filter.exposures = [15.0, 15.0]

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 105
        g_filter.num_grouped_visits = 2
        g_filter.bright_limit = 21.0
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 1.5
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 240
        r_filter.num_grouped_visits = 2
        r_filter.bright_limit = 20.25
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 1.5
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 240
        i_filter.num_grouped_visits = 2
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 1.5
        i_filter.exposures = [15.0, 15.0]

        self.filters = {
            u_filter.name: u_filter,
            g_filter.name: g_filter,
            r_filter.name: r_filter,
            i_filter.name: i_filter
        }
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "NorthEclipticSpur"

        # -------------------------
        # Sky Region specifications
        # -------------------------

        # Ecliptic Longitude Band
        eb_limit = Selection()
        eb_limit.limit_type = SELECTION_LIMIT_TYPES[5]
        eb_limit.minimum_limit = -30.0
        eb_limit.maximum_limit = 10.0

        # Dec Band
        dec_limit = Selection()
        dec_limit.limit_type = SELECTION_LIMIT_TYPES[1]
        dec_limit.minimum_limit = 2.8
        dec_limit.maximum_limit = 90.0

        self.sky_region.selections = {0: eb_limit, 1: dec_limit}
        self.sky_region.combiners = ('and', )

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 2.5
        self.sky_constraints.max_cloud = 0.7

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 100
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False
        self.scheduling.airmass_bonus = 0.5
        self.scheduling.time_interval = 30 * 60
        self.scheduling.time_window_start = 0.5
        self.scheduling.time_window_max = 1.0
        self.scheduling.time_window_end = 2.0
        self.scheduling.time_weight = 1.0

        # --------------------------
        # Band Filter specifications
        # --------------------------

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 40
        g_filter.num_grouped_visits = 2
        g_filter.bright_limit = 21.0
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 2.0
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 92
        r_filter.num_grouped_visits = 2
        r_filter.bright_limit = 20.25
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 2.0
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 92
        i_filter.num_grouped_visits = 2
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 2.0
        i_filter.exposures = [15.0, 15.0]

        z_filter = GeneralBandFilter()
        z_filter.name = 'z'
        z_filter.num_visits = 80
        z_filter.num_grouped_visits = 2
        z_filter.bright_limit = 17.0
        z_filter.dark_limit = 21.0
        z_filter.max_seeing = 2.0
        z_filter.exposures = [15.0, 15.0]

        self.filters = {
            g_filter.name: g_filter,
            r_filter.name: r_filter,
            i_filter.name: i_filter,
            z_filter.name: z_filter
        }
 def setUp(self):
     self.selection = Selection()
 def test_selections_assignment(self):
     self.sky_exclusion.selections = {0: Selection()}
     self.assertIsNotNone(self.sky_exclusion.selections)
     self.assertEqual(len(self.sky_exclusion.selections), 1)
    def setDefaults(self):
        """Setup all the proposal information.
        """
        self.name = "WideFastDeep"

        # -------------------------
        # Sky Region specifications
        # -------------------------

        # Dec Band
        dec_limit = Selection()
        dec_limit.limit_type = SELECTION_LIMIT_TYPES[1]
        dec_limit.minimum_limit = -62.5
        dec_limit.maximum_limit = 2.8

        self.sky_region.selections = {0: dec_limit}

        # -----------------------------
        # Sky Exclusion specifications
        # -----------------------------

        self.sky_exclusion.dec_window = 90.0

        # Galactic Plane
        gal_plane = Selection()
        gal_plane.limit_type = SELECTION_LIMIT_TYPES[6]
        gal_plane.minimum_limit = 0.0
        gal_plane.maximum_limit = 10.0
        gal_plane.bounds_limit = 90.0

        self.sky_exclusion.selections = {0: gal_plane}

        # ---------------------------------
        # Sky Nightly Bounds specifications
        # ---------------------------------

        self.sky_nightly_bounds.twilight_boundary = -12.0
        self.sky_nightly_bounds.delta_lst = 60.0

        # ------------------------------
        # Sky Constraints specifications
        # ------------------------------

        self.sky_constraints.max_airmass = 1.5
        self.sky_constraints.max_cloud = 0.7

        # ----------------------
        # Scheduling information
        # ----------------------

        self.scheduling.max_num_targets = 500
        self.scheduling.accept_serendipity = False
        self.scheduling.accept_consecutive_visits = False
        self.scheduling.airmass_bonus = 0.5
        self.scheduling.time_interval = 30 * 60
        self.scheduling.time_window_start = 0.5
        self.scheduling.time_window_max = 1.0
        self.scheduling.time_window_end = 2.0
        self.scheduling.time_weight = 1.0

        # --------------------------
        # Band Filter specifications
        # --------------------------

        u_filter = GeneralBandFilter()
        u_filter.name = 'u'
        u_filter.num_visits = 75
        u_filter.bright_limit = 21.3
        u_filter.dark_limit = 30.0
        u_filter.max_seeing = 1.5
        u_filter.exposures = [15.0, 15.0]

        g_filter = GeneralBandFilter()
        g_filter.name = 'g'
        g_filter.num_visits = 105
        g_filter.num_grouped_visits = 2
        g_filter.bright_limit = 21.0
        g_filter.dark_limit = 30.0
        g_filter.max_seeing = 1.5
        g_filter.exposures = [15.0, 15.0]

        r_filter = GeneralBandFilter()
        r_filter.name = 'r'
        r_filter.num_visits = 240
        r_filter.num_grouped_visits = 2
        r_filter.bright_limit = 20.25
        r_filter.dark_limit = 30.0
        r_filter.max_seeing = 1.5
        r_filter.exposures = [15.0, 15.0]

        i_filter = GeneralBandFilter()
        i_filter.name = 'i'
        i_filter.num_visits = 240
        i_filter.num_grouped_visits = 2
        i_filter.bright_limit = 19.5
        i_filter.dark_limit = 30.0
        i_filter.max_seeing = 1.5
        i_filter.exposures = [15.0, 15.0]

        z_filter = GeneralBandFilter()
        z_filter.name = 'z'
        z_filter.num_visits = 210
        z_filter.num_grouped_visits = 2
        z_filter.bright_limit = 17.0
        z_filter.dark_limit = 21.0
        z_filter.max_seeing = 1.5
        z_filter.exposures = [15.0, 15.0]

        y_filter = GeneralBandFilter()
        y_filter.name = 'y'
        y_filter.num_visits = 210
        y_filter.bright_limit = 16.5
        y_filter.dark_limit = 21.0
        y_filter.max_seeing = 1.5
        y_filter.exposures = [15.0, 15.0]

        self.filters = {
            u_filter.name: u_filter,
            g_filter.name: g_filter,
            r_filter.name: r_filter,
            i_filter.name: i_filter,
            z_filter.name: z_filter,
            y_filter.name: y_filter
        }