From 7e578e58dac9afbb9af62a7eff31b081a033851c Mon Sep 17 00:00:00 2001 From: hhsieh00 Date: Tue, 4 Feb 2025 09:48:25 -1000 Subject: [PATCH 01/42] draft astroquery code for Lowell astorbdb AstInfo functionality query code only for now; tests not written yet --- astroquery/astorbdb/__init__.py | 39 + astroquery/astorbdb/core.py | 746 ++++++++++++++++++ astroquery/astorbdb/tests/__init__.py | 0 astroquery/astorbdb/tests/data/dummy.dat | 2 + astroquery/astorbdb/tests/setup_package.py | 15 + astroquery/astorbdb/tests/test_module.py | 80 ++ .../astorbdb/tests/test_module_remote.py | 16 + 7 files changed, 898 insertions(+) create mode 100644 astroquery/astorbdb/__init__.py create mode 100644 astroquery/astorbdb/core.py create mode 100644 astroquery/astorbdb/tests/__init__.py create mode 100644 astroquery/astorbdb/tests/data/dummy.dat create mode 100644 astroquery/astorbdb/tests/setup_package.py create mode 100644 astroquery/astorbdb/tests/test_module.py create mode 100644 astroquery/astorbdb/tests/test_module_remote.py diff --git a/astroquery/astorbdb/__init__.py b/astroquery/astorbdb/__init__.py new file mode 100644 index 0000000000..e5a2b0ee69 --- /dev/null +++ b/astroquery/astorbdb/__init__.py @@ -0,0 +1,39 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +""" +ASTORBDB +------------------------- + +:author: Henry Hsieh (hhsieh@gmail.com) +""" + +# Make the URL of the server, timeout and other items configurable +# See +# for docs and examples on how to do this +# Below is a common use case + +from astropy import config as _config + + +class Conf(_config.ConfigNamespace): + """ + Configuration parameters for `astroquery.astorbdb`. + """ + server = _config.ConfigItem( + ['https://asteroid.lowell.edu/api/asteroids/'], + 'AstorbDB') + + timeout = _config.ConfigItem( + 30, + 'Time limit for connecting to template_module server.') + + +conf = Conf() + +# Now import your public class +# Should probably have the same name as your module +from .core import AstInfo, AstInfoClass + +__all__ = ['AstInfo', 'AstInfoClass', + 'Conf', 'conf', + ] diff --git a/astroquery/astorbdb/core.py b/astroquery/astorbdb/core.py new file mode 100644 index 0000000000..d713d69ef0 --- /dev/null +++ b/astroquery/astorbdb/core.py @@ -0,0 +1,746 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +import astropy.units as u +import astropy.coordinates as coord +import astropy.io.votable as votable +import warnings +from astropy.table import Table +from astropy.time import Time +from astropy.io import fits +import json +from collections import OrderedDict + +from ..query import BaseQuery +from ..utils import commons +from ..utils import async_to_sync +from . import conf + +__all__ = ['AstInfo', 'AstInfoClass'] + +@async_to_sync +class AstInfoClass(BaseQuery): + + ## NEED TO ADD EXAMPLE OUTPUT TO ALL METHODS ## + + """ + A class for querying Lowell Observatory's `astorbDB + `_ service. + """ + # Not all the methods below are necessary but these cover most of the common + # cases, new methods may be added if necessary, follow the guidelines at + # + + URL = conf.server + TIMEOUT = conf.timeout + + # internal flag whether to return the raw reponse + _return_raw = False + + # actual query uri + _uri = None + + def designations_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for designation + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available color data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> designations = AstInfo.designations('Beagle') + >>> print(designations) + OrderedDict({'alternate_designations': ['1954 HJ', 'A908 BJ', 'A917 ST'], 'name': 'Beagle', 'number': 656, 'primary_designation': 'Beagle'}) + """ + + self.query_type = 'designations' + + response = self._request('GET', + url=self.URL + object_name + '/designations', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def elements_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for designation + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available color data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> elements = AstInfo.elements('Beagle') + >>> print(elements) + OrderedDict({'a': , 'aphelion_dist': , ...}) + """ + + self.query_type = 'elements' + + response = self._request('GET', + url=self.URL + object_name + '/elements', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def orbit_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for orbit + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available orbit data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> orbit = AstInfo.orbit('Beagle') + >>> print(orbit) + OrderedDict({'a1con': , 'a2con': , 'a3con': , ...}) + """ + + self.query_type = 'orbit' + + response = self._request('GET', + url=self.URL + object_name + '/orbit', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def albedos_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for albedo + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available albedo data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> albedos = AstInfo.albedos('Beagle') + >>> print(albedos) + [{'albedo': 0.065, 'albedo_error_lower': -0.002, ..., 'survey_name': 'Usui et al. (2011)'}, + {'albedo': 0.0625, 'albedo_error_lower': -0.015, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, + ...] + """ + + self.query_type = 'albedos' + + response = self._request('GET', + url=self.URL + object_name + '/data/albedos', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def colors_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for color + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available color data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> colors = AstInfo.colors('Beagle') + >>> print(colors) + [{'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, + {'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, + ...] + """ + + self.query_type = 'colors' + + response = self._request('GET', + url=self.URL + object_name + '/data/colors', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def taxonomies_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for taxonomy + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available taxonomy data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> taxonomies = AstInfo.taxonomies('Beagle') + >>> print(taxonomies) + [{'citation_bibcode': '2011PDSS..145.....H', ..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, + {'citation_bibcode': '2013Icar..226..723D', ..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}] + """ + + self.query_type = 'taxonomies' + + response = self._request('GET', + url=self.URL + object_name + '/data/taxonomies', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def lightcurves_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for lightcurve + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available lightcurve data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> lightcurves = AstInfo.lightcurves('Beagle') + >>> print(lightcurves) + [{'ambiguous_period': False, ..., 'amp_max': , 'amp_min': , ..., 'period': , ...}] + """ + + self.query_type = 'lightcurves' + + response = self._request('GET', + url=self.URL + object_name + '/data/lightcurves', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def dynamicalfamily_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for dynamical family + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available dynamical family data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> dynamicalfamily = AstInfo.dynamicalfamily('Beagle') + >>> print(dynamicalfamily) + [{'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Themis', ...}, + {'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Beagle', ...}] + """ + + self.query_type = 'dynamicalfamily' + + response = self._request('GET', + url=self.URL + object_name + '/data/dynamical-family', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def escaperoutes_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for NEO escape route + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available NEO escape route data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> escaperoutes = AstInfo.escaperoutes('3552') + >>> print(escaperoutes) + [{'citation_bibcode': '2018Icar..312..181G', ..., 'dp21_complex': 0.03695, 'dp31_complex': 0.00105, ...}] + """ + + self.query_type = 'escaperoutes' + + response = self._request('GET', + url=self.URL + object_name + '/data/escape-routes', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = response.url + + return response + + + def all_astinfo_async(self,object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): + """ + This method uses a REST interface to query the `Lowell Observatory + astorbDB database `_ for NEO escape route + data for a single object and returns a dictionary from JSON results + + Parameters + ---------- + object_name : str + name of the identifier to query. + + Returns + ------- + res : A dictionary holding available NEO escape route data + + Examples + -------- + >>> from astroquery.astorbdb import AstInfo + >>> all_astinfo = AstInfo.all_astinfo('Beagle') + >>> print(all_astinfo) + OrderedDict({ + 'designations': OrderedDict({'alternate_designations': ['1954 HJ', 'A908 BJ', 'A917 ST'], 'name': 'Beagle', ...}), + 'elements': OrderedDict({'a': , 'aphelion_dist': , ...}), + 'orbit': OrderedDict({'a1con': , 'a2con': , 'a3con': , ...}), + 'albedos': [{'albedo': 0.065, 'albedo_error_lower': -0.002, 'albedo_error_upper': 0.002, ..., 'survey_name': 'Usui et al. (2011)'}, + {'albedo': 0.0625, 'albedo_error_lower': -0.015, 'albedo_error_upper': 0.015, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, + ...], + 'colors': [{'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, + {'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, + ...], + 'taxonomies': [{'citation_bibcode': '2011PDSS..145.....H', ..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, + {'citation_bibcode': '2013Icar..226..723D', ..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}], + 'lightcurves': [{'ambiguous_period': False, ..., 'amp_max': , 'amp_min': , ..., 'period': , ...}], + 'dynamicalfamily': [{'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Themis', ...}, + {'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Beagle', ...}], + 'escaperoutes': [] + }) + """ + + self.query_type = 'all_astinfo' + + response = {} + + response['designations'] = self._request('GET', + url=self.URL + object_name + '/designations', + timeout=self.TIMEOUT, cache=cache) + + response['elements'] = self._request('GET', + url=self.URL + object_name + '/elements', + timeout=self.TIMEOUT, cache=cache) + + response['orbit'] = self._request('GET', + url=self.URL + object_name + '/orbit', + timeout=self.TIMEOUT, cache=cache) + + response['albedos'] = self._request('GET', + url=self.URL + object_name + '/data/albedos', + timeout=self.TIMEOUT, cache=cache) + + response['colors'] = self._request('GET', + url=self.URL + object_name + '/data/colors', + timeout=self.TIMEOUT, cache=cache) + + response['taxonomies'] = self._request('GET', + url=self.URL + object_name + '/data/taxonomies', + timeout=self.TIMEOUT, cache=cache) + + response['lightcurves'] = self._request('GET', + url=self.URL + object_name + '/data/lightcurves', + timeout=self.TIMEOUT, cache=cache) + + response['dynamicalfamily'] = self._request('GET', + url=self.URL + object_name + '/data/dynamical-family', + timeout=self.TIMEOUT, cache=cache) + + response['escaperoutes'] = self._request('GET', + url=self.URL + object_name + '/data/escape-routes', + timeout=self.TIMEOUT, cache=cache) + + if get_raw_response: + self._return_raw = True + + if get_uri: + self._uri = {'designations':response['designations'].url, + 'elements':response['elements'].url, + 'orbit':response['orbit'].url, + 'albedos':response['albedos'].url, + 'colors':response['colors'].url, + 'taxonomies':response['taxonomies'].url, + 'lightcurves':response['lightcurves'].url, + 'dynamicalfamily':response['dynamicalfamily'].url, + 'escaperoutes':response['escaperoutes'].url + } + + return response + + + def _parse_result(self, response, *, verbose=None): + """ + Parser for astorbDB AstInfo request results + """ + + if self._return_raw: + return response.text + + # decode json response from Lowell astorbDB into ascii + try: + if self.query_type == 'all_astinfo': + src = OrderedDict() + for key in response: + src[key] = OrderedDict(json.loads(response[key].text)) + else: + src = OrderedDict(json.loads(response.text)) + except ValueError: + raise ValueError('Server response not readable.') + + if self.query_type == 'designations': + src = self._process_data_designations(src) + + if self.query_type == 'elements': + src = self._process_data_elements(src) + + if self.query_type == 'orbit': + src = self._process_data_orbit(src) + + if self.query_type == 'albedos': + src = self._process_data_albedos(src) + + if self.query_type == 'colors': + src = self._process_data_colors(src) + + if self.query_type == 'taxonomies': + src = self._process_data_taxonomies(src) + + if self.query_type == 'lightcurves': + src = self._process_data_lightcurves(src) + + if self.query_type == 'dynamicalfamily': + src = self._process_data_dynamicalfamily(src) + + if self.query_type == 'escaperoutes': + src = self._process_data_escaperoutes(src) + + if self.query_type == 'all_astinfo': + src['designations'] = self._process_data_designations(src['designations']) + src['elements'] = self._process_data_elements(src['elements']) + src['orbit'] = self._process_data_orbit(src['orbit']) + src['albedos'] = self._process_data_albedos(src['albedos']) + src['colors'] = self._process_data_colors(src['colors']) + src['taxonomies'] = self._process_data_taxonomies(src['taxonomies']) + src['lightcurves'] = self._process_data_lightcurves(src['lightcurves']) + src['dynamicalfamily'] = self._process_data_dynamicalfamily(src['dynamicalfamily']) + src['escaperoutes'] = self._process_data_escaperoutes(src['escaperoutes']) + + # add query uri, if desired + if self._uri is not None: + src['query_uri'] = self._uri + + return src + + + + def _process_data_designations(self, src): + """ + internal routine to process raw data in OrderedDict format + + """ + + if 'designations' in src: + src = OrderedDict(src['designations']) + + return src + + + def _process_data_elements(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'elements' in src: + src = OrderedDict(src['elements']) + src['a'] = u.Quantity(src['a'], u.au) + src['aphelion_dist'] = u.Quantity(src['aphelion_dist'], u.au) + if src['delta_v'] is not None: + src['delta_v'] = u.Quantity(src['delta_v'], u.km/u.s) + src['ecc_anomaly'] = u.Quantity(src['ecc_anomaly'], u.deg) + src['epoch'] = Time(src['epoch'], format='isot', scale='utc') + src['h'] = u.Quantity(src['h'], u.mag) + src['i'] = u.Quantity(src['m'], u.deg) + src['long_of_perihelion'] = u.Quantity(src['long_of_perihelion'], u.deg) + src['m'] = u.Quantity(src['m'], u.deg) + src['moid_earth'] = u.Quantity(src['moid_earth'], u.au) + src['moid_jupiter'] = u.Quantity(src['moid_jupiter'], u.au) + src['moid_mars'] = u.Quantity(src['moid_mars'], u.au) + src['moid_mercury'] = u.Quantity(src['moid_mercury'], u.au) + src['moid_neptune'] = u.Quantity(src['moid_neptune'], u.au) + src['moid_saturn'] = u.Quantity(src['moid_saturn'], u.au) + src['moid_uranus'] = u.Quantity(src['moid_uranus'], u.au) + src['moid_venus'] = u.Quantity(src['moid_venus'], u.au) + src['node'] = u.Quantity(src['node'], u.deg) + src['peri'] = u.Quantity(src['peri'], u.deg) + src['q'] = u.Quantity(src['q'], u.au) + src['r'] = u.Quantity(src['r'], u.au) + src['true_anomaly'] = u.Quantity(src['true_anomaly'], u.deg) + src['x'] = u.Quantity(src['x'], u.au) + src['y'] = u.Quantity(src['y'], u.au) + src['z'] = u.Quantity(src['z'], u.au) + + return src + + + def _process_data_orbit(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'orbit' in src: + src = OrderedDict(src['orbit']) + src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) + src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) + src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) + src['arc'] = u.Quantity(src['arc'], u.yr) + + return src + + + def _process_data_albedos(self, src): + """ + internal routine to process raw data in Dict format + + """ + + if 'albedos' in src: + src = src['albedos'] + for i in range(len(src)): + src[i]['diameter'] = u.Quantity(src[i]['diameter'], u.km) + src[i]['diameter_error_lower'] = u.Quantity(src[i]['diameter_error_lower'], u.km) + src[i]['diameter_error_upper'] = u.Quantity(src[i]['diameter_error_upper'], u.km) + + return src + + + def _process_data_colors(self, src): + """ + internal routine to process raw data in Dict format + + """ + + if 'colors' in src: + src = src['colors'] + for i in range(len(src)): + src[i]['jd'] = Time(src[i]['jd'], format='jd', scale='utc') + + return src + + + def _process_data_taxonomies(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'taxonomies' in src: + src = src['taxonomies'] + + return src + + + def _process_data_lightcurves(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'lightcurves' in src: + src = src['lightcurves'] + for i in range(len(src)): + if src[i]['amp_max'] is not None: + src[i]['amp_max'] = u.Quantity(src[i]['amp_max'], u.mag) + if src[i]['amp_min'] is not None: + src[i]['amp_min'] = u.Quantity(src[i]['amp_min'], u.mag) + src[i]['period'] = u.Quantity(src[i]['period'], u.h) + + return src + + + def _process_data_dynamicalfamily(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'dynamical-family' in src: + src = src['dynamical-family'] + + return src + + + def _process_data_escaperoutes(self, src): + """ + internal routine to process raw data in OrderedDict format, must + be able to work recursively + + """ + + if 'escape-routes' in src: + src = src['escape-routes'] + for i in range(len(src)): + src[i]['epoch'] = Time(src[i]['epoch'], format='isot', scale='utc') + + return src + + +AstInfo = AstInfoClass() + +# once your class is done, tests should be written +# See ./tests for examples on this + +# Next you should write the docs in astroquery/docs/module_name +# using Sphinx. diff --git a/astroquery/astorbdb/tests/__init__.py b/astroquery/astorbdb/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/astroquery/astorbdb/tests/data/dummy.dat b/astroquery/astorbdb/tests/data/dummy.dat new file mode 100644 index 0000000000..aa5bd30df5 --- /dev/null +++ b/astroquery/astorbdb/tests/data/dummy.dat @@ -0,0 +1,2 @@ +this is a dummy data file. +Similarly include xml, html, fits and other data files for tests diff --git a/astroquery/astorbdb/tests/setup_package.py b/astroquery/astorbdb/tests/setup_package.py new file mode 100644 index 0000000000..72b8669485 --- /dev/null +++ b/astroquery/astorbdb/tests/setup_package.py @@ -0,0 +1,15 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + + +import os + + +# setup paths to the test data +# can specify a single file or a list of files +def get_package_data(): + paths = [os.path.join('data', '*.dat'), + os.path.join('data', '*.xml'), + ] # etc, add other extensions + # you can also enlist files individually by names + # finally construct and return a dict for the sub module + return {'astroquery.template_module.tests': paths} diff --git a/astroquery/astorbdb/tests/test_module.py b/astroquery/astorbdb/tests/test_module.py new file mode 100644 index 0000000000..f2574589e1 --- /dev/null +++ b/astroquery/astorbdb/tests/test_module.py @@ -0,0 +1,80 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +# astroquery uses the pytest framework for testing +# this is already available in astropy and does +# not require a separate install. Import it using: +import pytest + +# It would be best if tests are separated in two +# modules. This module performs tests on local data +# by mocking HTTP requests and responses. To test the +# same functions on the remote server, put the relevant +# tests in the 'test_module_remote.py' + +# Now import other commonly used modules for tests +import os + +from astropy.table import Table +import astropy.coordinates as coord +import astropy.units as u + +from astroquery.utils.mocks import MockResponse + +# finally import the module which is to be tested +# and the various configuration items created +from ... import template_module +from ...template_module import conf + +# Local tests should have the corresponding data stored +# in the ./data folder. This is the actual HTTP response +# one would expect from the server when a valid query is made. +# Its best to keep the data file small, so that testing is +# quicker. When running tests locally the stored data is used +# to mock the HTTP requests and response part of the query +# thereby saving time and bypassing unreliability for +# an actual remote network query. + +DATA_FILES = {'GET': + # You might have a different response for each URL you're + # querying: + {'http://dummy_server_mirror_1': + 'dummy.dat'}} + + +# ./setup_package.py helps the test function locate the data file +# define a function that can construct the full path to the file in the +# ./data directory: +def data_path(filename): + data_dir = os.path.join(os.path.dirname(__file__), 'data') + return os.path.join(data_dir, filename) + + +# define a monkeypatch replacement request function that returns the +# dummy HTTP response for the dummy 'get' function, by +# reading in data from some data file: +def nonremote_request(self, request_type, url, **kwargs): + # kwargs are ignored in this case, but they don't have to be + # (you could use them to define which data file to read) + with open(data_path(DATA_FILES[request_type][url]), 'rb') as f: + response = MockResponse(content=f.read(), url=url) + return response + + +# use a pytest fixture to create a dummy 'requests.get' function, +# that mocks(monkeypatches) the actual 'requests.get' function: +@pytest.fixture +def patch_request(request): + mp = request.getfixturevalue("monkeypatch") + + mp.setattr(template_module.core.TemplateClass, '_request', + nonremote_request) + return mp + + +# finally test the methods using the mock HTTP response +def test_query_object(patch_request): + result = template_module.core.TemplateClass().query_object('m1') + assert isinstance(result, Table) + +# similarly fill in tests for each of the methods +# look at tests in existing modules for more examples diff --git a/astroquery/astorbdb/tests/test_module_remote.py b/astroquery/astorbdb/tests/test_module_remote.py new file mode 100644 index 0000000000..ca7ba46800 --- /dev/null +++ b/astroquery/astorbdb/tests/test_module_remote.py @@ -0,0 +1,16 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + + +# performs similar tests as test_module.py, but performs +# the actual HTTP request rather than monkeypatching them. +# should be disabled or enabled at will - use the +# remote_data decorator from astropy: + +import pytest + + +@pytest.mark.remote_data +class TestTemplateClass: + # now write tests for each method here + def test_this(self): + pass From 40e8902aa7934ca75fce545c82eb543c18349794 Mon Sep 17 00:00:00 2001 From: hhsieh00 Date: Tue, 4 Feb 2025 10:31:15 -1000 Subject: [PATCH 02/42] Fixing some codestyle issues in core.py Fixing some codestyle issues in core.py --- astroquery/astorbdb/core.py | 172 +++++++++++++++--------------------- 1 file changed, 72 insertions(+), 100 deletions(-) diff --git a/astroquery/astorbdb/core.py b/astroquery/astorbdb/core.py index d713d69ef0..27dba2846f 100644 --- a/astroquery/astorbdb/core.py +++ b/astroquery/astorbdb/core.py @@ -1,27 +1,20 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u -import astropy.coordinates as coord -import astropy.io.votable as votable -import warnings -from astropy.table import Table from astropy.time import Time -from astropy.io import fits import json from collections import OrderedDict from ..query import BaseQuery -from ..utils import commons from ..utils import async_to_sync from . import conf __all__ = ['AstInfo', 'AstInfoClass'] + @async_to_sync class AstInfoClass(BaseQuery): - ## NEED TO ADD EXAMPLE OUTPUT TO ALL METHODS ## - """ A class for querying Lowell Observatory's `astorbDB `_ service. @@ -39,7 +32,7 @@ class AstInfoClass(BaseQuery): # actual query uri _uri = None - def designations_async(self,object_name, *, + def designations_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -47,15 +40,15 @@ def designations_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for designation data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- - res : A dictionary holding available color data + res : A dictionary holding available designation data Examples -------- @@ -66,7 +59,7 @@ def designations_async(self,object_name, *, """ self.query_type = 'designations' - + response = self._request('GET', url=self.URL + object_name + '/designations', timeout=self.TIMEOUT, cache=cache) @@ -76,27 +69,26 @@ def designations_async(self,object_name, *, if get_uri: self._uri = response.url - + return response - - def elements_async(self,object_name, *, + def elements_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for designation + astorbDB database `_ for orbital element data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- - res : A dictionary holding available color data + res : A dictionary holding available orbital element data Examples -------- @@ -107,7 +99,7 @@ def elements_async(self,object_name, *, """ self.query_type = 'elements' - + response = self._request('GET', url=self.URL + object_name + '/elements', timeout=self.TIMEOUT, cache=cache) @@ -117,11 +109,10 @@ def elements_async(self,object_name, *, if get_uri: self._uri = response.url - + return response - - def orbit_async(self,object_name, *, + def orbit_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -129,12 +120,12 @@ def orbit_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for orbit data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available orbit data @@ -148,21 +139,20 @@ def orbit_async(self,object_name, *, """ self.query_type = 'orbit' - + response = self._request('GET', url=self.URL + object_name + '/orbit', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True if get_uri: self._uri = response.url - + return response - - def albedos_async(self,object_name, *, + def albedos_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -170,12 +160,12 @@ def albedos_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for albedo data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available albedo data @@ -191,21 +181,20 @@ def albedos_async(self,object_name, *, """ self.query_type = 'albedos' - + response = self._request('GET', url=self.URL + object_name + '/data/albedos', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True if get_uri: self._uri = response.url - - return response + return response - def colors_async(self,object_name, *, + def colors_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -213,12 +202,12 @@ def colors_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for color data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available color data @@ -234,11 +223,11 @@ def colors_async(self,object_name, *, """ self.query_type = 'colors' - + response = self._request('GET', url=self.URL + object_name + '/data/colors', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True @@ -247,8 +236,7 @@ def colors_async(self,object_name, *, return response - - def taxonomies_async(self,object_name, *, + def taxonomies_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -256,12 +244,12 @@ def taxonomies_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for taxonomy data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available taxonomy data @@ -276,21 +264,20 @@ def taxonomies_async(self,object_name, *, """ self.query_type = 'taxonomies' - + response = self._request('GET', url=self.URL + object_name + '/data/taxonomies', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True if get_uri: self._uri = response.url - + return response - - def lightcurves_async(self,object_name, *, + def lightcurves_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -298,12 +285,12 @@ def lightcurves_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for lightcurve data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available lightcurve data @@ -317,21 +304,20 @@ def lightcurves_async(self,object_name, *, """ self.query_type = 'lightcurves' - + response = self._request('GET', url=self.URL + object_name + '/data/lightcurves', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True if get_uri: self._uri = response.url - - return response + return response - def dynamicalfamily_async(self,object_name, *, + def dynamicalfamily_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -339,12 +325,12 @@ def dynamicalfamily_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for dynamical family data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available dynamical family data @@ -359,21 +345,20 @@ def dynamicalfamily_async(self,object_name, *, """ self.query_type = 'dynamicalfamily' - + response = self._request('GET', url=self.URL + object_name + '/data/dynamical-family', timeout=self.TIMEOUT, cache=cache) - + if get_raw_response: self._return_raw = True if get_uri: self._uri = response.url - + return response - - def escaperoutes_async(self,object_name, *, + def escaperoutes_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -381,12 +366,12 @@ def escaperoutes_async(self,object_name, *, This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for NEO escape route data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- res : A dictionary holding available NEO escape route data @@ -400,7 +385,7 @@ def escaperoutes_async(self,object_name, *, """ self.query_type = 'escaperoutes' - + response = self._request('GET', url=self.URL + object_name + '/data/escape-routes', timeout=self.TIMEOUT, cache=cache) @@ -410,27 +395,26 @@ def escaperoutes_async(self,object_name, *, if get_uri: self._uri = response.url - - return response + return response - def all_astinfo_async(self,object_name, *, + def all_astinfo_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): """ - This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for NEO escape route + This method uses REST interfaces to query the `Lowell Observatory + astorbDB database `_ for all AstInfo data for a single object and returns a dictionary from JSON results - + Parameters ---------- object_name : str name of the identifier to query. - + Returns ------- - res : A dictionary holding available NEO escape route data + res : A dictionary holding available AstInfo data Examples -------- @@ -459,23 +443,23 @@ def all_astinfo_async(self,object_name, *, self.query_type = 'all_astinfo' response = {} - + response['designations'] = self._request('GET', url=self.URL + object_name + '/designations', timeout=self.TIMEOUT, cache=cache) - + response['elements'] = self._request('GET', url=self.URL + object_name + '/elements', timeout=self.TIMEOUT, cache=cache) - + response['orbit'] = self._request('GET', url=self.URL + object_name + '/orbit', timeout=self.TIMEOUT, cache=cache) - + response['albedos'] = self._request('GET', url=self.URL + object_name + '/data/albedos', timeout=self.TIMEOUT, cache=cache) - + response['colors'] = self._request('GET', url=self.URL + object_name + '/data/colors', timeout=self.TIMEOUT, cache=cache) @@ -510,9 +494,8 @@ def all_astinfo_async(self,object_name, *, 'dynamicalfamily':response['dynamicalfamily'].url, 'escaperoutes':response['escaperoutes'].url } - - return response + return response def _parse_result(self, response, *, verbose=None): """ @@ -541,7 +524,7 @@ def _parse_result(self, response, *, verbose=None): if self.query_type == 'orbit': src = self._process_data_orbit(src) - + if self.query_type == 'albedos': src = self._process_data_albedos(src) @@ -577,8 +560,6 @@ def _parse_result(self, response, *, verbose=None): return src - - def _process_data_designations(self, src): """ internal routine to process raw data in OrderedDict format @@ -590,7 +571,6 @@ def _process_data_designations(self, src): return src - def _process_data_elements(self, src): """ internal routine to process raw data in OrderedDict format, must @@ -629,23 +609,21 @@ def _process_data_elements(self, src): return src - def _process_data_orbit(self, src): """ internal routine to process raw data in OrderedDict format, must be able to work recursively """ - + if 'orbit' in src: src = OrderedDict(src['orbit']) src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) src['arc'] = u.Quantity(src['arc'], u.yr) - - return src + return src def _process_data_albedos(self, src): """ @@ -659,9 +637,8 @@ def _process_data_albedos(self, src): src[i]['diameter'] = u.Quantity(src[i]['diameter'], u.km) src[i]['diameter_error_lower'] = u.Quantity(src[i]['diameter_error_lower'], u.km) src[i]['diameter_error_upper'] = u.Quantity(src[i]['diameter_error_upper'], u.km) - - return src + return src def _process_data_colors(self, src): """ @@ -673,9 +650,8 @@ def _process_data_colors(self, src): src = src['colors'] for i in range(len(src)): src[i]['jd'] = Time(src[i]['jd'], format='jd', scale='utc') - - return src + return src def _process_data_taxonomies(self, src): """ @@ -689,7 +665,6 @@ def _process_data_taxonomies(self, src): return src - def _process_data_lightcurves(self, src): """ internal routine to process raw data in OrderedDict format, must @@ -705,9 +680,8 @@ def _process_data_lightcurves(self, src): if src[i]['amp_min'] is not None: src[i]['amp_min'] = u.Quantity(src[i]['amp_min'], u.mag) src[i]['period'] = u.Quantity(src[i]['period'], u.h) - - return src + return src def _process_data_dynamicalfamily(self, src): """ @@ -721,7 +695,6 @@ def _process_data_dynamicalfamily(self, src): return src - def _process_data_escaperoutes(self, src): """ internal routine to process raw data in OrderedDict format, must @@ -736,7 +709,6 @@ def _process_data_escaperoutes(self, src): return src - AstInfo = AstInfoClass() # once your class is done, tests should be written From 574f865387c356ac25e2b88eeceebc9f144c397b Mon Sep 17 00:00:00 2001 From: hhsieh00 Date: Tue, 4 Feb 2025 10:44:20 -1000 Subject: [PATCH 03/42] fixing more codestyle issues in core.py fixing more codestyle issues in core.py --- astroquery/astorbdb/core.py | 122 ++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/astroquery/astorbdb/core.py b/astroquery/astorbdb/core.py index 27dba2846f..ed2ce7c15a 100644 --- a/astroquery/astorbdb/core.py +++ b/astroquery/astorbdb/core.py @@ -55,14 +55,14 @@ def designations_async(self, object_name, *, >>> from astroquery.astorbdb import AstInfo >>> designations = AstInfo.designations('Beagle') >>> print(designations) - OrderedDict({'alternate_designations': ['1954 HJ', 'A908 BJ', 'A917 ST'], 'name': 'Beagle', 'number': 656, 'primary_designation': 'Beagle'}) + OrderedDict({'alternate_designations': ['1954 HJ', ...], 'name': 'Beagle', 'number': 656, ...}) """ self.query_type = 'designations' response = self._request('GET', - url=self.URL + object_name + '/designations', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/designations', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -73,9 +73,9 @@ def designations_async(self, object_name, *, return response def elements_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for orbital element @@ -101,8 +101,8 @@ def elements_async(self, object_name, *, self.query_type = 'elements' response = self._request('GET', - url=self.URL + object_name + '/elements', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/elements', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -135,14 +135,14 @@ def orbit_async(self, object_name, *, >>> from astroquery.astorbdb import AstInfo >>> orbit = AstInfo.orbit('Beagle') >>> print(orbit) - OrderedDict({'a1con': , 'a2con': , 'a3con': , ...}) + OrderedDict({'a1con': , 'a2con': , ...}) """ self.query_type = 'orbit' response = self._request('GET', - url=self.URL + object_name + '/orbit', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/orbit', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -153,9 +153,9 @@ def orbit_async(self, object_name, *, return response def albedos_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for albedo @@ -183,8 +183,8 @@ def albedos_async(self, object_name, *, self.query_type = 'albedos' response = self._request('GET', - url=self.URL + object_name + '/data/albedos', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/albedos', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -195,9 +195,9 @@ def albedos_async(self, object_name, *, return response def colors_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory astorbDB database `_ for color @@ -217,8 +217,8 @@ def colors_async(self, object_name, *, >>> from astroquery.astorbdb import AstInfo >>> colors = AstInfo.colors('Beagle') >>> print(colors) - [{'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, - {'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, + [{..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, + {..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, ...] """ @@ -266,8 +266,8 @@ def taxonomies_async(self, object_name, *, self.query_type = 'taxonomies' response = self._request('GET', - url=self.URL + object_name + '/data/taxonomies', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/taxonomies', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -300,14 +300,14 @@ def lightcurves_async(self, object_name, *, >>> from astroquery.astorbdb import AstInfo >>> lightcurves = AstInfo.lightcurves('Beagle') >>> print(lightcurves) - [{'ambiguous_period': False, ..., 'amp_max': , 'amp_min': , ..., 'period': , ...}] + [{..., 'amp_max': , 'amp_min': , ..., 'period': , ...}] """ self.query_type = 'lightcurves' response = self._request('GET', - url=self.URL + object_name + '/data/lightcurves', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/lightcurves', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -347,8 +347,8 @@ def dynamicalfamily_async(self, object_name, *, self.query_type = 'dynamicalfamily' response = self._request('GET', - url=self.URL + object_name + '/data/dynamical-family', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/dynamical-family', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -387,8 +387,8 @@ def escaperoutes_async(self, object_name, *, self.query_type = 'escaperoutes' response = self._request('GET', - url=self.URL + object_name + '/data/escape-routes', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/escape-routes', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -399,9 +399,9 @@ def escaperoutes_async(self, object_name, *, return response def all_astinfo_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses REST interfaces to query the `Lowell Observatory astorbDB database `_ for all AstInfo @@ -421,19 +421,20 @@ def all_astinfo_async(self, object_name, *, >>> from astroquery.astorbdb import AstInfo >>> all_astinfo = AstInfo.all_astinfo('Beagle') >>> print(all_astinfo) + OrderedDict({ - 'designations': OrderedDict({'alternate_designations': ['1954 HJ', 'A908 BJ', 'A917 ST'], 'name': 'Beagle', ...}), + 'designations': OrderedDict({'alternate_designations': ['1954 HJ', ...], 'name': 'Beagle', ...}), 'elements': OrderedDict({'a': , 'aphelion_dist': , ...}), - 'orbit': OrderedDict({'a1con': , 'a2con': , 'a3con': , ...}), - 'albedos': [{'albedo': 0.065, 'albedo_error_lower': -0.002, 'albedo_error_upper': 0.002, ..., 'survey_name': 'Usui et al. (2011)'}, - {'albedo': 0.0625, 'albedo_error_lower': -0.015, 'albedo_error_upper': 0.015, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, + 'orbit': OrderedDict({'a1con': , 'a2con': , ...}), + 'albedos': [{'albedo': 0.065, ..., 'survey_name': 'Usui et al. (2011)'}, + {'albedo': 0.0625, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, ...], - 'colors': [{'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, - {'citation_bibcode': '2010PDSS..125.....S', ..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, + 'colors': [{..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, + {..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, ...], - 'taxonomies': [{'citation_bibcode': '2011PDSS..145.....H', ..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, - {'citation_bibcode': '2013Icar..226..723D', ..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}], - 'lightcurves': [{'ambiguous_period': False, ..., 'amp_max': , 'amp_min': , ..., 'period': , ...}], + 'taxonomies': [{..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, + {..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}], + 'lightcurves': [{..., 'amp_max': , ..., 'period': , ...}], 'dynamicalfamily': [{'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Themis', ...}, {'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Beagle', ...}], 'escaperoutes': [] @@ -445,40 +446,40 @@ def all_astinfo_async(self, object_name, *, response = {} response['designations'] = self._request('GET', - url=self.URL + object_name + '/designations', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/designations', + timeout=self.TIMEOUT, cache=cache) response['elements'] = self._request('GET', - url=self.URL + object_name + '/elements', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/elements', + timeout=self.TIMEOUT, cache=cache) response['orbit'] = self._request('GET', - url=self.URL + object_name + '/orbit', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/orbit', + timeout=self.TIMEOUT, cache=cache) response['albedos'] = self._request('GET', - url=self.URL + object_name + '/data/albedos', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/albedos', + timeout=self.TIMEOUT, cache=cache) response['colors'] = self._request('GET', - url=self.URL + object_name + '/data/colors', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/colors', + timeout=self.TIMEOUT, cache=cache) response['taxonomies'] = self._request('GET', - url=self.URL + object_name + '/data/taxonomies', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/taxonomies', + timeout=self.TIMEOUT, cache=cache) response['lightcurves'] = self._request('GET', - url=self.URL + object_name + '/data/lightcurves', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/lightcurves', + timeout=self.TIMEOUT, cache=cache) response['dynamicalfamily'] = self._request('GET', - url=self.URL + object_name + '/data/dynamical-family', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/dynamical-family', + timeout=self.TIMEOUT, cache=cache) response['escaperoutes'] = self._request('GET', - url=self.URL + object_name + '/data/escape-routes', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/escape-routes', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -709,6 +710,7 @@ def _process_data_escaperoutes(self, src): return src + AstInfo = AstInfoClass() # once your class is done, tests should be written From 755b5c913fa5327d1fa19956d4f66b57e01cb00e Mon Sep 17 00:00:00 2001 From: hhsieh00 Date: Tue, 4 Feb 2025 10:50:02 -1000 Subject: [PATCH 04/42] more codestyle issue fixes --- astroquery/astorbdb/core.py | 100 ++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/astroquery/astorbdb/core.py b/astroquery/astorbdb/core.py index ed2ce7c15a..4a40735870 100644 --- a/astroquery/astorbdb/core.py +++ b/astroquery/astorbdb/core.py @@ -225,8 +225,8 @@ def colors_async(self, object_name, *, self.query_type = 'colors' response = self._request('GET', - url=self.URL + object_name + '/data/colors', - timeout=self.TIMEOUT, cache=cache) + url=self.URL + object_name + '/data/colors', + timeout=self.TIMEOUT, cache=cache) if get_raw_response: self._return_raw = True @@ -277,7 +277,7 @@ def taxonomies_async(self, object_name, *, return response - def lightcurves_async(self, object_name, *, + def lightcurves_async(self, object_name, *, get_raw_response=False, get_uri=False, cache=True): @@ -485,16 +485,16 @@ def all_astinfo_async(self, object_name, *, self._return_raw = True if get_uri: - self._uri = {'designations':response['designations'].url, - 'elements':response['elements'].url, - 'orbit':response['orbit'].url, - 'albedos':response['albedos'].url, - 'colors':response['colors'].url, - 'taxonomies':response['taxonomies'].url, - 'lightcurves':response['lightcurves'].url, - 'dynamicalfamily':response['dynamicalfamily'].url, - 'escaperoutes':response['escaperoutes'].url - } + self._uri = {'designations': response['designations'].url, + 'elements': response['elements'].url, + 'orbit': response['orbit'].url, + 'albedos': response['albedos'].url, + 'colors': response['colors'].url, + 'taxonomies': response['taxonomies'].url, + 'lightcurves': response['lightcurves'].url, + 'dynamicalfamily': response['dynamicalfamily'].url, + 'escaperoutes': response['escaperoutes'].url + } return response @@ -545,15 +545,15 @@ def _parse_result(self, response, *, verbose=None): src = self._process_data_escaperoutes(src) if self.query_type == 'all_astinfo': - src['designations'] = self._process_data_designations(src['designations']) - src['elements'] = self._process_data_elements(src['elements']) - src['orbit'] = self._process_data_orbit(src['orbit']) - src['albedos'] = self._process_data_albedos(src['albedos']) - src['colors'] = self._process_data_colors(src['colors']) - src['taxonomies'] = self._process_data_taxonomies(src['taxonomies']) - src['lightcurves'] = self._process_data_lightcurves(src['lightcurves']) + src['designations'] = self._process_data_designations(src['designations']) + src['elements'] = self._process_data_elements(src['elements']) + src['orbit'] = self._process_data_orbit(src['orbit']) + src['albedos'] = self._process_data_albedos(src['albedos']) + src['colors'] = self._process_data_colors(src['colors']) + src['taxonomies'] = self._process_data_taxonomies(src['taxonomies']) + src['lightcurves'] = self._process_data_lightcurves(src['lightcurves']) src['dynamicalfamily'] = self._process_data_dynamicalfamily(src['dynamicalfamily']) - src['escaperoutes'] = self._process_data_escaperoutes(src['escaperoutes']) + src['escaperoutes'] = self._process_data_escaperoutes(src['escaperoutes']) # add query uri, if desired if self._uri is not None: @@ -581,32 +581,32 @@ def _process_data_elements(self, src): if 'elements' in src: src = OrderedDict(src['elements']) - src['a'] = u.Quantity(src['a'], u.au) - src['aphelion_dist'] = u.Quantity(src['aphelion_dist'], u.au) + src['a'] = u.Quantity(src['a'], u.au) + src['aphelion_dist'] = u.Quantity(src['aphelion_dist'], u.au) if src['delta_v'] is not None: - src['delta_v'] = u.Quantity(src['delta_v'], u.km/u.s) - src['ecc_anomaly'] = u.Quantity(src['ecc_anomaly'], u.deg) - src['epoch'] = Time(src['epoch'], format='isot', scale='utc') - src['h'] = u.Quantity(src['h'], u.mag) - src['i'] = u.Quantity(src['m'], u.deg) + src['delta_v'] = u.Quantity(src['delta_v'], u.km/u.s) + src['ecc_anomaly'] = u.Quantity(src['ecc_anomaly'], u.deg) + src['epoch'] = Time(src['epoch'], format='isot', scale='utc') + src['h'] = u.Quantity(src['h'], u.mag) + src['i'] = u.Quantity(src['m'], u.deg) src['long_of_perihelion'] = u.Quantity(src['long_of_perihelion'], u.deg) - src['m'] = u.Quantity(src['m'], u.deg) - src['moid_earth'] = u.Quantity(src['moid_earth'], u.au) - src['moid_jupiter'] = u.Quantity(src['moid_jupiter'], u.au) - src['moid_mars'] = u.Quantity(src['moid_mars'], u.au) - src['moid_mercury'] = u.Quantity(src['moid_mercury'], u.au) - src['moid_neptune'] = u.Quantity(src['moid_neptune'], u.au) - src['moid_saturn'] = u.Quantity(src['moid_saturn'], u.au) - src['moid_uranus'] = u.Quantity(src['moid_uranus'], u.au) - src['moid_venus'] = u.Quantity(src['moid_venus'], u.au) - src['node'] = u.Quantity(src['node'], u.deg) - src['peri'] = u.Quantity(src['peri'], u.deg) - src['q'] = u.Quantity(src['q'], u.au) - src['r'] = u.Quantity(src['r'], u.au) - src['true_anomaly'] = u.Quantity(src['true_anomaly'], u.deg) - src['x'] = u.Quantity(src['x'], u.au) - src['y'] = u.Quantity(src['y'], u.au) - src['z'] = u.Quantity(src['z'], u.au) + src['m'] = u.Quantity(src['m'], u.deg) + src['moid_earth'] = u.Quantity(src['moid_earth'], u.au) + src['moid_jupiter'] = u.Quantity(src['moid_jupiter'], u.au) + src['moid_mars'] = u.Quantity(src['moid_mars'], u.au) + src['moid_mercury'] = u.Quantity(src['moid_mercury'], u.au) + src['moid_neptune'] = u.Quantity(src['moid_neptune'], u.au) + src['moid_saturn'] = u.Quantity(src['moid_saturn'], u.au) + src['moid_uranus'] = u.Quantity(src['moid_uranus'], u.au) + src['moid_venus'] = u.Quantity(src['moid_venus'], u.au) + src['node'] = u.Quantity(src['node'], u.deg) + src['peri'] = u.Quantity(src['peri'], u.deg) + src['q'] = u.Quantity(src['q'], u.au) + src['r'] = u.Quantity(src['r'], u.au) + src['true_anomaly'] = u.Quantity(src['true_anomaly'], u.deg) + src['x'] = u.Quantity(src['x'], u.au) + src['y'] = u.Quantity(src['y'], u.au) + src['z'] = u.Quantity(src['z'], u.au) return src @@ -619,10 +619,10 @@ def _process_data_orbit(self, src): if 'orbit' in src: src = OrderedDict(src['orbit']) - src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) - src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) - src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) - src['arc'] = u.Quantity(src['arc'], u.yr) + src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) + src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) + src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) + src['arc'] = u.Quantity(src['arc'], u.yr) return src @@ -680,7 +680,7 @@ def _process_data_lightcurves(self, src): src[i]['amp_max'] = u.Quantity(src[i]['amp_max'], u.mag) if src[i]['amp_min'] is not None: src[i]['amp_min'] = u.Quantity(src[i]['amp_min'], u.mag) - src[i]['period'] = u.Quantity(src[i]['period'], u.h) + src[i]['period'] = u.Quantity(src[i]['period'], u.h) return src From 6bf1254e4950a9d579562234fd235ea3f9946d63 Mon Sep 17 00:00:00 2001 From: hhsieh00 Date: Tue, 21 Oct 2025 07:36:30 -1000 Subject: [PATCH 05/42] First draft of completed astorbdb class First complete draft of the astorbdb class including tests and documentation --- .pre-commit-config.yaml | 10 + astroquery/astorbdb/core.py | 331 +++++++++------- .../astorbdb/tests/data/2024on_albedos.dat | 4 + .../astorbdb/tests/data/2024on_colors.dat | 4 + .../astorbdb/tests/data/2024on_desig.dat | 11 + .../astorbdb/tests/data/2024on_dynfamily.dat | 4 + .../astorbdb/tests/data/2024on_elements.dat | 38 ++ .../tests/data/2024on_escaperoutes.dat | 30 ++ .../tests/data/2024on_lightcurves.dat | 4 + .../astorbdb/tests/data/2024on_orbit.dat | 45 +++ .../astorbdb/tests/data/2024on_taxonomies.dat | 4 + .../astorbdb/tests/data/300163_albedos.dat | 4 + .../astorbdb/tests/data/300163_colors.dat | 101 +++++ .../astorbdb/tests/data/300163_desig.dat | 11 + .../astorbdb/tests/data/300163_dynfamily.dat | 4 + .../astorbdb/tests/data/300163_elements.dat | 37 ++ .../tests/data/300163_escaperoutes.dat | 4 + .../tests/data/300163_lightcurves.dat | 25 ++ .../astorbdb/tests/data/300163_orbit.dat | 45 +++ .../astorbdb/tests/data/300163_taxonomies.dat | 4 + .../astorbdb/tests/data/apophis_albedos.dat | 4 + .../astorbdb/tests/data/apophis_colors.dat | 4 + .../astorbdb/tests/data/apophis_desig.dat | 13 + .../astorbdb/tests/data/apophis_dynfamily.dat | 4 + .../astorbdb/tests/data/apophis_elements.dat | 38 ++ .../tests/data/apophis_escaperoutes.dat | 30 ++ .../tests/data/apophis_lightcurves.dat | 25 ++ .../astorbdb/tests/data/apophis_orbit.dat | 45 +++ .../tests/data/apophis_taxonomies.dat | 34 ++ .../astorbdb/tests/data/beagle_albedos.dat | 138 +++++++ .../astorbdb/tests/data/beagle_colors.dat | 149 ++++++++ .../astorbdb/tests/data/beagle_desig.dat | 15 + .../astorbdb/tests/data/beagle_dynfamily.dat | 23 ++ .../astorbdb/tests/data/beagle_elements.dat | 37 ++ .../tests/data/beagle_escaperoutes.dat | 4 + .../tests/data/beagle_lightcurves.dat | 25 ++ .../astorbdb/tests/data/beagle_orbit.dat | 45 +++ .../astorbdb/tests/data/beagle_taxonomies.dat | 27 ++ .../astorbdb/tests/data/ceres_albedos.dat | 62 +++ .../astorbdb/tests/data/ceres_colors.dat | 77 ++++ .../astorbdb/tests/data/ceres_desig.dat | 15 + .../astorbdb/tests/data/ceres_dynfamily.dat | 4 + .../astorbdb/tests/data/ceres_elements.dat | 37 ++ .../tests/data/ceres_escaperoutes.dat | 4 + .../astorbdb/tests/data/ceres_lightcurves.dat | 25 ++ .../data/ceres_missing_value_albedos.dat | 62 +++ .../tests/data/ceres_missing_value_colors.dat | 77 ++++ .../tests/data/ceres_missing_value_desig.dat | 15 + .../data/ceres_missing_value_dynfamily.dat | 4 + .../data/ceres_missing_value_elements.dat | 37 ++ .../data/ceres_missing_value_escaperoutes.dat | 4 + .../data/ceres_missing_value_lightcurves.dat | 25 ++ .../tests/data/ceres_missing_value_orbit.dat | 45 +++ .../data/ceres_missing_value_taxonomies.dat | 105 +++++ .../astorbdb/tests/data/ceres_orbit.dat | 45 +++ .../astorbdb/tests/data/ceres_taxonomies.dat | 105 +++++ .../astorbdb/tests/data/chiron_albedos.dat | 24 ++ .../astorbdb/tests/data/chiron_colors.dat | 281 ++++++++++++++ .../astorbdb/tests/data/chiron_desig.dat | 13 + .../astorbdb/tests/data/chiron_dynfamily.dat | 4 + .../astorbdb/tests/data/chiron_elements.dat | 36 ++ .../tests/data/chiron_escaperoutes.dat | 4 + .../tests/data/chiron_lightcurves.dat | 25 ++ .../astorbdb/tests/data/chiron_orbit.dat | 45 +++ .../astorbdb/tests/data/chiron_taxonomies.dat | 73 ++++ astroquery/astorbdb/tests/data/dummy.dat | 2 - .../astorbdb/tests/data/lixiaohua_albedos.dat | 81 ++++ .../astorbdb/tests/data/lixiaohua_colors.dat | 4 + .../astorbdb/tests/data/lixiaohua_desig.dat | 14 + .../tests/data/lixiaohua_dynfamily.dat | 14 + .../tests/data/lixiaohua_elements.dat | 37 ++ .../tests/data/lixiaohua_escaperoutes.dat | 4 + .../tests/data/lixiaohua_lightcurves.dat | 4 + .../astorbdb/tests/data/lixiaohua_orbit.dat | 45 +++ .../tests/data/lixiaohua_taxonomies.dat | 4 + .../astorbdb/tests/data/phaethon_albedos.dat | 43 +++ .../astorbdb/tests/data/phaethon_colors.dat | 29 ++ .../astorbdb/tests/data/phaethon_desig.dat | 13 + .../tests/data/phaethon_dynfamily.dat | 4 + .../astorbdb/tests/data/phaethon_elements.dat | 38 ++ .../tests/data/phaethon_escaperoutes.dat | 30 ++ .../tests/data/phaethon_lightcurves.dat | 25 ++ .../astorbdb/tests/data/phaethon_orbit.dat | 45 +++ .../tests/data/phaethon_taxonomies.dat | 47 +++ .../astorbdb/tests/data/toutatis_albedos.dat | 24 ++ .../astorbdb/tests/data/toutatis_colors.dat | 29 ++ .../astorbdb/tests/data/toutatis_desig.dat | 14 + .../tests/data/toutatis_dynfamily.dat | 4 + .../astorbdb/tests/data/toutatis_elements.dat | 38 ++ .../tests/data/toutatis_escaperoutes.dat | 30 ++ .../tests/data/toutatis_lightcurves.dat | 25 ++ .../astorbdb/tests/data/toutatis_orbit.dat | 45 +++ .../tests/data/toutatis_taxonomies.dat | 47 +++ astroquery/astorbdb/tests/setup_package.py | 12 +- astroquery/astorbdb/tests/test_astorbdb.py | 360 ++++++++++++++++++ .../astorbdb/tests/test_astorbdb_remote.py | 55 +++ astroquery/astorbdb/tests/test_module.py | 80 ---- .../astorbdb/tests/test_module_remote.py | 16 - astroquery/solarsystem/astorbdb/__init__.py | 13 + docs/astorbdb/astorbdb.rst | 213 +++++++++++ docs/solarsystem/astorbdb/astorbdb.rst | 30 ++ 101 files changed, 3897 insertions(+), 254 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 astroquery/astorbdb/tests/data/2024on_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_colors.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_desig.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_elements.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/2024on_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/300163_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/300163_colors.dat create mode 100644 astroquery/astorbdb/tests/data/300163_desig.dat create mode 100644 astroquery/astorbdb/tests/data/300163_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/300163_elements.dat create mode 100644 astroquery/astorbdb/tests/data/300163_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/300163_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/300163_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/300163_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_colors.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_desig.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_elements.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/apophis_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_colors.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_desig.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_elements.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/beagle_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_colors.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_desig.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_elements.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_colors.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_desig.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_elements.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_missing_value_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/ceres_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_colors.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_desig.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_elements.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/chiron_taxonomies.dat delete mode 100644 astroquery/astorbdb/tests/data/dummy.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_colors.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_desig.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_elements.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/lixiaohua_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_colors.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_desig.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_elements.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/phaethon_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_albedos.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_colors.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_desig.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_dynfamily.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_elements.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_escaperoutes.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_lightcurves.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_orbit.dat create mode 100644 astroquery/astorbdb/tests/data/toutatis_taxonomies.dat create mode 100644 astroquery/astorbdb/tests/test_astorbdb.py create mode 100644 astroquery/astorbdb/tests/test_astorbdb_remote.py delete mode 100644 astroquery/astorbdb/tests/test_module.py delete mode 100644 astroquery/astorbdb/tests/test_module_remote.py create mode 100644 astroquery/solarsystem/astorbdb/__init__.py create mode 100644 docs/astorbdb/astorbdb.rst create mode 100644 docs/solarsystem/astorbdb/astorbdb.rst diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000..fd16ba2dc3 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files diff --git a/astroquery/astorbdb/core.py b/astroquery/astorbdb/core.py index 4a40735870..6168c623d0 100644 --- a/astroquery/astorbdb/core.py +++ b/astroquery/astorbdb/core.py @@ -1,10 +1,11 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst -import astropy.units as u -from astropy.time import Time import json from collections import OrderedDict +from astropy.time import Time +import astropy.units as u + from ..query import BaseQuery from ..utils import async_to_sync from . import conf @@ -32,13 +33,13 @@ class AstInfoClass(BaseQuery): # actual query uri _uri = None - def designations_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def albedos_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for designation + astorbDB database `_ for albedo data for a single object and returns a dictionary from JSON results Parameters @@ -48,20 +49,22 @@ def designations_async(self, object_name, *, Returns ------- - res : A dictionary holding available designation data + res : A dictionary holding available albedo data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> designations = AstInfo.designations('Beagle') - >>> print(designations) - OrderedDict({'alternate_designations': ['1954 HJ', ...], 'name': 'Beagle', 'number': 656, ...}) + >>> albedos = AstInfo.albedos('Beagle') # doctest: +SKIP + >>> print(albedos) # doctest: +SKIP + [{'albedo': 0.065, 'albedo_error_lower': -0.002, ..., 'survey_name': 'Usui et al. (2011)'}, + {'albedo': 0.0625, 'albedo_error_lower': -0.015, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, + ...] """ - self.query_type = 'designations' + self.query_type = 'albedos' response = self._request('GET', - url=self.URL + object_name + '/designations', + url=self.URL + object_name + '/data/albedos', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -72,13 +75,13 @@ def designations_async(self, object_name, *, return response - def elements_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def colors_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for orbital element + astorbDB database `_ for color data for a single object and returns a dictionary from JSON results Parameters @@ -88,20 +91,22 @@ def elements_async(self, object_name, *, Returns ------- - res : A dictionary holding available orbital element data + res : A dictionary holding available color data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> elements = AstInfo.elements('Beagle') - >>> print(elements) - OrderedDict({'a': , 'aphelion_dist': , ...}) + >>> colors = AstInfo.colors('Beagle') # doctest: +SKIP + >>> print(colors) # doctest: +SKIP + [{..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, + {..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, + ...] """ - self.query_type = 'elements' + self.query_type = 'colors' response = self._request('GET', - url=self.URL + object_name + '/elements', + url=self.URL + object_name + '/data/colors', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -112,13 +117,13 @@ def elements_async(self, object_name, *, return response - def orbit_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def designations_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for orbit + astorbDB database `_ for designation data for a single object and returns a dictionary from JSON results Parameters @@ -128,20 +133,20 @@ def orbit_async(self, object_name, *, Returns ------- - res : A dictionary holding available orbit data + res : A dictionary holding available designation data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> orbit = AstInfo.orbit('Beagle') - >>> print(orbit) - OrderedDict({'a1con': , 'a2con': , ...}) + >>> designations = AstInfo.designations('Beagle') # doctest: +SKIP + >>> print(designations) # doctest: +SKIP + {'alternate_designations': ['1954 HJ', ...], 'name': 'Beagle', 'number': 656, ...} """ - self.query_type = 'orbit' + self.query_type = 'designations' response = self._request('GET', - url=self.URL + object_name + '/orbit', + url=self.URL + object_name + '/designations', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -152,13 +157,13 @@ def orbit_async(self, object_name, *, return response - def albedos_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def dynamicalfamily_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for albedo + astorbDB database `_ for dynamical family data for a single object and returns a dictionary from JSON results Parameters @@ -168,22 +173,21 @@ def albedos_async(self, object_name, *, Returns ------- - res : A dictionary holding available albedo data + res : A dictionary holding available dynamical family data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> albedos = AstInfo.albedos('Beagle') - >>> print(albedos) - [{'albedo': 0.065, 'albedo_error_lower': -0.002, ..., 'survey_name': 'Usui et al. (2011)'}, - {'albedo': 0.0625, 'albedo_error_lower': -0.015, ..., 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, - ...] + >>> dynamicalfamily = AstInfo.dynamicalfamily('Beagle') # doctest: +SKIP + >>> print(dynamicalfamily) # doctest: +SKIP + [{'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Themis', ...}, + {'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Beagle', ...}] """ - self.query_type = 'albedos' + self.query_type = 'dynamicalfamily' response = self._request('GET', - url=self.URL + object_name + '/data/albedos', + url=self.URL + object_name + '/data/dynamical-family', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -194,13 +198,13 @@ def albedos_async(self, object_name, *, return response - def colors_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def elements_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for color + astorbDB database `_ for orbital element data for a single object and returns a dictionary from JSON results Parameters @@ -210,22 +214,20 @@ def colors_async(self, object_name, *, Returns ------- - res : A dictionary holding available color data + res : A dictionary holding available orbital element data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> colors = AstInfo.colors('Beagle') - >>> print(colors) - [{..., 'color': 0.431, 'color_error': 0.035, ..., 'sys_color': 'J-H'}, - {..., 'color': 0.076, 'color_error': 0.041, ..., 'sys_color': 'H-K'}, - ...] + >>> elements = AstInfo.elements('Beagle') # doctest: +SKIP + >>> print(elements) # doctest: +SKIP + OrderedDict({'a': , 'aphelion_dist': , ...}) """ - self.query_type = 'colors' + self.query_type = 'elements' response = self._request('GET', - url=self.URL + object_name + '/data/colors', + url=self.URL + object_name + '/elements', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -236,13 +238,13 @@ def colors_async(self, object_name, *, return response - def taxonomies_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def escaperoutes_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for taxonomy + astorbDB database `_ for NEO escape route data for a single object and returns a dictionary from JSON results Parameters @@ -252,21 +254,20 @@ def taxonomies_async(self, object_name, *, Returns ------- - res : A dictionary holding available taxonomy data + res : A dictionary holding available NEO escape route data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> taxonomies = AstInfo.taxonomies('Beagle') - >>> print(taxonomies) - [{'citation_bibcode': '2011PDSS..145.....H', ..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, - {'citation_bibcode': '2013Icar..226..723D', ..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}] + >>> escaperoutes = AstInfo.escaperoutes('3552') # doctest: +SKIP + >>> print(escaperoutes) # doctest: +SKIP + [{'citation_bibcode': '2018Icar..312..181G', ..., 'dp21_complex': 0.03695, 'dp31_complex': 0.00105, ...}] """ - self.query_type = 'taxonomies' + self.query_type = 'escaperoutes' response = self._request('GET', - url=self.URL + object_name + '/data/taxonomies', + url=self.URL + object_name + '/data/escape-routes', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -298,8 +299,8 @@ def lightcurves_async(self, object_name, *, Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> lightcurves = AstInfo.lightcurves('Beagle') - >>> print(lightcurves) + >>> lightcurves = AstInfo.lightcurves('Beagle') # doctest: +SKIP + >>> print(lightcurves) # doctest: +SKIP [{..., 'amp_max': , 'amp_min': , ..., 'period': , ...}] """ @@ -317,13 +318,13 @@ def lightcurves_async(self, object_name, *, return response - def dynamicalfamily_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def orbit_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for dynamical family + astorbDB database `_ for orbit data for a single object and returns a dictionary from JSON results Parameters @@ -333,21 +334,20 @@ def dynamicalfamily_async(self, object_name, *, Returns ------- - res : A dictionary holding available dynamical family data + res : A dictionary holding available orbit fitting data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> dynamicalfamily = AstInfo.dynamicalfamily('Beagle') - >>> print(dynamicalfamily) - [{'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Themis', ...}, - {'citation_bibcode': '2015PDSS..234.....N', ..., 'family': 'Beagle', ...}] + >>> orbit = AstInfo.orbit('Beagle') # doctest: +SKIP + >>> print(orbit) # doctest: +SKIP + OrderedDict({'a1con': , 'a2con': , ...}) """ - self.query_type = 'dynamicalfamily' + self.query_type = 'orbit' response = self._request('GET', - url=self.URL + object_name + '/data/dynamical-family', + url=self.URL + object_name + '/orbit', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -358,13 +358,13 @@ def dynamicalfamily_async(self, object_name, *, return response - def escaperoutes_async(self, object_name, *, - get_raw_response=False, - get_uri=False, - cache=True): + def taxonomies_async(self, object_name, *, + get_raw_response=False, + get_uri=False, + cache=True): """ This method uses a REST interface to query the `Lowell Observatory - astorbDB database `_ for NEO escape route + astorbDB database `_ for taxonomy data for a single object and returns a dictionary from JSON results Parameters @@ -374,20 +374,21 @@ def escaperoutes_async(self, object_name, *, Returns ------- - res : A dictionary holding available NEO escape route data + res : A dictionary holding available taxonomy data Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> escaperoutes = AstInfo.escaperoutes('3552') - >>> print(escaperoutes) - [{'citation_bibcode': '2018Icar..312..181G', ..., 'dp21_complex': 0.03695, 'dp31_complex': 0.00105, ...}] + >>> taxonomies = AstInfo.taxonomies('Beagle') # doctest: +SKIP + >>> print(taxonomies) # doctest: +SKIP + [{'citation_bibcode': '2011PDSS..145.....H', ..., 'survey_name': 'Carvano et al. (2010)', 'taxonomy': 'C', ...}, + {'citation_bibcode': '2013Icar..226..723D', ..., 'survey_name': 'DeMeo et al. (2013)', 'taxonomy': 'C', ...}] """ - self.query_type = 'escaperoutes' + self.query_type = 'taxonomies' response = self._request('GET', - url=self.URL + object_name + '/data/escape-routes', + url=self.URL + object_name + '/data/taxonomies', timeout=self.TIMEOUT, cache=cache) if get_raw_response: @@ -419,9 +420,8 @@ def all_astinfo_async(self, object_name, *, Examples -------- >>> from astroquery.astorbdb import AstInfo - >>> all_astinfo = AstInfo.all_astinfo('Beagle') - >>> print(all_astinfo) - + >>> all_astinfo = AstInfo.all_astinfo('Beagle') # doctest: +SKIP + >>> print(all_astinfo) # doctest: +SKIP OrderedDict({ 'designations': OrderedDict({'alternate_designations': ['1954 HJ', ...], 'name': 'Beagle', ...}), 'elements': OrderedDict({'a': , 'aphelion_dist': , ...}), @@ -508,7 +508,7 @@ def _parse_result(self, response, *, verbose=None): # decode json response from Lowell astorbDB into ascii try: - if self.query_type == 'all_astinfo': + if isinstance(response,dict): src = OrderedDict() for key in response: src[key] = OrderedDict(json.loads(response[key].text)) @@ -563,66 +563,94 @@ def _parse_result(self, response, *, verbose=None): def _process_data_designations(self, src): """ - internal routine to process raw data in OrderedDict format + internal routine to process raw data in Dict format """ if 'designations' in src: - src = OrderedDict(src['designations']) + src = src['designations'] return src def _process_data_elements(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ if 'elements' in src: - src = OrderedDict(src['elements']) - src['a'] = u.Quantity(src['a'], u.au) - src['aphelion_dist'] = u.Quantity(src['aphelion_dist'], u.au) + src = src['elements'] + if src['a'] is not None: + src['a'] = u.Quantity(src['a'], u.au) + if src['aphelion_dist'] is not None: + src['aphelion_dist'] = u.Quantity(src['aphelion_dist'], u.au) if src['delta_v'] is not None: src['delta_v'] = u.Quantity(src['delta_v'], u.km/u.s) - src['ecc_anomaly'] = u.Quantity(src['ecc_anomaly'], u.deg) - src['epoch'] = Time(src['epoch'], format='isot', scale='utc') - src['h'] = u.Quantity(src['h'], u.mag) - src['i'] = u.Quantity(src['m'], u.deg) - src['long_of_perihelion'] = u.Quantity(src['long_of_perihelion'], u.deg) - src['m'] = u.Quantity(src['m'], u.deg) - src['moid_earth'] = u.Quantity(src['moid_earth'], u.au) - src['moid_jupiter'] = u.Quantity(src['moid_jupiter'], u.au) - src['moid_mars'] = u.Quantity(src['moid_mars'], u.au) - src['moid_mercury'] = u.Quantity(src['moid_mercury'], u.au) - src['moid_neptune'] = u.Quantity(src['moid_neptune'], u.au) - src['moid_saturn'] = u.Quantity(src['moid_saturn'], u.au) - src['moid_uranus'] = u.Quantity(src['moid_uranus'], u.au) - src['moid_venus'] = u.Quantity(src['moid_venus'], u.au) - src['node'] = u.Quantity(src['node'], u.deg) - src['peri'] = u.Quantity(src['peri'], u.deg) - src['q'] = u.Quantity(src['q'], u.au) - src['r'] = u.Quantity(src['r'], u.au) - src['true_anomaly'] = u.Quantity(src['true_anomaly'], u.deg) - src['x'] = u.Quantity(src['x'], u.au) - src['y'] = u.Quantity(src['y'], u.au) - src['z'] = u.Quantity(src['z'], u.au) + if src['ecc_anomaly'] is not None: + src['ecc_anomaly'] = u.Quantity(src['ecc_anomaly'], u.deg) + if src['epoch'] is not None: + src['epoch'] = Time(src['epoch'], format='isot', scale='utc') + if src['h'] is not None: + src['h'] = u.Quantity(src['h'], u.mag) + if src['i'] is not None: + src['i'] = u.Quantity(src['m'], u.deg) + if src['long_of_perihelion'] is not None: + src['long_of_perihelion'] = u.Quantity(src['long_of_perihelion'], u.deg) + if src['m'] is not None: + src['m'] = u.Quantity(src['m'], u.deg) + if src['moid_earth'] is not None: + src['moid_earth'] = u.Quantity(src['moid_earth'], u.au) + if src['moid_jupiter'] is not None: + src['moid_jupiter'] = u.Quantity(src['moid_jupiter'], u.au) + if src['moid_mars'] is not None: + src['moid_mars'] = u.Quantity(src['moid_mars'], u.au) + if src['moid_mercury'] is not None: + src['moid_mercury'] = u.Quantity(src['moid_mercury'], u.au) + if src['moid_neptune'] is not None: + src['moid_neptune'] = u.Quantity(src['moid_neptune'], u.au) + if src['moid_saturn'] is not None: + src['moid_saturn'] = u.Quantity(src['moid_saturn'], u.au) + if src['moid_uranus'] is not None: + src['moid_uranus'] = u.Quantity(src['moid_uranus'], u.au) + if src['moid_venus'] is not None: + src['moid_venus'] = u.Quantity(src['moid_venus'], u.au) + if src['node'] is not None: + src['node'] = u.Quantity(src['node'], u.deg) + if src['peri'] is not None: + src['peri'] = u.Quantity(src['peri'], u.deg) + if src['q'] is not None: + src['q'] = u.Quantity(src['q'], u.au) + if src['r'] is not None: + src['r'] = u.Quantity(src['r'], u.au) + if src['true_anomaly'] is not None: + src['true_anomaly'] = u.Quantity(src['true_anomaly'], u.deg) + if src['x'] is not None: + src['x'] = u.Quantity(src['x'], u.au) + if src['y'] is not None: + src['y'] = u.Quantity(src['y'], u.au) + if src['z'] is not None: + src['z'] = u.Quantity(src['z'], u.au) return src def _process_data_orbit(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ if 'orbit' in src: - src = OrderedDict(src['orbit']) - src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) - src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) - src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) - src['arc'] = u.Quantity(src['arc'], u.yr) + src = src['orbit'] + if src['a1con'] is not None: + src['a1con'] = u.Quantity(src['a1con'], u.au/(u.d ** 2)) + if src['a2con'] is not None: + src['a2con'] = u.Quantity(src['a2con'], u.au/(u.d ** 2)) + if src['a3con'] is not None: + src['a3con'] = u.Quantity(src['a3con'], u.au/(u.d ** 2)) + if src['arc'] is not None: + src['arc'] = u.Quantity(src['arc'], u.yr) return src @@ -635,9 +663,12 @@ def _process_data_albedos(self, src): if 'albedos' in src: src = src['albedos'] for i in range(len(src)): - src[i]['diameter'] = u.Quantity(src[i]['diameter'], u.km) - src[i]['diameter_error_lower'] = u.Quantity(src[i]['diameter_error_lower'], u.km) - src[i]['diameter_error_upper'] = u.Quantity(src[i]['diameter_error_upper'], u.km) + if src[i]['diameter'] is not None: + src[i]['diameter'] = u.Quantity(src[i]['diameter'], u.km) + if src[i]['diameter_error_lower'] is not None: + src[i]['diameter_error_lower'] = u.Quantity(src[i]['diameter_error_lower'], u.km) + if src[i]['diameter_error_upper'] is not None: + src[i]['diameter_error_upper'] = u.Quantity(src[i]['diameter_error_upper'], u.km) return src @@ -650,13 +681,14 @@ def _process_data_colors(self, src): if 'colors' in src: src = src['colors'] for i in range(len(src)): - src[i]['jd'] = Time(src[i]['jd'], format='jd', scale='utc') + if src[i]['jd'] is not None: + src[i]['jd'] = Time(src[i]['jd'], format='jd', scale='utc') return src def _process_data_taxonomies(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ @@ -668,7 +700,7 @@ def _process_data_taxonomies(self, src): def _process_data_lightcurves(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ @@ -678,15 +710,16 @@ def _process_data_lightcurves(self, src): for i in range(len(src)): if src[i]['amp_max'] is not None: src[i]['amp_max'] = u.Quantity(src[i]['amp_max'], u.mag) - if src[i]['amp_min'] is not None: - src[i]['amp_min'] = u.Quantity(src[i]['amp_min'], u.mag) + if src[i]['amp_min'] is not None: + src[i]['amp_min'] = u.Quantity(src[i]['amp_min'], u.mag) + if src[i]['period'] is not None: src[i]['period'] = u.Quantity(src[i]['period'], u.h) return src def _process_data_dynamicalfamily(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ @@ -698,15 +731,17 @@ def _process_data_dynamicalfamily(self, src): def _process_data_escaperoutes(self, src): """ - internal routine to process raw data in OrderedDict format, must + internal routine to process raw data in Dict format, must be able to work recursively """ if 'escape-routes' in src: src = src['escape-routes'] - for i in range(len(src)): - src[i]['epoch'] = Time(src[i]['epoch'], format='isot', scale='utc') + if src is not None: + for i in range(len(src)): + if src[i]['epoch'] is not None: + src[i]['epoch'] = Time(src[i]['epoch'], format='isot', scale='utc') return src diff --git a/astroquery/astorbdb/tests/data/2024on_albedos.dat b/astroquery/astorbdb/tests/data/2024on_albedos.dat new file mode 100644 index 0000000000..e6663206af --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_albedos.dat @@ -0,0 +1,4 @@ +{ + "albedos": [], + "identifier": "2024 ON" +} diff --git a/astroquery/astorbdb/tests/data/2024on_colors.dat b/astroquery/astorbdb/tests/data/2024on_colors.dat new file mode 100644 index 0000000000..487a2f8c0c --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_colors.dat @@ -0,0 +1,4 @@ +{ + "colors": [], + "identifier": "2024 ON" +} diff --git a/astroquery/astorbdb/tests/data/2024on_desig.dat b/astroquery/astorbdb/tests/data/2024on_desig.dat new file mode 100644 index 0000000000..ac310cea21 --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_desig.dat @@ -0,0 +1,11 @@ +{ + "arguments": { + "identifier": "2024 ON" + }, + "designations": { + "alternate_designations": [], + "name": null, + "number": null, + "primary_designation": "2024 ON" + } +} diff --git a/astroquery/astorbdb/tests/data/2024on_dynfamily.dat b/astroquery/astorbdb/tests/data/2024on_dynfamily.dat new file mode 100644 index 0000000000..62f5e26d6e --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "2024 ON" +} diff --git a/astroquery/astorbdb/tests/data/2024on_elements.dat b/astroquery/astorbdb/tests/data/2024on_elements.dat new file mode 100644 index 0000000000..62893c2a2d --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_elements.dat @@ -0,0 +1,38 @@ +{ + "date": "2025-02-08 05:29:38.933974+00:00", + "elements": { + "a": 2.387975099797347, + "aphelion_dist": 3.7690165425370923, + "delta_v": 6.7097968619451915, + "dyn_type_json": [ + "nea", + "apollo", + "pha" + ], + "e": 0.5783315926773887, + "ecc_anomaly": 63.54895481313316, + "epoch": "2025-01-25T00:00:00", + "h": 20.55, + "i": 7.625787891767889, + "long_of_perihelion": 357.831298210033, + "m": 33.88182414615615, + "moid_earth": 0.0029709035006979627, + "moid_jupiter": 1.673151413862445, + "moid_mars": 0.21641242391510906, + "moid_mercury": 0.6416598527456336, + "moid_neptune": 26.467879051699498, + "moid_saturn": 5.658962031132222, + "moid_uranus": 14.517339365953253, + "moid_venus": 0.282670874957131, + "node": 172.2585882561816, + "peri": 185.57270995385153, + "q": 1.006933657057601, + "r": 1.7728136694270866, + "tisserand_param": 3.274811949149627, + "true_anomaly": 100.31233561540246, + "x": -0.2531595186147164, + "y": 1.6864195106656021, + "z": 0.48452842918520983 + }, + "identifier": "2024 ON" +} diff --git a/astroquery/astorbdb/tests/data/2024on_escaperoutes.dat b/astroquery/astorbdb/tests/data/2024on_escaperoutes.dat new file mode 100644 index 0000000000..913c0bfdfe --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_escaperoutes.dat @@ -0,0 +1,30 @@ +{ + "escape-routes": [ + { + "citation_bibcode": "2018Icar..312..181G", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2018Icar..312..181G/abstract", + "dn": "NaN", + "dp21_complex": 0.00042, + "dp31_complex": 0.02984, + "dp52_complex": 0.00713, + "dp_hungaria": 0.00039, + "dp_jfc": 0.0003, + "dp_nu6_complex": 0.02663, + "dp_phocaea": 0.00012, + "epoch": "2024-07-09T00:00:00", + "extrapolated": false, + "interpolated": false, + "measurement_techniques": null, + "n": "NaN", + "p21_complex": 0.00216, + "p31_complex": 0.41631, + "p52_complex": 0.04563, + "p_hungaria": 0.00225, + "p_jfc": 0.00084, + "p_nu6_complex": 0.53245, + "p_phocaea": 0.00036, + "survey_name": "debiased absolute-magnitude and orbit distributions of source regions for NEOs" + } + ], + "identifier": "2024 ON" +} diff --git a/astroquery/astorbdb/tests/data/2024on_lightcurves.dat b/astroquery/astorbdb/tests/data/2024on_lightcurves.dat new file mode 100644 index 0000000000..aac51344df --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_lightcurves.dat @@ -0,0 +1,4 @@ +{ + "identifier": "2024 ON", + "lightcurves": [] +} diff --git a/astroquery/astorbdb/tests/data/2024on_orbit.dat b/astroquery/astorbdb/tests/data/2024on_orbit.dat new file mode 100644 index 0000000000..688f9af215 --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "2024 ON", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 11.644, + "autores": 2.3, + "ceu": 0.012351953128054228, + "ceuderiv": -0.00013992006167370545, + "date10": "2032-01-30T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2035-07-15T00:00:00", + "datenext": "2026-03-06T00:00:00", + "ephname": "DE440", + "firstobs": "2013-05-07T00:00:00", + "j_astmass": null, + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.747766242741864, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.0002483447468723328, 0.06435946829530578, 0.0, 0.0, 0.0, 0.0], [0.005931148340856877, -0.13448424139540152, -0.36700596727610724, 0.0, 0.0, 0.0], [-0.06392044623153893, 0.513904369111979, 0.24394212780760166, -0.3455977337401586, 0.0, 0.0], [0.980365602755698, 0.6243539320165058, -0.02877645895892649, 0.012650318638937712, -0.24939728284175794, 0.0]]", + "j_cov1diag": "[7.360193438675573e-09, 1.6799495925738806e-09, 9.797593147766546e-07, 7.981835638608354e-07, 2.510602422306387e-06, 2.6393841969430106e-06]", + "j_eleerr": "[172.33633852032239, 185.3202667036902, 172.37378058900603, 7.74149654930084, 0.5751512705282528, 2.368875778029361]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2458546.3, + "lastobs": "2024-12-28T00:00:00", + "met1": 2.1989e-11, + "met2": 6.1093e-08, + "met3": 3.507e-08, + "met4": 3.0145e-08, + "met5": 2.9251e-08, + "nappar": 3, + "nsing": 1, + "nuse": 904, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2025-01-09T00:00:00", + "orbqual": 7.21, + "qsky10": 0.03, + "qskyimp": 0.17, + "qskynext": 0.011, + "qualimp": 0, + "ref": "E24YI9 ", + "resmax": 1.99, + "rmso": 0.35, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/2024on_taxonomies.dat b/astroquery/astorbdb/tests/data/2024on_taxonomies.dat new file mode 100644 index 0000000000..fd93d998c0 --- /dev/null +++ b/astroquery/astorbdb/tests/data/2024on_taxonomies.dat @@ -0,0 +1,4 @@ +{ + "identifier": "2024 ON", + "taxonomies": [] +} diff --git a/astroquery/astorbdb/tests/data/300163_albedos.dat b/astroquery/astorbdb/tests/data/300163_albedos.dat new file mode 100644 index 0000000000..197fe004ba --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_albedos.dat @@ -0,0 +1,4 @@ +{ + "albedos": [], + "identifier": "300163" +} diff --git a/astroquery/astorbdb/tests/data/300163_colors.dat b/astroquery/astorbdb/tests/data/300163_colors.dat new file mode 100644 index 0000000000..b5e3586efd --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_colors.dat @@ -0,0 +1,101 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 1.26, + "color_error": 0.16, + "jd": 2451790.8019130593, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "u-g" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.41, + "color_error": 0.04, + "jd": 2451790.8019130593, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "g-r" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.15, + "color_error": 0.04, + "jd": 2451790.8019130593, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "r-i" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": -0.07, + "color_error": 0.09, + "jd": 2451790.8019130593, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "i-z" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.32, + "color_error": 0.23, + "jd": 2451792.8925574385, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "u-g" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 1.47, + "color_error": 0.16, + "jd": 2451792.8925574385, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "g-r" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.12, + "color_error": 0.04, + "jd": 2451792.8925574385, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "r-i" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.06, + "color_error": 0.09, + "jd": 2451792.8925574385, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "i-z" + } + ], + "identifier": "300163" +} diff --git a/astroquery/astorbdb/tests/data/300163_desig.dat b/astroquery/astorbdb/tests/data/300163_desig.dat new file mode 100644 index 0000000000..171a5972dd --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_desig.dat @@ -0,0 +1,11 @@ +{ + "arguments": { + "identifier": "300163" + }, + "designations": { + "alternate_designations": [], + "name": null, + "number": 300163, + "primary_designation": "2006 VW139" + } +} diff --git a/astroquery/astorbdb/tests/data/300163_dynfamily.dat b/astroquery/astorbdb/tests/data/300163_dynfamily.dat new file mode 100644 index 0000000000..36bb3f1826 --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "300163" +} diff --git a/astroquery/astorbdb/tests/data/300163_elements.dat b/astroquery/astorbdb/tests/data/300163_elements.dat new file mode 100644 index 0000000000..caf11dfe39 --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_elements.dat @@ -0,0 +1,37 @@ +{ + "date": "2025-02-08 05:53:33.161305+00:00", + "elements": { + "a": 3.050076479051349, + "aphelion_dist": 3.6594048328577813, + "delta_v": null, + "dyn_type_json": [ + "mba", + "outer_belt" + ], + "e": 0.19977477876094063, + "ecc_anomaly": 193.57973334651973, + "epoch": "2025-01-25T00:00:00", + "h": 16.21, + "i": 3.238162925845995, + "long_of_perihelion": 3.411416541488, + "m": 196.26729374159993, + "moid_earth": 1.4404840234361707, + "moid_jupiter": 1.7934850045593365, + "moid_mars": 1.0421224208489612, + "moid_mercury": 2.0777985638881757, + "moid_neptune": 26.57990464785379, + "moid_saturn": 5.712652187877328, + "moid_uranus": 14.63616807013835, + "moid_venus": 1.7143800089035708, + "node": 83.11869293944106, + "peri": 280.292723602047, + "q": 2.440748125244917, + "r": 3.6423705189844857, + "tisserand_param": 3.20412173979779, + "true_anomaly": 191.10769632703747, + "x": -3.520672427393185, + "y": -0.9145946713144867, + "z": -0.18773716670877444 + }, + "identifier": "300163" +} diff --git a/astroquery/astorbdb/tests/data/300163_escaperoutes.dat b/astroquery/astorbdb/tests/data/300163_escaperoutes.dat new file mode 100644 index 0000000000..a7c329691a --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": [], + "identifier": "300163" +} diff --git a/astroquery/astorbdb/tests/data/300163_lightcurves.dat b/astroquery/astorbdb/tests/data/300163_lightcurves.dat new file mode 100644 index 0000000000..248f07ce34 --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "300163", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": null, + "amp_min": null, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "NH", + "period": 3240, + "period_desc": "", + "period_flag": "", + "quality_code": null, + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/300163_orbit.dat b/astroquery/astorbdb/tests/data/300163_orbit.dat new file mode 100644 index 0000000000..ff447d86e6 --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "300163", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 22.461, + "autores": 2.3, + "ceu": 0.0576601425692561, + "ceuderiv": 0.00022418902476997962, + "date10": "2032-09-09T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-09-09T00:00:00", + "datenext": "2025-04-15T00:00:00", + "ephname": "DE440", + "firstobs": "2000-09-03T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.3695681604697991, 0.0, 0.0, 0.0, 0.0, 0.0], [0.021858490968255265, -0.09455216363883565, 0.0, 0.0, 0.0, 0.0], [0.022631965731004584, 0.10532877981630781, -0.20450969284477077, 0.0, 0.0, 0.0], [0.019954181159489298, -0.11330635958945143, 0.1922278508440628, -0.958781648532893, 0.0, 0.0], [-0.054698548160539616, -0.012664185129735491, 0.06670224187406255, -0.014012275346222097, -0.2645634435250477, 0.0]]", + "j_cov1diag": "[2.6304542278603783e-08, 7.723914251265771e-08, 5.376252216018953e-06, 0.00010168540494138987, 0.00010512398265028147, 2.1759276446905463e-05]", + "j_eleerr": "[24.3769440955886, 281.8286197116828, 83.19657742105889, 3.239589704487642, 0.20135288769971504, 3.0521981380305214]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2455892.7, + "lastobs": "2023-02-19T00:00:00", + "met1": 4.1703e-11, + "met2": 2.5545e-07, + "met3": 1.6119e-07, + "met4": 1.9123e-07, + "met5": 1.8934e-07, + "nappar": 13, + "nsing": 3, + "nuse": 362, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2023-07-22T00:00:00", + "orbqual": 6.59, + "qsky10": 0.15416780684826709, + "qskyimp": 0.15404258139185684, + "qskynext": 0.08137799335726675, + "qualimp": 0.004152639002387382, + "ref": "E23D28 ", + "resmax": 2.3, + "rmso": 0.47, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/300163_taxonomies.dat b/astroquery/astorbdb/tests/data/300163_taxonomies.dat new file mode 100644 index 0000000000..6d741ed943 --- /dev/null +++ b/astroquery/astorbdb/tests/data/300163_taxonomies.dat @@ -0,0 +1,4 @@ +{ + "identifier": "300163", + "taxonomies": [] +} diff --git a/astroquery/astorbdb/tests/data/apophis_albedos.dat b/astroquery/astorbdb/tests/data/apophis_albedos.dat new file mode 100644 index 0000000000..4e90f6ba63 --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_albedos.dat @@ -0,0 +1,4 @@ +{ + "albedos": [], + "identifier": "Apophis" +} diff --git a/astroquery/astorbdb/tests/data/apophis_colors.dat b/astroquery/astorbdb/tests/data/apophis_colors.dat new file mode 100644 index 0000000000..1488619dee --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_colors.dat @@ -0,0 +1,4 @@ +{ + "colors": [], + "identifier": "Apophis" +} diff --git a/astroquery/astorbdb/tests/data/apophis_desig.dat b/astroquery/astorbdb/tests/data/apophis_desig.dat new file mode 100644 index 0000000000..97220abb53 --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_desig.dat @@ -0,0 +1,13 @@ +{ + "arguments": { + "identifier": "Apophis" + }, + "designations": { + "alternate_designations": [ + "2004 MN4" + ], + "name": "Apophis", + "number": 99942, + "primary_designation": "Apophis" + } +} diff --git a/astroquery/astorbdb/tests/data/apophis_dynfamily.dat b/astroquery/astorbdb/tests/data/apophis_dynfamily.dat new file mode 100644 index 0000000000..0d5d48f983 --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "Apophis" +} diff --git a/astroquery/astorbdb/tests/data/apophis_elements.dat b/astroquery/astorbdb/tests/data/apophis_elements.dat new file mode 100644 index 0000000000..2ed48e0324 --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_elements.dat @@ -0,0 +1,38 @@ +{ + "date": "2025-02-08 05:49:11.162991+00:00", + "elements": { + "a": 0.9223801109215902, + "aphelion_dist": 1.0986725754453988, + "delta_v": 5.688488188518416, + "dyn_type_json": [ + "nea", + "aten", + "pha" + ], + "e": 0.19112778174246087, + "ecc_anomaly": 334.2686361702579, + "epoch": "2025-01-25T00:00:00", + "h": 19, + "i": 3.3409766407098083, + "long_of_perihelion": 330.574782259775, + "m": 339.02295747710565, + "moid_earth": 6.939871761815047e-05, + "moid_jupiter": 4.119241532119461, + "moid_mars": 0.5759508004769529, + "moid_mercury": 0.33871624462149613, + "moid_neptune": 28.89080329478233, + "moid_saturn": 7.9988227518989365, + "moid_uranus": 17.195566404866668, + "moid_venus": 0.06967795040033274, + "node": 203.90371377720749, + "peri": 126.67106848256789, + "q": 0.7460876463977817, + "r": 0.7635688952487887, + "tisserand_param": 6.467275153029916, + "true_anomaly": 329.0171500059247, + "x": 0.3765418891232769, + "y": -0.625713194735456, + "z": -0.22301717750182065 + }, + "identifier": "Apophis" +} diff --git a/astroquery/astorbdb/tests/data/apophis_escaperoutes.dat b/astroquery/astorbdb/tests/data/apophis_escaperoutes.dat new file mode 100644 index 0000000000..782d06a43d --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_escaperoutes.dat @@ -0,0 +1,30 @@ +{ + "escape-routes": [ + { + "citation_bibcode": "2018Icar..312..181G", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2018Icar..312..181G/abstract", + "dn": "NaN", + "dp21_complex": 0.00243, + "dp31_complex": 0.00561, + "dp52_complex": 0, + "dp_hungaria": 0.00671, + "dp_jfc": 0, + "dp_nu6_complex": 0.00991, + "dp_phocaea": 0.00014, + "epoch": "2021-07-05T00:00:00", + "extrapolated": false, + "interpolated": false, + "measurement_techniques": null, + "n": "NaN", + "p21_complex": 0.01848, + "p31_complex": 0.04723, + "p52_complex": 0, + "p_hungaria": 0.05514, + "p_jfc": 0, + "p_nu6_complex": 0.87852, + "p_phocaea": 0.00064, + "survey_name": "debiased absolute-magnitude and orbit distributions of source regions for NEOs" + } + ], + "identifier": "Apophis" +} diff --git a/astroquery/astorbdb/tests/data/apophis_lightcurves.dat b/astroquery/astorbdb/tests/data/apophis_lightcurves.dat new file mode 100644 index 0000000000..959eeee29f --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "Apophis", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 1.14, + "amp_min": 0.3, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": true, + "notes": "T", + "period": 30.56, + "period_desc": "", + "period_flag": "", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/apophis_orbit.dat b/astroquery/astorbdb/tests/data/apophis_orbit.dat new file mode 100644 index 0000000000..c0feba1adc --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "apophis", + "orbit": { + "a1con": 5e-13, + "a2con": -2.901766637153165e-14, + "a3con": 0, + "arc": 18.068, + "autores": 2.3, + "ceu": 0.0037194668700428067, + "ceuderiv": 4.572889366066478e-05, + "date10": "2028-09-01T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2028-09-01T00:00:00", + "datenext": "2025-03-29T00:00:00", + "ephname": "DE440", + "firstobs": "2004-03-15T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.9588254758482087, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.8650044428182518, 0.8543097056031524, 0.0, 0.0, 0.0, 0.0], [0.18472242230792077, -0.0943066256295217, -0.44407151935833133, 0.0, 0.0, 0.0], [-0.08454105799778672, 0.04687779374366212, 0.3394233681971903, -0.9227508028595729, 0.0, 0.0], [0.10725098821188875, -0.24605355752853353, 0.021901472613237886, -0.37887379374955377, 0.026066481663153486, 0.0]]", + "j_cov1diag": "[3.1547367258458803e-10, 1.644979896760288e-08, 4.912781939112448e-07, 5.269811753675127e-06, 4.760406397536539e-06, 2.782543292345833e-06]", + "j_eleerr": "[211.75157477317185, 126.4630514590098, 204.2240107966595, 3.330542299474602, 0.19118431301904087, 0.9220636721338946]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2456379.2, + "lastobs": "2022-04-09T00:00:00", + "met1": 9.9709e-12, + "met2": 2.9598e-08, + "met3": 1.9715e-08, + "met4": 2.0788e-08, + "met5": 2.0457e-08, + "nappar": 8, + "nsing": 1, + "nuse": 9420, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2024-11-12T00:00:00", + "orbqual": 7.53, + "qsky10": 0.047, + "qskyimp": 0.047, + "qskynext": 0.0068, + "qualimp": 0, + "ref": "JPL/SSD", + "resmax": 2.3, + "rmso": 0.41, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/apophis_taxonomies.dat b/astroquery/astorbdb/tests/data/apophis_taxonomies.dat new file mode 100644 index 0000000000..2618bbfc0e --- /dev/null +++ b/astroquery/astorbdb/tests/data/apophis_taxonomies.dat @@ -0,0 +1,34 @@ +{ + "identifier": "Apophis", + "taxonomies": [ + { + "citation_bibcode": "2009Icar..200..480B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2009Icar..200..480B", + "measurement_techniques": [ + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "Binzel et al. (2009)", + "taxonomy": "Sq", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "S_comp", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "Sq", + "taxonomy_system": "Bus-DeMeo" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/beagle_albedos.dat b/astroquery/astorbdb/tests/data/beagle_albedos.dat new file mode 100644 index 0000000000..ed7ebd658c --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_albedos.dat @@ -0,0 +1,138 @@ +{ + "albedos": [ + { + "albedo": 0.065, + "albedo_error_lower": -0.002, + "albedo_error_upper": 0.002, + "citation_bibcode": "2011PASJ...63.1117U", + "citation_url": "https://darts.isas.jaxa.jp/astro/akari/catalogue/AcuA.html", + "count_bands_detection": 2, + "diameter": 54.32, + "diameter_error_lower": -0.77, + "diameter_error_upper": 0.77, + "eta": 0.82, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 11, + "survey_name": "Usui et al. (2011)" + }, + { + "albedo": 0.0625, + "albedo_error_lower": -0.015, + "albedo_error_upper": 0.015, + "citation_bibcode": "2004PDSS...12.....T", + "citation_url": "http://sbn.psi.edu/pds/asteroid/IRAS_A_FPA_3_RDR_IMPS_V6_0.zip", + "count_bands_detection": 3, + "diameter": 53.17, + "diameter_error_lower": -5.5, + "diameter_error_upper": 5.5, + "eta": 0.756, + "eta_error_lower": -1, + "eta_error_upper": 1, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 18, + "survey_name": "Infrared Astronomical Satellite (IRAS)" + }, + { + "albedo": 0.075, + "albedo_error_lower": -0.011, + "albedo_error_upper": 0.011, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 4, + "diameter": 48.471, + "diameter_error_lower": -0.535, + "diameter_error_upper": 0.535, + "eta": 1.033, + "eta_error_lower": -0.021, + "eta_error_upper": 0.021, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 58, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.045, + "albedo_error_lower": -0.005, + "albedo_error_upper": 0.005, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 4, + "diameter": 62.604, + "diameter_error_lower": -0.512, + "diameter_error_upper": 0.512, + "eta": 1.458, + "eta_error_lower": -0.025, + "eta_error_upper": 0.025, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 46, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.092, + "albedo_error_lower": -0.041, + "albedo_error_upper": 0.041, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 2, + "diameter": 38.214, + "diameter_error_lower": -10.329, + "diameter_error_upper": 10.329, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 16, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.069, + "albedo_error_lower": -0.034, + "albedo_error_upper": 0.034, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 2, + "diameter": 45.005, + "diameter_error_lower": -15.483, + "diameter_error_upper": 15.483, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 26, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.083, + "albedo_error_lower": -0.054, + "albedo_error_upper": 0.054, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 2, + "diameter": 40.12, + "diameter_error_lower": -14.369, + "diameter_error_upper": 14.369, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 22, + "survey_name": "NEOWISE" + } + ], + "identifier": "656" +} diff --git a/astroquery/astorbdb/tests/data/beagle_colors.dat b/astroquery/astorbdb/tests/data/beagle_colors.dat new file mode 100644 index 0000000000..90ca1200c3 --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_colors.dat @@ -0,0 +1,149 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.431, + "color_error": 0.035, + "jd": 2450770.99139, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.076, + "color_error": 0.041, + "jd": 2450770.99139, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.382, + "color_error": 0.037, + "jd": 2450771.00914, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.112, + "color_error": 0.043, + "jd": 2450771.00914, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.377, + "color_error": 0.037, + "jd": 2450776.94234, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.145, + "color_error": 0.051, + "jd": 2450776.94234, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 0.42, + "color_error": 0.09, + "jd": 2451762.67375, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "I-J" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 0.37, + "color_error": 0.23, + "jd": 2451762.67375, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "J-K" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 1.54, + "color_error": 0.03, + "jd": 2452225.662755839, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "u-g" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.38, + "color_error": 0.03, + "jd": 2452225.662755839, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "g-r" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.14, + "color_error": 0.03, + "jd": 2452225.662755839, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "r-i" + }, + { + "citation_bibcode": "2010PDSS..124.....I", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0035_3_SDSSMOC_V3_0.zip", + "color": 0.08, + "color_error": 0.03, + "jd": 2452225.662755839, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "Sloan Digital Sky Survey (SDSS) Moving Object Catalog (MOC)", + "sys_color": "i-z" + } + ], + "identifier": "656" +} diff --git a/astroquery/astorbdb/tests/data/beagle_desig.dat b/astroquery/astorbdb/tests/data/beagle_desig.dat new file mode 100644 index 0000000000..dfdd8ea412 --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_desig.dat @@ -0,0 +1,15 @@ +{ + "arguments": { + "identifier": "656" + }, + "designations": { + "alternate_designations": [ + "1954 HJ", + "A908 BJ", + "A917 ST" + ], + "name": "Beagle", + "number": 656, + "primary_designation": "Beagle" + } +} diff --git a/astroquery/astorbdb/tests/data/beagle_dynfamily.dat b/astroquery/astorbdb/tests/data/beagle_dynfamily.dat new file mode 100644 index 0000000000..fac75a2899 --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_dynfamily.dat @@ -0,0 +1,23 @@ +{ + "dynamical-family": [ + { + "citation_bibcode": "2015PDSS..234.....N", + "citation_url": "http://sbn.psi.edu/pds/asteroid/EAR_A_VARGBDET_5_NESVORNYFAM_V3_0.zip", + "family": "Themis", + "measurement_techniques": [ + "Simulation" + ], + "survey_name": "Nesvorny et al. (2015)" + }, + { + "citation_bibcode": "2015PDSS..234.....N", + "citation_url": "http://sbn.psi.edu/pds/asteroid/EAR_A_VARGBDET_5_NESVORNYFAM_V3_0.zip", + "family": "Beagle", + "measurement_techniques": [ + "Simulation" + ], + "survey_name": "Nesvorny et al. (2015)" + } + ], + "identifier": "656" +} diff --git a/astroquery/astorbdb/tests/data/beagle_elements.dat b/astroquery/astorbdb/tests/data/beagle_elements.dat new file mode 100644 index 0000000000..e5c3e51bea --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_elements.dat @@ -0,0 +1,37 @@ +{ + "date": "2025-02-08 05:50:51.627005+00:00", + "elements": { + "a": 3.15597543366717, + "aphelion_dist": 3.5700983216150712, + "delta_v": null, + "dyn_type_json": [ + "mba", + "outer_belt" + ], + "e": 0.13121866651119643, + "ecc_anomaly": 275.8489423333028, + "epoch": "2025-01-25T00:00:00", + "h": 10.06, + "i": 0.5180865432798002, + "long_of_perihelion": 153.791591540672, + "m": 283.3280781476213, + "moid_earth": 1.7522716139428816, + "moid_jupiter": 1.4246548879973067, + "moid_mars": 1.0785787778872962, + "moid_mercury": 2.3755375994998014, + "moid_neptune": 26.364573834208688, + "moid_saturn": 5.919289269592209, + "moid_uranus": 15.51305031070249, + "moid_venus": 2.024940835328519, + "node": 184.26497485366622, + "peri": 329.5266166870055, + "q": 2.741852545719269, + "r": 3.1137737884876553, + "tisserand_param": 3.192950759780598, + "true_anomaly": 268.2975002350777, + "x": 1.4575594856831744, + "y": 2.533895939883413, + "z": 1.072603802627103 + }, + "identifier": "656" +} diff --git a/astroquery/astorbdb/tests/data/beagle_escaperoutes.dat b/astroquery/astorbdb/tests/data/beagle_escaperoutes.dat new file mode 100644 index 0000000000..db3e966e9b --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": [], + "identifier": "656" +} diff --git a/astroquery/astorbdb/tests/data/beagle_lightcurves.dat b/astroquery/astorbdb/tests/data/beagle_lightcurves.dat new file mode 100644 index 0000000000..155b15349c --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "656", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 1.2, + "amp_min": 0.57, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "", + "period": 7.035, + "period_desc": "", + "period_flag": "", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/beagle_orbit.dat b/astroquery/astorbdb/tests/data/beagle_orbit.dat new file mode 100644 index 0000000000..4bdd913285 --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "656", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 116.943, + "autores": 2.3, + "ceu": 0.00918202538628214, + "ceuderiv": -3.952415533951413e-05, + "date10": "2032-02-26T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-02-26T00:00:00", + "datenext": "2026-01-18T00:00:00", + "ephname": "DE440", + "firstobs": "1908-01-26T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.017572662612471136, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.0011842571147701218, -0.0034307741598523663, 0.0, 0.0, 0.0, 0.0], [0.0004964814519323222, -0.0007444819985609447, 0.06396694743995918, 0.0, 0.0, 0.0], [0.0027006818619532864, 0.009542747008856057, -0.0639343314293586, -0.9992019646300331, 0.0, 0.0], [0.5473587907456194, -0.14319432049504818, -0.0003553442588968104, 0.0007007192569142259, -0.031694982177774216, 0.0]]", + "j_cov1diag": "[3.035830489563973e-09, 1.5000791568512695e-08, 1.7166013061122893e-06, 0.000152806871102379, 0.0001529427163380573, 7.1702966647898146e-06]", + "j_eleerr": "[108.56083395235272, 336.65623029847376, 184.52060809460923, 0.5008727840751515, 0.12363053541727005, 3.1584181206595106]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2439323.2, + "lastobs": "2025-01-04T00:00:00", + "met1": 4.4185e-12, + "met2": 9.0422e-08, + "met3": 4.1988e-08, + "met4": 4.3066e-08, + "met5": 4.2897e-08, + "nappar": 58, + "nsing": 10, + "nuse": 5375, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2025-01-08T00:00:00", + "orbqual": 7.04, + "qsky10": 0.019, + "qskyimp": 0.019, + "qskynext": 0.017, + "qualimp": 0, + "ref": "E25A95 ", + "resmax": 2.3, + "rmso": 0.36, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/beagle_taxonomies.dat b/astroquery/astorbdb/tests/data/beagle_taxonomies.dat new file mode 100644 index 0000000000..f3d4c38787 --- /dev/null +++ b/astroquery/astorbdb/tests/data/beagle_taxonomies.dat @@ -0,0 +1,27 @@ +{ + "identifier": "656", + "taxonomies": [ + { + "citation_bibcode": "2011PDSS..145.....H", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/ast.sdss-based-taxonomy.zip", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "Carvano et al. (2010)", + "taxonomy": "C", + "taxonomy_system": "Carvano_SDSS" + }, + { + "citation_bibcode": "2013Icar..226..723D", + "citation_url": "http://www.mit.edu/~fdemeo/publications/alluniq_adr4.dat", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "DeMeo et al. (2013)", + "taxonomy": "C", + "taxonomy_system": "DeMeo_Carry_SDSS" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/ceres_albedos.dat b/astroquery/astorbdb/tests/data/ceres_albedos.dat new file mode 100644 index 0000000000..dc27b1e615 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_albedos.dat @@ -0,0 +1,62 @@ +{ + "albedos": [ + { + "albedo": 0.087, + "albedo_error_lower": -0.003, + "albedo_error_upper": 0.003, + "citation_bibcode": "2011PASJ...63.1117U", + "citation_url": "https://darts.isas.jaxa.jp/astro/akari/catalogue/AcuA.html", + "count_bands_detection": 2, + "diameter": 973.89, + "diameter_error_lower": -13.31, + "diameter_error_upper": 13.31, + "eta": 0.82, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 7, + "survey_name": "Usui et al. (2011)" + }, + { + "albedo": 0.1132, + "albedo_error_lower": -0.005, + "albedo_error_upper": 0.005, + "citation_bibcode": "2004PDSS...12.....T", + "citation_url": "http://sbn.psi.edu/pds/asteroid/IRAS_A_FPA_3_RDR_IMPS_V6_0.zip", + "count_bands_detection": 3, + "diameter": 848.4, + "diameter_error_lower": -19.7, + "diameter_error_upper": 19.7, + "eta": 0.756, + "eta_error_lower": -1, + "eta_error_upper": 1, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 15, + "survey_name": "Infrared Astronomical Satellite (IRAS)" + }, + { + "albedo": 0.0936, + "albedo_error_lower": null, + "albedo_error_upper": null, + "citation_bibcode": "2006Icar..184..211S", + "citation_url": "http://sbn.psi.edu/pds/asteroid/EAR_A_VARGBDET_5_OCCALB_V1_0.zip", + "count_bands_detection": 1, + "diameter": 933, + "diameter_error_lower": null, + "diameter_error_upper": null, + "eta": null, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Occultation" + ], + "observations_total": 1, + "survey_name": "Shevchenko and Tedesco (2006)" + } + ], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_colors.dat b/astroquery/astorbdb/tests/data/ceres_colors.dat new file mode 100644 index 0000000000..1bce2ee463 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_colors.dat @@ -0,0 +1,77 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.377, + "color_error": 0.051, + "jd": 2451640.816, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.081, + "color_error": 0.044, + "jd": 2451640.816, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 1.48, + "color_error": 0.05, + "jd": 2450184.851991, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "I-J" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 1.29, + "color_error": 0.08, + "jd": 2450184.851991, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "J-K" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.426, + "color_error": 0.026, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "U-B" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.713, + "color_error": 0.014, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "B-V" + } + ], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_desig.dat b/astroquery/astorbdb/tests/data/ceres_desig.dat new file mode 100644 index 0000000000..e610b2b198 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_desig.dat @@ -0,0 +1,15 @@ +{ + "arguments": { + "identifier": "1" + }, + "designations": { + "alternate_designations": [ + "A899 OF", + "1943 XB", + "A801 AA" + ], + "name": "Ceres", + "number": 1, + "primary_designation": "Ceres" + } +} diff --git a/astroquery/astorbdb/tests/data/ceres_dynfamily.dat b/astroquery/astorbdb/tests/data/ceres_dynfamily.dat new file mode 100644 index 0000000000..4a97ef960c --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_elements.dat b/astroquery/astorbdb/tests/data/ceres_elements.dat new file mode 100644 index 0000000000..3eb493930f --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_elements.dat @@ -0,0 +1,37 @@ +{ + "date": "2025-02-08 05:30:02.186297+00:00", + "elements": { + "a": 2.766279686527088, + "aphelion_dist": 2.985676242719957, + "delta_v": null, + "dyn_type_json": [ + "mba", + "middle_belt" + ], + "e": 0.07931105349232022, + "ecc_anomaly": 168.22005246432852, + "epoch": "2025-01-25T00:00:00", + "h": 3.34, + "i": 10.587901965705468, + "long_of_perihelion": 153.514863665408, + "m": 167.2923406599075, + "moid_earth": 1.582689143947702, + "moid_jupiter": 2.0906001023409324, + "moid_mars": 0.9285543056614984, + "moid_mercury": 2.173995396438814, + "moid_neptune": 26.950942790507288, + "moid_saturn": 6.327143993151247, + "moid_uranus": 15.766007191958693, + "moid_venus": 1.8351653479948107, + "node": 80.2541666922529, + "peri": 73.26069697315508, + "q": 2.546883130334219, + "r": 2.9810555096143885, + "tisserand_param": 3.310119214600075, + "true_anomaly": 169.1144339283163, + "x": 2.32479958364782, + "y": -1.4600724963699816, + "z": -1.161975538734423 + }, + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_escaperoutes.dat b/astroquery/astorbdb/tests/data/ceres_escaperoutes.dat new file mode 100644 index 0000000000..a407ae0ba8 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": [], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_lightcurves.dat b/astroquery/astorbdb/tests/data/ceres_lightcurves.dat new file mode 100644 index 0000000000..609bf56e5f --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "1", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 0.06, + "amp_min": 0.03, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "", + "period": 9.07417, + "period_desc": "", + "period_flag": "S", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_albedos.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_albedos.dat new file mode 100644 index 0000000000..2c3b7857ee --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_albedos.dat @@ -0,0 +1,62 @@ +{ + "albedos": [ + { + "albedo": null, + "albedo_error_lower": -0.003, + "albedo_error_upper": 0.003, + "citation_bibcode": "2011PASJ...63.1117U", + "citation_url": "https://darts.isas.jaxa.jp/astro/akari/catalogue/AcuA.html", + "count_bands_detection": 2, + "diameter": 973.89, + "diameter_error_lower": -13.31, + "diameter_error_upper": 13.31, + "eta": 0.82, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 7, + "survey_name": "Usui et al. (2011)" + }, + { + "albedo": 0.1132, + "albedo_error_lower": -0.005, + "albedo_error_upper": 0.005, + "citation_bibcode": "2004PDSS...12.....T", + "citation_url": "http://sbn.psi.edu/pds/asteroid/IRAS_A_FPA_3_RDR_IMPS_V6_0.zip", + "count_bands_detection": 3, + "diameter": 848.4, + "diameter_error_lower": -19.7, + "diameter_error_upper": 19.7, + "eta": 0.756, + "eta_error_lower": -1, + "eta_error_upper": 1, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 15, + "survey_name": "Infrared Astronomical Satellite (IRAS)" + }, + { + "albedo": 0.0936, + "albedo_error_lower": null, + "albedo_error_upper": null, + "citation_bibcode": "2006Icar..184..211S", + "citation_url": "http://sbn.psi.edu/pds/asteroid/EAR_A_VARGBDET_5_OCCALB_V1_0.zip", + "count_bands_detection": 1, + "diameter": 933, + "diameter_error_lower": null, + "diameter_error_upper": null, + "eta": null, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Occultation" + ], + "observations_total": 1, + "survey_name": "Shevchenko and Tedesco (2006)" + } + ], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_colors.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_colors.dat new file mode 100644 index 0000000000..7853ba7b38 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_colors.dat @@ -0,0 +1,77 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": null, + "color_error": 0.051, + "jd": 2451640.816, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.081, + "color_error": 0.044, + "jd": 2451640.816, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 1.48, + "color_error": 0.05, + "jd": 2450184.851991, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "I-J" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 1.29, + "color_error": 0.08, + "jd": 2450184.851991, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "J-K" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.426, + "color_error": 0.026, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "U-B" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.713, + "color_error": 0.014, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "B-V" + } + ], + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_desig.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_desig.dat new file mode 100644 index 0000000000..c133b9dae0 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_desig.dat @@ -0,0 +1,15 @@ +{ + "arguments": { + "identifier": "1" + }, + "designations": { + "alternate_designations": [ + "A899 OF", + "1943 XB", + "A801 AA" + ], + "name": null, + "number": 1, + "primary_designation": "Ceres" + } +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_dynfamily.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_dynfamily.dat new file mode 100644 index 0000000000..1a705b72c0 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": null, + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_elements.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_elements.dat new file mode 100644 index 0000000000..34b169b320 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_elements.dat @@ -0,0 +1,37 @@ +{ + "date": "2025-02-08 05:30:02.186297+00:00", + "elements": { + "a": null, + "aphelion_dist": 2.985676242719957, + "delta_v": null, + "dyn_type_json": [ + "mba", + "middle_belt" + ], + "e": 0.07931105349232022, + "ecc_anomaly": 168.22005246432852, + "epoch": "2025-01-25T00:00:00", + "h": 3.34, + "i": 10.587901965705468, + "long_of_perihelion": 153.514863665408, + "m": 167.2923406599075, + "moid_earth": 1.582689143947702, + "moid_jupiter": 2.0906001023409324, + "moid_mars": 0.9285543056614984, + "moid_mercury": 2.173995396438814, + "moid_neptune": 26.950942790507288, + "moid_saturn": 6.327143993151247, + "moid_uranus": 15.766007191958693, + "moid_venus": 1.8351653479948107, + "node": 80.2541666922529, + "peri": 73.26069697315508, + "q": 2.546883130334219, + "r": 2.9810555096143885, + "tisserand_param": 3.310119214600075, + "true_anomaly": 169.1144339283163, + "x": 2.32479958364782, + "y": -1.4600724963699816, + "z": -1.161975538734423 + }, + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_escaperoutes.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_escaperoutes.dat new file mode 100644 index 0000000000..089feb2529 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": null, + "identifier": "1" +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_lightcurves.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_lightcurves.dat new file mode 100644 index 0000000000..7a8b8b3d93 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "1", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 0.06, + "amp_min": 0.03, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "", + "period": null, + "period_desc": "", + "period_flag": "S", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_orbit.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_orbit.dat new file mode 100644 index 0000000000..47b0980f1f --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "1", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 223.748, + "autores": 2.3, + "ceu": 0.011052764038758855, + "ceuderiv": -1.69028259799703e-05, + "date10": "2032-03-01T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-03-01T00:00:00", + "datenext": "2025-10-06T00:00:00", + "ephname": null, + "firstobs": "1801-01-31T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.016496417213046153, 0.0, 0.0, 0.0, 0.0, 0.0], [0.002246832973024447, -0.0017768888961571638, 0.0, 0.0, 0.0, 0.0], [-0.0023836023198471347, -0.0023032856241161663, -0.16055454930532814, 0.0, 0.0, 0.0], [0.011004366938354996, 0.13640458611915224, 0.10407261290255428, -0.5880390130839735, 0.0, 0.0], [0.17667421939039218, -0.15536545569558916, -0.007327275861630802, 0.003961250332958805, -0.7924178005338209, 0.0]]", + "j_cov1diag": "[1.0984410042812388e-09, 1.7332483307446544e-08, 1.853953507972996e-06, 1.046162954598296e-05, 1.750043296549117e-05, 1.4094505972552965e-05]", + "j_eleerr": "[44.357065376422014, 68.57319721425607, 81.90868166278825, 10.616365284009618, 0.07652652022014644, 2.7666943885563695]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2419754.3, + "lastobs": "2024-11-01T00:00:00", + "met1": 2.2261e-12, + "met2": 7.5347e-08, + "met3": 4.9599e-08, + "met4": 5.3335e-08, + "met5": 5.2924e-08, + "nappar": 119, + "nsing": 6, + "nuse": 6905, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2024-12-11T00:00:00", + "orbqual": 7.12, + "qsky10": 0.027, + "qskyimp": 0.027, + "qskynext": 0.02, + "qualimp": 0, + "ref": "E24V47 ", + "resmax": 2.3, + "rmso": 0.55, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/ceres_missing_value_taxonomies.dat b/astroquery/astorbdb/tests/data/ceres_missing_value_taxonomies.dat new file mode 100644 index 0000000000..e08ed0eff0 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_missing_value_taxonomies.dat @@ -0,0 +1,105 @@ +{ + "identifier": "1", + "taxonomies": [ + { + "citation_bibcode": "1989aste.conf.1139T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989aste.conf.1139T", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "Tholen (1989)", + "taxonomy": null, + "taxonomy_system": "Tholen_ECAS" + }, + { + "citation_bibcode": "1987Icar...72..304B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1987Icar...72..304B", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": "", + "survey_name": "Barucci et al. (1987)", + "taxonomy": "G0", + "taxonomy_system": "Barucci_Gmode" + }, + { + "citation_bibcode": "1989AJ.....97..580T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989AJ.....97..580T", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": ":", + "survey_name": "Tedesco et al. (1989)", + "taxonomy": "G", + "taxonomy_system": "Tedesco_3parameter" + }, + { + "citation_bibcode": "1994JGR....9910847H", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1994JGR....9910847H", + "measurement_techniques": [ + "Visible photometry", + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "Howell et al. (1994)", + "taxonomy": "Cv", + "taxonomy_system": "Howell_Neural" + }, + { + "citation_bibcode": "2002Icar..158..146B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2002Icar..158..146B", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASSII", + "taxonomy": "C", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "C", + "taxonomy_system": "S3OS2_Tholen" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "C", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2009Icar..202..160D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2009Icar..202..160D", + "measurement_techniques": [ + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "DeMeo et al. (2009)", + "taxonomy": "C", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "C", + "taxonomy_system": "Bus-DeMeo" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/ceres_orbit.dat b/astroquery/astorbdb/tests/data/ceres_orbit.dat new file mode 100644 index 0000000000..872699e3dd --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "1", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 223.748, + "autores": 2.3, + "ceu": 0.011052764038758855, + "ceuderiv": -1.69028259799703e-05, + "date10": "2032-03-01T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-03-01T00:00:00", + "datenext": "2025-10-06T00:00:00", + "ephname": "DE440", + "firstobs": "1801-01-31T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.016496417213046153, 0.0, 0.0, 0.0, 0.0, 0.0], [0.002246832973024447, -0.0017768888961571638, 0.0, 0.0, 0.0, 0.0], [-0.0023836023198471347, -0.0023032856241161663, -0.16055454930532814, 0.0, 0.0, 0.0], [0.011004366938354996, 0.13640458611915224, 0.10407261290255428, -0.5880390130839735, 0.0, 0.0], [0.17667421939039218, -0.15536545569558916, -0.007327275861630802, 0.003961250332958805, -0.7924178005338209, 0.0]]", + "j_cov1diag": "[1.0984410042812388e-09, 1.7332483307446544e-08, 1.853953507972996e-06, 1.046162954598296e-05, 1.750043296549117e-05, 1.4094505972552965e-05]", + "j_eleerr": "[44.357065376422014, 68.57319721425607, 81.90868166278825, 10.616365284009618, 0.07652652022014644, 2.7666943885563695]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2419754.3, + "lastobs": "2024-11-01T00:00:00", + "met1": 2.2261e-12, + "met2": 7.5347e-08, + "met3": 4.9599e-08, + "met4": 5.3335e-08, + "met5": 5.2924e-08, + "nappar": 119, + "nsing": 6, + "nuse": 6905, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2024-12-11T00:00:00", + "orbqual": 7.12, + "qsky10": 0.027, + "qskyimp": 0.027, + "qskynext": 0.02, + "qualimp": 0, + "ref": "E24V47 ", + "resmax": 2.3, + "rmso": 0.55, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/ceres_taxonomies.dat b/astroquery/astorbdb/tests/data/ceres_taxonomies.dat new file mode 100644 index 0000000000..8f19e56a89 --- /dev/null +++ b/astroquery/astorbdb/tests/data/ceres_taxonomies.dat @@ -0,0 +1,105 @@ +{ + "identifier": "1", + "taxonomies": [ + { + "citation_bibcode": "1989aste.conf.1139T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989aste.conf.1139T", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "Tholen (1989)", + "taxonomy": "G", + "taxonomy_system": "Tholen_ECAS" + }, + { + "citation_bibcode": "1987Icar...72..304B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1987Icar...72..304B", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": "", + "survey_name": "Barucci et al. (1987)", + "taxonomy": "G0", + "taxonomy_system": "Barucci_Gmode" + }, + { + "citation_bibcode": "1989AJ.....97..580T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989AJ.....97..580T", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": ":", + "survey_name": "Tedesco et al. (1989)", + "taxonomy": "G", + "taxonomy_system": "Tedesco_3parameter" + }, + { + "citation_bibcode": "1994JGR....9910847H", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1994JGR....9910847H", + "measurement_techniques": [ + "Visible photometry", + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "Howell et al. (1994)", + "taxonomy": "Cv", + "taxonomy_system": "Howell_Neural" + }, + { + "citation_bibcode": "2002Icar..158..146B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2002Icar..158..146B", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASSII", + "taxonomy": "C", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "C", + "taxonomy_system": "S3OS2_Tholen" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "C", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2009Icar..202..160D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2009Icar..202..160D", + "measurement_techniques": [ + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "DeMeo et al. (2009)", + "taxonomy": "C", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "C", + "taxonomy_system": "Bus-DeMeo" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/chiron_albedos.dat b/astroquery/astorbdb/tests/data/chiron_albedos.dat new file mode 100644 index 0000000000..24810ca8d2 --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_albedos.dat @@ -0,0 +1,24 @@ +{ + "albedos": [ + { + "albedo": 0.11, + "albedo_error_lower": -0.052, + "albedo_error_upper": 0.052, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 3, + "diameter": 201.2, + "diameter_error_lower": -62.4, + "diameter_error_upper": 62.4, + "eta": 0.8, + "eta_error_lower": -0.4, + "eta_error_upper": 0.4, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 36, + "survey_name": "NEOWISE" + } + ], + "identifier": "2060" +} diff --git a/astroquery/astorbdb/tests/data/chiron_colors.dat b/astroquery/astorbdb/tests/data/chiron_colors.dat new file mode 100644 index 0000000000..7fa239307c --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_colors.dat @@ -0,0 +1,281 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.334, + "color_error": 0.09, + "jd": 2450926.64864, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.23, + "color_error": 0.1, + "jd": 2450926.64864, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.283, + "color_error": 0.105, + "jd": 2450899.90751, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.281, + "color_error": 0.138, + "jd": 2450899.90751, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.369, + "color_error": 0.093, + "jd": 2450899.91304, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": -0.007, + "color_error": 0.144, + "jd": 2450899.91304, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + }, + { + "citation_bibcode": "2007PDSS...79.....B", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0287_3_ASTDENIS_V1_0.zip", + "color": 0.51, + "color_error": 0.2, + "jd": 2451744.566493, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "Deep European Near-Infrared Southern Sky Survey (DENIS)", + "sys_color": "I-J" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 0.6, + "color_error": 0.03, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "B-V" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 0.31, + "color_error": 0.06, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 0.35, + "color_error": 0.05, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "J-K" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.54, + "color_error": 0.05, + "jd": 2450548.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-H" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.75, + "color_error": 0.05, + "jd": 2450151.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-H" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 0.64, + "color_error": 0.03, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "V-I" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 0.76, + "color_error": 0.01, + "jd": 2450576.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-I" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 1.12, + "color_error": 0.07, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "V-J" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.23, + "color_error": 0.05, + "jd": 2450548.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-J" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.47, + "color_error": 0.05, + "jd": 2450151.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-J" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.62, + "color_error": 0.05, + "jd": 2450548.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-K" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 1.8, + "color_error": 0.05, + "jd": 2450151.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-K" + }, + { + "citation_bibcode": "2007AJ....134.2186D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2007AJ....134.2186D", + "color": 0.32, + "color_error": 0.03, + "jd": 2453162.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Doressoundiram et al. (2007)", + "sys_color": "V-R" + }, + { + "citation_bibcode": "1998Icar..134..213D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1998Icar..134..213D", + "color": 0.37, + "color_error": 0.03, + "jd": 2450576.5, + "measurement_techniques": [ + "Multiple filter set photometry" + ], + "survey_name": "Davies et al. (1998)", + "sys_color": "V-R" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.283, + "color_error": 0.06, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "U-B" + }, + { + "citation_bibcode": "2005PDSS...30.....T", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_5_DDR_UBV_MEAN_VALUES_V1_2.zip", + "color": 0.704, + "color_error": 0.024, + "jd": null, + "measurement_techniques": [ + "Visible photometry" + ], + "survey_name": "PDS UBV color compilation", + "sys_color": "B-V" + } + ], + "identifier": "2060" +} diff --git a/astroquery/astorbdb/tests/data/chiron_desig.dat b/astroquery/astorbdb/tests/data/chiron_desig.dat new file mode 100644 index 0000000000..deda02435b --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_desig.dat @@ -0,0 +1,13 @@ +{ + "arguments": { + "identifier": "2060" + }, + "designations": { + "alternate_designations": [ + "1977 UB" + ], + "name": "Chiron", + "number": 2060, + "primary_designation": "Chiron" + } +} diff --git a/astroquery/astorbdb/tests/data/chiron_dynfamily.dat b/astroquery/astorbdb/tests/data/chiron_dynfamily.dat new file mode 100644 index 0000000000..4d652df26b --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "2060" +} diff --git a/astroquery/astorbdb/tests/data/chiron_elements.dat b/astroquery/astorbdb/tests/data/chiron_elements.dat new file mode 100644 index 0000000000..c074efc202 --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_elements.dat @@ -0,0 +1,36 @@ +{ + "date": "2025-02-08 05:51:29.474428+00:00", + "elements": { + "a": 13.70259395780755, + "aphelion_dist": 18.879694553822546, + "delta_v": null, + "dyn_type_json": [ + "centaur" + ], + "e": 0.3778190182060494, + "ecc_anomaly": 199.66779020139964, + "epoch": "2025-01-25T00:00:00", + "h": 5.58, + "i": 6.920305879298467, + "long_of_perihelion": 188.547013888067, + "m": 206.95357959761242, + "moid_earth": 7.5278334533006745, + "moid_jupiter": 3.1013085115646426, + "moid_mars": 6.887486763812813, + "moid_mercury": 8.118003827476118, + "moid_neptune": 11.090831413394284, + "moid_saturn": 0.4538997251611535, + "moid_uranus": 1.4293547069847807, + "moid_venus": 7.808524650691431, + "node": 209.30339884125, + "peri": 339.2436150468168, + "q": 8.525493361792556, + "r": 18.57766198670607, + "tisserand_param": 3.362645399706535, + "true_anomaly": 193.28798663331523, + "x": 17.236268046232716, + "y": 6.237852654538902, + "z": 3.0215530759830376 + }, + "identifier": "2060" +} diff --git a/astroquery/astorbdb/tests/data/chiron_escaperoutes.dat b/astroquery/astorbdb/tests/data/chiron_escaperoutes.dat new file mode 100644 index 0000000000..2b64ab42c4 --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": [], + "identifier": "2060" +} diff --git a/astroquery/astorbdb/tests/data/chiron_lightcurves.dat b/astroquery/astorbdb/tests/data/chiron_lightcurves.dat new file mode 100644 index 0000000000..fa09a04051 --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "2060", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 0.09, + "amp_min": 0.04, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "", + "period": 5.918, + "period_desc": "", + "period_flag": "", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/chiron_orbit.dat b/astroquery/astorbdb/tests/data/chiron_orbit.dat new file mode 100644 index 0000000000..4b239ef96d --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "2060", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 129.695, + "autores": 2.3, + "ceu": 0.009613498729113054, + "ceuderiv": -6.6454157961637756e-06, + "date10": "2034-10-10T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2034-11-09T00:00:00", + "datenext": "2025-10-05T00:00:00", + "ephname": "DE440", + "firstobs": "1895-04-24T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.32614780102579644, 0.0, 0.0, 0.0, 0.0, 0.0], [0.008345073126922791, 0.007097986740875078, 0.0, 0.0, 0.0, 0.0], [-0.007027891432527323, -0.006670921574465698, -0.6021643068595725, 0.0, 0.0, 0.0], [0.19915021689804824, 0.05278229693099937, 0.5885896112069382, -0.9730724581020765, 0.0, 0.0], [0.9494139808001086, 0.2923121325418001, 0.0075987444804594476, -0.007486355941906978, 0.1587213177673034, 0.0]]", + "j_cov1diag": "[3.045407133744417e-07, 2.87324510886413e-08, 3.36258492152076e-06, 1.746317861173537e-05, 1.7806505635466062e-05, 7.20271014699061e-06]", + "j_eleerr": "[102.55481173025092, 340.0518212342875, 209.36793439458654, 6.929544482809118, 0.37960226873548086, 13.706892274228451]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2436993.2, + "lastobs": "2025-01-03T00:00:00", + "met1": 1.1297e-11, + "met2": 1.9917e-07, + "met3": 1.0207e-07, + "met4": 8.307e-08, + "met5": 8.0222e-08, + "nappar": 55, + "nsing": 8, + "nuse": 4919, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2025-01-08T00:00:00", + "orbqual": 6.7, + "qsky10": 0.027, + "qskyimp": 0.027, + "qskynext": 0.011, + "qualimp": 0, + "ref": "E25A95 ", + "resmax": 2.26, + "rmso": 0.37, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/chiron_taxonomies.dat b/astroquery/astorbdb/tests/data/chiron_taxonomies.dat new file mode 100644 index 0000000000..9b5330f73b --- /dev/null +++ b/astroquery/astorbdb/tests/data/chiron_taxonomies.dat @@ -0,0 +1,73 @@ +{ + "identifier": "2060", + "taxonomies": [ + { + "citation_bibcode": "1989aste.conf.1139T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989aste.conf.1139T", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "Tholen (1989)", + "taxonomy": "B", + "taxonomy_system": "Tholen_ECAS" + }, + { + "citation_bibcode": "2002Icar..158..146B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2002Icar..158..146B", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASSII", + "taxonomy": "Cb", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "X", + "taxonomy_system": "S3OS2_Tholen" + }, + { + "citation_bibcode": "2004Icar..172..179L", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2004Icar..172..179L", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "Solar System Objects Spectroscopic Survey (S3OS2)", + "taxonomy": "X", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2000Icar..146..204F", + "citation_url": "https://hal.archives-ouvertes.fr/tel-02153851", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": "", + "survey_name": "Fulchignoni et al. (200)", + "taxonomy": "C", + "taxonomy_system": "Fulchignoni_Gmode" + }, + { + "citation_bibcode": "2000Icar..146..204F", + "citation_url": "https://hal.archives-ouvertes.fr/tel-02153851", + "measurement_techniques": [ + "Visible photometry", + "Mid IR photometry" + ], + "modifier": "", + "survey_name": "Fulchignoni et al. (200)", + "taxonomy": "B", + "taxonomy_system": "Fulchignoni_Gmode" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/dummy.dat b/astroquery/astorbdb/tests/data/dummy.dat deleted file mode 100644 index aa5bd30df5..0000000000 --- a/astroquery/astorbdb/tests/data/dummy.dat +++ /dev/null @@ -1,2 +0,0 @@ -this is a dummy data file. -Similarly include xml, html, fits and other data files for tests diff --git a/astroquery/astorbdb/tests/data/lixiaohua_albedos.dat b/astroquery/astorbdb/tests/data/lixiaohua_albedos.dat new file mode 100644 index 0000000000..2f45b4068f --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_albedos.dat @@ -0,0 +1,81 @@ +{ + "albedos": [ + { + "albedo": 0.042, + "albedo_error_lower": -0.008, + "albedo_error_upper": 0.008, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 4, + "diameter": 20.455, + "diameter_error_lower": -0.124, + "diameter_error_upper": 0.124, + "eta": 0.902, + "eta_error_lower": -0.008, + "eta_error_upper": 0.008, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 50, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.056, + "albedo_error_lower": -0.083, + "albedo_error_upper": 0.083, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 1, + "diameter": 16.894, + "diameter_error_lower": -4.983, + "diameter_error_upper": 4.983, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 11, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.04, + "albedo_error_lower": -0.029, + "albedo_error_upper": 0.029, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 2, + "diameter": 17.355, + "diameter_error_lower": -5.239, + "diameter_error_upper": 5.239, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 26, + "survey_name": "NEOWISE" + }, + { + "albedo": 0.038, + "albedo_error_lower": -0.085, + "albedo_error_upper": 0.085, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 1, + "diameter": 18.672, + "diameter_error_lower": -6.019, + "diameter_error_upper": 6.019, + "eta": 0.95, + "eta_error_lower": -0.2, + "eta_error_upper": 0.2, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 6, + "survey_name": "NEOWISE" + } + ], + "identifier": "3556" +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_colors.dat b/astroquery/astorbdb/tests/data/lixiaohua_colors.dat new file mode 100644 index 0000000000..11f815d63f --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_colors.dat @@ -0,0 +1,4 @@ +{ + "colors": [], + "identifier": "3556" +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_desig.dat b/astroquery/astorbdb/tests/data/lixiaohua_desig.dat new file mode 100644 index 0000000000..81ad322338 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_desig.dat @@ -0,0 +1,14 @@ +{ + "arguments": { + "identifier": "3556" + }, + "designations": { + "alternate_designations": [ + "1964 UO", + "1981 YT1" + ], + "name": "Lixiaohua", + "number": 3556, + "primary_designation": "Lixiaohua" + } +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_dynfamily.dat b/astroquery/astorbdb/tests/data/lixiaohua_dynfamily.dat new file mode 100644 index 0000000000..b6f0b04df7 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_dynfamily.dat @@ -0,0 +1,14 @@ +{ + "dynamical-family": [ + { + "citation_bibcode": "2015PDSS..234.....N", + "citation_url": "http://sbn.psi.edu/pds/asteroid/EAR_A_VARGBDET_5_NESVORNYFAM_V3_0.zip", + "family": "Lixiaohua", + "measurement_techniques": [ + "Simulation" + ], + "survey_name": "Nesvorny et al. (2015)" + } + ], + "identifier": "3556" +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_elements.dat b/astroquery/astorbdb/tests/data/lixiaohua_elements.dat new file mode 100644 index 0000000000..3c8640a490 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_elements.dat @@ -0,0 +1,37 @@ +{ + "date": "2025-02-08 05:52:50.378553+00:00", + "elements": { + "a": 3.1688640794536274, + "aphelion_dist": 3.8440435057162117, + "delta_v": null, + "dyn_type_json": [ + "mba", + "outer_belt" + ], + "e": 0.21306670445107836, + "ecc_anomaly": 265.7906698456685, + "epoch": "2025-01-25T00:00:00", + "h": 12.87, + "i": 9.279897818936504, + "long_of_perihelion": 26.495925647537, + "m": 277.96556262403556, + "moid_earth": 1.504648121634465, + "moid_jupiter": 1.6480263117224694, + "moid_mars": 1.056133631427667, + "moid_mercury": 2.164958110680459, + "moid_neptune": 26.502481802900377, + "moid_saturn": 5.828690511777845, + "moid_uranus": 14.56087404207329, + "moid_venus": 1.7781309992884538, + "node": 240.6869298031853, + "peri": 145.8089958443514, + "q": 2.493684653191043, + "r": 3.218422654957371, + "tisserand_param": 3.147158568896854, + "true_anomaly": 253.61703849670914, + "x": 0.5417957465510436, + "y": -3.0260612070096755, + "z": -0.9527094658883132 + }, + "identifier": "3556" +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_escaperoutes.dat b/astroquery/astorbdb/tests/data/lixiaohua_escaperoutes.dat new file mode 100644 index 0000000000..f94f908bcd --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_escaperoutes.dat @@ -0,0 +1,4 @@ +{ + "escape-routes": [], + "identifier": "3556" +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_lightcurves.dat b/astroquery/astorbdb/tests/data/lixiaohua_lightcurves.dat new file mode 100644 index 0000000000..aaaef943a1 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_lightcurves.dat @@ -0,0 +1,4 @@ +{ + "identifier": "3556", + "lightcurves": [] +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_orbit.dat b/astroquery/astorbdb/tests/data/lixiaohua_orbit.dat new file mode 100644 index 0000000000..fdba604c97 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "3556", + "orbit": { + "a1con": 0, + "a2con": 0, + "a3con": 0, + "arc": 59.856, + "autores": 2.3, + "ceu": 0.012459602034759201, + "ceuderiv": 1.4616041850494338e-05, + "date10": "2031-11-08T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2031-11-08T00:00:00", + "datenext": "2025-09-10T00:00:00", + "ephname": "DE440", + "firstobs": "1964-10-30T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.15535491341417876, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.003446015642988635, -0.005307580848959444, 0.0, 0.0, 0.0, 0.0], [-0.006065890399197479, -0.0008816852533741973, -0.07919758771632532, 0.0, 0.0, 0.0], [0.10021877770433976, 0.03728772689407206, 0.06630719588871085, -0.9215268339964985, 0.0, 0.0], [0.5139607715456024, -0.07616672773356012, 0.008322268436310922, 4.861143477021583e-05, -0.2546441415322784, 0.0]]", + "j_cov1diag": "[5.638523014143955e-09, 2.102294062465564e-08, 2.2893252591508588e-06, 1.1875064144009053e-05, 1.2736494898291508e-05, 4.858842932603048e-06]", + "j_eleerr": "[141.5419357264685, 141.9158562479131, 241.57575722772717, 9.265646804340223, 0.23206507516984112, 3.1464808767421144]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2449630.4, + "lastobs": "2024-09-08T00:00:00", + "met1": 8.2847e-12, + "met2": 9.3284e-08, + "met3": 5.8167e-08, + "met4": 6.0434e-08, + "met5": 5.9271e-08, + "nappar": 27, + "nsing": 2, + "nuse": 2915, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2024-09-17T00:00:00", + "orbqual": 7.03, + "qsky10": 0.035, + "qskyimp": 0.035, + "qskynext": 0.032, + "qualimp": 0, + "ref": "O840866", + "resmax": 2.25, + "rmso": 0.38, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/lixiaohua_taxonomies.dat b/astroquery/astorbdb/tests/data/lixiaohua_taxonomies.dat new file mode 100644 index 0000000000..1c0465a877 --- /dev/null +++ b/astroquery/astorbdb/tests/data/lixiaohua_taxonomies.dat @@ -0,0 +1,4 @@ +{ + "identifier": "3556", + "taxonomies": [] +} diff --git a/astroquery/astorbdb/tests/data/phaethon_albedos.dat b/astroquery/astorbdb/tests/data/phaethon_albedos.dat new file mode 100644 index 0000000000..984aee58e4 --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_albedos.dat @@ -0,0 +1,43 @@ +{ + "albedos": [ + { + "albedo": 0.16, + "albedo_error_lower": -0.012, + "albedo_error_upper": 0.012, + "citation_bibcode": "2011PASJ...63.1117U", + "citation_url": "https://darts.isas.jaxa.jp/astro/akari/catalogue/AcuA.html", + "count_bands_detection": 2, + "diameter": 4.17, + "diameter_error_lower": -0.13, + "diameter_error_upper": 0.13, + "eta": 0.82, + "eta_error_lower": null, + "eta_error_upper": null, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 2, + "survey_name": "Usui et al. (2011)" + }, + { + "albedo": 0.1066, + "albedo_error_lower": -0.011, + "albedo_error_upper": 0.011, + "citation_bibcode": "2004PDSS...12.....T", + "citation_url": "http://sbn.psi.edu/pds/asteroid/IRAS_A_FPA_3_RDR_IMPS_V6_0.zip", + "count_bands_detection": 3, + "diameter": 5.1, + "diameter_error_lower": -0.2, + "diameter_error_upper": 0.2, + "eta": 0.756, + "eta_error_lower": -1, + "eta_error_upper": 1, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 18, + "survey_name": "Infrared Astronomical Satellite (IRAS)" + } + ], + "identifier": "3200" +} diff --git a/astroquery/astorbdb/tests/data/phaethon_colors.dat b/astroquery/astorbdb/tests/data/phaethon_colors.dat new file mode 100644 index 0000000000..811d8aec6e --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_colors.dat @@ -0,0 +1,29 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 0.54, + "color_error": null, + "jd": 2451113.85973, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": -0.265, + "color_error": null, + "jd": 2451113.85973, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + } + ], + "identifier": "3200" +} diff --git a/astroquery/astorbdb/tests/data/phaethon_desig.dat b/astroquery/astorbdb/tests/data/phaethon_desig.dat new file mode 100644 index 0000000000..bcc88493ed --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_desig.dat @@ -0,0 +1,13 @@ +{ + "arguments": { + "identifier": "3200" + }, + "designations": { + "alternate_designations": [ + "1983 TB" + ], + "name": "Phaethon", + "number": 3200, + "primary_designation": "Phaethon" + } +} diff --git a/astroquery/astorbdb/tests/data/phaethon_dynfamily.dat b/astroquery/astorbdb/tests/data/phaethon_dynfamily.dat new file mode 100644 index 0000000000..b5a3da4cbc --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "3200" +} diff --git a/astroquery/astorbdb/tests/data/phaethon_elements.dat b/astroquery/astorbdb/tests/data/phaethon_elements.dat new file mode 100644 index 0000000000..5af425181a --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_elements.dat @@ -0,0 +1,38 @@ +{ + "date": "2025-02-08 05:52:18.261395+00:00", + "elements": { + "a": 1.2714261765639505, + "aphelion_dist": 2.4026959882291394, + "delta_v": 15.349679450893388, + "dyn_type_json": [ + "nea", + "apollo", + "pha" + ], + "e": 0.8897644491813623, + "ecc_anomaly": 266.8120121224047, + "epoch": "2025-01-25T00:00:00", + "h": 14.39, + "i": 22.3131823191704, + "long_of_perihelion": 227.400626043634, + "m": 317.71286587202815, + "moid_earth": 0.018719492162724827, + "moid_jupiter": 2.729018033884113, + "moid_mars": 0.13650325836531588, + "moid_mercury": 0.11722023297621, + "moid_neptune": 27.499388892988573, + "moid_saturn": 6.841359565422206, + "moid_uranus": 17.12692873350755, + "moid_venus": 0.04348431521452126, + "node": 265.0940679098499, + "peri": 322.3065581337836, + "q": 0.14015636489876157, + "r": 1.33433855648064, + "tisserand_param": 4.510658345843539, + "true_anomaly": 205.73613911465958, + "x": 0.3664516130353373, + "y": 1.1314630494988036, + "z": 0.6049495567677572 + }, + "identifier": "3200" +} diff --git a/astroquery/astorbdb/tests/data/phaethon_escaperoutes.dat b/astroquery/astorbdb/tests/data/phaethon_escaperoutes.dat new file mode 100644 index 0000000000..3e85c37fba --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_escaperoutes.dat @@ -0,0 +1,30 @@ +{ + "escape-routes": [ + { + "citation_bibcode": "2018Icar..312..181G", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2018Icar..312..181G/abstract", + "dn": "NaN", + "dp21_complex": 0, + "dp31_complex": 0.02092, + "dp52_complex": 0.01237, + "dp_hungaria": 0.02218, + "dp_jfc": 0, + "dp_nu6_complex": 0.02956, + "dp_phocaea": 0.00804, + "epoch": "2021-07-05T00:00:00", + "extrapolated": true, + "interpolated": false, + "measurement_techniques": null, + "n": "NaN", + "p21_complex": 0, + "p31_complex": 0.09464, + "p52_complex": 0.05353, + "p_hungaria": 0.18482, + "p_jfc": 0, + "p_nu6_complex": 0.64189, + "p_phocaea": 0.02511, + "survey_name": "debiased absolute-magnitude and orbit distributions of source regions for NEOs" + } + ], + "identifier": "3200" +} diff --git a/astroquery/astorbdb/tests/data/phaethon_lightcurves.dat b/astroquery/astorbdb/tests/data/phaethon_lightcurves.dat new file mode 100644 index 0000000000..fa6e962cff --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "3200", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 0.34, + "amp_min": 0.05, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": false, + "notes": "", + "period": 3.604, + "period_desc": "", + "period_flag": "", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/phaethon_orbit.dat b/astroquery/astorbdb/tests/data/phaethon_orbit.dat new file mode 100644 index 0000000000..27b6a7378f --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "3200", + "orbit": { + "a1con": 0, + "a2con": -6.143420288728436e-15, + "a3con": 0, + "arc": 41.237, + "autores": 2.3, + "ceu": 0.0033026595017314, + "ceuderiv": -3.523905147695821e-05, + "date10": "2032-05-29T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-05-29T00:00:00", + "datenext": "2025-03-26T00:00:00", + "ephname": "DE440", + "firstobs": "1983-10-12T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.09072402088423386, 0.0, 0.0, 0.0, 0.0, 0.0], [0.019146420486734147, 0.05193717681343259, 0.0, 0.0, 0.0, 0.0], [0.03311759110654658, 0.01494321519410331, -0.5645738733901308, 0.0, 0.0, 0.0], [-0.0948007602179257, 0.3568645662823757, 0.5037797766483388, -0.8540760764723213, 0.0, 0.0], [0.954994363646891, -0.024319300449685496, 0.04584660070328066, -0.013334203814233336, -0.033296781014190195, 0.0]]", + "j_cov1diag": "[4.317014152519728e-10, 5.029612060942365e-09, 1.5814704959630214e-06, 1.2477515507738535e-06, 1.3469757941327068e-06, 1.6941205718331446e-06]", + "j_eleerr": "[166.48957125519522, 321.9754253454746, 265.42907420890504, 22.167970850946933, 0.8899877225036155, 1.2713378749548623]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2453150.6, + "lastobs": "2025-01-05T00:00:00", + "met1": 6.1123e-12, + "met2": 5.224e-08, + "met3": 3.8848e-08, + "met4": 4.2021e-08, + "met5": 2.9444e-08, + "nappar": 42, + "nsing": 3, + "nuse": 7947, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2025-01-10T00:00:00", + "orbqual": 7.28, + "qsky10": 0.043, + "qskyimp": 0.043, + "qskynext": 0.023, + "qualimp": 0, + "ref": "JPL/SSD", + "resmax": 2.29, + "rmso": 0.4, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/phaethon_taxonomies.dat b/astroquery/astorbdb/tests/data/phaethon_taxonomies.dat new file mode 100644 index 0000000000..a0e417f69e --- /dev/null +++ b/astroquery/astorbdb/tests/data/phaethon_taxonomies.dat @@ -0,0 +1,47 @@ +{ + "identifier": "3200", + "taxonomies": [ + { + "citation_bibcode": "1989aste.conf.1139T", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1989aste.conf.1139T", + "measurement_techniques": [ + "Visible photometry" + ], + "modifier": "", + "survey_name": "Tholen (1989)", + "taxonomy": "F", + "taxonomy_system": "Tholen_ECAS" + }, + { + "citation_bibcode": "2002Icar..158..146B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2002Icar..158..146B", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASSII", + "taxonomy": "B", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2009Icar..202..160D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2009Icar..202..160D", + "measurement_techniques": [ + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "DeMeo et al. (2009)", + "taxonomy": "B", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "B", + "taxonomy_system": "Bus-DeMeo" + } + ] +} diff --git a/astroquery/astorbdb/tests/data/toutatis_albedos.dat b/astroquery/astorbdb/tests/data/toutatis_albedos.dat new file mode 100644 index 0000000000..2965726e79 --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_albedos.dat @@ -0,0 +1,24 @@ +{ + "albedos": [ + { + "albedo": 0.405, + "albedo_error_lower": -0.137, + "albedo_error_upper": 0.137, + "citation_bibcode": "2019PDSS..251.....M", + "citation_url": "http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip", + "count_bands_detection": 2, + "diameter": 1.788, + "diameter_error_lower": -0.376, + "diameter_error_upper": 0.376, + "eta": 1.007, + "eta_error_lower": -0.223, + "eta_error_upper": 0.223, + "measurement_techniques": [ + "Mid IR photometry" + ], + "observations_total": 12, + "survey_name": "NEOWISE" + } + ], + "identifier": "Toutatis" +} diff --git a/astroquery/astorbdb/tests/data/toutatis_colors.dat b/astroquery/astorbdb/tests/data/toutatis_colors.dat new file mode 100644 index 0000000000..9a8bd1d55e --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_colors.dat @@ -0,0 +1,29 @@ +{ + "colors": [ + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": -0.566, + "color_error": null, + "jd": 2451295.74841, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "J-H" + }, + { + "citation_bibcode": "2010PDSS..125.....S", + "citation_url": "http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip", + "color": 1.267, + "color_error": null, + "jd": 2451295.74841, + "measurement_techniques": [ + "Near IR photometry" + ], + "survey_name": "2 Micron All Sky Survey (2MASS)", + "sys_color": "H-K" + } + ], + "identifier": "Toutatis" +} diff --git a/astroquery/astorbdb/tests/data/toutatis_desig.dat b/astroquery/astorbdb/tests/data/toutatis_desig.dat new file mode 100644 index 0000000000..d3989b60ea --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_desig.dat @@ -0,0 +1,14 @@ +{ + "arguments": { + "identifier": "Toutatis" + }, + "designations": { + "alternate_designations": [ + "1934 CT", + "1989 AC" + ], + "name": "Toutatis", + "number": 4179, + "primary_designation": "Toutatis" + } +} diff --git a/astroquery/astorbdb/tests/data/toutatis_dynfamily.dat b/astroquery/astorbdb/tests/data/toutatis_dynfamily.dat new file mode 100644 index 0000000000..aace011d0b --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_dynfamily.dat @@ -0,0 +1,4 @@ +{ + "dynamical-family": [], + "identifier": "toutatis" +} diff --git a/astroquery/astorbdb/tests/data/toutatis_elements.dat b/astroquery/astorbdb/tests/data/toutatis_elements.dat new file mode 100644 index 0000000000..162ba1e38c --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_elements.dat @@ -0,0 +1,38 @@ +{ + "date": "2025-02-08 05:49:44.263502+00:00", + "elements": { + "a": 2.5436355894235176, + "aphelion_dist": 4.132937585867113, + "delta_v": 6.539958771684743, + "dyn_type_json": [ + "nea", + "apollo", + "pha" + ], + "e": 0.6248151280206731, + "ecc_anomaly": 10.495988759658026, + "epoch": "2025-01-25T00:00:00", + "h": 15.29, + "i": 0.4480593136806404, + "long_of_perihelion": 43.239256486721, + "m": 3.974554345004435, + "moid_earth": 0.006520196254486633, + "moid_jupiter": 1.2874863082659285, + "moid_mars": 0.04092102712388902, + "moid_mercury": 0.6344331543452487, + "moid_neptune": 26.196880087583956, + "moid_saturn": 5.698517343472745, + "moid_uranus": 14.410399723663593, + "moid_venus": 0.2320850611711164, + "node": 125.36512672252249, + "peri": 277.8741297641989, + "q": 0.9543335929799223, + "r": 0.9809263290305542, + "tisserand_param": 3.1376595755250976, + "true_anomaly": 21.642738297179815, + "x": 0.41636622464244366, + "y": 0.8175173006740383, + "z": 0.347161479805855 + }, + "identifier": "Toutatis" +} diff --git a/astroquery/astorbdb/tests/data/toutatis_escaperoutes.dat b/astroquery/astorbdb/tests/data/toutatis_escaperoutes.dat new file mode 100644 index 0000000000..50bf371f10 --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_escaperoutes.dat @@ -0,0 +1,30 @@ +{ + "escape-routes": [ + { + "citation_bibcode": "2018Icar..312..181G", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2018Icar..312..181G/abstract", + "dn": "NaN", + "dp21_complex": 0.00311, + "dp31_complex": 0.06925, + "dp52_complex": 0.0344, + "dp_hungaria": 0.00186, + "dp_jfc": 0.04177, + "dp_nu6_complex": 0.03579, + "dp_phocaea": 0.0002, + "epoch": "2021-07-05T00:00:00", + "extrapolated": true, + "interpolated": false, + "measurement_techniques": null, + "n": "NaN", + "p21_complex": 0.00599, + "p31_complex": 0.52268, + "p52_complex": 0.10935, + "p_hungaria": 0.01157, + "p_jfc": 0.12491, + "p_nu6_complex": 0.22495, + "p_phocaea": 0.00055, + "survey_name": "debiased absolute-magnitude and orbit distributions of source regions for NEOs" + } + ], + "identifier": "Toutatis" +} diff --git a/astroquery/astorbdb/tests/data/toutatis_lightcurves.dat b/astroquery/astorbdb/tests/data/toutatis_lightcurves.dat new file mode 100644 index 0000000000..e53f9f8670 --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_lightcurves.dat @@ -0,0 +1,25 @@ +{ + "identifier": "Toutatis", + "lightcurves": [ + { + "ambiguous_period": false, + "amp_flag": "", + "amp_max": 1.46, + "amp_min": 0.5, + "citation_bibcode": "2009Icar..202..134W", + "citation_url": "http://www.minorplanet.info/datazips/LCLIST_PUB_2018JUN.zip", + "measurement_techniques": [ + "Literature compilation" + ], + "non_principal_axis_rotator": true, + "notes": "T", + "period": 176, + "period_desc": "", + "period_flag": "", + "quality_code": "3", + "sparse_data": false, + "survey_name": "Asteroid Lightcurve Database (LCDB)", + "wide_field": false + } + ] +} diff --git a/astroquery/astorbdb/tests/data/toutatis_orbit.dat b/astroquery/astorbdb/tests/data/toutatis_orbit.dat new file mode 100644 index 0000000000..a1f94e15e7 --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_orbit.dat @@ -0,0 +1,45 @@ +{ + "identifier": "Toutatis", + "orbit": { + "a1con": -7.368622611241542e-13, + "a2con": -2.259710189195368e-14, + "a3con": 0, + "arc": 48.588, + "autores": 2.3, + "ceu": 0.007181085255508463, + "ceuderiv": 7.469012596119963e-05, + "date10": "2032-07-18T00:00:00", + "dateceu": "2025-01-11T00:00:00", + "dateimp": "2032-07-18T00:00:00", + "datenext": "2025-02-22T00:00:00", + "ephname": "DE440", + "firstobs": "1976-05-27T00:00:00", + "j_astmass": "[4.74e-10, 1.02e-10, 1.35e-11, 1.31e-10, 5.29e-11, 1.31e-11, 1.1e-11, 1.67e-11, 1.48e-11, 1.82e-11]", + "j_cor": "[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-0.3772844982280126, 0.0, 0.0, 0.0, 0.0, 0.0], [0.19509024747162224, -0.1316122314654818, 0.0, 0.0, 0.0, 0.0], [0.06145125686245333, 0.05413100800334909, 0.4793365928661304, 0.0, 0.0, 0.0], [-0.047856400716303336, -0.053014804060546886, -0.475171649719736, -0.9994989267375296, 0.0, 0.0], [-0.3625580215634029, 0.23706380517241213, 0.051749302339582276, 0.3098846941523809, -0.33691871778835003, 0.0]]", + "j_cov1diag": "[5.579014910922743e-10, 3.090452853531081e-09, 4.19247664668824e-07, 4.7717456509319676e-05, 4.818124659999168e-05, 4.3674570893526687e-07]", + "j_eleerr": "[346.88287475202196, 274.68967469594634, 128.3761195505601, 0.46959358622447456, 0.6343468516221764, 2.510285342260511]", + "j_iastuse": "[1, 2, 3, 4, 10, 15, 31, 52, 511, 704, 16, 65, 88, 107, 7, 87]", + "jdeperr": 2451799.5, + "lastobs": "2024-12-28T00:00:00", + "met1": 1.4419e-12, + "met2": 2.9841e-08, + "met3": 1.6941e-08, + "met4": 2.1209e-08, + "met5": 2.0457e-08, + "nappar": 30, + "nsing": 4, + "nuse": 6102, + "orbcomputer": "L.H. Wasserman ", + "orbdate": "2025-01-08T00:00:00", + "orbqual": 7.53, + "qsky10": 0.015, + "qskyimp": 0.015, + "qskynext": 0.0094, + "qualimp": 0, + "ref": "JPL/SSD", + "resmax": 4.38, + "rmso": 0.51, + "tauc": 0, + "timefac": 0.01 + } +} diff --git a/astroquery/astorbdb/tests/data/toutatis_taxonomies.dat b/astroquery/astorbdb/tests/data/toutatis_taxonomies.dat new file mode 100644 index 0000000000..afc591d79e --- /dev/null +++ b/astroquery/astorbdb/tests/data/toutatis_taxonomies.dat @@ -0,0 +1,47 @@ +{ + "identifier": "toutatis", + "taxonomies": [ + { + "citation_bibcode": "1995Icar..115....1X", + "citation_url": "https://ui.adsabs.harvard.edu/abs/1995Icar..115....1X", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASS", + "taxonomy": "S", + "taxonomy_system": "Xu_SMASS" + }, + { + "citation_bibcode": "2002Icar..158..146B", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2002Icar..158..146B", + "measurement_techniques": [ + "Visible spectroscopy" + ], + "modifier": "", + "survey_name": "SMASSII", + "taxonomy": "Sk", + "taxonomy_system": "Bus_SMASSII" + }, + { + "citation_bibcode": "2009Icar..202..160D", + "citation_url": "https://ui.adsabs.harvard.edu/abs/2009Icar..202..160D", + "measurement_techniques": [ + "Near IR spectroscopy" + ], + "modifier": "", + "survey_name": "DeMeo et al. (2009)", + "taxonomy": "Sq", + "taxonomy_system": "Bus-DeMeo" + }, + { + "citation_bibcode": "2019Icar..324...41B", + "citation_url": "http://smass.mit.edu/minus.html", + "measurement_techniques": null, + "modifier": "", + "survey_name": "MITHNEOS", + "taxonomy": "Sq", + "taxonomy_system": "Bus-DeMeo" + } + ] +} diff --git a/astroquery/astorbdb/tests/setup_package.py b/astroquery/astorbdb/tests/setup_package.py index 72b8669485..8981448a32 100644 --- a/astroquery/astorbdb/tests/setup_package.py +++ b/astroquery/astorbdb/tests/setup_package.py @@ -4,12 +4,8 @@ import os -# setup paths to the test data -# can specify a single file or a list of files def get_package_data(): - paths = [os.path.join('data', '*.dat'), - os.path.join('data', '*.xml'), - ] # etc, add other extensions - # you can also enlist files individually by names - # finally construct and return a dict for the sub module - return {'astroquery.template_module.tests': paths} + paths = [os.path.join('data', '*.dat')] # etc, add other extensions + + return {'astroquery.astorbdb.tests': paths, + 'astroquery.solarsystem.astorbdb': paths} diff --git a/astroquery/astorbdb/tests/test_astorbdb.py b/astroquery/astorbdb/tests/test_astorbdb.py new file mode 100644 index 0000000000..f2b3642899 --- /dev/null +++ b/astroquery/astorbdb/tests/test_astorbdb.py @@ -0,0 +1,360 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +import pytest +import os + +from astroquery.utils.mocks import MockResponse +import astropy.units as u +from astropy.tests.helper import assert_quantity_allclose +from astropy.time import Time +from .. import AstInfo, AstInfoClass + +# files in data/ for different query types +DATA_FILES = {'1': + {'designations':'ceres_desig.dat', + 'elements':'ceres_elements.dat', + 'orbit':'ceres_orbit.dat', + 'albedos':'ceres_albedos.dat', + 'colors':'ceres_colors.dat', + 'taxonomies':'ceres_taxonomies.dat', + 'lightcurves':'ceres_lightcurves.dat', + 'dynamical-family':'ceres_dynfamily.dat', + 'escape-routes':'ceres_escaperoutes.dat' + }, + 'Apophis': + {'designations':'apophis_desig.dat', + 'elements':'apophis_elements.dat', + 'orbit':'apophis_orbit.dat', + 'albedos':'apophis_albedos.dat', + 'colors':'apophis_colors.dat', + 'taxonomies':'apophis_taxonomies.dat', + 'lightcurves':'apophis_lightcurves.dat', + 'dynamical-family':'apophis_dynfamily.dat', + 'escape-routes':'apophis_escaperoutes.dat' + }, + 'Toutatis': + {'designations':'toutatis_desig.dat', + 'elements':'toutatis_elements.dat', + 'orbit':'toutatis_orbit.dat', + 'albedos':'toutatis_albedos.dat', + 'colors':'toutatis_colors.dat', + 'taxonomies':'toutatis_taxonomies.dat', + 'lightcurves':'toutatis_lightcurves.dat', + 'dynamical-family':'toutatis_dynfamily.dat', + 'escape-routes':'toutatis_escaperoutes.dat' + }, + 'Beagle': + {'designations':'beagle_desig.dat', + 'elements':'beagle_elements.dat', + 'orbit':'beagle_orbit.dat', + 'albedos':'beagle_albedos.dat', + 'colors':'beagle_colors.dat', + 'taxonomies':'beagle_taxonomies.dat', + 'lightcurves':'beagle_lightcurves.dat', + 'dynamical-family':'beagle_dynfamily.dat', + 'escape-routes':'beagle_escaperoutes.dat' + }, + '2060': + {'designations':'chiron_desig.dat', + 'elements':'chiron_elements.dat', + 'orbit':'chiron_orbit.dat', + 'albedos':'chiron_albedos.dat', + 'colors':'chiron_colors.dat', + 'taxonomies':'chiron_taxonomies.dat', + 'lightcurves':'chiron_lightcurves.dat', + 'dynamical-family':'chiron_dynfamily.dat', + 'escape-routes':'chiron_escaperoutes.dat' + }, + '3200': + {'designations':'phaethon_desig.dat', + 'elements':'phaethon_elements.dat', + 'orbit':'phaethon_orbit.dat', + 'albedos':'phaethon_albedos.dat', + 'colors':'phaethon_colors.dat', + 'taxonomies':'phaethon_taxonomies.dat', + 'lightcurves':'phaethon_lightcurves.dat', + 'dynamical-family':'phaethon_dynfamily.dat', + 'escape-routes':'phaethon_escaperoutes.dat' + }, + '3556': + {'designations':'lixiaohua_desig.dat', + 'elements':'lixiaohua_elements.dat', + 'orbit':'lixiaohua_orbit.dat', + 'albedos':'lixiaohua_albedos.dat', + 'colors':'lixiaohua_colors.dat', + 'taxonomies':'lixiaohua_taxonomies.dat', + 'lightcurves':'lixiaohua_lightcurves.dat', + 'dynamical-family':'lixiaohua_dynfamily.dat', + 'escape-routes':'lixiaohua_escaperoutes.dat' + }, + '300163': + {'designations':'300163_desig.dat', + 'elements':'300163_elements.dat', + 'orbit':'300163_orbit.dat', + 'albedos':'300163_albedos.dat', + 'colors':'300163_colors.dat', + 'taxonomies':'300163_taxonomies.dat', + 'lightcurves':'300163_lightcurves.dat', + 'dynamical-family':'300163_dynfamily.dat', + 'escape-routes':'300163_escaperoutes.dat' + }, + '2024 ON': + {'designations':'2024on_desig.dat', + 'elements':'2024on_elements.dat', + 'orbit':'2024on_orbit.dat', + 'albedos':'2024on_albedos.dat', + 'colors':'2024on_colors.dat', + 'taxonomies':'2024on_taxonomies.dat', + 'lightcurves':'2024on_lightcurves.dat', + 'dynamical-family':'2024on_dynfamily.dat', + 'escape-routes':'2024on_escaperoutes.dat' + }, + 'Ceres': + {'designations':'ceres_missing_value_desig.dat', + 'elements':'ceres_missing_value_elements.dat', + 'orbit':'ceres_missing_value_orbit.dat', + 'albedos':'ceres_missing_value_albedos.dat', + 'colors':'ceres_missing_value_colors.dat', + 'taxonomies':'ceres_missing_value_taxonomies.dat', + 'lightcurves':'ceres_missing_value_lightcurves.dat', + 'dynamical-family':'ceres_missing_value_dynfamily.dat', + 'escape-routes':'ceres_missing_value_escaperoutes.dat' + } + } + +ALBEDOS = {'1':0.087, + 'Apophis':None, + 'Toutatis':0.405, + 'Beagle':0.065, + '2060':0.11, + '3200':0.16, + '3556':0.042, + '300163':None, + '2024 ON':None + } + +COLORS = {'1':0.377, + 'Apophis':None, + 'Toutatis':-0.566, + 'Beagle':0.431, + '2060':0.334, + '3200':0.54, + '3556':None, + '300163':1.26, + '2024 ON':None + } + +DESIGS = {'1':"Ceres", + 'Apophis':"Apophis", + 'Toutatis':"Toutatis", + 'Beagle':"Beagle", + '2060':"Chiron", + '3200':"Phaethon", + '3556':"Lixiaohua", + '300163':"2006 VW139", + '2024 ON':"2024 ON" + } + +DYNFAMILY = {'1':None, + 'Apophis':None, + 'Toutatis':None, + 'Beagle':"Themis", + '2060':None, + '3200':None, + '3556':"Lixiaohua", + '300163':None, + '2024 ON':None + } + +ELEMENTS = {'1':2.546883130334219 * u.au, + 'Apophis':0.7460876463977817 * u.au, + 'Toutatis':0.9543335929799223 * u.au, + 'Beagle':2.741852545719269 * u.au, + '2060':8.525493361792556 * u.au, + '3200':0.14015636489876157 * u.au, + '3556':2.493684653191043 * u.au, + '300163':2.440748125244917 * u.au, + '2024 ON':1.006933657057601 * u.au + } + +ESCAPEROUTES = {'1':None, + 'Apophis':0.87852, + 'Toutatis':0.22495, + 'Beagle':None, + '2060':None, + '3200':0.64189, + '3556':None, + '300163':None, + '2024 ON':0.53245 + } + +LIGHTCURVES = {'1':9.07417 * u.h, + 'Apophis':30.56 * u.h, + 'Toutatis':176 * u.h, + 'Beagle':7.035 * u.h, + '2060':5.918 * u.h, + '3200':3.604 * u.h, + '3556':None, + '300163':3240 * u.h, + '2024 ON':None + } + +ORBITS = {'1':223.748 * u.yr, + 'Apophis':18.068 * u.yr, + 'Toutatis':48.588 * u.yr, + 'Beagle':116.943 * u.yr, + '2060':129.695 * u.yr, + '3200':41.237 * u.yr, + '3556':59.856 * u.yr, + '300163':22.461 * u.yr, + '2024 ON':11.644 * u.yr + } + +TAXONOMIES = {'1':"G", + 'Apophis':"Sq", + 'Toutatis':"S", + 'Beagle':"C", + '2060':"B", + '3200':"F", + '3556':None, + '300163':None, + '2024 ON':None + } + +def data_path(filename): + data_dir = os.path.join(os.path.dirname(__file__), 'data') + return os.path.join(data_dir, filename) + + +# monkeypatch replacement request function +def nonremote_request(self, method_name, **kwargs): + + path_elements = kwargs['url'].split('/') + + query_type = path_elements[-1] + + if query_type in ['designations','elements','orbit']: + object_name = path_elements[-2] + else: + object_name = path_elements[-3] + + with open(data_path(DATA_FILES[object_name][query_type]), 'rb') as f: + response = MockResponse(content=f.read(), url=self.URL) + return response + + +# use a pytest fixture to create a dummy 'requests.get' function, +# that mocks(monkeypatches) the actual 'requests.get' function: +@pytest.fixture +def patch_request(request): + mp = request.getfixturevalue("monkeypatch") + + mp.setattr(AstInfoClass, '_request', + nonremote_request) + return mp + + +# --------------------------------- actual test functions + +def test_object_queries(patch_request): + for objectname in ALBEDOS.keys(): + + astinfo = AstInfo.albedos(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo[0]["albedo"], + ALBEDOS[objectname]) + + astinfo = AstInfo.colors(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo[0]["color"], + COLORS[objectname]) + + astinfo = AstInfo.designations(objectname) + if astinfo != []: + assert astinfo["primary_designation"] == DESIGS[objectname] + + astinfo = AstInfo.dynamicalfamily(objectname) + if astinfo != []: + assert astinfo[0]["family"] == DYNFAMILY[objectname] + + astinfo = AstInfo.elements(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo["q"], + ELEMENTS[objectname]) + + astinfo = AstInfo.escaperoutes(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo[0]["p_nu6_complex"], + ESCAPEROUTES[objectname]) + + astinfo = AstInfo.lightcurves(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo[0]["period"], + LIGHTCURVES[objectname]) + + astinfo = AstInfo.orbit(objectname) + if astinfo != []: + assert_quantity_allclose(astinfo["arc"], + ORBITS[objectname]) + + astinfo = AstInfo.taxonomies(objectname) + if astinfo != []: + assert astinfo[0]["taxonomy"] == TAXONOMIES[objectname] + + + +def test_missing_value(patch_request): + """test whether a missing value causes an error""" + + astinfo = AstInfo.albedos("Ceres") + assert astinfo[0]['albedo'] is None + + astinfo = AstInfo.colors("Ceres") + assert astinfo[0]['color'] is None + + astinfo = AstInfo.designations("Ceres") + assert astinfo['name'] is None + + astinfo = AstInfo.dynamicalfamily("Ceres") + assert astinfo is None + + astinfo = AstInfo.elements("Ceres") + assert astinfo['a'] is None + + astinfo = AstInfo.escaperoutes("Ceres") + assert astinfo is None + + astinfo = AstInfo.lightcurves("Ceres") + assert astinfo[0]['period'] is None + + astinfo = AstInfo.orbit("Ceres") + assert astinfo['ephname'] is None + + astinfo = AstInfo.taxonomies("Ceres") + assert astinfo[0]['taxonomy'] is None + + +def test_quantities(patch_request): + """Make sure query returns quantities""" + + astinfo = AstInfo.albedos("1") + assert isinstance(astinfo[0]['diameter'], u.Quantity) + assert astinfo[0]['diameter'].unit == u.km + + astinfo = AstInfo.elements("1") + assert isinstance(astinfo['a'], u.Quantity) + assert astinfo['a'].unit == u.au + + astinfo = AstInfo.orbit("1") + assert isinstance(astinfo['arc'], u.Quantity) + assert astinfo['arc'].unit == u.yr + + astinfo = AstInfo.colors("1") + assert isinstance(astinfo[0]['jd'], Time) + + astinfo = AstInfo.lightcurves("1") + assert isinstance(astinfo[0]['period'], u.Quantity) + assert astinfo[0]['period'].unit == u.h + + astinfo = AstInfo.escaperoutes("3200") + assert isinstance(astinfo[0]['epoch'], Time) diff --git a/astroquery/astorbdb/tests/test_astorbdb_remote.py b/astroquery/astorbdb/tests/test_astorbdb_remote.py new file mode 100644 index 0000000000..9c4229ac53 --- /dev/null +++ b/astroquery/astorbdb/tests/test_astorbdb_remote.py @@ -0,0 +1,55 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + + +# performs similar tests as test_module.py, but performs +# the actual HTTP request rather than monkeypatching them. +# should be disabled or enabled at will - use the +# remote_data decorator from astropy: + +import pytest +import astropy.units as u + +from .. import AstInfo + +@pytest.mark.remote_data +class TestAstInfoClass: + + def test_albedos(self): + astinfo = AstInfo.albedos('656') + assert astinfo[0]['albedo'] == 0.065 + + def test_colors(self): + astinfo = AstInfo.colors('656') + assert astinfo[0]['color'] == 0.431 + + def test_designations(self): + astinfo = AstInfo.designations('656') + assert astinfo['name'] == 'Beagle' + + def test_dynamicalfamily(self): + astinfo = AstInfo.dynamicalfamily('656') + assert astinfo[0]['family'] == 'Themis' + + def test_elements(self): + astinfo = AstInfo.elements('656') + assert astinfo['a'] == 3.156090767861024 * u.au + + def test_escaperoutes(self): + astinfo = AstInfo.escaperoutes('3200') + assert astinfo[0]['p_nu6_complex'] == 0.64189 + + def test_lightcurves(self): + astinfo = AstInfo.lightcurves('656') + assert astinfo[0]['period'] == 7.035 * u.h + + def test_orbit(self): + astinfo = AstInfo.orbit('656') + assert astinfo['arc'] == 117.17 * u.yr + + def test_taxonomies(self): + astinfo = AstInfo.taxonomies('656') + assert astinfo[0]['taxonomy'] == 'C' + + def test_all_astinfo(self): + astinfo = AstInfo.all_astinfo('656') + assert astinfo['designations']['name'] == 'Beagle' diff --git a/astroquery/astorbdb/tests/test_module.py b/astroquery/astorbdb/tests/test_module.py deleted file mode 100644 index f2574589e1..0000000000 --- a/astroquery/astorbdb/tests/test_module.py +++ /dev/null @@ -1,80 +0,0 @@ -# Licensed under a 3-clause BSD style license - see LICENSE.rst - -# astroquery uses the pytest framework for testing -# this is already available in astropy and does -# not require a separate install. Import it using: -import pytest - -# It would be best if tests are separated in two -# modules. This module performs tests on local data -# by mocking HTTP requests and responses. To test the -# same functions on the remote server, put the relevant -# tests in the 'test_module_remote.py' - -# Now import other commonly used modules for tests -import os - -from astropy.table import Table -import astropy.coordinates as coord -import astropy.units as u - -from astroquery.utils.mocks import MockResponse - -# finally import the module which is to be tested -# and the various configuration items created -from ... import template_module -from ...template_module import conf - -# Local tests should have the corresponding data stored -# in the ./data folder. This is the actual HTTP response -# one would expect from the server when a valid query is made. -# Its best to keep the data file small, so that testing is -# quicker. When running tests locally the stored data is used -# to mock the HTTP requests and response part of the query -# thereby saving time and bypassing unreliability for -# an actual remote network query. - -DATA_FILES = {'GET': - # You might have a different response for each URL you're - # querying: - {'http://dummy_server_mirror_1': - 'dummy.dat'}} - - -# ./setup_package.py helps the test function locate the data file -# define a function that can construct the full path to the file in the -# ./data directory: -def data_path(filename): - data_dir = os.path.join(os.path.dirname(__file__), 'data') - return os.path.join(data_dir, filename) - - -# define a monkeypatch replacement request function that returns the -# dummy HTTP response for the dummy 'get' function, by -# reading in data from some data file: -def nonremote_request(self, request_type, url, **kwargs): - # kwargs are ignored in this case, but they don't have to be - # (you could use them to define which data file to read) - with open(data_path(DATA_FILES[request_type][url]), 'rb') as f: - response = MockResponse(content=f.read(), url=url) - return response - - -# use a pytest fixture to create a dummy 'requests.get' function, -# that mocks(monkeypatches) the actual 'requests.get' function: -@pytest.fixture -def patch_request(request): - mp = request.getfixturevalue("monkeypatch") - - mp.setattr(template_module.core.TemplateClass, '_request', - nonremote_request) - return mp - - -# finally test the methods using the mock HTTP response -def test_query_object(patch_request): - result = template_module.core.TemplateClass().query_object('m1') - assert isinstance(result, Table) - -# similarly fill in tests for each of the methods -# look at tests in existing modules for more examples diff --git a/astroquery/astorbdb/tests/test_module_remote.py b/astroquery/astorbdb/tests/test_module_remote.py deleted file mode 100644 index ca7ba46800..0000000000 --- a/astroquery/astorbdb/tests/test_module_remote.py +++ /dev/null @@ -1,16 +0,0 @@ -# Licensed under a 3-clause BSD style license - see LICENSE.rst - - -# performs similar tests as test_module.py, but performs -# the actual HTTP request rather than monkeypatching them. -# should be disabled or enabled at will - use the -# remote_data decorator from astropy: - -import pytest - - -@pytest.mark.remote_data -class TestTemplateClass: - # now write tests for each method here - def test_this(self): - pass diff --git a/astroquery/solarsystem/astorbdb/__init__.py b/astroquery/solarsystem/astorbdb/__init__.py new file mode 100644 index 0000000000..b8a363ad6c --- /dev/null +++ b/astroquery/solarsystem/astorbdb/__init__.py @@ -0,0 +1,13 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst + +""" +astroquery.solarsystem.astorbdb +------------------------------- + +a collection of data services provided by Lowell Observatory's astorbDB +""" + +from ...astorbdb import AstInfo, AstInfoClass + + +__all__ = ["AstInfo", "AstInfoClass"] diff --git a/docs/astorbdb/astorbdb.rst b/docs/astorbdb/astorbdb.rst new file mode 100644 index 0000000000..d94f01cd94 --- /dev/null +++ b/docs/astorbdb/astorbdb.rst @@ -0,0 +1,213 @@ +.. _astroquery.astorbdb: + +******************************************************************************* +Lowell AstorbDB Queries (`astroquery.astorbdb`/astroquery.solarsystem.astorbdb) +******************************************************************************* + +Overview +======== + + +The :class:`~astroquery.astorbdb.AstInfoClass` class provides +an interface to the `Asteroid Information +`_ (AstInfo) tool provided as part of +the `Lowell Minor Planet Services `_ +which utilize the astorbDB database maintained by +`Lowell Observatory `_. + +AstInfo provides detailed information on a specific known small body, +including lists of alternate designations, orbit information, and available +published physical and dynamical properties. + +This module enables the query of these information for an individual +object into a formatted dictionary or `~collections.OrderedDict` structure +using `~astropy.units` objects where possible. This module +uses REST interfaces (currently undocumented) used to retrieve data +displayed on the Lowell `Asteroid Information `_ +page. + +Because of its relevance to Solar System science, this service can +also be accessed from the topical submodule +`astroquery.solarsystem.astorbdb`. The functionality of that service is +identical to the one presented here. + +Examples +======== + +There are several different categories of information that can be obtained +using an AstInfo query: + +Albedo data +----------- + +This query returns a list of dictionaries of albedo-related data and associated +metadata for a specified object from different published sources. + +.. doctest-remote-data:: + + >>> from astroquery.astorbdb import AstInfo + >>> albedos = AstInfo.albedos('656') + >>> print(albedos) # doctest: +IGNORE_OUTPUT + [{'albedo': 0.065, 'albedo_error_lower': -0.002, 'albedo_error_upper': 0.002, 'citation_bibcode': '2011PASJ...63.1117U', 'citation_url': 'https://darts.isas.jaxa.jp/astro/akari/catalogue/AcuA.html', 'count_bands_detection': 2, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 0.82, 'eta_error_lower': None, 'eta_error_upper': None, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 11, 'survey_name': 'Usui et al. (2011)'}, {'albedo': 0.0625, 'albedo_error_lower': -0.015, 'albedo_error_upper': 0.015, 'citation_bibcode': '2004PDSS...12.....T', 'citation_url': 'http://sbn.psi.edu/pds/asteroid/IRAS_A_FPA_3_RDR_IMPS_V6_0.zip', 'count_bands_detection': 3, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 0.756, 'eta_error_lower': -1, 'eta_error_upper': 1, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 18, 'survey_name': 'Infrared Astronomical Satellite (IRAS)'}, {'albedo': 0.075, 'albedo_error_lower': -0.011, 'albedo_error_upper': 0.011, 'citation_bibcode': '2019PDSS..251.....M', 'citation_url': 'http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip', 'count_bands_detection': 4, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 1.033, 'eta_error_lower': -0.021, 'eta_error_upper': 0.021, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 58, 'survey_name': 'NEOWISE'}, {'albedo': 0.045, 'albedo_error_lower': -0.005, 'albedo_error_upper': 0.005, 'citation_bibcode': '2019PDSS..251.....M', 'citation_url': 'http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip', 'count_bands_detection': 4, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 1.458, 'eta_error_lower': -0.025, 'eta_error_upper': 0.025, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 46, 'survey_name': 'NEOWISE'}, {'albedo': 0.092, 'albedo_error_lower': -0.041, 'albedo_error_upper': 0.041, 'citation_bibcode': '2019PDSS..251.....M', 'citation_url': 'http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip', 'count_bands_detection': 2, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 0.95, 'eta_error_lower': -0.2, 'eta_error_upper': 0.2, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 16, 'survey_name': 'NEOWISE'}, {'albedo': 0.069, 'albedo_error_lower': -0.034, 'albedo_error_upper': 0.034, 'citation_bibcode': '2019PDSS..251.....M', 'citation_url': 'http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip', 'count_bands_detection': 2, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 0.95, 'eta_error_lower': -0.2, 'eta_error_upper': 0.2, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 26, 'survey_name': 'NEOWISE'}, {'albedo': 0.083, 'albedo_error_lower': -0.054, 'albedo_error_upper': 0.054, 'citation_bibcode': '2019PDSS..251.....M', 'citation_url': 'http://sbnarchive.psi.edu/pds4/non_mission/neowise_diameters_albedos_V2_0.zip', 'count_bands_detection': 2, 'diameter': , 'diameter_error_lower': , 'diameter_error_upper': , 'eta': 0.95, 'eta_error_lower': -0.2, 'eta_error_upper': 0.2, 'measurement_techniques': ['Mid IR photometry'], 'observations_total': 22, 'survey_name': 'NEOWISE'}] + +Color data +---------- + +This query returns a list of dictionaries of color data and associated +metadata for a specified object from different published sources. + +.. doctest-remote-data:: + + >>> from astroquery.astorbdb import AstInfo + >>> colors = AstInfo.colors('656') + >>> print(colors) # doctest: +IGNORE_OUTPUT + [{'citation_bibcode': '2010PDSS..125.....S', 'citation_url': 'http://sbnarchive.psi.edu/pds3/non_mission/EAR_A_I0054_I0055_5_2MASS_V2_0.zip', 'color': 0.431, 'color_error': 0.035, 'jd':