Table Access Protocol (TAP) moving objects
Ref: TAP
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from lsst.rsp import get_tap_service, retrieve_query
from lsst.utils.plotting import (get_multiband_plot_colors,
get_multiband_plot_symbols)
service = get_tap_service("tap")
assert service is not None
queries = pd.DataFrame(columns=['select', 'from', 'join', 'on', 'where', 'order by'])
queries.loc['sss'] = ["diaSourceId, heliocentricX, heliocentricY",
"dp1.SSSource", "", "", "", ""]
queries.loc['dias'] = ["diaSourceId, midpointMjdTai",
"dp1.DiaSource", "", "", "ssObjectId = 21163620217073748", ""]
queries.loc['join'] = ["sss.heliocentricX, sss.heliocentricY, dias.midpointMjdTai",
"dp1.SSSource as sss",
"dp1.DiaSource as dias",
"dias.diaSourceId = sss.diaSourceId",
"sss.ssObjectId = 21163620217073748",
"dias.midpointMjdTai ASC"]
cols = queries.columns
queriesLoading...
def grabout():
for idx, dat in queries.iterrows():
query = ''
for col in cols:
if dat[col] != '':
query += f' {col.upper()} {dat[col]}'
print(idx); print(query)
if 'schema' not in dat['from']:
job = service.submit_job(query)
job.run()
job.wait(phases=['COMPLETED', 'ERROR'])
if job.phase == 'ERROR':
job.raise_if_error()
elif job.phase == 'COMPLETED':
out = job.fetch_result().to_table()
else:
out = service.search(query).to_table()
queries.loc[idx, 'out'] = out
queries.loc[idx, 'url'] = job.url
print(type(out), len(out))
# display(out)
print()
grabout()sss
SELECT diaSourceId, heliocentricX, heliocentricY FROM dp1.SSSource
<class 'astropy.table.table.Table'> 5988
dias
SELECT diaSourceId, midpointMjdTai FROM dp1.DiaSource WHERE ssObjectId = 21163620217073748
<class 'astropy.table.table.Table'> 133
join
SELECT sss.heliocentricX, sss.heliocentricY, dias.midpointMjdTai FROM dp1.SSSource as sss JOIN dp1.DiaSource as dias ON dias.diaSourceId = sss.diaSourceId WHERE sss.ssObjectId = 21163620217073748 ORDER BY dias.midpointMjdTai ASC
<class 'astropy.table.table.Table'> 133
queries.loc['join', 'out']Loading...
fig = plt.figure(figsize=(5, 5))
plt.scatter(queries.loc['join', 'out']['heliocentricX'],
queries.loc['join', 'out']['heliocentricY'],
c=queries.loc['join', 'out']['midpointMjdTai'],
cmap='hot', edgecolors='none')
plt.xlabel('Heliocentric X')
plt.ylabel('Heliocentric Y')
plt.colorbar(label='MJD')
df = retrieve_query(queries.loc['join', 'url']).fetch_result().to_table().to_pandas()
dfLoading...
queries.loc['join', 'out'].to_pandas()Loading...