diff --git a/CHANGES.rst b/CHANGES.rst index 26a2256e5383ef7c1565c626c2a6733331d1acb6..3390e87f65531fe735362f0dd4068181cbee51f1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -39,6 +39,8 @@ Changelog if grabbing a sky map from an external URL such as from Fermi-GBM that lacks this field. +- Prevent external event from switching superevents. + 2.0.4 "Skunk Ape" (2023-03-28) ------------------------------ diff --git a/gwcelery/tasks/raven.py b/gwcelery/tasks/raven.py index ab22326339d60146a683100ba5e7815070c09219..7e0f98310278beb0460c330d4caf2c2561a02121 100644 --- a/gwcelery/tasks/raven.py +++ b/gwcelery/tasks/raven.py @@ -217,6 +217,10 @@ def raven_pipeline(raven_search_results, gracedb_id, alert_object, tl, th, exttrig_id = gracedb_id superevent = result ext_event = alert_object + # Don't continue if it is a different superevent than previous one. + if ext_event['superevent'] is not None \ + and ext_event['superevent'] != superevent['superevent_id']: + return canvas = ( gracedb.add_event_to_superevent.si(superevent_id, exttrig_id) diff --git a/gwcelery/tests/test_tasks_raven.py b/gwcelery/tests/test_tasks_raven.py index bebb52b728fa36eb27f6ecf491c5e0b2b71c964f..ab932cf6d601d095239a2f97006da91774c7fd64 100644 --- a/gwcelery/tests/test_tasks_raven.py +++ b/gwcelery/tests/test_tasks_raven.py @@ -207,7 +207,9 @@ def mock_get_superevent(superevent_id): [[{'superevent_id': 'S12', 'far': .001, 'preferred_event': 'G3'}], 'T4', -10, 10, 'Burst'], [[{'superevent_id': 'MS13', 'far': 1, 'preferred_event': 'M3'}], - 'M15', -1, 5, 'CBC']]) + 'M15', -1, 5, 'CBC'], + [[{'superevent_id': 'S13', 'far': 1, 'preferred_event': 'G4'}], + 'E6', -60, 600, 'Burst']]) @patch('gwcelery.tasks.raven.trigger_raven_alert.run') @patch('gwcelery.tasks.gracedb.get_labels', mock_get_labels) @patch('gwcelery.tasks.raven.calculate_coincidence_far.run', @@ -229,7 +231,8 @@ def test_raven_pipeline(mock_plot_overlap_integral, """ alert_object = {'preferred_event': 'G1', 'pipeline': 'Fermi', 'search': 'Supernova' if graceid == 'T4' else 'GRB', - 'labels': []} + 'labels': [], + 'superevent': None if graceid != 'E6' else 'S14'} time_coinc_far = mock_coinc_far()['temporal_coinc_far'] space_coinc_far = mock_coinc_far()['spatiotemporal_coinc_far'] @@ -293,13 +296,20 @@ def test_raven_pipeline(mock_plot_overlap_integral, alert_calls.append(call( mock_coinc_far(), result, graceid, alert_object, group)) - mock_trigger_raven_alert.assert_has_calls(alert_calls, any_order=True) - - mock_calculate_coincidence_far.assert_has_calls(coinc_calls, - any_order=True) - mock_update_superevent.assert_has_calls(update_calls, any_order=True) - mock_create_label.assert_has_calls(label_calls, any_order=True) - mock_plot_overlap_integral.assert_has_calls(plot_calls, any_order=True) + if graceid != 'E6': + mock_trigger_raven_alert.assert_has_calls(alert_calls, any_order=True) + + mock_calculate_coincidence_far.assert_has_calls(coinc_calls, + any_order=True) + mock_update_superevent.assert_has_calls(update_calls, any_order=True) + mock_create_label.assert_has_calls(label_calls, any_order=True) + mock_plot_overlap_integral.assert_has_calls(plot_calls, any_order=True) + else: + mock_trigger_raven_alert.assert_not_called() + mock_calculate_coincidence_far.assert_not_called() + mock_update_superevent.assert_not_called() + mock_create_label.assert_not_called() + mock_plot_overlap_integral.assert_not_called() @pytest.mark.parametrize(