Ejemplo n.º 1
0
        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],
Ejemplo n.º 2
0
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")
Ejemplo n.º 3
0
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")