In [1]:
import holoviews as hv
hv.notebook_extension('bokeh')
In [2]:
from param import ParameterizedFunction, ParamOverrides
from holoviews.core.operation import Operation
from holoviews.operation.datashader import datashade, dynspread
import colorcet as cc
import datashader as ds
In [3]:
import dask
import dask.dataframe as dd
import pandas as pd
from distributed import Client
client = Client(scheduler_file='/scratch/tmorton/dask/scheduler.json')
In [4]:
import sys
sys.path.append('..')
from explorer.catalog import ParquetCatalog, MatchedCatalog
def get_coadd(rerun, filt, tracts, unforced=False):
table = 'unforced' if unforced else 'forced'
files = ['{}/plots/{}/tract-{}/{}.parq'.format(rerun, filt, t, table) for t in tracts]
return ParquetCatalog(files)
def get_visit(rerun, filt, tract, visit):
file = '{}/plots/{}/tract-{}/visit-{}/catalog.parq'.format(rerun, filt, tract, visit)
return ParquetCatalog([file])
In [5]:
rerun = '/scratch/tmorton/hscRerun/DM-12043/SSP_DEEP_XMM_LSS'
filt = 'HSC-Y'
tract = 8767
visit = 39308
coadd_cat = get_coadd(rerun, filt, [tract])
visit_cat = get_visit(rerun, filt, tract, visit)
matched = MatchedCatalog(coadd_cat, visit_cat)
In [17]:
from explorer.dataset import QADataset
from explorer.functors import (Mag, MagDiff, CustomFunctor, DeconvolvedMoments, Column,
SdssTraceSize, PsfSdssTraceSizeDiff, HsmTraceSize,
PsfHsmTraceSizeDiff, CompositeFunctor)
f = MagDiff('modelfit_CModel', 'base_PsfFlux')
mag = Mag('base_PsfFlux')
In [6]:
from explorer.utils import get_visits
In [7]:
visits = get_visits('DEEP', tract, filt)
In [8]:
visits
Out[8]:
In [13]:
visit_cats = [get_visit(rerun, filt, tract, v) for v in visits]
In [14]:
matched_cats = [MatchedCatalog(coadd_cat, v) for v in visit_cats]
In [31]:
data = {}
for v in visits:
try:
visit_cat = get_visit(rerun, filt, tract, v)
matched = MatchedCatalog(coadd_cat, visit_cat)
matched.match()
data[v] = QADataset(matched, mag)
print(len(data[v].ds))
except KeyError:
raise
except:
continue
In [ ]:
class VisitMatchQADataset(QADataset):
def __init__(self, coadd_cat, visit_cats, funcs, **kwargs):
In [27]:
data
Out[27]:
In [24]:
import param
class skyplot(Operation):
"""Pass pts with ra,dec as kdims
"""
cmap = param.String(default='coolwarm')
aggregator = param.ObjectSelector(default='mean', objects=['mean', 'std', 'count'])
vdim = param.String(default=None)
width = param.Number(default=None)
height = param.Number(default=None)
streams = param.List(default=None)
sampling = param.Number(default=None)
def _process(self, dset, key=None):
if self.p.vdim is None:
vdim = dset.vdims[0].name
else:
vdim = self.p.vdim
pts = hv.Points(dset, kdims=['ra', 'dec'], vdims=[vdim])
if self.p.aggregator == 'mean':
aggregator = ds.mean(vdim)
elif self.p.aggregator == 'std':
aggregator = ds.std(vdim)
elif self.p.aggregator == 'count':
aggregator = ds.count()
kwargs = dict(cmap=cc.palette[self.p.cmap],
aggregator=aggregator)
if self.p.width is not None:
kwargs.update(width=self.p.width, height=self.p.height,
streams=[hv.streams.RangeXY])
sky_shaded = datashade(pts, **kwargs)
return dynspread(sky_shaded)
In [32]:
holomap = hv.HoloMap(kdims=['visit'])
for v,d in data.items():
holomap[v] = skyplot(d.ds)
In [35]:
sky_plots = {v:skyplot(d.ds) for v,d in data.items()}
In [36]:
sky_plots
Out[36]:
In [37]:
holomap = hv.HoloMap(sky_plots, kdims=['visit'])
In [46]:
%%opts Overlay[tabs=True] RGB [width=400, height=400]
hv.Layout([s for s in sky_plots.values()]).cols(4)
Out[46]:
In [138]:
data = QADataset(coadd_cat, mag)
In [139]:
data.ds
Out[139]:
In [149]:
%%opts RGB [width=1200, height=600]
from holoviews.streams import RangeXY
# width=None; height=None;
width=100; height=50
skyplot.instance(width=width, height=height)(data.ds)
Out[149]:
In [ ]: