Source code for species.util.query_util

"""
Text
"""

import warnings

import numpy as np

from astroquery.simbad import Simbad
from astroquery.vizier import Vizier


# class NoStdStreams:
#     """
#     Text
#     """
#
#     def __init__(self, stdout=None, stderr=None):
#         self.devnull = open(os.devnull, "w", encoding="utf-8")
#         self._stdout = stdout or self.devnull or sys.stdout
#         self._stderr = stderr or self.devnull or sys.stderr
#         self.old_stdout = None
#         self.old_stderr = None
#
#     def __enter__(self):
#         self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
#         self.old_stdout.flush()
#         self.old_stderr.flush()
#         sys.stdout, sys.stderr = self._stdout, self._stderr
#
#     def __exit__(self, exc_type, exc_value, traceback):
#         self._stdout.flush()
#         self._stderr.flush()
#         sys.stdout = self.old_stdout
#         sys.stderr = self.old_stderr
#         self.devnull.close()


# with NoStdStreams():
#     from astroquery.gaia import Gaia


[docs] def get_simbad(name): """ Function for getting the SIMBAD identifier of an object. Parameters ---------- name : np.ndarray Returns ------- np.ndarray SIMBAD name. """ simbad = Simbad.query_object(name) if simbad is None: simbad_id = None else: simbad_id = simbad["MAIN_ID"][0] return simbad_id
[docs] def get_parallax(target): """ Function for retrieving the parallax of an object. Parameters ---------- target : str Target name. Returns ------- str SIMBAD name. tuple(float, float) Parallax and uncertainty (mas). """ # Liu et al. (2016) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/ApJ/833/96 # Dupuy & Liu (2012) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/ApJS/201/19 # Faherty et al. (2012) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/ApJ/752/56 # Weinberger et al. (2016) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/AJ/152/24 # Theissen (2018) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/ApJ/862/173 # Kirkpatrick et al. (2012) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/ApJ/753/156 # Monet et al. (1992) # http://cdsarc.u-strasbg.fr/viz-bin/cat/J/AJ/103/638 # Faherty et al. (2009) # https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=J/AJ/137/1 catalogs = [ "J/ApJ/833/96/sample", "J/ApJS/201/19/plx-phot", "J/ApJ/752/56/targets", "J/AJ/152/24", "J/ApJ/862/173/table", "J/AJ/103/638/table1", "J/AJ/103/638", "J/AJ/137/1/table4", "J/AJ/137/1", ] # if target[-2:] == 'AB': # target = target[:-2] # # elif target[-3:] == 'ABC': # target = target[:-3] # # if target[0:7] == 'DENIS-P': # target = target[:5]+target[7:] # # if target[-2] == '.': # target = target[:-2] # # if target[0:5] == 'DENIS' and target[6:7] != 'J': # target = target[:5]+' J'+target[6:] # time.sleep(0.15) simbad = Simbad() simbad.add_votable_fields("parallax") simbad_result = simbad.query_object(target) # query SIMBAD if simbad_result is not None: simbad_id = simbad_result["MAIN_ID"][0] # For backward compatibility if not isinstance(simbad_id, str): simbad_id = simbad_id.decode("utf-8") parallax = simbad_result["PLX_VALUE"][0] # (mas) parallax_error = simbad_result["PLX_ERROR"][0] # (mas) if np.ma.is_masked(parallax): parallax = None if np.ma.is_masked(parallax_error): parallax_error = None else: simbad_id = None parallax = None parallax_error = None # Query VizieR catalogs if parallax is None: for item in catalogs: result = Vizier.query_object(target, catalog=item) if result.keys(): if "plx" in result[0].keys(): parallax = result[0]["plx"][0] # (mas) if np.ma.is_masked(parallax): parallax = None elif "Plx" in result[0].keys(): parallax = result[0]["Plx"][0] # (mas) if np.ma.is_masked(parallax): parallax = None else: parallax = None if "e_plx" in result[0].keys(): parallax_error = result[0]["e_plx"][0] # (mas) if np.ma.is_masked(parallax_error): parallax_error = None elif "e_Plx" in result[0].keys(): parallax_error = result[0]["e_Plx"][0] # (mas) if np.ma.is_masked(parallax_error): parallax_error = None else: parallax_error = None if parallax is not None: break # query Gaia catalog # if np.ma.is_masked(parallax): # # if simbad_result is not None: # coord_ra = simbad_result["RA"][0] # coord_dec = simbad_result["DEC"][0] # # coord = SkyCoord( # ra=coord_ra, dec=coord_dec, unit=(u.hourangle, u.deg), frame="icrs" # ) # # result = Gaia.query_object( # coordinate=coord, width=1.0 * u.arcsec, height=1.0 * u.arcsec # ) # # if result: # parallax = result["parallax"][0] # (mas) if parallax is None: parallax = np.nan if parallax_error is None: parallax_error = np.nan if np.isnan(parallax): warnings.warn( f"No parallax was found for {target} " f"so storing a NaN value instead." ) return simbad_id, (parallax, parallax_error)
# def get_parallax(): # from species.data.database import Database # species_db = Database() # species_db.add_photometry("vlm-plx") # # with h5py.File(species_db.database, "a") as hdf_file: # name = np.asarray(hdf_file["photometry/vlm-plx/name"]) # ra_coord = np.asarray(hdf_file["photometry/vlm-plx/ra"]) # dec_coord = np.asarray(hdf_file["photometry/vlm-plx/dec"]) # distance = np.asarray(hdf_file["photometry/vlm-plx/distance"]) # distance_error = np.asarray(hdf_file["photometry/vlm-plx/distance_error"]) # # simbad_id = [] # # print("Querying SIMBAD...", end="", flush=True) # # for i, item in enumerate(name): # target_coord = SkyCoord( # ra_coord[i], dec_coord[i], unit=(u.deg, u.deg), frame="icrs" # ) # # result_table = Simbad.query_region(target_coord, radius="0d0m2s") # # if result_table is None: # result_table = Simbad.query_region(target_coord, radius="0d0m5s") # # if result_table is None: # result_table = Simbad.query_region(target_coord, radius="0d0m20s") # # if result_table is None: # result_table = Simbad.query_region(target_coord, radius="0d1m0s") # # if item == "HIP38939B": # sim_id = get_simbad("HIP38939") # else: # sim_id = result_table["MAIN_ID"][0] # # # For backward compatibility # if not isinstance(sim_id, str): # sim_id = sim_id.decode("utf-8") # # simbad_id.append(sim_id) # # print(" [DONE]") # # simbad_id = np.asarray(simbad_id) # # dtype = h5py.special_dtype(vlen=str) # # dset = hdf_file.create_dataset( # "photometry/vlm-plx/simbad", (np.size(simbad_id),), dtype=dtype # ) # # dset[...] = simbad_id # # np.savetxt( # "parallax.dat", # np.column_stack([name, simbad_id, distance, distance_error]), # header="VLM-PLX name - SIMBAD name - Distance (pc) - Error (pc)", # fmt="%35s, %35s, %8.2f, %8.2f", # )