gwcelery.tasks.external_triggers module --------------------------------------- This module listens to the `GCN` notices from `SNEWS`_ and the `Fermi`_, `Swift`_, and `INTEGRAL`_ missions, as well as Kafka alerts from `Fermi`_ and `Swift`_. It is also responsible for carrying out tasks related to external trigger-gravitational wave coincidences, including looking for temporal coincidences, creating combined GRB-GW sky localization probability maps, and computing their joint temporal and spatio-temporal false alarm rates. There are two GCN, one Kafka, and two IGWN Alert message handlers in the `gwcelery.tasks.external_triggers` module: * :meth:`~gwcelery.tasks.external_triggers.handle_snews_gcn` is called for each `SNEWS`_ GCN. * :meth:`~gwcelery.tasks.external_triggers.handle_grb_gcn` is called for each GRB GCN such as `Fermi`_, `Swift`_, and `INTEGRAL`_. * :meth:`~gwcelery.tasks.external_triggers.handle_targeted_kafka_alert` is called for GRB missions involved with the targeted search, currently `Fermi`_ and `Swift`_. * :meth:`~gwcelery.tasks.external_triggers.handle_snews_igwn_alert` is called for each `SNEWS`_ external trigger and superevent IGWN Alert. * :meth:`~gwcelery.tasks.external_triggers.handle_grb_igwn_alert` is called for each `Fermi`_ and `Swift`_ external trigger and superevent IGWN Alert. Flow charts ~~~~~~~~~~~ GCN VOEvent Ingestion ^^^^^^^^^^^^^^^^^^^^^ .. digraph:: exttrig compound = true nodesep = 0.1 ranksep = 0.1 node [ fillcolor = white shape = box style = filled target = "_top" ] graph [ labeljust = "left" style = filled target = "_top" ] SNEWS_GCN [ style="rounded" label="SNEWS GCN recieved" ] GRB_GCN [ style="rounded" label="GRB\nGCN recieved" ] subgraph cluster_gcn_handle { href = "../gwcelery.tasks.external_triggers.html#gwcelery.tasks.external_triggers.handle_grb_gcn" label = <handle_gcn> Ignore_gcn [ label="Ignore" ] Likely_noise [ shape=diamond label="Is the event\nlikely non-astrophysical?" ] Event_exists_in_Gracedb [ shape=diamond label="Does the event already\nexist in GraceDB" ] Update_existing_event_in_gracedb [ label="Update the existing\nevent in GraceDB" ] Create_new_event_in_gracedb [ label="Create a new event\nin GraceDB" ] Grab_create_skymap [ label="Grab and/or\ncreate external sky map" ] Launch_detchar_tasks [ label="Launch detector\ncharacterization checks\naround data" ] } SNEWS_GCN -> Likely_noise [ lhead = cluster_gcn_handle ] GRB_GCN -> Likely_noise [ lhead = cluster_gcn_handle ] Likely_noise -> Event_exists_in_Gracedb[label="no"] Likely_noise -> Ignore_gcn[label="yes"] Event_exists_in_Gracedb -> Update_existing_event_in_gracedb[label="yes"] Event_exists_in_Gracedb -> Create_new_event_in_gracedb[label="no"] Update_existing_event_in_gracedb -> Grab_create_skymap Create_new_event_in_gracedb -> Grab_create_skymap Create_new_event_in_gracedb -> Launch_detchar_tasks Kafka Alert Ingestion ^^^^^^^^^^^^^^^^^^^^^ .. digraph:: exttrig compound = true nodesep = 0.1 ranksep = 0.1 node [ fillcolor = white shape = box style = filled target = "_top" ] graph [ labeljust = "left" style = filled target = "_top" ] KAFKA_FERMI [ style="rounded" label="Fermi Kafka\nalert recieved" ] KAFKA_SWIFT [ style="rounded" label="Swift Kafka\nalert recieved" ] subgraph cluster_kafka_handle { href = "../gwcelery.tasks.external_triggers.html#gwcelery.tasks.external_triggers.handle_targeted_kafka_alert" label = <handle_targeted_kafka_alert> Ignore_gcn [ label="Mark with NOT_GRB label\nto prevent publication" ] Likely_noise [ shape=diamond label="Is the GRB FAR too high\nor a retraction notice?" ] Event_exists_in_Gracedb [ shape=diamond label="Does the superevent or\nexternal event already\nexist in GraceDB?" ] Update_existing_event_in_gracedb [ label="Update the existing\nevent in GraceDB" ] Create_new_event_in_gracedb [ label="Create a new event\nin GraceDB" ] Grab_create_skymap [ label="Use provided and/or\ncreate external sky map" ] Launch_detchar_tasks [ label="Launch detector\ncharacterization checks\naround data" ] } KAFKA_FERMI -> Likely_noise [ lhead = cluster_kafka_handle ] KAFKA_SWIFT -> Likely_noise [ lhead = cluster_kafka_handle ] Likely_noise -> Event_exists_in_Gracedb[label="no"] Likely_noise -> Ignore_gcn[label="yes"] Ignore_gcn -> Event_exists_in_Gracedb Event_exists_in_Gracedb -> Update_existing_event_in_gracedb[label="yes"] Event_exists_in_Gracedb -> Create_new_event_in_gracedb[label="no"] Update_existing_event_in_gracedb -> Grab_create_skymap Create_new_event_in_gracedb -> Grab_create_skymap Create_new_event_in_gracedb -> Launch_detchar_tasks IGWN Alert Handling ^^^^^^^^^^^^^^^^^^^ .. digraph:: exttrig compound = true nodesep = 0.1 ranksep = 0.1 node [ fillcolor = white shape = box style = filled target = "_top" ] graph [ labeljust = "left" style = filled target = "_top" ] GRB_External_Trigger_or_Superevent_IGWN_Alert [ style="rounded" label="GRB external trigger or\nSuperevent IGWN Alert received" ] subgraph cluster_grb_igwn_alert_handle { href = "../gwcelery.tasks.external_triggers.html#gwcelery.tasks.external_triggers.handle_grb_igwn_alert" label = <handle_grb_igwn_alert> Is_New_IGWN_Alert [ shape=diamond label="Is there\na new superevent or\nexternal event?" ] Is_Label_Exttrig_IGWN_Alert [ shape=diamond label="Is there a new label\nin the external event?" ] Are_Labels_Exttrig_Complete [ shape=diamond label=" Does this label\ncomplete a set indicating\nboth sky maps are available?" ] Is_File_Exttrig_IGWN_Alert [ shape=diamond label="Is there a new file\n in the external event,\nupdating a sky map?" ] Perform_Raven_Search [ label="Perform Raven\ncoincidence search(es)" ] Does_Label_Launch_Pipeline [ shape=diamond label="Are the labels a\ncomplete set, indicating a\ncoincidence and both sky maps\nare available?" ] Launch_Raven_Pipeline [ label="Relaunch Raven\nPipeline" ] Create_Combined_Skymap [ label="Create combined GW-GRB\nsky map" ] } GRB_External_Trigger_or_Superevent_IGWN_Alert -> Is_New_IGWN_Alert [ lhead = cluster_grb_igwn_alert_handle ] Is_New_IGWN_Alert -> Perform_Raven_Search[label="yes"] Is_New_IGWN_Alert -> Is_Label_Exttrig_IGWN_Alert[label="no"] Is_Label_Exttrig_IGWN_Alert -> Are_Labels_Exttrig_Complete[label="yes"] Are_Labels_Exttrig_Complete -> Launch_Raven_Pipeline[label="yes"] Is_Label_Exttrig_IGWN_Alert -> Is_File_Exttrig_IGWN_Alert[label="no"] Is_File_Exttrig_IGWN_Alert -> Does_Label_Launch_Pipeline[label="yes"] Does_Label_Launch_Pipeline -> Launch_Raven_Pipeline[label="yes"] Launch_Raven_Pipeline -> Create_Combined_Skymap .. digraph:: exttrig compound = true nodesep = 0.1 ranksep = 0.1 node [ fillcolor = white shape = box style = filled target = "_top" ] graph [ labeljust = "left" style = filled target = "_top" ] SNEWS_External_Trigger_or_Superevent_IGWN_Alert [ style="rounded" label="SNEWS external trigger or\nSuperevent IGWN Alert received" ] subgraph cluster_snews_igwn_alert_handle { href = "../gwcelery.tasks.external_triggers.html#gwcelery.tasks.external_triggers.handle_snews_igwn_alert" label = <handle_snews_igwn_alert> ignore [ label="Ignore" ] is_new_exttrig_igwn_alert [ shape=diamond label="Is this a new type SNEWS\nexternal trigger IGWN Alert?" ] is_new_superevent_igwn_alert [ shape=diamond label="Is this a new type\nsuperevent IGWN Alert?" ] perform_raven_search [ label="Perform Raven\ncoincidence search" ] } SNEWS_External_Trigger_or_Superevent_IGWN_Alert -> is_new_exttrig_igwn_alert [ lhead = cluster_snews_igwn_alert_handle ] is_new_exttrig_igwn_alert -> perform_raven_search[label="yes"] is_new_exttrig_igwn_alert -> is_new_superevent_igwn_alert[label="no"] is_new_superevent_igwn_alert -> perform_raven_search[label="yes"] is_new_superevent_igwn_alert -> ignore[label="no"] Tasks ~~~~~ .. automodule:: gwcelery.tasks.external_triggers .. _`Fermi`: https://fermi.gsfc.nasa.gov/ .. _`Swift`: https://swift.gsfc.nasa.gov/ .. _`INTEGRAL`: https://www.cosmos.esa.int/web/integral/science-grb .. _`SNEWS`: https://snews2.org/