From a847b6d0e944a6f04ac4aa172b990ab10e3965a7 Mon Sep 17 00:00:00 2001 From: Brian Moe <brian.moe@ligo.org> Date: Mon, 25 Jun 2012 16:24:20 -0500 Subject: [PATCH] Added fields to VOEvent for GCN. --- gracedb/buildVOEvent.py | 52 ++++++++++++++++++++++++++++++++++++++--- gracedb/views.py | 46 ++++-------------------------------- 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/gracedb/buildVOEvent.py b/gracedb/buildVOEvent.py index e83a2145b..964f17884 100755 --- a/gracedb/buildVOEvent.py +++ b/gracedb/buildVOEvent.py @@ -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 ############################ diff --git a/gracedb/views.py b/gracedb/views.py index 3e840dd80..f88803892 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -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): -- GitLab