Skip to content
Snippets Groups Projects
Commit a847b6d0 authored by Brian Moe's avatar Brian Moe
Browse files

Added fields to VOEvent for GCN.

parent d71655ba
No related branches found
No related tags found
No related merge requests found
......@@ -15,16 +15,17 @@ import sys, os
# XXX ER2.utils. utils is in project directory. ugh.
from utils import gpsToUtc
from django.conf import settings
from django.core.urlresolvers import reverse
def buildVOEvent(gevent):
def buildVOEvent(gevent, request=None, description=None, role=None):
objid = gevent.graceid()
############ VOEvent header ############################
v = VOEvent.VOEvent(version="2.0")
v.set_ivorn(settings.SKYALERT_IVORN_PATTERN % objid)
v.set_role(settings.SKYALERT_ROLE)
v.set_Description(settings.SKYALERT_DESCRIPTION)
v.set_role(role or settings.SKYALERT_ROLE)
v.set_Description(description or settings.SKYALERT_DESCRIPTION)
############ Who ############################
w = Who()
......@@ -37,6 +38,21 @@ def buildVOEvent(gevent):
############ What ############################
w = What()
# UCD = Unified Content Descriptors
# http://monet.uni-sw.gwdg.de/twiki/bin/view/VOEvent/UnifiedContentDescriptors
# OR -- (from VOTable document, [21] below)
# http://www.ivoa.net/twiki/bin/view/IVOA/IvoaUCD
# http://cds.u-strasbg.fr/doc/UCD.htx
#
# which somehow gets you to: http://www.ivoa.net/Documents/REC/UCD/UCDlist-20070402.html
# where you might find some actual information.
# Unit / Section 4.3 of [21] which relies on [25]
# [21] http://www.ivoa.net/Documents/latest/VOT.html
# [25] http://vizier.u-strasbg.fr/doc/catstd-3.2.htx
#
# basically, a string that makes sense to humans about what units a value is. eg. "m/s"
# params related to the event. None are in Groups.
p = Param(name="gracedbid", ucd="meta.id", value="%s"% objid)
p.set_Description(["Identifier assigned by gracedb"])
......@@ -50,6 +66,36 @@ def buildVOEvent(gevent):
p.set_Description(["Likelihood"])
w.add_Param(p)
# For GCN.
#
# pipeline dataType="string" ucd=
# FAR dataType="float" ucd=arith.rate unit="Hz"
# DQ level dataType="?" ucd=
# IFO list dataType="string" ucd=
# URL to skymap Reference/URL
p = Param(name="analysistype", dataType="string", value=str(gevent.get_analysisType_display()))
p.set_Description(["LIGO analysis which produced this result"])
w.add_Param(p)
p = Param(name="far", dataType="float", ucd="arith.rate", unit="Hz", value=float(gevent.far))
p.set_Description(["False Alarm Rate"])
w.add_Param(p)
p = Param(name="ifolist", dataType="string", value=str(gevent.instruments))
p.set_Description(["Interferometers"])
w.add_Param(p)
p = Param(name="skymap")
p.set_Description(["Sky Map"])
skymap_url = reverse("download", args=[gevent.graceid(), "general/skymap.fits"])
if request:
# XXX should probably be an error if we can't give the full url.
skymap_url = request.build_absolute_uri(skymap_url)
p.set_Reference([Reference(uri=skymap_url)])
w.add_Param(p)
v.set_What(w)
############ Wherewhen ############################
......
......@@ -48,7 +48,8 @@ def skyalert_authorized(request):
def voevent(request, graceid):
event = Event.getByGraceid(graceid)
return HttpResponse(buildVOEvent(event), content_type="application/xml")
voevent = buildVOEvent(event, request)
return HttpResponse(voevent, content_type="application/xml")
def skyalert(request, graceid):
......@@ -68,6 +69,7 @@ def skyalert(request, graceid):
except Exception, e:
message = "SkyAlert Submission Error"
skyalert_response = ""
# XXX umm. don't we want to know if this email fails silently?
mail_admins("SkyAlert Submission Error",
"Event: %s\nExcption: %s\n" % (graceid, e),
fail_silently=True)
......@@ -79,6 +81,7 @@ def skyalert(request, graceid):
message = "Submitted to Skyalert: %s" % match.group()
else:
message = "SkyAlert submission problem. Cannot parse SkyAlert response."
# XXX umm. don't we want to know if this email fails silently?
mail_admins("SkyAlert response parsing problem",
"Event: %s\nSkyAlert Response: %s\n" % (graceid, skyalert_response),
fail_silently=True)
......@@ -99,47 +102,6 @@ def skyalert(request, graceid):
return HttpResponseRedirect(reverse(view, args=[graceid]))
def badskyalert(request, graceid):
event = Event.getByGraceid(graceid)
if not event.gpstime:
request.session['flash_msg'] = "No GPS time. Event not suitable for submission to SkyAlert"
return HttpResponse("Ugh no gpstime")
return HttpResponseRedirect(reverse(view, args=[graceid]))
logentry = EventLog(event=event, issuer=request.ligouser, comment="TRYING TO SUMIT TO SKYALERT")
logentry.save()
skyalert_response = submitToSkyalert(event, validate_only="False")
if skyalert_response.find("Success") >= 0:
urlpat = re.compile('https://[^ ]*')
match = urlpat.search(skyalert_response)
if match:
try:
skyalert_url = match.group()
except:
skyalert_url = "fail match"
comment = "Submitted to SkyALert: %s" % skyalert_url
logentry = EventLog(event=event, issuer=request.ligouser, comment=comment)
logentry.save()
request.session['flash_msg'] = comment
return HttpResponse("OK " + skyalert_response + skyalert_url + logentry.comment)
else:
request.session['flash_msg'] = "Problem parsing skyalert response"
return HttpResponse('problem ' + skyalert_response)
elif skyalert_response.find('already found') >= 0:
request.session['flash_msg'] = "Event already submitted to SkyAlert " + skyalert_response
return HttpResponse('already done ' + skyalert_response)
else:
return HttpResponse('problem2 ' + skyalert_response)
request.session['flash_msg'] = "Unknown problem submitting to SkyAlert -- %s" % skyalert_response
#return HttpResponseRedirect(reverse(view, args=[graceid]))
return HttpResponse('how did we get here? ' + skyalert_response)
return view(request, graceid)
def create(request):
d = _create(request)
if isinstance(d, HttpResponse):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment