From b2154502f4662b92ec7fa269176738105a237c5d Mon Sep 17 00:00:00 2001
From: Naresh Adhikari <naresh.adhikari@ligo.org>
Date: Tue, 18 Apr 2023 14:30:02 -0500
Subject: [PATCH] Use superevent skymap for skymap comparison if from
 superevent IGWN alert; Fixes #598

---
 CHANGES.rst                                    |  5 +++--
 gwcelery/tasks/external_triggers.py            | 16 +++++++++++-----
 gwcelery/tests/test_tasks_external_triggers.py |  2 +-
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index 71ca44665..bdf3f3204 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -53,8 +53,9 @@ Changelog
     listener.
 
 -   Use sky map from preferred event rather than superevent, triggering off 
-    EM_READY label instead of SKYMAP_READY. If SKYMAP_READY is applied, we 
-    will once again try to get the GW sky map from the superevent.
+    EM_READY label instead of SKYMAP_READY. If SKYMAP_READY is applied or if a
+    sky map file is added to the superevent, we will once again try to get the
+    GW sky map from the superevent.
 
 -   Update bilby and bilby_pipe to 2.1.0 and 1.0.10 respectively. The number of
     spline nodes for calibration errors is increased to 10 thanks to the bilby
diff --git a/gwcelery/tasks/external_triggers.py b/gwcelery/tasks/external_triggers.py
index 2a57ee34f..61861547f 100644
--- a/gwcelery/tasks/external_triggers.py
+++ b/gwcelery/tasks/external_triggers.py
@@ -387,7 +387,8 @@ def handle_grb_igwn_alert(alert):
                 if REQUIRED_LABELS_BY_TASK['compare'].issubset(
                         set(external_event['labels'])):
                     _relaunch_raven_pipeline_with_skymaps(
-                        superevent, external_event, graceid)
+                        superevent, external_event, graceid,
+                        use_superevent=True)
         else:
             if REQUIRED_LABELS_BY_TASK['compare'].issubset(
                     set(external_event['labels'])):
@@ -488,8 +489,9 @@ def _launch_external_detchar(event):
     return event
 
 
-def _relaunch_raven_pipeline_with_skymaps(superevent, ext_event, graceid):
-    """Relaunch the RAVEN sky map comparision workflow, include recalculating
+def _relaunch_raven_pipeline_with_skymaps(superevent, ext_event, graceid,
+                                          use_superevent=False):
+    """Relaunch the RAVEN sky map comparison workflow, include recalculating
     the joint FAR with updated sky map info and create a new combined sky map.
 
     Parameters
@@ -500,6 +502,9 @@ def _relaunch_raven_pipeline_with_skymaps(superevent, ext_event, graceid):
         external event dictionary
     graceid: str
         GraceDB ID of event
+    use_superevent: bool
+        If True, always use skymap info from superevent
+        regardless of SKYMAP_READY label.
 
     """
     gw_group = superevent['preferred_event_data']['group']
@@ -521,6 +526,7 @@ def _relaunch_raven_pipeline_with_skymaps(superevent, ext_event, graceid):
         canvas |= external_skymaps.create_combined_skymap.si(
                       superevent['superevent_id'], ext_event['graceid'],
                       preferred_event=(
-                          superevent['preferred_event'] if
-                          'SKYMAP_READY' not in ext_event['labels'] else None))
+                          None if 'SKYMAP_READY' in ext_event['labels']
+                          or use_superevent
+                          else superevent['preferred_event']))
     canvas.delay()
diff --git a/gwcelery/tests/test_tasks_external_triggers.py b/gwcelery/tests/test_tasks_external_triggers.py
index dcef01a98..3562669f6 100644
--- a/gwcelery/tests/test_tasks_external_triggers.py
+++ b/gwcelery/tests/test_tasks_external_triggers.py
@@ -419,7 +419,7 @@ def test_handle_rerun_combined_skymap(mock_create_combined_skymap,
     external_triggers.handle_grb_igwn_alert(alert)
     if graceid == 'S1':
         mock_create_combined_skymap.assert_has_calls(
-            [call('S1', 'E1', preferred_event='G1'),
+            [call('S1', 'E1', preferred_event=None),
              call('S1', 'E3', preferred_event=None)]
         )
     elif graceid in {'E1', 'E3'}:
-- 
GitLab