Skip to content

Commit

Permalink
Draw observing epoch ra/dec, not input epoch.
Browse files Browse the repository at this point in the history
  • Loading branch information
pchote committed Sep 2, 2016
1 parent dee638d commit 544dec6
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 56 deletions.
37 changes: 28 additions & 9 deletions findingchart.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# pylint: disable=invalid-name

import argparse
import base64
import datetime
import io
import math
Expand All @@ -28,6 +29,7 @@

from flask import abort
from flask import Flask
from flask import jsonify
from flask import render_template
from flask import request
from flask import send_file
Expand Down Expand Up @@ -96,6 +98,20 @@ def parse_sexagesimal(string):

return a + b / 60 + c / 3600

def sexagesimal(angle):
"""Formats a decimal number in sexagesimal format"""
negative = angle < 0
angle = abs(angle)

degrees = int(angle)
angle = (angle - degrees) * 60
minutes = int(angle)
seconds = (angle - minutes) * 60

if negative:
degrees *= -1

return '{:d}:{:02d}:{:05.2f}'.format(degrees, minutes, seconds)
def offset_proper_motion(ra_degrees, dec_degrees, pm_ra_degrees, pm_dec_degrees, delta_yr):
ra = ra_degrees + float(pm_ra_degrees) / math.cos(dec_degrees * math.pi / 180) * delta_yr
dec = dec_degrees + float(pm_dec_degrees) * delta_yr
Expand Down Expand Up @@ -164,7 +180,14 @@ def generate_finding_chart(out_year, in_ra, in_dec, in_year, ra_pm, dec_pm, widt
draw.line((scale_x * arrow_a_x, scale_y * arrow_a_y, scale_x * line_end_x, scale_y * line_end_y), 'blue')
draw.line((scale_x * arrow_b_x, scale_y * arrow_b_y, scale_x * line_end_x, scale_y * line_end_y), 'blue')

return ImageOps.flip(png)
# Generate JSON output
output = io.BytesIO()
ImageOps.flip(png).save(output, format='PNG')
output.seek(0)
return jsonify(
ra=sexagesimal(ra_target / 15),
dec=sexagesimal(dec_target),
data='data:image/png;base64,' + base64.b64encode(output.read()).decode())
finally:
os.remove(filename)

Expand All @@ -175,14 +198,10 @@ def input_display():
return render_template('input.html')

@app.route('/generate')
def generate_chart():
def generate_chart_json():
print(request.args)
try:
chart = generate_finding_chart(request.args['outepoch'], request.args['ra'], request.args['dec'], request.args['epoch'], request.args['rapm'], request.args['decpm'], request.args['size'], request.args['size'], request.args['survey'])
output = io.BytesIO()
chart.save(output, format='PNG')
output.seek(0)

return send_file(output, attachment_filename='chart.png', mimetype='image/png')
except:
return generate_finding_chart(request.args['outepoch'], request.args['ra'], request.args['dec'], request.args['epoch'], request.args['rapm'], request.args['decpm'], request.args['size'], request.args['size'], request.args['survey'])
except Exception as e:
print(e)
abort(404)
103 changes: 57 additions & 46 deletions static/findingchart.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ function generateChart(t) {
chartContext.font = '18px serif';
chartContext.fillText(t.name, chartWidth / 2, 15);

chartContext.fillText('J2000 coordinates at J' + t.outepoch, chartWidth / 2, chartHeight - 60);
chartContext.fillText('RA: ' + t.ra, chartWidth / 4, chartHeight - 35);
chartContext.fillText('Dec: ' + t.dec, 3 * chartWidth / 4, chartHeight - 35);

if (t.comment)
chartContext.fillText(t.comment, chartWidth / 2, chartHeight - 5);
}
Expand All @@ -55,48 +51,63 @@ function generateChart(t) {

$('#thumbrow').append(thumbContainer);

var img = new Image();
img.addEventListener('load', function() {
chartContext.drawImage(img, chartImageX, chartImageY);

// Direction indicator
chartContext.lineWidth = 2;
chartContext.strokeStyle = '#0000FF';
chartContext.beginPath();
chartContext.moveTo(chartImageX + 502, chartImageY + 462);
chartContext.lineTo(chartImageX + 502, chartImageY + 502);
chartContext.lineTo(chartImageX + 462, chartImageY + 502);
chartContext.stroke();

chartContext.fillStyle = '#0000FF';
chartContext.font = '12px sans-serif';
chartContext.fillText('E', chartImageX + 455, chartImageY + 506);
chartContext.fillText('N', chartImageX + 502, chartImageY + 457);

// Scale indicator
chartContext.beginPath();
chartContext.moveTo(chartImageX + 10, chartImageY + 502);
chartContext.lineTo(chartImageX + 10 + 512 / t.size, chartImageY + 502);
chartContext.stroke();
chartContext.fillText('1\'', chartImageX + 10 + 256 / t.size, chartImageY + 497);

thumbImage.removeClass('thumb-loading');
thumbImage.prop('src', url);
thumbImage.width(128);
thumbImage.height(128);
}, false);

img.addEventListener('error', function() {
chartContext.fillStyle = '#fff';
chartContext.fillRect(chartImageX+2, chartImageY+2, 508, 508);
chartContext.font = '28px serif';
chartContext.textAlign = 'center'
chartContext.fillStyle = '#000';
chartContext.fillText('Source Image Unavailable', chartWidth / 2, chartImageY + 256);
thumbImage.prop('src', failedURL);
}, false);

img.src = url;
console.log(url);
$.ajax({
type: "GET",
url: url,
statusCode: {
404: function() {
chartContext.fillStyle = '#fff';
chartContext.fillRect(chartImageX+2, chartImageY+2, 508, 508);
chartContext.font = '28px serif';
chartContext.textAlign = 'center'
chartContext.fillStyle = '#000';
chartContext.fillText('Source Image Unavailable', chartWidth / 2, chartImageY + 256);
thumbImage.prop('src', failedURL);
}
}
}).done(function(json) {
console.log(json);

thumbImage.load(function () {
thumbImage.removeClass('thumb-loading');
thumbImage.width(128);
thumbImage.height(128);

chartContext.drawImage(thumbImage[0], chartImageX, chartImageY);

// Direction indicator
chartContext.lineWidth = 2;
chartContext.strokeStyle = '#0000FF';
chartContext.beginPath();
chartContext.moveTo(chartImageX + 502, chartImageY + 462);
chartContext.lineTo(chartImageX + 502, chartImageY + 502);
chartContext.lineTo(chartImageX + 462, chartImageY + 502);
chartContext.stroke();

chartContext.fillStyle = '#0000FF';
chartContext.font = '12px sans-serif';
chartContext.fillText('E', chartImageX + 455, chartImageY + 506);
chartContext.fillText('N', chartImageX + 502, chartImageY + 457);

// Scale indicator
chartContext.beginPath();
chartContext.moveTo(chartImageX + 10, chartImageY + 502);
chartContext.lineTo(chartImageX + 10 + 512 / t.size, chartImageY + 502);
chartContext.stroke();
chartContext.fillText('1\'', chartImageX + 10 + 256 / t.size, chartImageY + 497);

if (t.annotate) {
chartContext.font = '18px serif';
chartContext.fillStyle = '#000';
chartContext.fillText('J2000 coordinates at J' + t.outepoch, chartWidth / 2, chartHeight - 60);
chartContext.fillText('RA: ' + json.ra, chartWidth / 4, chartHeight - 35);
chartContext.fillText('Dec: ' + json.dec, 3 * chartWidth / 4, chartHeight - 35);
}
});

thumbImage.prop('src', json.data);
});
}

function setup() {
Expand Down
2 changes: 1 addition & 1 deletion templates/input.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ <h1>Finding chart generator</h1>
<script src="{{ url_for('static', filename='toolkit.js') }}"></script>
<script src="{{ url_for('static', filename='findingchart.js') }}"></script>
<script>
var generateURL = '{{ url_for('generate_chart') }}';
var generateURL = '{{ url_for('generate_chart_json') }}';
var loadingURL = '{{ url_for('static', filename='loading.gif') }}';
var failedURL = '{{ url_for('static', filename='failed.png') }}';

Expand Down

0 comments on commit 544dec6

Please sign in to comment.