Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# if yes, perform a cone search around coordinates of desired target
if radius < (0.1 * u.arcsec):
obs = target_obs
# astroquery does not return distance if target_name is given;
# we add it here so that the table returned always has this column.
obs['distance'] = 0.
else:
ra = target_obs['s_ra'][0]
dec = target_obs['s_dec'][0]
with warnings.catch_warnings():
# suppress misleading AstropyWarning
warnings.simplefilter('ignore', AstropyWarning)
from astroquery.mast import Observations
log.debug("Started querying MAST for observations within {} of coordinates='{} {}'."
"".format(radius.to(u.arcsec), ra, dec))
obs = Observations.query_criteria(coordinates='{} {}'.format(ra, dec),
radius=str(radius.to(u.deg)),
project=project,
obs_collection=project)
obs.sort('distance')
return obs
except ValueError:
pass
# If `target` did not look like a KIC or EPIC ID, then we let MAST
# resolve the target name to a sky position. Convert radius from arcsec
# to degrees for query_criteria().
from astroquery.exceptions import ResolverError
try:
with warnings.catch_warnings():
# suppress misleading AstropyWarning
warnings.simplefilter('ignore', AstropyWarning)
if (target > 0) and (target < 200000000):
target_name = 'kplr{:09d}'.format(target)
elif (target > 200000000) and (target < 300000000):
target_name = 'ktwo{:09d}'.format(target)
else:
raise ValueError("{:09d}: not in the KIC or EPIC ID range".format(target))
# query_criteria does not allow a cone search when target_name is passed in
# so first grab desired target with ~0 arcsecond radius
with warnings.catch_warnings():
# suppress misleading AstropyWarning
warnings.simplefilter('ignore', AstropyWarning)
from astroquery.mast import Observations
log.debug("Started querying MAST for observations within {} of target_name='{}'."
"".format(radius.to(u.arcsec), target_name))
target_obs = Observations.query_criteria(target_name=target_name,
radius=str(radius.to(u.deg)),
project=project,
obs_collection=project)
if len(target_obs) == 0:
raise ValueError("No observations found for '{}'.".format(target_name))
# check if a cone search is being performed
# if yes, perform a cone search around coordinates of desired target
if radius < (0.1 * u.arcsec):
obs = target_obs
# astroquery does not return distance if target_name is given;
# we add it here so that the table returned always has this column.
obs['distance'] = 0.
else:
ra = target_obs['s_ra'][0]
# `target_name` under which MAST will know the object.
target = int(target)
if (target > 0) and (target < 200000000):
target_name = 'kplr{:09d}'.format(target)
elif (target > 200000000) and (target < 300000000):
target_name = 'ktwo{:09d}'.format(target)
else:
raise ValueError("{:09d}: not in the KIC or EPIC ID range".format(target))
obs = Observations.query_criteria(target_name=target_name,
project=["Kepler", "K2"],
obs_collection=["Kepler", "K2"])
except ValueError:
# If `target` did not look like a KIC or EPIC ID, then we let MAST
# resolve the target name to a sky position.
try:
obs = Observations.query_criteria(objectname=target,
radius='{} arcsec'.format(radius),
project=["Kepler", "K2"],
obs_collection=["Kepler", "K2"])
# Make sure the final table is in DISTANCE order
obs.sort('distance')
except ResolverError as exc:
raise ArchiveError(exc)
obsids = np.asarray(obs['obsid'])
products = Observations.get_product_list(obs)
order = [np.where(products['parent_obsid'] == o)[0] for o in obsids]
order = [item for sublist in order for item in sublist]
products = products[order]
return products