Example #1
0
def target_plan(context):
    """
    Displays form and renders plot for visibility calculation. Using this templatetag to render a plot requires that
    the context of the parent view have values for start_time, end_time, and airmass.
    """
    request = context['request']
    plan_form = TargetVisibilityForm()
    visibility_graph = ''
    if all(request.GET.get(x) for x in ['start_time', 'end_time']):
        plan_form = TargetVisibilityForm({
            'start_time': request.GET.get('start_time'),
            'end_time': request.GET.get('end_time'),
            'airmass': request.GET.get('airmass'),
            'target': context['object']
        })
        if plan_form.is_valid():
            start_time = parse(request.GET['start_time'])
            end_time = parse(request.GET['end_time'])
            if request.GET.get('airmass'):
                airmass_limit = float(request.GET.get('airmass'))
            else:
                airmass_limit = None
            visibility_data = get_sidereal_visibility(context['object'], start_time, end_time, 10, airmass_limit)
            plot_data = [
                go.Scatter(x=data[0], y=data[1], mode='lines', name=site) for site, data in visibility_data.items()
            ]
            layout = go.Layout(yaxis=dict(autorange='reversed'))
            visibility_graph = offline.plot(
                go.Figure(data=plot_data, layout=layout), output_type='div', show_link=False
            )
    return {
        'form': plan_form,
        'target': context['object'],
        'visibility_graph': visibility_graph
    }
Example #2
0
def target_plan(context):
    #request = context['request']
    start_time = datetime.datetime.now()
    end_time = datetime.datetime.now() + datetime.timedelta(days=1)
    airmass = 3.0
    plan_form = TargetVisibilityForm({
        'start_time': start_time,
        'end_time': end_time,
        'airmass': airmass
    })
    visibility_graph = ''
    visibility_data = get_visibility(context['object'], start_time, end_time,
                                     15, airmass)
    plot_data = [
        go.Scatter(
            x=data[0],
            y=data[1],
            mode='lines',
            name=site,
        ) for site, data in visibility_data.items()
    ]
    layout = go.Layout(yaxis=dict(range=[airmass, 1.0]),
                       margin=dict(l=20, r=10, b=30, t=40),
                       hovermode='closest',
                       width=600,
                       height=300,
                       autosize=True)
    visibility_graph = offline.plot(go.Figure(data=plot_data, layout=layout),
                                    output_type='div',
                                    show_link=False)
    return {
        'form': plan_form,
        'target': context['object'],
        'visibility_graph': visibility_graph
    }
Example #3
0
def target_plan(context):
    request = context['request']
    plan_form = TargetVisibilityForm()
    visibility_graph = ''
    if all(request.GET.get(x) for x in ['start_time', 'end_time']):
        plan_form = TargetVisibilityForm({
            'start_time':
            request.GET.get('start_time'),
            'end_time':
            request.GET.get('end_time'),
            'airmass':
            request.GET.get('airmass')
        })
        if plan_form.is_valid():
            start_time = parse(request.GET['start_time'])
            end_time = parse(request.GET['end_time'])
            if request.GET.get('airmass'):
                airmass_limit = float(request.GET.get('airmass'))
            else:
                airmass_limit = None
            visibility_data = get_visibility(context['object'], start_time,
                                             end_time, 10, airmass_limit)
            plot_data = [
                go.Scatter(x=data[0], y=data[1], mode='lines', name=site)
                for site, data in visibility_data.items()
            ]
            layout = go.Layout(yaxis=dict(autorange='reversed'))
            visibility_graph = offline.plot(go.Figure(data=plot_data,
                                                      layout=layout),
                                            output_type='div',
                                            show_link=False)
    return {
        'form': plan_form,
        'target': context['object'],
        'visibility_graph': visibility_graph
    }
def airmass_collapse(target):
    start_time = datetime.datetime.now()
    end_time = start_time + datetime.timedelta(days=1)
    interval = 30  #min
    airmass_limit = 3.0
    plan_form = TargetVisibilityForm({
        'start_time': start_time,
        'end_time': end_time,
        'airmass': airmass_limit
    })

    obj = Target
    obj.ra = target.ra
    obj.dec = target.dec
    obj.epoch = 2000
    obj.type = 'SIDEREAL'

    visibility_data = get_24hr_airmass(obj, start_time, interval,
                                       airmass_limit)
    plot_data = [
        go.Scatter(
            x=data[0],
            y=data[1],
            mode='lines',
            name=site,
        ) for site, data in visibility_data.items() if 'LCO' in site
    ]
    layout = go.Layout(yaxis=dict(range=[airmass_limit, 1.0]),
                       margin=dict(l=20, r=10, b=30, t=40),
                       hovermode='closest',
                       width=250,
                       height=200,
                       showlegend=False)
    visibility_graph = offline.plot(go.Figure(data=plot_data, layout=layout),
                                    output_type='div',
                                    show_link=False)
    return {'form': plan_form, 'target': target, 'figure': visibility_graph}
Example #5
0
def target_plan(context,
                fast_render=False,
                width=600,
                height=400,
                background=None,
                label_color=None,
                grid=True):
    """
    Displays form and renders plot for visibility calculation. Using this templatetag to render a plot requires that
    the context of the parent view have values for start_time, end_time, and airmass.

    :param fast_render: Render the plot on page load, defaults to the next 24hrs and 2.5 airmass
    :type fast_render: bool

    :param width: Width of generated plot
    :type width: int

    :param height: Height of generated plot
    :type width: int

    :param background: Color of the background of generated plot. Can be rgba or hex string.
    :type background: str

    :param label_color: Color of labels/tick labels. Can be rgba or hex string.
    :type label_color: str

    :param grid: Whether to show grid lines.
    :type grid: bool
    """
    request = context['request']
    plan_form = TargetVisibilityForm()
    visibility_graph = ''
    if all(request.GET.get(x)
           for x in ['start_time', 'end_time']) or fast_render:
        plan_form = TargetVisibilityForm({
            'start_time':
            request.GET.get('start_time', datetime.utcnow()),
            'end_time':
            request.GET.get('end_time',
                            datetime.utcnow() + timedelta(days=1)),
            'airmass':
            request.GET.get('airmass', 2.5),
            'target':
            context['object']
        })
        if plan_form.is_valid():
            start_time = plan_form.cleaned_data['start_time']
            end_time = plan_form.cleaned_data['end_time']
            airmass_limit = plan_form.cleaned_data['airmass']
            visibility_data = get_sidereal_visibility(context['object'],
                                                      start_time, end_time, 10,
                                                      airmass_limit)
            plot_data = [
                go.Scatter(x=data[0], y=data[1], mode='lines', name=site)
                for site, data in visibility_data.items()
            ]
            layout = go.Layout(yaxis=dict(autorange='reversed'),
                               width=width,
                               height=height,
                               paper_bgcolor=background,
                               plot_bgcolor=background)
            layout.legend.font.color = label_color
            fig = go.Figure(data=plot_data, layout=layout)
            fig.update_yaxes(showgrid=grid,
                             color=label_color,
                             showline=True,
                             linecolor=label_color,
                             mirror=True)
            fig.update_xaxes(showgrid=grid,
                             color=label_color,
                             showline=True,
                             linecolor=label_color,
                             mirror=True)
            visibility_graph = offline.plot(fig,
                                            output_type='div',
                                            show_link=False)
    return {
        'form': plan_form,
        'target': context['object'],
        'visibility_graph': visibility_graph
    }