Source code for gwcelery.tasks.rrt_utils

import json

from ligo.skymap.io import read_sky_map
from ligo.skymap.postprocess.crossmatch import crossmatch

from .. import app
from ..util.tempfile import NamedTemporaryFile
from . import gracedb


[docs]@app.task(shared=False) def check_high_profile(skymap, em_bright, p_astro, superevent): superevent_id = superevent['superevent_id'] # conditions are defined in L2100046 # RAVEN_ALERT HIGH_PROFILE is implemented in raven.py # Checking if the label is applied beforehand if 'HIGH_PROFILE' in superevent['labels']: return "HIGH_PROFILE already applied" # low-far unmodelled burst condition far_list = [] gw_events = superevent["gw_events"] for event in gw_events: events_dict = gracedb.get_event(event) far_list.append({"group": events_dict["group"], "search": events_dict["search"], "far": events_dict["far"]}) far_list_sorted = sorted(far_list, key=lambda k: k["far"]) if far_list_sorted[0]["group"] == "Burst" and \ far_list_sorted[0]["search"] != "BBH": gracedb.create_label.si( 'HIGH_PROFILE', superevent_id).delay() return "Event with the lowest FAR is a Burst event. Applying label" # annotation number condition preferred_event = superevent['preferred_event_data'] if preferred_event["group"] == "CBC": em_bright_dict = json.loads(em_bright) has_remnant = em_bright_dict['HasRemnant'] pastro_dict = json.loads(p_astro) p_bns = pastro_dict['BNS'] p_terr = pastro_dict['Terrestrial'] p_nsbh = pastro_dict['NSBH'] with NamedTemporaryFile(content=skymap) as skymap_file: gw_skymap = read_sky_map(skymap_file.name, moc=True) cl = 90 result = crossmatch(gw_skymap, contours=[cl / 100]) sky_area = result.contour_areas[0] if p_terr < 0.5: if (p_bns > 0.1 or p_nsbh > 0.1 or has_remnant > 0.1 or sky_area < 100): # noqa: E501 gracedb.create_label.si( 'HIGH_PROFILE', superevent_id).delay() return "Annotations condition satisfied. Applying label" return "No conditions satisfied. Skipping"