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 Name", "fieldnames": [ "targetname", "Targetname", "target", "Target", "name", "Name", "id", "ID", "Object", "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", "target number"], "provenance": ["orbit", "ephem", "obs", "phys"], "dimension": None, }, { "description": "Epoch", "fieldnames": ["epoch", "datetime", "Date", "date", "Time", "time"], "provenance": ["orbit", "ephem", "obs"], "dimension": dimensions.time_object, }, { "description": "relative time", "fieldnames": ["t_relative", "t_rel", "dt"], "provenance": ["ephem"], "dimension": dimensions.time, }, # 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, }, { "description": "Ratio of the force from radiation to the force from gravity", "fieldnames": ["beta_rad"], "provenance": ["phys"], "dimension": dimensions.dimensionless, }, # { # 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