Example #1
0
    def test_abg_load(self):
        """
        Test that loading an abg file returns the same results as calling fit_radec
        :return:
        """

        orbit1 = mp_ephem.BKOrbit(self.observations,
                                  abg_file=self.abg_filename)
        orbit2 = mp_ephem.BKOrbit(self.observations)
        for attr in ['a', 'e', 'Node', 'inc', 'om', 'T', 'distance']:
            self.assertEqual(getattr(orbit1, attr), getattr(orbit2, attr))
Example #2
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'pointing_objects',
        type=str,
        help="Name of file that contains list of objects to try and observe.")
    parser.add_argument('--runid',
                        help="CFHT ID for this QUEUE Run",
                        default='16BQ17')

    args = parser.parse_args()

    logging.basicConfig(level=logging.INFO)

    logging.info(
        "Optimized to include as many objects in {} as possible".format(
            args.pointing_objects))

    filenames = open(args.pointing_objects).readlines()

    orbits = {}
    tokens = []

    # load the orbits of all objects of interest.
    for filename in filenames:
        filename = filename.strip()
        token = os.path.splitext(os.path.basename(filename))[0]
        abg_filename = os.path.splitext(filename)[0] + ".abg"
        orbits[token] = mp_ephem.BKOrbit(None,
                                         ast_filename=filename,
                                         abg_file=abg_filename)
        tokens.append(token)

    coverage(orbits, query())
Example #3
0
    def test_null_obseravtion(self):
        mpc_lines = (
            "!    HL7j2    C2013 04 03.62926 17 12 01.16 +04 13 33.3          24.1 R      568",
            "     HL7j2    C2013 04 04.58296 17 11 59.80 +04 14 05.5          24.0 R      568",
            "     HL7j2    C2013 05 03.52252 17 10 38.28 +04 28 00.9          23.4 R      568",
            "     HL7j2    C2013 05 08.56725 17 10 17.39 +04 29 47.8          23.4 R      568"
        )

        observations = []
        for line in mpc_lines:
            observations.append(mp_ephem.ObsRecord.from_string(line))

        this_orbit = mp_ephem.BKOrbit(observations)
        self.assertAlmostEqual(this_orbit.a.to(units.au).value, 137.91, 1)
Example #4
0
    def test_orbfit_residuals(self):
        mpc_lines = (
            "     HL7j2    C2013 04 03.62926 17 12 01.16 +04 13 33.3          24.1 R      568",
            "     HL7j2    C2013 04 04.58296 17 11 59.80 +04 14 05.5          24.0 R      568",
            "     HL7j2    C2013 05 03.52252 17 10 38.28 +04 28 00.9          23.4 R      568",
            "     HL7j2    C2013 05 08.56725 17 10 17.39 +04 29 47.8          23.4 R      568"
        )

        observations = []
        for line in mpc_lines:
            observations.append(mp_ephem.ObsRecord.from_string(line))

        this_orbit = mp_ephem.BKOrbit(observations=observations)

        for observation in observations:
            this_orbit.predict(observation.date, 568)
            this_orbit.compute_residuals()
            self.assertLess(observation.ra_residual, 0.3)
            self.assertLess(observation.dec_residual, 0.3)
Example #5
0
def app():
    print(mp_ephem.BKOrbit(None, sys.argv[1]).summarize())
Example #6
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('date',
                        type=str,
                        help="ISO date string to optimize the pointings too")
    parser.add_argument('runid', help="CFHT RUN ID")
    parser.add_argument(
        'pointing_objects',
        type=str,
        help="Name of file that contains list of objects to try and observe.")
    parser.add_argument(
        'required_objects',
        type=str,
        help="name of file that contains a list of required objects")
    parser.add_argument('--nattempts',
                        type=int,
                        help="Number of random variations of pointings to try",
                        default=2)
    parser.add_argument('--camera',
                        default="MEGACAM_40",
                        choices=list(Camera._geometry.keys()),
                        help="Name of camera")
    parser.add_argument('--ephem-format',
                        default='CFHT_API',
                        choices=['CFHT_API', 'CFHT_ET', 'GEMINI_ET'])

    args = parser.parse_args()

    logging.basicConfig(level=logging.INFO)

    pointing_date = args.date

    logging.info("Date for orbit predictions: {}".format(args.date))
    logging.info("Building pointings that include all targets in {}".format(
        args.required_objects))
    logging.info(
        "Optimized to include as many objects in {} as possible".format(
            args.pointing_objects))

    required_objects = []
    required_filename = args.required_objects
    for required_object in open(required_filename):
        if '#' in required_object:
            continue
        required_objects.append(required_object.strip())

    pointings_filename = os.path.splitext(
        required_filename)[0] + "_pointings.txt"

    filenames = open(args.pointing_objects).readlines()

    orbits = {}
    tokens = []

    # load the orbits of all objects of interest.
    for filename in filenames:
        filename = filename.strip()
        token = os.path.splitext(os.path.basename(filename))[0]
        abg_filename = os.path.splitext(filename)[0] + ".abg"
        orbits[token] = mp_ephem.BKOrbit(None,
                                         ast_filename=filename,
                                         abg_file=abg_filename)
        tokens.append(token)

    # Turn the object locations at the time of interest into a SkyCoord numpy array.
    tokens = np.array(tokens)
    minimum_number_of_pointings = len(required_objects)

    best_pointing_list = []
    for attempt in range(args.nattempts):
        locations = []
        for token in tokens:
            orbits[token].predict(pointing_date)
            locations.append([
                orbits[token].coordinate.ra.degree,
                orbits[token].coordinate.dec.degree
            ])
        locations = SkyCoord(locations, unit='degree')
        logging.info("Attempt : {} \n".format(attempt))
        pointings = optimize(orbits, required_objects, locations, tokens)
        if minimum_number_of_pointings >= len(pointings):
            minimum_number_of_pointings = len(pointings)
            best_pointing_list = deepcopy(pointings)

    with open(pointings_filename, 'w') as pobj:
        pobj.write("index {}\n".format(pointing_date))
        pointing_number = 0
        for token in best_pointing_list:
            pobj.write("{} {} {} {} # {}\n".format(
                pointing_number + 1, "{}".format(token),
                best_pointing_list[token][0].coord.to_string("hmsdms",
                                                             sep=" "), 2000,
                len(best_pointing_list[token][1])))
            pointing_number += 1
            create_ephemeris_file(token,
                                  best_pointing_list[token][0],
                                  best_pointing_list[token][1],
                                  orbits,
                                  pointing_date,
                                  args.runid,
                                  ephem_format=args.ephem_format.replace(
                                      "_", " "))
Example #7
0
            date = data[k][15:31]
            s = data[k][31:44].split()
            ra = 15.0 * (float(s[0]) + float(s[1]) / 60.0 +
                         float(s[2]) / 3600.0)
            s = data[k][44:57].split()
            dec = abs(float(s[0])) + float(s[1]) / 60.0 + float(s[2]) / 3600.0
            if '-' in s[0]: dec *= -1.0
            obscode = data[k].split()[-1]

            observation = mp_ephem.ephem.Observation(ra=ra,
                                                     dec=dec,
                                                     date=date,
                                                     observatory_code=obscode)
            observations.append(observation)

    orb = mp_ephem.BKOrbit(observations)
    observations = np.array(observations)

    if 1:  #m<=23.6 and n.split('/')[-1] and n>0:

        s = n.split('.')[0].split('/')
        shortn = s[len(s) - 1]
        geminiOutHan = open('ephs/' + shortn + '.eph', 'w+')
        print >> geminiOutHan, '***************************************************************************************'
        print >> geminiOutHan, ' Date__(UT)__HR:MN Date_________JDUT     R.A.___(ICRF/J2000.0)___DEC dRA*cosD d(DEC)/dt'
        print >> geminiOutHan, '***************************************************************************************'
        print >> geminiOutHan, '$$SOE'

        print "{}".format(shortn),

        R = []
Example #8
0
 def setUp(self):
     mpc_filename = 'data/o3o08.mpc'
     self.abg_filename = 'data/o3o08.abg'
     self.observations = mp_ephem.EphemerisReader().read(mpc_filename)
     self.orbit = mp_ephem.BKOrbit(self.observations)