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) queries: numeric output

Ref: TAP

import numpy as np
from lsst.rsp import get_tap_service
import pandas as pd
import matplotlib.pyplot as plt
import time

service = get_tap_service ('tap')
assert service is not None

fields = pd.read_csv('LSSTComCam_fields.csv', index_col='field')

ddeg = .01
def grabcone(field):
    return "CONTAINS(POINT('ICRS', coord_ra, coord_dec), " +\
           f"CIRCLE('ICRS', {fields.loc[field, 'ra_deg']}, " +\
                          f"{fields.loc[field, 'dec_deg']}, {ddeg})) = 1"
queries = pd.DataFrame(columns=['select', 'from', 'where'])
queries.loc['columns'] = ["column_name, datatype, description, unit",
                          "tap_schema.columns",
                          "table_name = 'dp1.Object'"]
qcols = queries.columns

query = ''
for col in qcols:
    if queries.loc['columns'][col] != '':
        query += f' {col.upper()} {queries.loc['columns'][col]}'
print(query)

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()

queries.loc['columns', 'out'] = out
print(type(out), len(out))
#       display(out)
print()
 SELECT column_name, datatype, description, unit FROM tap_schema.columns WHERE table_name = 'dp1.Object'
<class 'astropy.table.table.Table'> 1296

ocols = queries.loc['columns', 'out'].to_pandas()
ocols
Loading...
ncols = ocols.loc[(ocols['datatype']!='boolean') & (ocols['datatype']!='char')]
ncols
Loading...
fcols = ['ra', 'dec', 'centroid_x', 'centroid_y', 'psfMag', 'cModelMag', 'psfFlux', 'cModelFlux', 'epoch']

queries['field'] = ''
for field in fields.index:
    for col in ['coord_ra', 'coord_dec', 'tract', 'patch', 'ebv']: # ncols['column_name'].values
        queries.loc[f'{col}_{field}'] = [col, "dp1.Object", grabcone(field), '', field]
    for col in fcols:
        for ff in ['u', 'g', 'r', 'i', 'z', 'y']:
            queries.loc[f'{ff}_{col}_{field}'] = [f'{ff}_{col}', "dp1.Object", grabcone(field), '', field]

for idx, dat in queries.iloc[1:].iterrows():
    query = ''
    for col in qcols:
        if dat[col] != '':
                query += f'{col.upper()} {dat[col]} '

    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().to_pandas()

    if 'count' not in queries.columns:
        dcols = out[dat['select']].describe().index
        queries[dcols] = np.nan
    queries.loc[idx, dcols] = out[dat['select']].describe().T
    time.sleep(2)

queries.to_csv('TAPdescribe.csv')
queries
Loading...
kala = ['y', 'r', 'g', 'b', 'k', 'm', 'c']
plt.figure(figsize=(5, 5))
for nfield, (field) in enumerate(fields.index):
    idx_ra = f'coord_ra_{field}'
    idx_dec = f'coord_dec_{field}'
    for col in ['min', 'mean', 'max']:
        ra = queries.loc[idx_ra, col]
        dec = queries.loc[idx_dec, col]
        plt.plot(ra, dec, marker='.', color=kala[nfield], ms=10)
    plt.annotate(field, (ra, dec), (ra+2, dec))
plt.xlim(30, 140)
(30.0, 140.0)
<Figure size 500x500 with 1 Axes>
epochs = queries.loc[queries['select'].str.contains('epoch')][['min', 'max']]
epochs
Loading...