try: return args.get(key)[0].decode("utf-8") except: return None yaxis = get_arg_string('yaxis') amp = get_arg_string('amp') start_date = get_arg_string('start') start_date = datetime.strptime(start_date, '%Y%m%d').strftime('%Y-%m-%d') end_date = get_arg_string('end') end_date = datetime.strptime(end_date, '%Y%m%d').strftime('%Y-%m-%d') camera = get_arg_string('camera') DATASHADE = get_arg_string('datashade') outputs = models.get_product_metrics_by_camera(yaxis, camera, begin_date=start_date, end_date=end_date) df = pd.DataFrame(list(outputs)) colors = ['red', 'blue', 'green', 'orange'] plot = hv.Curve([]) if amp != None: for amp in amp.split(','): idx = int(amp) - 1 amp_name = "AMP {}".format(amp) amp_key = "AMP{}".format(amp) df[amp_key] = df['value'].apply(lambda x: x[idx]) if DATASHADE == 'true': plot = plot * datashade( hv.Curve(df, ['mjd', amp_key],
class Regression(): def __init__(self, xaxis, yaxis, start, end, camera): self.yaxis = yaxis self.xaxis = xaxis self.start = datetime.strptime(start, '%Y%m%d').strftime('%Y-%m-%d') self.end = datetime.strptime(end, '%Y%m%d').strftime('%Y-%m-%d') self.camera = camera self.models = QLFModels() def render_plot(self, outputs_x, outputs_y): metrics_path = os.path.join(qlf_root, "framework", "ql_mapping", "metrics.json") with open(metrics_path) as f: metrics = json.load(f) y_data = metrics[self.yaxis] x_data = metrics[self.xaxis] df_x = pd.DataFrame(list(outputs_x)) df_y = pd.DataFrame(list(outputs_y)) source = ColumnDataSource( data=dict(x=df_x['value'].apply(lambda x: x[0]), y=df_y['value'].apply(lambda x: x[0]), exposure=df_x['exposure_id'], camera=df_x['camera'])) TOOLTIPS = """ <div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">{}: </span> <span style="font-size: 1vw; color: #515151">@y</span> </div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">{}: </span> <span style="font-size: 1vw; color: #515151;">@x</span> </div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">Exposure: </span> <span style="font-size: 1vw; color: #515151;">@exposure</span> </div> </div> """.format(y_data['display'], x_data['display']) hover = HoverTool(tooltips=TOOLTIPS) plot = figure( title="Camera: {}".format(self.camera), toolbar_location='above', active_drag="box_zoom", plot_height=300, # plot_width=500, x_axis_label=x_data['display'], y_axis_label=y_data['display'], tools=[hover, 'box_zoom,pan,wheel_zoom,box_select,reset'], sizing_mode='scale_width') q = plot.circle('x', 'y', source=source, size=8, fill_color='dodgerblue', hover_fill_color='blue', line_color='black') font_size = "1.2vw" plot.xaxis.major_label_text_font_size = font_size plot.yaxis.major_label_text_font_size = font_size plot.xaxis.axis_label_text_font_size = font_size plot.yaxis.axis_label_text_font_size = font_size plot.legend.label_text_font_size = font_size plot.title.text_font_size = font_size self.layout = plot def render(self): outputs_y = self.models.get_product_metrics_by_camera( self.yaxis, self.camera, begin_date=self.start, end_date=self.end) outputs_x = self.models.get_product_metrics_by_camera( self.xaxis, self.camera, begin_date=self.start, end_date=self.end) self.render_plot(outputs_x, outputs_y) return file_html(self.layout, CDN, "Regression")
class TimeSeries(): def __init__(self, yaxis, start, end, camera, amp=None): self.yaxis = yaxis self.start = datetime.strptime(start, '%Y%m%d').strftime('%Y-%m-%d') self.end = datetime.strptime(end, '%Y%m%d').strftime('%Y-%m-%d') self.camera = camera self.models = QLFModels() self.amp = amp def make_plot(self, outputs, objtype=None): colors = ['red', 'blue', 'green', 'orange'] legends = list() df = pd.DataFrame(list(outputs)) if self.amp != None: for amp in self.amp.split(','): idx = int(amp) - 1 source = ColumnDataSource( data=dict(x=df['mjd'], y=df['value'].apply(lambda x: x[idx]), exposure=df['exposure_id'], camera=df['camera'], dateobs=df['datef'])) line = self.p.line('x', 'y', source=source, line_color=colors[idx]) circle = self.p.circle('x', 'y', source=source, size=6, line_color=None, fill_color=colors[idx]) legends.append(('AMP {}'.format(idx + 1), [line, circle])) legend = Legend(items=legends, location=(0, 0)) self.p.add_layout(legend, 'below') else: source = ColumnDataSource( data=dict(x=df['mjd'], y=df['value'].apply(lambda x: x[0]), exposure=df['exposure_id'], camera=df['camera'], dateobs=df['datef'])) self.p.line('x', 'y', source=source) self.p.circle('x', 'y', source=source, size=5) def render(self): metrics_path = os.path.join(qlf_root, "framework", "ql_mapping", "metrics.json") with open(metrics_path) as f: metrics = json.load(f) axis_data = metrics[self.yaxis] outputs = self.models.get_product_metrics_by_camera( self.yaxis, self.camera, begin_date=self.start, end_date=self.end) TOOLTIPS = """ <div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">{}: </span> <span style="font-size: 1vw; color: #515151;">@y</span> </div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">Exposure: </span> <span style="font-size: 1vw; color: #515151;">@exposure</span> </div> <div> <span style="font-size: 1vw; font-weight: bold; color: #303030;">Date: </span> <span style="font-size: 1vw; color: #515151;">@dateobs</span> </div> </div> """.format(axis_data['display']) hover = HoverTool(tooltips=TOOLTIPS) self.p = figure( title="Camera: {}".format(self.camera), sizing_mode='scale_width', toolbar_location='above', # x_axis_type="datetime", x_axis_label='Date (mjd)', y_axis_label=axis_data['display'], plot_width=700, plot_height=300, active_drag="box_zoom", tools=[hover, 'box_zoom,wheel_zoom,pan,reset']) font_size = "1.2vw" self.p.xaxis.major_label_text_font_size = font_size self.p.yaxis.major_label_text_font_size = font_size self.p.xaxis.axis_label_text_font_size = font_size self.p.yaxis.axis_label_text_font_size = font_size self.p.legend.label_text_font_size = font_size self.p.title.text_font_size = font_size self.make_plot(outputs) return file_html(self.p, CDN, "Time Series")