Source code for EXOSIMS.StarCatalog.plandbcat

from EXOSIMS.Prototypes.StarCatalog import StarCatalog
import pandas
import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord


[docs] class plandbcat(StarCatalog): """ Imaging Mission Database Star Catalog. Args: star_data_path (str): Full path to pickle file with stellar data """ def __init__(self, star_data_path=None, **specs): assert star_data_path is not None, "star_data_path must be set." stdata = pandas.read_pickle(star_data_path) StarCatalog.__init__(self, ntargs=len(stdata), **specs) atts_mapping = { "Name": ("st_name", None), "Spec": ("spectype", None), "parx": ("sy_plx", u.mas), "dist": ("sy_dist", u.pc), "pmra": ("sy_pmra", u.mas / u.year), "pmdec": ("sy_pmdec", u.mas / u.year), "rv": ("st_radv", u.km / u.s), "Umag": ("sy_umag", None), "Bmag": ("sy_bmag", None), "Vmag": ("sy_vmag", None), "Rmag": ("sy_rmag", None), "Imag": ("sy_imag", None), "Jmag": ("sy_jmag", None), "Hmag": ("sy_hmag", None), "Kmag": ("sy_kmag", None), "Teff": ("teff", u.K), "mass": ("mass", u.solMass), "metallicity": ("met", None), "logg": ("logg", None), } for att in atts_mapping: if atts_mapping[att][1] is None: setattr(self, att, stdata[atts_mapping[att][0]].values) else: setattr( self, att, stdata[atts_mapping[att][0]].values * atts_mapping[att][1], ) # replace missing specttypes with '' self.Spec[pandas.isna(self.Spec)] = "" # Ensure that Name and Spec are both strictly strings self.Name = self.Name.astype(str) self.Spec = self.Spec.astype(str) # Replace missing pm and rv vals with zeros # TODO: query replacement vals self.pmra[pandas.isna(self.pmra)] = 0 * (u.mas / u.year) self.pmdec[pandas.isna(self.pmdec)] = 0 * (u.mas / u.year) self.rv[pandas.isna(self.rv)] = 0 * (u.km / u.s) # weirdly missing some parallaxes, so just use distances for those assert np.all(~pandas.isna(self.dist)) inds = pandas.isna(self.parx) self.parx[inds] = self.dist[inds].to(u.marcsec, equivalencies=u.parallax()) # grab luminosity and fill in remaining values self.BV = self.Bmag - self.Vmag self.L = 10 ** (stdata["lum"].values) self.BC = -2.5 * self.L - 26.832 - self.Vmag self.MV = self.Vmag - 5 * (np.log10(self.dist.to("pc").value) - 1) self.coords = SkyCoord( ra=stdata["ra"].values * u.deg, dec=stdata["dec"].values * u.deg, distance=self.dist, ) self.hasKnownPlanet = np.ones(len(stdata), dtype=bool) self.Binary_Cut = stdata["sy_snum"].values > 1 self.data = stdata # add available catalog attributes self.catalog_atts += ["Teff", "mass", "metallicity", "logg"]