From 36f179f94183c0e3cb635da58d1fef62ace77c42 Mon Sep 17 00:00:00 2001
From: Brandon Piotrzkowski <brandon.piotrzkowski@ligo.org>
Date: Wed, 24 Jul 2024 18:14:09 +0000
Subject: [PATCH] Parse CHIME FRB ID and duration; partially fixes #255

---
 gracedb/events/translator.py                  | 11 +++-
 .../guardian/0024_add_more_chime_uploaders.py | 63 +++++++++++++++++++
 2 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 gracedb/migrations/guardian/0024_add_more_chime_uploaders.py

diff --git a/gracedb/events/translator.py b/gracedb/events/translator.py
index f6a98a0ed..352304114 100644
--- a/gracedb/events/translator.py
+++ b/gracedb/events/translator.py
@@ -740,13 +740,20 @@ def populateGrbEventFromVOEventFile(filename, event):
     # Also grab parameters from embedded group if there, needed for SVOM
     Svom_ident = vp.convenience.get_grouped_params(v).get('Svom_Identifiers')
     Svom_detect = vp.convenience.get_grouped_params(v).get('Detection_Info')
+    Chime_observe = vp.convenience.get_grouped_params(v).get('observatory parameters')
+    Chime_event = vp.convenience.get_grouped_params(v).get('event parameters')
     if Svom_ident is not None:
         VOEvent_params.update(Svom_ident)
     if Svom_detect is not None:
         VOEvent_params.update(Svom_detect)
+    if Chime_observe is not None:
+        VOEvent_params.update(Chime_observe)
+    if Chime_event is not None:
+        VOEvent_params.update(Chime_event)
 
     trig_dur_params = ["Trig_Dur", "Trans_Duration", "Data_Integ", 
-                       "Integ_Time", "Trig_Timescale", "Timescale"]
+                       "Integ_Time", "Trig_Timescale", "Timescale",
+                       "sampling_time"]
     trigger_duration = None
     for param in trig_dur_params:
         if (param in VOEvent_params):
@@ -763,7 +770,7 @@ def populateGrbEventFromVOEventFile(filename, event):
     # try to find a trigger_id value
     trigger_id = None
     trigger_id_params = ['TrigID', 'Trans_Num', 'EventID',
-                         'Burst_Id']
+                         'Burst_Id', 'event_no']
     for param in trigger_id_params:
         if (param in VOEvent_params):
             trigger_id = VOEvent_params.get(param).get('value')
diff --git a/gracedb/migrations/guardian/0024_add_more_chime_uploaders.py b/gracedb/migrations/guardian/0024_add_more_chime_uploaders.py
new file mode 100644
index 000000000..bee7d538d
--- /dev/null
+++ b/gracedb/migrations/guardian/0024_add_more_chime_uploaders.py
@@ -0,0 +1,63 @@
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+# Creates UserObjectPermission objects which allow specific users
+# to add events for pipelines.  Based on current production database
+# content (27 October 2017)
+
+# List of pipeline names and lists of usernames who should
+# be allowed to add events for them
+PP_LIST = [
+    {
+        'pipeline': 'PyGRB',
+        'usernames': [
+            'brandon.piotrzkowski@ligo.org',
+            'emfollow',
+        ]
+    },
+    {
+        'pipeline': 'CHIME',
+        'usernames': [
+            'brandon.piotrzkowski@ligo.org',
+            'emfollow',
+        ]
+    },
+]
+
+def add_permissions(apps, schema_editor):
+    User = apps.get_model('auth', 'User')
+    Permission = apps.get_model('auth', 'Permission')
+    UserObjectPermission = apps.get_model('guardian', 'UserObjectPermission')
+    Pipeline = apps.get_model('events', 'Pipeline')
+    ContentType = apps.get_model('contenttypes', 'ContentType')
+
+    perm = Permission.objects.get(codename='populate_pipeline')
+    ctype = ContentType.objects.get_for_model(Pipeline)
+    for pp_dict in PP_LIST:
+        pipeline, created = Pipeline.objects.get_or_create(name=pp_dict['pipeline'])
+
+        # Loop over users
+        for username in pp_dict['usernames']:
+
+            # Robot users should have been already created by ligoauth 0003,
+            # but we have to create human user accounts here
+            user, _ = User.objects.get_or_create(username=username)
+
+            # Create UserObjectPermission
+            uop, uop_created = UserObjectPermission.objects.get_or_create(
+                user=user, permission=perm, content_type=ctype,
+                object_pk=pipeline.id)
+
+def remove_permissions(apps, schema_editor):
+    pass
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('guardian', '0023_populate_aframe_uploaders'),
+    ]
+
+    operations = [
+        migrations.RunPython(add_permissions, remove_permissions),
+    ]
-- 
GitLab