Source code for astroML.datasets.moving_objects

import os
from gzip import GzipFile
from io import BytesIO
import numpy as np

from .tools import download_with_progress_bar
from . import get_data_home

DATA_URL = ('https://github.com/astroML/astroML-data/raw/main/datasets/'
            'ADR3.dat.gz')

ARCHIVE_FILE = 'moving_objects.npy'

ADR4_dtype = [('moID', 'a6'),
              ('sdss_run', 'i4'),
              ('sdss_col', 'i4'),
              ('sdss_field', 'i4'),
              ('sdss_obj', 'i4'),
              ('rowc', 'f4'),
              ('colc', 'f4'),
              ('mjd', 'f8'),
              ('ra', 'f8'),
              ('dec', 'f8'),
              ('lambda', 'f8'),
              ('beta', 'f8'),
              ('phi', 'f8'),
              ('vmu', 'f4'),
              ('vmu_err', 'f4'),
              ('vnu', 'f4'),
              ('vnu_err', 'f4'),
              ('vlambda', 'f4'),
              ('vbeta', 'f4'),
              ('mag_u', 'f4'),
              ('err_u', 'f4'),
              ('mag_g', 'f4'),
              ('err_g', 'f4'),
              ('mag_r', 'f4'),
              ('err_r', 'f4'),
              ('mag_i', 'f4'),
              ('err_i', 'f4'),
              ('mag_z', 'f4'),
              ('err_z', 'f4'),
              ('mag_a', 'f4'),
              ('err_a', 'f4'),
              ('mag_V', 'f4'),
              ('mag_B', 'f4'),
              ('ast_flag', 'i4'),
              ('ast_num', 'i8'),
              ('ast_designation', 'a17'),
              ('ast_det_count', 'i4'),
              ('ast_det_total', 'i4'),
              ('ast_flags', 'i8'),
              ('ra_comp', 'f8'),
              ('dec_comp', 'f8'),
              ('mag_comp', 'f4'),
              ('r_helio', 'f4'),
              ('r_geo', 'f4'),
              ('phase', 'f4'),
              ('cat_id', 'a15'),
              ('H', 'f4'),
              ('G', 'f4'),
              ('Arc', 'f4'),
              ('Epoch', 'f8'),
              ('a', 'f8'),
              ('e', 'f8'),
              ('i', 'f8'),
              ('asc_node', 'f8'),
              ('arg_peri', 'f8'),
              ('M', 'f8'),
              ('PEcat_id', 'a17'),
              ('aprime', 'f8'),
              ('eprime', 'f8'),
              ('sin_iprime', 'f8')]


[docs]def fetch_moving_objects(data_home=None, download_if_missing=True, Parker2008_cuts=False): """Loader for SDSS moving objects datasets Parameters ---------- data_home : optional, default=None Specify another download and cache folder for the datasets. By default all astroML data is stored in '~/astroML_data'. download_if_missing : optional, default=True If False, raise a IOError if the data is not locally available instead of trying to download the data from the source site. Parker2008_cuts : bool (optional) If true, apply cuts on magnitudes and orbital parameters used in Parker et al. 2008 Returns ------- data : recarray, shape = (??,) record array containing 60 values for each item Notes ----- See http://www.astro.washington.edu/users/ivezic/sdssmoc/sdssmoc3.html Columns 0, 35, 45, and 56 are left out of the fetch: they are string parameters. Only columns with known orbital parameters are saved. Examples -------- >>> from astroML.datasets import fetch_moving_objects >>> data = fetch_moving_objects() # doctest: +IGNORE_OUTPUT +REMOTE_DATA >>> # number of objects >>> print(len(data)) # doctest: +REMOTE_DATA 43424 >>> # first five u-g colors of the dataset >>> u_g = data['mag_u'] - data['mag_g'] # doctest: +REMOTE_DATA >>> print(u_g[:5]) # doctest: +REMOTE_DATA [1.4899998 1.7800007 1.6500015 2.0100002 1.8199997] """ data_home = get_data_home(data_home) archive_file = os.path.join(data_home, ARCHIVE_FILE) if not os.path.exists(archive_file): if not download_if_missing: raise IOError('data not present on disk. ' 'set download_if_missing=True to download') print("downloading moving object catalog from %s to %s" % (DATA_URL, data_home)) zipped_buf = download_with_progress_bar(DATA_URL, return_buffer=True) gzf = GzipFile(fileobj=zipped_buf, mode='rb') print("uncompressing file...") extracted_buf = BytesIO(gzf.read()) data = np.loadtxt(extracted_buf, dtype=ADR4_dtype) # Select unique sources with known orbital elements flag = (data['ast_flag'] == 1) & (data['ast_det_count'] == 1) data = data[flag] np.save(archive_file, data) else: data = np.load(archive_file) if Parker2008_cuts: i_z = data['mag_i'] - data['mag_z'] flag = ((data['aprime'] >= 0.01) & (data['aprime'] <= 100) & (data['mag_a'] <= 0.4) & (data['mag_a'] >= -0.3) & (i_z <= 0.6) & (i_z >= -0.8)) data = data[flag] return data