From 18693ef5778c066444c24b13e5f15553ff52cc4c Mon Sep 17 00:00:00 2001
From: Brian Moe <brian.moe@ligo.org>
Date: Wed, 9 Jan 2013 13:53:02 -0600
Subject: [PATCH] Extended attributes for LM and CWB

---
 gracedb/models.py     |  7 +++++--
 gracedb/translator.py | 47 +++++++++++++++++++++++++++++++++++++++++--
 gracedb/views.py      | 16 +++++++++++----
 3 files changed, 62 insertions(+), 8 deletions(-)

diff --git a/gracedb/models.py b/gracedb/models.py
index 408f9ec3f..31ff51cc6 100644
--- a/gracedb/models.py
+++ b/gracedb/models.py
@@ -154,7 +154,10 @@ class Event(models.Model):
 
     @classmethod
     def getByGraceid(cls, id):
-        e = cls.objects.get(id=int(id[1:]))
+        try:
+            e = cls.objects.filter(id=int(id[1:])).select_subclasses()[0]
+        except IndexError:
+            raise cls.DoesNotExist("Event matching query does not exist")
         if (id[0] == "T") and (e.group.name == "Test"):
             return e
         if (id[0] == "H") and (e.analysisType == "HWINJ"):
@@ -163,7 +166,7 @@ class Event(models.Model):
             return e
         if (id[0] == "G"):
             return e
-        raise cls.DoesNotExist()
+        raise cls.DoesNotExist("Event matching query does not exist")
 
     def __unicode__(self):
         return self.graceid()
diff --git a/gracedb/translator.py b/gracedb/translator.py
index bf868e523..76c5ef36b 100644
--- a/gracedb/translator.py
+++ b/gracedb/translator.py
@@ -105,6 +105,16 @@ def handle_uploaded_data(event, datafilename,
         event.nevents = coinc_table[0].nevents
         event.likelihood = coinc_table[0].likelihood
 
+        event.ifos             = ifos
+        event.end_time         = end_time[0]
+        event.end_time_ns      = end_time[1]
+        event.mass             = mass
+        event.mchirp           = mchirp
+        event.minimum_duration = getattr(origdata[0][0], "minimum_duration", None)
+        event.snr              = snr
+        event.false_alarm_rate = getattr(origdata[0][0], "false_alarm_rate", None)
+        event.combined_far     = far
+
         # XXX xml_filename unused
         #xml_filename = os.path.join(output_dir, coinc_table_filename)
 
@@ -339,8 +349,6 @@ class Translator(object):
         event.instruments = data.get('instruments')
         event.far = data.get('far')
 
-        event.save()
-
     def logData(self):
         data = self.getData()
         logdata = []
@@ -388,6 +396,21 @@ class CwbData(Translator):
             self.castData(data)
         return self.data
 
+    def populateEvent(self, event):
+        Translator.populateEvent(self, event)
+
+        # MultiBurst table attributes
+        data = self.getData()
+        event.ifo           = data.get('ifo')
+        event.start_time    = data.get('start_time')
+        event.start_time_ns = data.get('start_time_ns')
+        event.duration      = data.get('duration')
+        event.central_freq  = data.get('central_freq')
+        event.bandwidth     = data.get('bandwidth')
+        event.snr           = data.get('snr')
+        event.ligo_axis_ra  = data.get('ligo_axis_ra')
+        event.ligo_axis_dec = data.get('ligo_axis_dec')
+
     def readData(self, datafile):
         needToClose = False
         if isinstance(datafile, str) or isinstance(datafile, unicode):
@@ -447,6 +470,26 @@ class CwbData(Translator):
         ifos.sort()
         data['instruments'] = ','.join(ifos)
 
+        # MultiBurst table attributes
+        start =  rawdata.get('start',[None])[0]
+        if start is not None:
+            integer, frac = start.split('.')
+            data['start_time']    = int(integer)
+            data['start_time_ns'] = int(frac+(9-len(frac))*'0')
+        else:
+            data['start_time']    = None
+            data['start_time_ns'] = None
+
+        data['ifo'] = ','.join(ifos)
+        data['duration']      = rawdata.get('duration',[None])[0]
+        data['central_freq']  = rawdata.get('frequency',[None])[0]
+        data['bandwidth']     = rawdata.get('bandwidth',[None])[0]
+        #data['snr']           = rawdata.get('snr',[None])[0]
+        # rho is what log file says is "effective snr"
+        data['snr']           = data['rawdata'].get('rho',[None])[0]
+        data['ligo_axis_ra']     = data['rawdata'].get('phi',[None,None,None])[2]
+        data['ligo_axis_dec']    = data['rawdata'].get('theta',[None,None,None])[2]
+
         if needToClose:
             datafile.close()
 
diff --git a/gracedb/views.py b/gracedb/views.py
index 7568abb00..f8be89098 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -11,6 +11,8 @@ from django.utils.safestring import mark_safe
 from django.views.generic.list_detail import object_detail, object_list
 
 from models import Event, Group, EventLog, Labelling, Label, User
+from models import CoincInspiralEvent
+from models import MultiBurstEvent
 from forms import CreateEventForm, EventSearchForm, SimpleSearchForm
 from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate
 from translator import handle_uploaded_data
@@ -201,12 +203,17 @@ def _createEventFromForm(request, form):
     warnings = []
     try:
         group = Group.objects.filter(name=form.cleaned_data['group'])
-        type = form.cleaned_data['type']
+        atype = form.cleaned_data['type']
         # Create Event
-        event = Event()
+        if atype in ['LM', 'HM']:
+            event = CoincInspiralEvent()
+        elif atype == "CWB":
+            event = MultiBurstEvent()
+        else:
+            event = Event()
         event.submitter = request.ligouser
         event.group = group[0]
-        event.analysisType = type
+        event.analysisType = atype
         #  ARGH.  We don't get a graceid until we save,
         #  but we don't know in advance if we can actually
         #  create all the things we need for success!
@@ -531,7 +538,8 @@ def view(request, graceid):
                             for event in a.neighbors()]
     context['skyalert_authorized'] = skyalert_authorized(request)
     return render_to_response(
-        'gracedb/event_detail.html',
+        [ 'gracedb/event_detail_{0}.html'.format(a.analysisType),
+          'gracedb/event_detail.html'],
         context,
         context_instance=RequestContext(request))
 
-- 
GitLab