Source code for uranography.stars

"""Load the Yale Bright Star catalog into a pandas.DataFrame."""

import os
from collections import OrderedDict

import pandas as pd

BSC5_URL = "http://tdc-www.harvard.edu/catalogs/bsc5.dat.gz"


[docs] def load_bright_stars(fname=None): """Read the Yale Bright Star Catalog into a pandas.DataFrame. Parameters ---------- fname : `str`, optional Name of file from which to load the catalog, by default None Returns ------- bright_stars : `pandas.DataFrame` The catalog of bright stars. """ if fname is None: try: fname = os.environ["BSC5_FNAME"] except KeyError: fname = BSC5_URL ybs_columns = OrderedDict( ( ("HR", (0, 4)), ("name", (4, 14)), ("RA_hour", (75, 77)), ("RA_min", (77, 79)), ("RA_sec", (79, 83)), ("decl_sign", (83, 84)), ("decl_deg", (84, 86)), ("decl_min", (86, 88)), ("decl_sec", (88, 90)), ("Vmag", (102, 107)), ) ) compression = "gzip" if fname.endswith(".gz") else "infer" bright_stars = pd.read_fwf( fname, colspecs=[ybs_columns[k] for k in ybs_columns], names=[k for k in ybs_columns], compression=compression, ) bright_stars["ra"] = (360 / 24) * ( bright_stars.RA_hour + (bright_stars.RA_min + bright_stars.RA_sec / 60.0) / 60.0 ) bright_stars["decl"] = ( bright_stars.decl_deg + (bright_stars.decl_min + bright_stars.decl_sec / 60.0) / 60.0 ) southern_stars = bright_stars.decl_sign == "-" bright_stars.loc[southern_stars, "decl"] = -1 * bright_stars.loc[southern_stars, "decl"] return bright_stars