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