Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

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
queries
Loading...
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')
<Figure size 500x500 with 2 Axes>
df = retrieve_query(queries.loc['join', 'url']).fetch_result().to_table().to_pandas()
df
Loading...
queries.loc['join', 'out'].to_pandas()
Loading...