Source code for lcc.db_tier.base_query
import abc
import astropy.units as u
from lcc.entities.exceptions import QueryInputError
import numpy as np
[docs]class StarsCatalogue(object):
__metaclass__ = abc.ABCMeta
'''Common class for all catalogs containing informations about stars'''
[docs] def getStars(self):
"""
Query `Star` objects
Returns
-------
list
List of `Star` objects
"""
raise NotImplementedError
[docs] def coneSearch(self, coo, stars, delta_deg, nearest=False):
"""
Filter results from cone search
Parameters
----------
coo : astropy.coordinates.sky_coordinate.SkyCoord
Center of searching
stars : list of `Star` objects
Stars returned by query
delta_deg: float, astropy.units.quantity.Quantity
Radius from center of searching
nearest : bool
Nearest star to the center of searching is returned if it is True
Returns
--------
list
List of `Star` objects
"""
try:
if not isinstance(delta_deg, u.quantity.Quantity):
delta_deg = float(delta_deg) * u.deg
distances = []
passed_stars = []
for star in stars:
dist = coo.separation(star.coo)
if dist < delta_deg:
passed_stars.append(star)
distances.append(dist.degree)
except AttributeError:
raise QueryInputError("Invalid query coordinates")
if distances and (nearest or str(nearest).capitalize() == "True"):
return [passed_stars[np.argmin(distances)]]
return passed_stars
def _getRanges(self, ra, dec, arcsec_delta):
if not ra or not dec or not arcsec_delta:
return "", "", "", ""
else:
delta = float(arcsec_delta) / 3600.
return float(ra) - float(delta), float(ra) + float(delta), float(dec) - float(delta), float(dec) + float(delta)
[docs]class LightCurvesDb(StarsCatalogue):
__metaclass__ = abc.ABCMeta
'''This is common class for every database containing light curves'''
[docs] def getStarsWithCurves(self):
"""
Query `Star` objects
Returns
-------
list
List of `Star` objects appended by `LightCurve` instances
"""
raise NotImplementedError