Skip to content

Commit

Permalink
Return targets with spectra by observatory (#12)
Browse files Browse the repository at this point in the history
* add initial query to get sdss_id of targets with boss spectra by observatory

* add temporary query for apogee

* rearange function

* fix syntax error

* add union of apogee and boss queries

* join apo.Star via catalogid for now

* switch obsWave to spectrograph
  • Loading branch information
imedan authored Mar 7, 2024
1 parent 6ded492 commit 5f15a6a
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
56 changes: 56 additions & 0 deletions python/valis/db/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,62 @@ def carton_program_search(name: str, name_type: str) -> peewee.ModelSelect:
)


def get_targets_obs(release: str, obs: str, spectrograph: str) -> peewee.ModelSelect:
""" Return all targets with spectra from a given observatory
Parameters
----------
release : str
the data release to look up
obs: str
Observatory to get targets from. Either 'APO' or 'LCO'
spectrograph: str
Which spectrograph to return data from. Can be 'boss',
'apogee' or 'all' for both.
Returns
-------
peewee.ModelSelect
the ORM query
"""
# get the relevant software tag boss
run2d = get_software_tag(release, 'run2d')

query_boss = vizdb.SDSSidStacked.select()\
.join(boss.BossSpectrum,
on=(boss.BossSpectrum.sdss_id == vizdb.SDSSidStacked.sdss_id))\
.where(boss.BossSpectrum.run2d == run2d,
boss.BossSpectrum.obs == obs).distinct()

# get the relevant software tag apogee
apred = get_software_tag(release, 'apred_vers')

# temporary, need to join with sdss_id when added
query_ap = vizdb.SDSSidStacked.select()\
.join(vizdb.SDSSidFlat,
on=(vizdb.SDSSidFlat.sdss_id == vizdb.SDSSidStacked.sdss_id))\
.join(apo.Star,
on=(apo.Star.catalogid == vizdb.SDSSidFlat.catalogid))\
.where(apo.Star.telescope == obs.lower() + '25m',
apo.Star.apred_vers == apred).distinct()

# return union of the above
query_all = vizdb.SDSSidStacked.select()\
.where((vizdb.SDSSidStacked.sdss_id << query_boss) |
(vizdb.SDSSidStacked.sdss_id << query_ap))

if spectrograph == 'boss':
return query_boss
elif spectrograph == 'apogee':
return query_ap
elif spectrograph == 'all':
return query_all
else:
raise ValueError('Did not pass "boss", "apogee" or "all" to obsWave')


# test sdss ids
# 23326 - boss/astra
# 3350466 - apogee/astra
Expand Down
19 changes: 18 additions & 1 deletion python/valis/routes/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
from valis.db.models import SDSSidStackedBase, SDSSidPipesBase
from valis.db.queries import (cone_search, append_pipes, carton_program_search,
carton_program_list, carton_program_map,
get_targets_by_sdss_id, get_targets_by_catalog_id)
get_targets_by_sdss_id, get_targets_by_catalog_id,
get_targets_obs)

# convert string floats to proper floats
Float = Annotated[Union[float, str], BeforeValidator(lambda x: float(x) if x and isinstance(x, str) else x)]
Expand Down Expand Up @@ -161,3 +162,19 @@ async def carton_program(self,

return list(carton_program_search(name, name_type))

@router.get('/obs', summary='Return targets with spectrum at observatory',
response_model=List[SDSSidStackedBase], dependencies=[Depends(get_pw_db)])
async def obs(self,
release: Annotated[str, Query(description='Data release to query', example='IPL3')],
obs: Annotated[str,
Query(enum=['APO', 'LCO'],
description='Observatory to get targets from. Either "APO" or "LCO"',
example='APO')] = 'APO',
spectrograph: Annotated[str,
Query(enum=['boss', 'apogee', 'all'],
description='Which spectrograph to return data from',
example='boss')] = 'boss'):
""" Perform a search on carton or program """

return list(get_targets_obs(release, obs, spectrograph))

0 comments on commit 5f15a6a

Please sign in to comment.