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))
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())
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)
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)
def app(): print(mp_ephem.BKOrbit(None, sys.argv[1]).summarize())
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( "_", " "))
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 = []
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)