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
    }
def custom_observation_plan(target, facility, length=1, interval=30, airmass_limit=3.0):
    """
    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.
    """

    visibility_graph = ''
    start_time = datetime.datetime.now()
    end_time = start_time + datetime.timedelta(days=length)

    visibility_data = get_sidereal_visibility(target, start_time, end_time, interval, airmass_limit)
    i = 0
    plot_data = []
    for site, data in visibility_data.items():
        plot_data.append(go.Scatter(x=data[0], y=data[1], mode='markers+lines', marker={'symbol': i}, name=site))
        i += 1
    layout = go.Layout(
        xaxis=dict(gridcolor='#D3D3D3',showline=True,linecolor='#D3D3D3',mirror=True,title='Date'),
        yaxis=dict(range=[airmass_limit,1.0],gridcolor='#D3D3D3',showline=True,linecolor='#D3D3D3',mirror=True,title='Airmass'),
        #xaxis={'title': 'Date'},
        #yaxis={'autorange': 'reversed', 'title': 'Airmass'},
        plot_bgcolor='white'
    )
    visibility_graph = offline.plot(
        go.Figure(data=plot_data, layout=layout), output_type='div', show_link=False
    )

    return {
        'visibility_graph': visibility_graph
    }
Example #3
0
 def test_get_visibility_invalid_target_type(self):
     invalid_target = self.target
     invalid_target.type = 'Invalid Type'
     end = self.start + timedelta(minutes=60)
     airmass = get_sidereal_visibility(invalid_target, self.start, end,
                                       self.interval, self.airmass_limit)
     self.assertEqual(len(airmass), 0)
Example #4
0
def observation_plan(target,
                     facility,
                     length=7,
                     interval=60,
                     airmass_limit=None):
    """
    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.
    """

    visibility_graph = ''
    start_time = datetime.now()
    end_time = start_time + timedelta(days=length)

    visibility_data = get_sidereal_visibility(target, start_time, end_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()
    ]
    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 {'visibility_graph': visibility_graph}
Example #5
0
 def test_get_visibility_sidereal(self, mock_facility):
     mock_facility.return_value = {'Fake Robotic Facility': FakeRoboticFacility}
     end = self.start + timedelta(minutes=60)
     airmass = get_sidereal_visibility(self.target, self.start, end, self.interval, self.airmass_limit)
     airmass_data = airmass['(Fake Robotic Facility) Siding Spring'][1]
     expected_airmass = [
         1.2619096566629477, 1.2648181328558852, 1.2703522349950636, 1.2785703053923894,
         1.2895601364316183, 1.3034413026227516, 1.3203684217446099
     ]
     self.assertEqual(len(airmass_data), len(expected_airmass))
     for i in range(0, len(expected_airmass)):
         self.assertAlmostEqual(airmass_data[i], expected_airmass[i], places=3)
Example #6
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
    }