diff --git a/gracedb/models.py b/gracedb/models.py index d1fb6a928bff248a6c8e5c89ece86e2585c0a90d..910e8e07a96c2fde89d2fefb76d10d066cd61a60 100644 --- a/gracedb/models.py +++ b/gracedb/models.py @@ -52,6 +52,7 @@ class Event(models.Model): ("X", "X"), ("CWB", "CWB"), ("MBTA", "MBTAOnline"), + ("HWINJ", "HardwareInjection"), ) submitter = models.ForeignKey(User) created = models.DateTimeField(auto_now_add=True) @@ -82,6 +83,8 @@ class Event(models.Model): def graceid(self): if self.uid: return self.uid + elif self.analysisType == "HWINJ": + return "H%04d" % self.id return "G%04d" % self.id def weburl(self): @@ -111,9 +114,13 @@ class Event(models.Model): @classmethod def getByGraceid(cls, id): - if id[0] == "G": - return cls.objects.get(id=int(id[1:])) - return cls.objects.get(uid=id) + if id[0] not in "GH": + # Very old, probably useless data. + return cls.objects.get(uid=id) + e = cls.objects.get(id=int(id[1:])) + if (id[0] == "G" and e.analysisType != "HWINJ") or (id[0]=="H" and e.analysisType =="HWINJ"): + return e + raise cls.DoesNotExist() class EventLog(models.Model): class Meta: diff --git a/gracedb/query.py b/gracedb/query.py index 907c08311babd3b4887edbb2a1ab67395d4cce2b..26ebf175e61030f986b9834ff3c86e213bcd7397 100644 --- a/gracedb/query.py +++ b/gracedb/query.py @@ -11,11 +11,11 @@ #import pyparsing as p -from models import Event +import models from django.db.models import Q from pyparsing import \ - Word, nums, Literal, delimitedList, Suppress, Group, \ + Word, nums, Literal, delimitedList, Suppress, \ Keyword, Combine, Or, Optional, OneOrMore, alphas, Regex, \ opAssoc, operatorPrecedence, oneOf, \ stringStart, stringEnd, ParseException @@ -27,7 +27,10 @@ def maybeRange(name): return name, Q(**{name+"__range": toks.asList()}) return f -encodeType = dict([(x[1],x[0]) for x in Event.ANALYSIS_TYPE_CHOICES]) +encodeType = dict( + [(x[1],x[0]) for x in models.Event.ANALYSIS_TYPE_CHOICES] + + [(x[0],x[0]) for x in models.Event.ANALYSIS_TYPE_CHOICES] + ) def doType(toks): return ("type", Q(analysisType__in=[encodeType[tok] for tok in toks])) @@ -48,7 +51,7 @@ gpsQ = Optional(Suppress(Keyword("gpstime:"))) + (gpstime^gpstimeRange) gpsQ = gpsQ.setParseAction(maybeRange("gpstime")) # Analysis Groups -groupNames = ["Test", "Burst", "CBC", "Stochastic", "CW"] +groupNames = [group.name for group in models.Group.objects.all()] group = Or(map(Literal, groupNames)).setName("analysis group name") groupList = delimitedList(group, delim='|').setName("analysis group list") groupQ = (Optional(Suppress(Keyword("group:"))) + groupList) @@ -56,7 +59,6 @@ groupQ = groupQ.setParseAction(lambda toks: ("group", Q(group__name__in=toks.asL # Analysis Types -atypeNames = ["LowMass", "HighMass", "Inspiral", "Omega", "X"] atypeNames = encodeType.keys() atype = Or(map(Literal, atypeNames)) atypeList = delimitedList(atype, delim='|').\ diff --git a/gracedb/translator.py b/gracedb/translator.py index d1cea32793e74b18b1c81916d96b69eb8d214899..9f1a03671682f84ff9ac2b1892bec04141a81325 100644 --- a/gracedb/translator.py +++ b/gracedb/translator.py @@ -231,6 +231,23 @@ def handle_uploaded_data(event, datafilename, issuer=event.submitter, comment="Original Data") log.save() + elif event.analysisType == 'HWINJ': + try: + f = open(datafilename, "r") + for line in f.readlines(): + if line.startswith("gpstime:"): + times = line.split() + event.gpstime = int(float(times[1])) + event.save() + break + f.close() + except: + pass + log = EventLog(event=event, + filename=os.path.basename(datafilename), + issuer=event.submitter, + comment="Original Data") + log.save() else: log = EventLog(event=event, filename=os.path.basename(datafilename),