Source code for sbpy.data

# Licensed under a 3-clause BSD style license - see LICENSE.rst

"""
sbpy.data
---------

:author: Michael Mommert (mommermiscience@gmail.com)

``Conf`` contains metadata for ``sbpy`` `~sbpy.DataClass` field names.

``Conf.fieldnames_info`` is a list of dictionaries, one per field, with the
keys: `'description'`, `'fieldnames'`, `'provenance'`, `'dimension'`, and
`'equivalencies'`:

    * description: text description of the field
    * provenance: list of `~sbpy.DataClass` objects which use the field
    * fieldnames: list of field names as strings, the first is considered the
      primary, the remaining strings, if any, are alternates
    * dimension: English description of the field's dimension (e.g., length)
    * equivalencies: `~astropy.units` list of equivalencies for unit
      conversion (optional)

"""

__all__ = ['DataClass', 'Ephem', 'Obs', 'Orbit', 'Phys', 'Names',
           'Conf', 'DataClassError', 'quantity_to_dataclass',
           'natural_sort_key', 'dataclass_input', 'QueryError',
           'TimeScaleWarning']

import astropy.units as u
from astropy.time import Time
from . import dimensions


[docs] class Conf(): # acceptable field names for DataClass fieldnames_info = [ # General {'description': 'Target Identifier', 'fieldnames': ['targetname', 'id', 'Object'], 'provenance': ['orbit', 'ephem', 'obs', 'phys'], 'dimension': None}, {'description': 'Target Designation', 'fieldnames': ['desig', 'designation'], 'provenance': ['orbit', 'ephem', 'obs', 'phys'], 'dimension': None}, {'description': 'Target Number', 'fieldnames': ['number'], 'provenance': ['orbit', 'ephem', 'obs', 'phys'], 'dimension': None}, {'description': 'Target Name', 'fieldnames': ['name'], 'provenance': ['orbit', 'ephem', 'obs', 'phys'], 'dimension': None}, {'description': 'Epoch', 'fieldnames': ['epoch', 'datetime', 'Date', 'date', 'Time', 'time'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.time_object}, # Orbital Elements {'description': 'Semi-Major Axis', 'fieldnames': ['a', 'sma'], 'provenance': ['orbit'], 'dimension': dimensions.length}, {'description': 'Eccentricity', 'fieldnames': ['e', 'ecc'], 'provenance': ['orbit'], 'dimension': dimensions.dimensionless}, {'description': 'Inclination', 'fieldnames': ['i', 'inc', 'incl'], 'provenance': ['orbit'], 'dimension': dimensions.angle}, {'description': 'Perihelion Distance', 'fieldnames': ['q', 'periheldist'], 'provenance': ['orbit'], 'dimension': dimensions.length}, {'description': 'Aphelion Distance', 'fieldnames': ['Q', 'apheldist'], 'provenance': ['orbit'], 'dimension': dimensions.length}, {'description': 'Longitude of the Ascending Node', 'fieldnames': ['Omega', 'longnode', 'node'], 'provenance': ['orbit'], 'dimension': dimensions.angle}, {'description': 'Argument of the Periapsis', 'fieldnames': ['w', 'argper'], 'provenance': ['orbit'], 'dimension': dimensions.angle}, {'description': 'Mean Anomaly', 'fieldnames': ['M', 'mean_anom'], 'provenance': ['orbit'], 'dimension': dimensions.angle}, {'description': 'True Anomaly', 'fieldnames': ['v', 'true_anom', 'true_anomaly'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Arc Length', 'fieldnames': ['arc', 'arc_length'], 'provenance': ['orbit', 'ephem'], 'dimension': dimensions.time}, {'description': 'Delta-v', 'fieldnames': ['delta_v', 'delta-v'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length_per_time}, {'description': 'Minimum Orbit Intersection Distance wrt Mercury', 'fieldnames': ['moid_mercury'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Earth', 'fieldnames': ['moid_earth'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Venus', 'fieldnames': ['moid_venus'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Mars', 'fieldnames': ['moid_mars'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Jupiter', 'fieldnames': ['moid_jupiter'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Saturn', 'fieldnames': ['moid_saturn'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Uranus', 'fieldnames': ['moid_uranus'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Minimum Orbit Intersection Distance wrt Neptune', 'fieldnames': ['moid_neptune'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.length}, {'description': 'Tisserand Parameter wrt Jupiter', 'fieldnames': ['Tj', 'tj'], 'provenance': ['orbit', 'phys'], 'dimension': None}, {'description': 'MPC Orbit Type', 'fieldnames': ['mpc_orb_type'], 'provenance': ['orbit', 'phys'], 'dimension': None}, {'description': 'Epoch of Perihelion Passage', 'fieldnames': ['Tp'], 'provenance': ['orbit'], 'dimension': dimensions.time_object}, {'description': 'Orbital Period', 'fieldnames': ['P', 'period'], 'provenance': ['orbit', 'phys'], 'dimension': dimensions.time}, # Ephemerides properties {'description': 'Heliocentric Distance', 'fieldnames': ['r', 'rh', 'r_hel', 'heldist'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Heliocentric Radial Velocity', 'fieldnames': ['r_rate', 'rh_rate', 'rdot', 'r-dot', 'rhdot', 'rh-dot'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Distance to the Observer', 'fieldnames': ['delta', 'Delta', 'obsdist'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Observer-Target Radial Velocity', 'fieldnames': ['delta_rate', 'deltadot', 'delta-dot', 'deldot', 'del-dot'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Right Ascension', 'fieldnames': ['ra', 'RA'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Declination', 'fieldnames': ['dec', 'DEC', 'Dec'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Right Ascension Rate', 'fieldnames': ['ra_rate', 'RA_rate', 'ra_rates', 'RA_rates', 'dRA', 'dra'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'RA*cos(Dec) Rate', 'fieldnames': ['RA*cos(Dec)_rate', 'dra cos(dec)', 'dRA cos(Dec)', 'dra*cos(dec)', 'dRA*cos(Dec)'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'Declination Rate', 'fieldnames': ['dec_rate', 'DEC_rate', 'Dec_rate', 'dec_rates', 'DEC_rates', 'Dec_rates', 'dDec', 'dDEC', 'ddec'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'Proper Motion', 'fieldnames': ['mu', 'Proper motion'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'Proper Motion Direction', 'fieldnames': ['Direction', 'direction'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Solar Phase Angle', 'fieldnames': ['alpha', 'phaseangle', 'Phase', 'phase'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Solar Elongation Angle', 'fieldnames': ['elong', 'solarelong', 'solarelongation', 'elongation', 'Elongation'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'V-band Magnitude', 'fieldnames': ['V', 'Vmag'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude}, {'description': 'Heliocentric Ecliptic Longitude', 'fieldnames': ['hlon', 'EclLon', 'ecllon', 'HelEclLon', 'helecllon'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Heliocentric Ecliptic Latitude', 'fieldnames': ['hlat', 'EclLat', 'ecllat', 'HelEclLat', 'helecllat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Horizontal Elevation', 'fieldnames': ['el', 'EL', 'elevation', 'alt', 'altitude', 'Altitude'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Horizontal Azimuth', 'fieldnames': ['az', 'AZ', 'azimuth'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Lunar Elongation', 'fieldnames': ['lunar_elong', 'elong_moon', 'elongation_moon', 'lunar_elongation', 'lunarelong'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'X State Vector Component', 'fieldnames': ['x', 'X', 'x_vec'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Y State Vector Component', 'fieldnames': ['y', 'Y', 'y_vec'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Z State Vector Component', 'fieldnames': ['z', 'Z', 'z_vec'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'X Velocity Vector Component', 'fieldnames': ['vx', 'dx', 'dx/dt'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Y Velocity Vector Component', 'fieldnames': ['vy', 'dy', 'dy/dt'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Z Velocity Vector Component', 'fieldnames': ['vz', 'dz', 'dz/dt'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'X heliocentric position vector', 'fieldnames': ['x_h', 'X_h'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Y heliocentric position vector', 'fieldnames': ['y_h', 'Y_h'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Z heliocentric position vector', 'fieldnames': ['z_h', 'Z_h'], 'provenance': ['orbit', 'ephem', 'obs'], 'dimension': dimensions.length}, {'description': 'Comet Total Absolute Magnitude', 'fieldnames': ['m1', 'M1'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude}, {'description': 'Comet Nuclear Absolute Magnitude', 'fieldnames': ['m2', 'M2'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude}, {'description': 'Total Magnitude Scaling Factor', 'fieldnames': ['k1', 'K1'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.dimensionless}, {'description': 'Nuclear Magnitude Scaling Factor', 'fieldnames': ['k2', 'K2'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.dimensionless}, {'description': 'Phase Coefficient', 'fieldnames': ['phase_coeff', 'Phase_coeff'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.dimensionless}, {'description': 'Information on Solar Presence', 'fieldnames': ['solar_presence', 'Solar_presence'], 'provenance': ['ephem', 'obs'], 'dimension': None}, {'description': 'Information on Moon and target status', 'fieldnames': ['status_flag', 'Status_flag'], 'provenance': ['ephem', 'obs'], 'dimension': None}, {'description': 'Apparent Right Ascension', 'fieldnames': ['RA_app', 'ra_app'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Apparent Declination', 'fieldnames': ['DEC_app', 'dec_app'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Azimuth Rate (dAZ*cosE)', 'fieldnames': ['az_rate', 'AZ_rate'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'Elevation Rate (d(ELV)/dt)', 'fieldnames': ['el_rate', 'EL_rate'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle_per_time}, {'description': 'Satellite Position Angle', 'fieldnames': ['sat_pang', 'Sat_pang'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Local Sidereal Time', 'fieldnames': ['siderealtime', 'Siderealtime'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': 'Target Optical Airmass', 'fieldnames': ['airmass', 'Airmass'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.dimensionless}, {'description': 'V Magnitude Extinction', 'fieldnames': ['vmagex', 'Vmagex'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude}, {'description': 'Surface Brightness', 'fieldnames': ['Surfbright', 'surfbright'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude_per_solid_angle}, {'description': 'Fraction of Illumination', 'fieldnames': ['frac_illum', 'Frac_illum'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.percent}, {'description': 'Illumination Defect', 'fieldnames': ['defect_illum', 'Defect_illum'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target-primary angular separation', 'fieldnames': ['targ_sep', 'Targ_sep'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target-primary visibility', 'fieldnames': ['targ_vis', 'Targ_vis'], 'provenance': ['ephem', 'obs'], 'dimension': None}, {'description': 'Angular width of target', 'fieldnames': ['targ_width', 'Targ_width'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Apparent planetodetic longitude', 'fieldnames': ['pldetic_long', 'Pldetic_long'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Apparent planetodetic latitude', 'fieldnames': ['pldetic_lat', 'Pldetic_lat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Apparent planetodetic Solar longitude', 'fieldnames': ['pltdeticSol_long', 'PltdeticSol_long'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Apparent planetodetic Solar latitude', 'fieldnames': ['pltdeticSol_lat', 'PltdeticSol_lat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target sub-solar point position angle', 'fieldnames': ['subsol_ang', 'Subsol_ang'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target sub-solar point angle distance', 'fieldnames': ['subsol_dist', 'Subsol_dist'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target North pole position angle', 'fieldnames': ['npole_angle', 'Npole_angle'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target North pole position distance', 'fieldnames': ['npole_dist', 'Npole_dist'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Observation centric ecliptic longitude', 'fieldnames': ['obs_ecl_long', 'Obs_ecl_long'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Observation centric ecliptic latitude', 'fieldnames': ['obs_ecl_lat', 'Obs_ecl_lat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'One-way light time', 'fieldnames': ['lighttime', 'Lighttime'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': 'Target center velocity wrt Sun', 'fieldnames': ['vel_sun', 'Vel_sun'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Target center velocity wrt Observer', 'fieldnames': ['vel_obs', 'Vel_obs'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': 'Lunar illumination', 'fieldnames': ['lun_illum', 'Lun_illum'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.percent}, {'description': 'Apparent interfering body elongation wrt observer', 'fieldnames': ['ib_elong', 'IB_elong'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Interfering body illumination', 'fieldnames': ['ib_illum', 'IB_illum'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.percent}, {'description': 'Observer primary target angle', 'fieldnames': ['targ_angle_obs', 'Targ_angle_obs'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Orbital plane angle', 'fieldnames': ['orbangle_plane', 'Orbangle_plane'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Constellation ID containing target', 'fieldnames': ['constellation', 'Constellation'], 'provenance': ['ephem', 'obs'], 'dimension': None}, {'description': 'Target North Pole RA', 'fieldnames': ['targ_npole_ra', 'targ_npole_RA'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Target North Pole DEC', 'fieldnames': ['targ_npole_dec', 'targ_npole_DEC'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Galactic Longitude', 'fieldnames': ['glx_long', 'Glx_long'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Galactic Latitude', 'fieldnames': ['glx_lat', 'Glx_lat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Local apparent solar time', 'fieldnames': ['solartime'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': 'Observer light time from Earth', 'fieldnames': ['earthlighttime', 'Earthlighttime'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': '3 sigma positional uncertainty RA', 'fieldnames': ['RA_3sigma', 'ra_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma positional uncertainty DEC', 'fieldnames': ['DEC_3sigma', 'dec_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma positional uncertainty semi-major axis', 'fieldnames': ['sma_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma positional uncertainty semi-minor axis', 'fieldnames': ['smi_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma positional uncertainty position angle', 'fieldnames': ['posangle_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma positional uncertainty ellipse area', 'fieldnames': ['area_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.solid_angle}, {'description': '3 sigma positional uncertainty root sum square', 'fieldnames': ['rss_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': '3 sigma range uncertainty', 'fieldnames': ['r_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length}, {'description': '3 sigma range rate uncertainty', 'fieldnames': ['r_rate_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.length_per_time}, {'description': '3 sigma doppler radar uncertainty at S-band', 'fieldnames': ['sband_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.frequency}, {'description': '3 sigma doppler radar uncertainty at X-band', 'fieldnames': ['xband_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.frequency}, {'description': '3 sigma doppler round-trip delay uncertainty', 'fieldnames': ['dopdelay_3sigma'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': 'Local apparent hour angle', 'fieldnames': ['locapp_hourangle'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.time}, {'description': 'True phase angle', 'fieldnames': ['true_phaseangle'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Phase angle bisector longitude', 'fieldnames': ['pab_long'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Phase angle bisector latitude', 'fieldnames': ['pab_lat'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Absolute V-band Magnitude', 'fieldnames': ['abs_V', 'abs_Vmag'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.magnitude}, {'description': 'Satellite X-position', 'fieldnames': ['sat_X', 'sat_x'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Satellite Y-position', 'fieldnames': ['sat_y', 'sat_Y'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, {'description': 'Atmospheric Refraction', 'fieldnames': ['atm_refraction', 'refraction'], 'provenance': ['ephem', 'obs'], 'dimension': dimensions.angle}, # Physical properties (dependent on other properties) {'description': 'Infrared Beaming Parameter', 'fieldnames': ['eta', 'Eta'], 'provenance': ['ephem', 'obs'], 'dimension': None}, {'description': 'Temperature', 'fieldnames': ['temp', 'Temp', 'temperature', 'Temperature'], 'provenance': ['phys', 'ephem', 'obs'], 'dimension': dimensions.temperature}, # Physical properties (static) {'description': 'Effective Diameter', 'fieldnames': ['d', 'D', 'diam', 'diameter', 'Diameter'], 'provenance': ['phys'], 'dimension': dimensions.length}, {'description': 'Effective Radius', 'fieldnames': ['R', 'radius'], 'provenance': ['phys'], 'dimension': dimensions.length}, {'description': 'Geometric Albedo', 'fieldnames': ['pv', 'pV', 'p_v', 'p_V', 'geomalb'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Bond Albedo', 'fieldnames': ['A', 'bondalbedo'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Emissivity', 'fieldnames': ['emissivity', 'Emissivity'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Absolute Magnitude', 'fieldnames': ['absmag', 'H'], 'provenance': ['phys', 'ephem', 'orbit'], 'dimension': dimensions.magnitude}, {'description': 'Photometric Phase Slope Parameter', 'fieldnames': ['G', 'slope'], 'provenance': ['phys', 'ephem', 'orbit'], 'dimension': dimensions.dimensionless}, {'description': 'Molecule Identifier', 'fieldnames': ['mol_tag', 'mol_name'], 'provenance': ['phys'], 'dimension': None}, {'description': 'Transition frequency', 'fieldnames': ['t_freq'], 'provenance': ['phys'], 'dimension': dimensions.frequency, 'equivalencies': u.spectral()}, {'description': 'Integrated line intensity at 300 K', 'fieldnames': ['lgint300'], 'provenance': ['phys'], 'dimension': None}, # fix when intensity units are resolved {'description': 'Integrated line intensity at designated Temperature', 'fieldnames': ['intl', 'lgint'], 'provenance': ['phys'], 'dimension': None}, # fix when intensity units are resolved {'description': 'Partition function at 300 K', 'fieldnames': ['partfn300'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Partition function at designated temperature', 'fieldnames': ['partfn'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Upper state degeneracy', 'fieldnames': ['dgup'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Upper level energy in Joules', 'fieldnames': ['eup_j', 'eup_J'], 'provenance': ['phys'], 'dimension': dimensions.energy}, {'description': 'Lower level energy in Joules', 'fieldnames': ['elo_j', 'elo_J'], 'provenance': ['phys'], 'dimension': dimensions.energy}, {'description': 'Degrees of freedom', 'fieldnames': ['degfr', 'ndf', 'degfreedom'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Einstein Coefficient', 'fieldnames': ['au', 'eincoeff'], 'provenance': ['phys'], 'dimension': dimensions.inverse_time}, {'description': 'Timescale * r^2', 'fieldnames': ['beta', 'beta_factor'], 'provenance': ['phys'], 'dimension': dimensions.time_area}, {'description': 'Total Number', 'fieldnames': ['totnum', 'total_number_nocd' 'total_number'], 'provenance': ['phys'], 'dimension': dimensions.dimensionless}, {'description': 'Column Density from Bockelee Morvan et al. 2004', 'fieldnames': ['cdensity', 'col_density'], 'provenance': ['phys'], 'dimension': dimensions.inverse_area}, # { # see module doc string # 'description': '', # 'fieldnames': [], # 'provenance': [], # 'dimension': None, # 'equivalencies': (astropy units equivalencies, e.g., u.spectral()) # }, ] # use this code snippet to identify duplicate field names: # from sbpy.data import Conf # import collections # a = sum(Conf.fieldnames, []) # print([item for item, count in collections.Counter(a).items() # if count > 1]) # list of fieldnames; each element a list of alternatives fieldnames = [prop['fieldnames'] for prop in fieldnames_info] fieldname_idx = {} for idx, field in enumerate(fieldnames): for alt in field: fieldname_idx[alt] = idx # field equivalencies defining conversions # key defines target quantity; dict with source quantity and function # for conversion # conversions considered as part of DataClass._translate_columns field_eq = {'R': {'d': lambda r: r/2}, # diameter to radius} 'd': {'R': lambda d: d*2} } # definitions for use of pyoorb in Orbits oorb_timeScales = {'UTC': 1, 'UT1': 2, 'TT': 3, 'TAI': 4} oorb_elemType = {'CART': 1, 'COM': 2, 'KEP': 3, 'DEL': 4, 'EQX': 5} # field name, unit; in order as returned from oorb # However, in propagate, angular units are returned as deg. This is # accounted for in Orbit.oo_propagate(). oorb_orbit_fields = { 'COM': ( ('id', None), ('q', 'au'), ('e', ''), ('incl', 'rad'), ('Omega', 'rad'), ('w', 'rad'), ('Tp', 'd'), ('orbtype', None), ('epoch', 'd'), ('epoch_scale', None), ('H', 'mag'), ('G', ''), ), 'KEP': ( ('id', None), ('a', 'au'), ('e', ''), ('incl', 'rad'), ('Omega', 'rad'), ('w', 'rad'), ('M', 'rad'), ('orbtype', None), ('epoch', 'd'), ('epoch_scale', None), ('H', 'mag'), ('G', ''), ), 'CART': ( ('id', None), ('x', 'au'), ('y', 'au'), ('z', 'au'), ('vx', 'au/d'), ('vy', 'au/d'), ('vz', 'au/d'), ('orbtype', None), ('epoch', 'd'), ('epoch_scale', None), ('H', 'mag'), ('G', ''), ) } oorb_ephem_full_fields = [ 'MJD', 'RA', 'DEC', 'RA*cos(Dec)_rate', 'DEC_rate', 'alpha', 'elong', 'r', 'Delta', 'V', 'pa', 'TopEclLon', 'TopEclLat', 'OppTopEclLon', 'OppTopEclLat', 'HelEclLon', 'HelEclLat', 'OppHelEclLon', 'OppHelEclLat', 'EL', 'ELsun', 'ELmoon', 'lunarphase', 'lunarelong', 'x', 'y', 'z', 'vx', 'vy', 'vz', 'obsx', 'obsy', 'obsz', 'trueanom'] oorb_ephem_full_units = [ 'd', 'deg', 'deg', 'deg/d', 'deg/d', 'deg', 'deg', 'au', 'au', 'mag', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', 'deg', None, 'deg', 'au', 'au', 'au', 'au/d', 'au/d', 'au/d', 'au', 'au', 'au', 'deg'] oorb_ephem_basic_fields = [ 'MJD', 'RA', 'DEC', 'RA*cos(Dec)_rate', 'DEC_rate', 'alpha', 'elong', 'r', 'Delta', 'V', 'trueanom'] oorb_ephem_basic_units = [ 'd', 'deg', 'deg', 'deg/d', 'deg/d', 'deg', 'deg', 'au', 'au', 'mag', 'deg'] # definitions for MPC orbits: MPC field name: [sbpy field name, unit] mpc_orbit_fields = { 'absolute_magnitude': ['absmag', 'mag'], 'aphelion_distance': ['Q', 'au'], 'arc_length': ['arc', 'day'], 'argument_of_perihelion': ['w', 'deg'], 'ascending_node': ['Omega', 'deg'], 'delta_v': ['delta_v', 'km/s'], 'designation': ['desig', None], 'earth_moid': ['moid_earth', 'au'], 'eccentricity': ['e', ''], 'epoch_jd': ['epoch', 'time_jd_utc'], 'inclination': ['i', 'deg'], 'jupiter_moid': ['moid_jupiter', 'au'], 'mars_moid': ['moid_mars', 'au'], 'mean_anomaly': ['M', 'deg'], 'mercury_moid': ['moid_mercury', 'au'], 'name': ['name', None], 'number': ['number', None], 'orbit_type': ['mpc_orbit_type', None], 'perihelion_date_jd': ['Tp', 'time_jd_utc'], 'perihelion_distance': ['q', 'au'], 'period': ['P', 'year'], 'phase_slope': ['G', ''], 'saturn_moid': ['moid_saturn', 'au'], 'semimajor_axis': ['a', 'au'], 'tisserand_jupiter': ['Tj', ''], 'uranus_moid': ['moid_uranus', 'au'], 'venus_moid': ['moid_venus', 'au'] }
# clean namespace del u, Time from .core import DataClass, DataClassError, QueryError, TimeScaleWarning # noqa: E402, E501 from .decorators import quantity_to_dataclass, dataclass_input # noqa: E402 from .ephem import Ephem # noqa: E402 from .orbit import Orbit # noqa: E402 from .phys import Phys # noqa: E402 from .obs import Obs # noqa: E402 from .names import Names, natural_sort_key # noqa: E402