Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alexander.pace/server
  • geoffrey.mo/gracedb-server
  • deep.chatterjee/gracedb-server
  • cody.messick/server
  • sushant.sharma-chaudhary/server
  • michael-coughlin/server
  • daniel.wysocki/gracedb-server
  • roberto.depietri/gracedb
  • philippe.grassia/gracedb
  • tri.nguyen/gracedb
  • jonah-kanner/gracedb
  • brandon.piotrzkowski/gracedb
  • joseph-areeda/gracedb
  • duncanmmacleod/gracedb
  • thomas.downes/gracedb
  • tanner.prestegard/gracedb
  • leo-singer/gracedb
  • computing/gracedb/server
18 results
Show changes
Showing
with 730 additions and 421 deletions
...@@ -62,7 +62,7 @@ in real life (from inside the Django shell):: ...@@ -62,7 +62,7 @@ in real life (from inside the Django shell)::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG') >>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> if p in u.user_permissions.all(): >>> if p in u.user_permissions.all():
...: print "Albert can add events!" ...: print("Albert can add events!")
The Django ``User`` class has a convenience function ``has_perm`` to The Django ``User`` class has a convenience function ``has_perm`` to
make this easier:: make this easier::
...@@ -72,7 +72,7 @@ make this easier:: ...@@ -72,7 +72,7 @@ make this easier::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG') >>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> if u.has_perm('events.add_event'): >>> if u.has_perm('events.add_event'):
...: print "Albert can add events!" ...: print("Albert can add events!")
Again, notice that the ``has_perm`` function needs the codename to be scoped by Again, notice that the ``has_perm`` function needs the codename to be scoped by
the app to which the model belongs. Both are required to fully specify the model. the app to which the model belongs. Both are required to fully specify the model.
...@@ -124,7 +124,7 @@ event data. Thus, we have added a custom ``view`` permission for the event model ...@@ -124,7 +124,7 @@ event data. Thus, we have added a custom ``view`` permission for the event model
>>> perms = Permission.objects.filter(codename__startswith='view') >>> perms = Permission.objects.filter(codename__startswith='view')
>>> for p in perms: >>> for p in perms:
...: print p.codename ...: print(p.codename)
...: ...:
view_coincinspiralevent view_coincinspiralevent
view_event view_event
...@@ -314,7 +314,7 @@ can be done by adding the permission by hand:: ...@@ -314,7 +314,7 @@ can be done by adding the permission by hand::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG') >>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> u.user_permissions.add(p): >>> u.user_permissions.add(p):
...: print "Albert can add events!" ...: print("Albert can add events!")
Granting permission to populate a pipeline Granting permission to populate a pipeline
------------------------------------------ ------------------------------------------
......
.highlight .err {
border: inherit;
box-sizing: inherit;
}
...@@ -102,16 +102,17 @@ h1.docnav { ...@@ -102,16 +102,17 @@ h1.docnav {
} }
#home #nav-home a, #home #nav-home a,
#create #nav-create a, #public #nav-public a,
#search #nav-search a, #search #nav-search a,
#pipelines #nav-pipelines a,
#alerts #nav-alerts a,
#password #nav-password a,
#doc #nav-doc a, #doc #nav-doc a,
#reports #nav-reports a, #other #nav-other a,
#feeds #nav-feeds a,
#about #nav-about a, #about #nav-about a,
#archive #nav-archive a, #archive #nav-archive a,
#lab #nav-lab a, #lab #nav-lab a,
#reviews #nav-reviews a, #reviews #nav-reviews a,
#userprofile #nav-userprofile a,
#latest #nav-latest a, #latest #nav-latest a,
#contact #nav-contact a { #contact #nav-contact a {
background: #a9b0ba; /* Nav selected color */ background: #a9b0ba; /* Nav selected color */
...@@ -119,16 +120,17 @@ h1.docnav { ...@@ -119,16 +120,17 @@ h1.docnav {
/* text-shadow:none; */ /* text-shadow:none; */
} }
#home #nav-home a:hover, #home #nav-home a:hover,
#create #nav-create a, #public #nav-public a,
#search #nav-search a, #search #nav-search a,
#pipelines #nav-pipelines a,
#alerts #nav-alerts a,
#password #nav-password a,
#doc #nav-doc a, #doc #nav-doc a,
#reports #nav-reports a, #other #nav-other a,
#feeds #nav-feeds a,
#about #nav-about a:hover, #about #nav-about a:hover,
#archive #nav-archive a:hover, #archive #nav-archive a:hover,
#lab #nav-lab a:hover, #lab #nav-lab a:hover,
#reviews #nav-reviews a:hover, #reviews #nav-reviews a:hover,
#userprofile #nav-userprofile a:hover,
#latest #nav-latest a:hover, #latest #nav-latest a:hover,
#contact #nav-contact a:hover { #contact #nav-contact a:hover {
/* background:#e35a00; */ /* background:#e35a00; */
......
{% extends "!layout.html" %}
{% block extrahead %}
<link rel="stylesheet" href="_static/gracedb-nav-style.css" />
<script src="/static/dojo/dojo.js" data-dojo-config="async: true"></script>
<script>
var getKeys = function(obj){
var keys = [];
for(var key in obj){
keys.push(key);
}
return keys;
}
require([
'dojo/_base/declare',
'dojo/query',
'dojo/parser',
'put-selector/put',
'dojo/dom',
'dojo/dom-construct',
'dojo/dom-style',
'dojo/request',
'dojo/NodeList-dom',
'dojo/NodeList-traverse',
'dojo/domReady!',
], function(declare, query, parser, put, dom, domConstruct, domStyle, request) {
parser.parse();
// The url will look like: base + /documentation/...
var loc = window.location.href;
var ind = loc.indexOf('documentation');
var url = loc.substring(0,ind);
url += 'navbar_only';
var header_div = dom.byId("gracedb-nav-header");
request.get(url).then(
function(text) {
var node = domConstruct.toDom(text);
var nl = query('*', node);
var header_content = "";
// XXX this should not be necessary. Why can't I just query directly for the node with
// id == 'content'?
nl.forEach(function(n) {
if (n.tagName == 'DIV' && n.id == 'content') {
header_content = n.innerHTML;
}
});
header_div.innerHTML = header_content;
},
function(error) {
console.log("failed to get navbar content.")
}
);
});
</script>
{% endblock %}
{% block header %}
<div id="gracedb-nav-header"></div>
{% endblock %}
...@@ -13,8 +13,8 @@ GraceDB supports three different types of authentication methods depending on th ...@@ -13,8 +13,8 @@ GraceDB supports three different types of authentication methods depending on th
federated identities. federated identities.
- **REST API**: The API has a single entry point which can handle the following types of authentication: - **REST API**: The API has a single entry point which can handle the following types of authentication:
- **Shibboleth** - **Shibboleth**
- **Scitokens**
- **X509** - **X509**
- **Basic (password-based)**
Unauthenticated, read-only access is also available for both the web interface and the API. Unauthenticated, read-only access is also available for both the web interface and the API.
Only a limited set of information is available to unauthenticated users. Only a limited set of information is available to unauthenticated users.
...@@ -26,7 +26,7 @@ After a user has successfully authenticated, GraceDB examines the user's ...@@ -26,7 +26,7 @@ After a user has successfully authenticated, GraceDB examines the user's
group memberships to determine whether the user is authorized to access group memberships to determine whether the user is authorized to access
or modify a particular resource. These permissions apply at the level of or modify a particular resource. These permissions apply at the level of
individual events. The relevant permissions are: ``view`` (which allows individual events. The relevant permissions are: ``view`` (which allows
viewing) and ``change`` (which allows annotation). In most cases, LVC viewing) and ``change`` (which allows annotation). In most cases, LVK
users have both permissions on all events. By contrast, LV-EM members users have both permissions on all events. By contrast, LV-EM members
(and, in the future, (and, in the future,
other external users) have permissions only on events that have other external users) have permissions only on events that have
...@@ -41,13 +41,14 @@ Creating new events in a *non-test* group (e.g., CBC or Burst) requires ...@@ -41,13 +41,14 @@ Creating new events in a *non-test* group (e.g., CBC or Burst) requires
a special ``populate`` permission on the relevant pipeline object. These a special ``populate`` permission on the relevant pipeline object. These
permissions are set at the user (rather than group) level and are permissions are set at the user (rather than group) level and are
maintained by hand. Send email to the GraceDB maintainer maintained by hand. Send email to the GraceDB maintainer
or the ``uwm-help`` queue if you need a new Pipeline or pipeline permission. or the `IGWN Computing Helpdesk <mailto:computing-help@ligo.org>`__
if you need a new pipeline or pipeline permission.
Robot certificates Robot certificates
===================== =====================
Access to the REST API through the X509 entry point requires a valid robot Access to the REST API through the X509 entry point requires a valid robot
certificate. (Note: This is only necessary for LVC users. LV-EM users can see certificate. (Note: This is only necessary for LVK users. LV-EM users can see
:ref:`basic_auth_for_lvem` .) Instructions for obtaining a certificate are :ref:`basic_auth_for_lvem` .) Instructions for obtaining a certificate are
available available
`here <https://wiki.ligo.org/AuthProject/LIGOCARobotCertificate>`__. When you `here <https://wiki.ligo.org/AuthProject/LIGOCARobotCertificate>`__. When you
...@@ -75,9 +76,9 @@ Shibbolized client as follows:: ...@@ -75,9 +76,9 @@ Shibbolized client as follows::
try: try:
r = client.ping() r = client.ping()
except HTTPError, e: except HTTPError as e:
print e.message print(e.message)
print "Response code: %d" % r.status print("Response code: %d" % r.status)
print "Response content: %s" % r.json() print("Response content: %s" % r.json())
...@@ -16,6 +16,9 @@ import sys ...@@ -16,6 +16,9 @@ import sys
import os import os
import shlex import shlex
# Import bootstrap theme:
import sphinx_rtd_theme
# If extensions (or modules to document with autodoc) are in another directory, # If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the # add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here. # documentation root, use os.path.abspath to make it absolute, like shown here.
...@@ -30,12 +33,13 @@ import shlex ...@@ -30,12 +33,13 @@ import shlex
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones. # ones.
extensions = [ extensions = [
"sphinx_rtd_theme",
'sphinx.ext.autodoc', 'sphinx.ext.autodoc',
'sphinx.ext.todo', 'sphinx.ext.todo',
] ]
# Add any paths that contain templates here, relative to this directory. # Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates'] #templates_path = ['_templates']
# The suffix(es) of source filenames. # The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string: # You can specify multiple suffix as a list of string:
...@@ -50,17 +54,17 @@ master_doc = 'index' ...@@ -50,17 +54,17 @@ master_doc = 'index'
# General information about the project. # General information about the project.
project = u'GraceDB' project = u'GraceDB'
copyright = u'2015, Brian Moe, Branson Stephens, Patrick Brady' copyright = u'2020, Tanner Prestegard, Alexander Pace, Brian Moe, Branson Stephens, Patrick Brady'
author = u'Brian Moe, Branson Stephens, Patrick Brady' author = u'Tanner Prestegard, Alexander Pace, Brian Moe, Branson Stephens, Patrick Brady'
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = '1.19.dev0' #version = '1.19.dev0'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '1.19.dev0' #release = '1.19.dev0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
...@@ -111,15 +115,20 @@ todo_include_todos = True ...@@ -111,15 +115,20 @@ todo_include_todos = True
# The theme to use for HTML and HTML Help pages. See the documentation for # The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes. # a list of builtin themes.
html_theme = 'alabaster' sys.path.append(os.path.abspath('_themes'))
html_theme_path = ['_themes']
html_theme = 'sphinx_rtd_theme'
#html_translator_class = 'bootstrap.HTMLTranslator'
# Theme options are theme-specific and customize the look and feel of a theme # Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the # further. For a list of options available for each theme, see the
# documentation. # documentation.
#html_theme_options = {} #html_theme_options = {
# 'navbar_site_name': "Documentation Contents",
#}
# Add any paths that contain custom themes here, relative to this directory. # Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = [] html_theme_path = sphinx_rtd_theme.get_html_theme_path()
# The name for this set of Sphinx documents. If None, it defaults to # The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation". # "<project> v<release> documentation".
...@@ -142,6 +151,12 @@ html_theme = 'alabaster' ...@@ -142,6 +151,12 @@ html_theme = 'alabaster'
# so a file named "default.css" will overwrite the builtin "default.css". # so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static'] html_static_path = ['_static']
# These paths are either relative to html_static_path
# or fully qualified paths (eg. https://...)
html_css_files = [
'css/extra.css',
]
# Add any extra paths that contain custom files (such as robots.txt or # Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied # .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation. # directly to the root of the documentation.
......
{ {
"created": "2018-09-19 18:28:46 UTC", "submitter": "albert.einstein@LIGO.ORG",
"extra_attributes": { "created": "2022-03-16 16:24:22 UTC",
"CoincInspiral": { "group": "CBC",
"combined_far": 0.000368007562149924, "graceid": "G194533",
"end_time": 971609248, "pipeline": "gstlal",
"end_time_ns": 151740542, "gpstime": 1331483080.381693,
"false_alarm_rate": 1.0, "instruments": "H1,L1",
"ifos": "H1,L1,V1", "nevents": 2,
"mass": 3.68682909011841, "offline": true,
"mchirp": 0.0, "search": "AllSky",
"minimum_duration": 46.848259458, "far": 9.838364843405464e-07,
"snr": 9.31793628458239 "far_is_upper_limit": false,
}, "likelihood": 7.102756279364618,
"SingleInspiral": [ "labels": [],
{ "extra_attributes": {
"chisq": 0.78878409, "CoincInspiral": {
"chisq_dof": 1, "ifos": "H1,L1",
"coa_phase": 0.97073036, "end_time": 1331483080,
"eff_distance": 173.30727, "end_time_ns": 381693272,
"end_time": 971609248, "mass": 33.25822162628174,
"end_time_ns": 151740542, "mchirp": 8.482876777648926,
"ifo": "H1", "minimum_duration": 10.69916749000549,
"mass1": 2.6161611, "snr": 8.132830463379912,
"mass2": 1.070668, "false_alarm_rate": 1.0,
"sigmasq": 802669.916849115, "combined_far": 9.838364843405464e-07
"snr": 5.169538,
"spin1z": -0.91339749,
"spin2z": 0.02086957
},
{
"chisq": 1.1967639,
"chisq_dof": 1,
"coa_phase": 2.469281,
"eff_distance": 162.4119,
"end_time": 971609248,
"end_time_ns": 153169206,
"ifo": "L1",
"mass1": 2.6161611,
"mass2": 1.070668,
"sigmasq": 802669.916849115,
"snr": 5.5163355,
"spin1z": -0.91339749,
"spin2z": 0.02086957
},
{
"chisq": 0.851273,
"chisq_dof": 1,
"coa_phase": 2.7670317,
"eff_distance": 164.47913,
"end_time": 971609248,
"end_time_ns": 144829104,
"ifo": "V1",
"mass1": 2.6161611,
"mass2": 1.070668,
"sigmasq": 802669.916849115,
"snr": 5.4470043,
"spin1z": -0.91339749,
"spin2z": 0.02086957
}
]
}, },
"far": 0.000368007562149924, "SingleInspiral": [
"far_is_upper_limit": false, {
"gpstime": 971609248.151741, "alpha5": 0.0,
"graceid": "T0132", "Gamma9": 0.0,
"group": "Test", "alpha3": 0.0,
"instruments": "H1,L1,V1", "chi": 0.0,
"labels": [], "Gamma3": 0.0,
"likelihood": 9.91315304082986, "mass2": 3.8596239,
"links": { "psi3": 0.0,
"emobservations": "https://gracedb.ligo.org/api/events/T0132/emobservation/", "bank_chisq_dof": 0,
"files": "https://gracedb.ligo.org/api/events/T0132/files/", "alpha4": 0.0,
"labels": "https://gracedb.ligo.org/api/events/T0132/labels/", "spin1x": 0.0,
"log": "https://gracedb.ligo.org/api/events/T0132/log/", "tau5": 0.0,
"neighbors": "https://gracedb.ligo.org/api/events/T0132/neighbors/", "cont_chisq_dof": 0,
"self": "https://gracedb.ligo.org/api/events/T0132", "tau0": 13.399828,
"tags": "https://gracedb.ligo.org/api/events/T0132/tag/" "spin2z": -0.7718026,
}, "chisq": 0.84257615,
"nevents": 3, "ttotal": 0.0,
"offline": false, "Gamma5": 0.0,
"pipeline": "gstlal", "Gamma2": 0.0,
"search": "LowMass", "Gamma7": 0.0,
"submitter": "albert.einstein@LIGO.ORG", "ifo": "H1",
"superevent": null "tau3": 2.0797865,
"coa_phase": 1.0123366,
"template_duration": 16.54621628092527,
"bank_chisq": 4.4854383,
"event_duration": 0.0,
"sigmasq": 94135947.51864928,
"Gamma4": 0.0,
"Gamma6": 0.0,
"mtotal": 33.258221,
"tau4": 0.0,
"psi0": 0.0,
"impulse_time": 0,
"alpha6": 0.0,
"spin2x": 0.0,
"cont_chisq": 0.0,
"end_time_ns": 296526746,
"mchirp": 8.4828768,
"alpha": 0.0,
"mass1": 29.398598,
"impulse_time_ns": 0,
"spin1y": 0.0,
"Gamma8": 0.0,
"spin2y": 0.0,
"spin1z": -0.023584178,
"channel": "GDS-CALIB_STRAIN_CLEAN",
"end_time": 1269006850,
"eta": 0.10258257,
"kappa": 0.0,
"search": "",
"amplitude": 0.0,
"snr": 4.4854383,
"alpha2": 0.0,
"beta": 0.0,
"rsqveto_duration": 0.0,
"alpha1": 0.0,
"chisq_dof": 1,
"end_time_gmst": 46546.36006766932,
"f_final": 1024.0,
"Gamma0": 8754102.0,
"tau2": 0.0,
"Gamma1": 682.0
},
{
"alpha5": 0.0,
"Gamma9": 0.0,
"alpha3": 0.0,
"chi": 0.0,
"Gamma3": 0.0,
"mass2": 3.8596239,
"psi3": 0.0,
"bank_chisq_dof": 0,
"alpha4": 0.0,
"spin1x": 0.0,
"tau5": 0.0,
"cont_chisq_dof": 0,
"tau0": 13.399828,
"spin2z": -0.7718026,
"chisq": 0.80979407,
"ttotal": 0.0,
"Gamma5": 0.0,
"Gamma2": 0.0,
"Gamma7": 0.0,
"ifo": "L1",
"tau3": 2.0797865,
"coa_phase": -2.6118183,
"template_duration": 16.54621628092527,
"bank_chisq": 6.7840824,
"event_duration": 0.0,
"sigmasq": 147851034.091153,
"Gamma4": 0.0,
"Gamma6": 0.0,
"mtotal": 33.258221,
"tau4": 0.0,
"psi0": 0.0,
"impulse_time": 0,
"alpha6": 0.0,
"spin2x": 0.0,
"cont_chisq": 0.0,
"end_time_ns": 300832569,
"mchirp": 8.4828768,
"alpha": 0.0,
"mass1": 29.398598,
"impulse_time_ns": 0,
"spin1y": 0.0,
"Gamma8": 0.0,
"spin2y": 0.0,
"spin1z": -0.023584178,
"channel": "GDS-CALIB_STRAIN_CLEAN",
"end_time": 1269006850,
"eta": 0.10258257,
"kappa": 0.0,
"search": "",
"amplitude": 0.0,
"snr": 6.7840824,
"alpha2": 0.0,
"beta": 0.0,
"rsqveto_duration": 0.0,
"alpha1": 0.0,
"chisq_dof": 1,
"end_time_gmst": 46546.36006798331,
"f_final": 1024.0,
"Gamma0": 8754102.0,
"tau2": 0.0,
"Gamma1": 682.0
}
]
},
"superevent": null,
"superevent_neighbours": {
"S220316o": {
"... S220316o dict excluded for clarity ..."
},
"links": {
"neighbors": "https://gracedb-test.ligo.org/api/events/G194533/neighbors/",
"log": "https://gracedb-test.ligo.org/api/events/G194533/log/",
"emobservations": "https://gracedb-test.ligo.org/api/events/G194533/emobservation/",
"files": "https://gracedb-test.ligo.org/api/events/G194533/files/",
"labels": "https://gracedb-test.ligo.org/api/events/G194533/labels/",
"self": "https://gracedb-test.ligo.org/api/events/G194533",
"tags": "https://gracedb-test.ligo.org/api/events/G194533/tag/"
}
} }
{ {
"created": "2018-09-19 18:28:37 UTC", "graceid": "G194536",
"gpstime": 1042312876.509,
"pipeline": "CWB",
"labels": [],
"group": "Burst",
"extra_attributes": { "extra_attributes": {
"MultiBurst": { "MultiBurst": {
"amplitude": 5.017162,
"bandwidth": 256.0,
"central_freq": 1392.169556, "central_freq": 1392.169556,
"confidence": null,
"duration": 0.023438,
"false_alarm_rate": null, "false_alarm_rate": null,
"ifos": "H1,L1", "confidence": null,
"ligo_angle": null, "start_time_ns": 500000000,
"start_time": 1042312876,
"ligo_angle_sig": null, "ligo_angle_sig": null,
"ligo_axis_dec": 69.422546, "bandwidth": 256.0,
"single_ifo_times": "1042312876.5073,1042312876.5090",
"snr": 7.298671111921677,
"ligo_angle": null,
"amplitude": 5.017162,
"ligo_axis_ra": 201.224625, "ligo_axis_ra": 201.224625,
"peak_time": null, "duration": 0.023438,
"ligo_axis_dec": 69.422546,
"peak_time_ns": null, "peak_time_ns": null,
"single_ifo_times": "1042312876.5073,1042312876.5090", "peak_time": null,
"snr": 7.28010988928052, "ifos": "H1,L1"
"start_time": 1042312876, }
"start_time_ns": 500000000 },
} "links": {
}, "neighbors": "https://gracedb-test.ligo.org/api/events/G194536/neighbors/",
"files": "https://gracedb-test.ligo.org/api/events/G194536/files/",
"log": "https://gracedb-test.ligo.org/api/events/G194536/log/",
"tags": "https://gracedb-test.ligo.org/api/events/G194536/tag/",
"self": "https://gracedb-test.ligo.org/api/events/G194536",
"labels": "https://gracedb-test.ligo.org/api/events/G194536/labels/",
"emobservations": "https://gracedb-test.ligo.org/api/events/G194536/emobservation/"
},
"created": "2022-03-16 18:18:52 UTC",
"far": 0.00019265, "far": 0.00019265,
"far_is_upper_limit": false,
"gpstime": 1042312876.509,
"graceid": "T0127",
"group": "Test",
"instruments": "H1,L1", "instruments": "H1,L1",
"labels": [], "warnings": [],
"likelihood": 53.0, "search": "AllSky",
"links": {
"emobservations": "https://gracedb.ligo.org/api/events/T0127/emobservation/",
"files": "https://gracedb.ligo.org/api/events/T0127/files/",
"labels": "https://gracedb.ligo.org/api/events/T0127/labels/",
"log": "https://gracedb.ligo.org/api/events/T0127/log/",
"neighbors": "https://gracedb.ligo.org/api/events/T0127/neighbors/",
"self": "https://gracedb.ligo.org/api/events/T0127",
"tags": "https://gracedb.ligo.org/api/events/T0127/tag/"
},
"nevents": null, "nevents": null,
"offline": false, "superevent": null,
"pipeline": "CWB",
"submitter": "albert.einstein@LIGO.ORG", "submitter": "albert.einstein@LIGO.ORG",
"superevent": null "superevent_neighbours": {},
"offline": false,
"likelihood": 53.2706,
"far_is_upper_limit": false
} }
{ {
"graceid": "E8840", "graceid": "E194539",
"gpstime": 1123421619.0, "gpstime": 1238065339.32,
"pipeline": "SNEWS", "pipeline": "Fermi",
"labels": [],
"group": "External", "group": "External",
"extra_attributes": { "extra_attributes": {
"GRB": { "GRB": {
"author_ivorn": "ivo://nasa.gsfc.tan/gcn",
"dec": -67.8274,
"designation": null,
"redshift": null, "redshift": null,
"how_description": "Fermi Satellite, GBM Instrument",
"coord_system": "UTC-FK5-GEO", "coord_system": "UTC-FK5-GEO",
"trigger_id": "1012984", "trigger_id": "123456789",
"error_radius": 8.8374,
"how_reference_url": "http://gcn.gsfc.nasa.gov/fermi.html",
"ra": 345.99,
"ivorn": "fake_ivorn",
"trigger_duration": null, "trigger_duration": null,
"observatory_location_id": "GEOLUN", "author_shortname": "Fermi (via VO-GCN)",
"author_ivorn": "ivo://nasa.gsfc.tan/gcn",
"author_shortname": "SNEWS (via VO-TAN)",
"how_reference_url": "http://gcn.gsfc.nasa.gov/snews.html",
"designation": null,
"how_description": "SNEWS: SuperNova Early Warning System",
"error_radius": 360.0,
"ra": 0.0,
"dec": 0.0,
"T90": null, "T90": null,
"ivorn": "ivo://nasa.gsfc.gcn/SNEWS#Event2018-09-01T14:01:01.00_1000194-580" "observatory_location_id": "GEOLUN"
} }
}, },
"links": { "links": {
"neighbors": "https://gracedb.ligo.org/api/events/E8840/neighbors/", "neighbors": "https://gracedb-test.ligo.org/api/events/E194539/neighbors/",
"files": "https://gracedb.ligo.org/api/events/E8840/files/", "files": "https://gracedb-test.ligo.org/api/events/E194539/files/",
"log": "https://gracedb.ligo.org/api/events/E8840/log/", "log": "https://gracedb-test.ligo.org/api/events/E194539/log/",
"tags": "https://gracedb.ligo.org/api/events/E8840/tag/", "tags": "https://gracedb-test.ligo.org/api/events/E194539/tag/",
"self": "https://gracedb.ligo.org/api/events/E8840", "self": "https://gracedb-test.ligo.org/api/events/E194539",
"labels": "https://gracedb.ligo.org/api/events/E8840/labels/", "labels": "https://gracedb-test.ligo.org/api/events/E194539/labels/",
"emobservations": "https://gracedb.ligo.org/api/events/E8840/emobservation/" "emobservations": "https://gracedb-test.ligo.org/api/events/E194539/emobservation/"
}, },
"created": "2018-09-01 16:00:12 UTC", "created": "2022-03-16 18:25:37 UTC",
"far": null, "far": null,
"instruments": "", "instruments": "",
"labels": [], "warnings": [],
"search": "GRB", "search": null,
"nevents": null, "nevents": null,
"superevent": null, "superevent": null,
"submitter": "albert.einstein@ligo.org", "submitter": "enrico.fermi@LIGO.ORG",
"superevent_neighbours": {},
"offline": false, "offline": false,
"likelihood": null, "likelihood": null,
"far_is_upper_limit": false "far_is_upper_limit": false
......
{
"warnings": [],
"submitter": "wolfgang.pauli@ligo.org",
"created": "2024-03-01 20:18:46 UTC",
"group": "External",
"graceid": "E653136",
"pipeline": "IceCube",
"gpstime": 1384986914.64,
"reporting_latency": 8372630.079705,
"instruments": "",
"nevents": null,
"offline": false,
"search": "HEN",
"far": 4.667681380010147e-09,
"far_is_upper_limit": false,
"likelihood": null,
"labels": [],
"extra_attributes": {
"NeutrinoEvent": {
"ivorn": "ivo://nasa.gsfc.gcn/AMON#ICECUBE_GOLD_Event2023-11-25T22:34:56.64_24_138599_039138591_0",
"coord_system": "UTC-FK5-GEO",
"ra": 176.2601,
"dec": 52.6366,
"error_radius": 0.7792,
"far_ne": 0.1472,
"far_unit": "yr^-1",
"signalness": 0.6312,
"energy": 191.7344,
"src_error_90": 0.7792,
"src_error_50": 0.3035,
"amon_id": 13859939138591,
"run_id": 138599,
"event_id": 39138591,
"stream": 24
}
},
"superevent": null,
"superevent_neighbours": {},
"links": {
"neighbors": "https://gracedb-test.ligo.org/api/events/E653136/neighbors/",
"log": "https://gracedb-test.ligo.org/api/events/E653136/log/",
"emobservations": "https://gracedb-test.ligo.org/api/events/E653136/emobservation/",
"files": "https://gracedb-test.ligo.org/api/events/E653136/files/",
"labels": "https://gracedb-test.ligo.org/api/events/E653136/labels/",
"self": "https://gracedb-test.ligo.org/api/events/E653136",
"tags": "https://gracedb-test.ligo.org/api/events/E653136/tag/"
}
}
{
"submitter": "alan.turing@ligo.org",
"created": "2024-02-20 16:41:20 UTC",
"group": "Burst",
"graceid": "G648217",
"pipeline": "MLy",
"gpstime": 1392456472.379048,
"reporting_latency": 26026.564137,
"instruments": "H1,L1",
"nevents": null,
"offline": false,
"search": "AllSky",
"far": 5.855080848625316e-05,
"far_is_upper_limit": false,
"likelihood": null,
"labels": [],
"extra_attributes": {
"MLyBurst": {
"bandwidth": 64.0,
"central_freq": 309.246308659392,
"central_time": 1392456472.379048,
"duration": 0.1875,
"SNR": 6.015912207824155,
"detection_statistic": null,
"scores": {
"coherency": 0.0799756646156311,
"coincidence": 0.2124568223953247,
"combined": 0.016991375573191192
}
}
},
"superevent": null,
"superevent_neighbours": {},
"links": {
"neighbors": "https://gracedb-test.ligo.org/api/events/G648217/neighbors/",
"log": "https://gracedb-test.ligo.org/api/events/G648217/log/",
"emobservations": "https://gracedb-test.ligo.org/api/events/G648217/emobservation/",
"files": "https://gracedb-test.ligo.org/api/events/G648217/files/",
"labels": "https://gracedb-test.ligo.org/api/events/G648217/labels/",
"self": "https://gracedb-test.ligo.org/api/events/G648217",
"tags": "https://gracedb-test.ligo.org/api/events/G648217/tag/"
}
}
{ {
"created": "2018-09-19 18:29:20 UTC", "graceid": "G194537",
"gpstime": 1216336200.66,
"pipeline": "oLIB",
"labels": [],
"group": "Burst",
"extra_attributes": { "extra_attributes": {
"LalInferenceBurst": { "LalInferenceBurst": {
"bci": 1.111, "omicron_snr_H1": 4.98,
"bsn": 7.19, "omicron_snr_L1": 4.99,
"frequency_mean": 721.23, "hrss_mean": 8.12e-23,
"frequency_median": 718.03, "frequency_median": 718.03,
"hrss_mean": 8.12e-23, "hrss_median": 2.19e-23,
"hrss_median": 2.19e-23, "omicron_snr_network": 6.91,
"omicron_snr_H1": 4.98, "quality_mean": 15.2,
"omicron_snr_L1": 4.99, "bsn": 7.19,
"omicron_snr_V1": null, "frequency_mean": 721.23,
"omicron_snr_network": 6.91, "quality_median": 15.1,
"quality_mean": 15.2, "omicron_snr_V1": null,
"quality_median": 15.1 "bci": 1.111
} }
}, },
"far": 7.22e-06,
"far_is_upper_limit": false,
"gpstime": 1216336200.66,
"graceid": "T0144",
"group": "Test",
"instruments": "H1,L1",
"labels": [],
"likelihood": null,
"links": { "links": {
"emobservations": "https://gracedb.ligo.org/api/events/T0144/emobservation/", "neighbors": "https://gracedb-test.ligo.org/api/events/G194537/neighbors/",
"files": "https://gracedb.ligo.org/api/events/T0144/files/", "files": "https://gracedb-test.ligo.org/api/events/G194537/files/",
"labels": "https://gracedb.ligo.org/api/events/T0144/labels/", "log": "https://gracedb-test.ligo.org/api/events/G194537/log/",
"log": "https://gracedb.ligo.org/api/events/T0144/log/", "tags": "https://gracedb-test.ligo.org/api/events/G194537/tag/",
"neighbors": "https://gracedb.ligo.org/api/events/T0144/neighbors/", "self": "https://gracedb-test.ligo.org/api/events/G194537",
"self": "https://gracedb.ligo.org/api/events/T0144", "labels": "https://gracedb-test.ligo.org/api/events/G194537/labels/",
"tags": "https://gracedb.ligo.org/api/events/T0144/tag/" "emobservations": "https://gracedb-test.ligo.org/api/events/G194537/emobservation/"
}, },
"nevents": 1, "created": "2022-03-16 18:21:37 UTC",
"offline": false, "far": 7.22e-06,
"pipeline": "oLIB", "instruments": "H1,L1",
"submitter": "albert.einstein@LIGO.ORG", "warnings": [],
"superevent": null "search": "AllSky",
"nevents": 1,
"superevent": null,
"submitter": "albert.einstein@LIGO.ORG",
"superevent_neighbours": {},
"offline": false,
"likelihood": null,
"far_is_upper_limit": false
} }
{ {
"category": "Test", "superevent_id": "S220316r",
"created": "2018-09-19 18:28:54 UTC", "gw_id": null,
"em_events": [ "category": "Production",
"E0155" "created": "2022-03-16 18:30:10 UTC",
], "submitter": "albert.einstein@LIGO.ORG",
"far": 0.0000342353, "preferred_event": "G194542",
"gw_events": [ "em_type": null,
"T0133", "t_start": 1331490616.298529,
"T0142" "t_0": 1331490617.298529,
"t_end": 1331490618.89512,
"gw_events": [
"G194543",
"G194542",
"G194541",
"G194540"
],
"em_events": [],
"far": 9.652186314922026e-07,
"time_coinc_far": null,
"space_coinc_far": null,
"labels": [],
"links": {
"events": "https://gracedb-test.ligo.org/api/superevents/S220316r/events/",
"labels": "https://gracedb-test.ligo.org/api/superevents/S220316r/labels/",
"logs": "https://gracedb-test.ligo.org/api/superevents/S220316r/logs/",
"files": "https://gracedb-test.ligo.org/api/superevents/S220316r/files/",
"self": "https://gracedb-test.ligo.org/api/superevents/S220316r/",
"voevents": "https://gracedb-test.ligo.org/api/superevents/S220316r/voevents/",
"emobservations": "https://gracedb-test.ligo.org/api/superevents/S220316r/emobservations/"
},
"preferred_event_data": {
"submitter": "albert.einstein@LIGO.ORG",
"created": "2022-03-16 18:30:00 UTC",
"group": "CBC",
"graceid": "G194542",
"pipeline": "gstlal",
"gpstime": 1331490617.298529,
"instruments": "H1,L1",
"nevents": 2,
"offline": true,
"search": "AllSky",
"far": 9.652186314922026e-07,
"far_is_upper_limit": false,
"likelihood": 7.102756279364618,
"labels": [
"SKYMAP_READY",
"PASTRO_READY"
], ],
"gw_id": null, "extra_attributes": {},
"labels": [], "superevent": "S220316r",
"superevent_neighbours": {
"S220316r": {
"superevent_id": "S220316r",
"gw_events": [
"G194543",
"G194542",
"G194541",
"G194540"
],
"preferred_event": "G194542",
"preferred_event_data": {
"submitter": "albert.einstein@LIGO.ORG",
"created": "2022-03-16 18:30:00 UTC",
"group": "CBC",
"graceid": "G194542",
"pipeline": "gstlal",
"gpstime": 1331490617.298529,
"instruments": "H1,L1",
"nevents": 2,
"offline": true,
"search": "AllSky",
"far": 9.652186314922026e-07,
"far_is_upper_limit": false,
"likelihood": 7.102756279364618,
"labels": [
"SKYMAP_READY",
"PASTRO_READY"
],
"extra_attributes": {}
},
"far": 9.652186314922026e-07,
"t_start": 1331490616.298529,
"t_0": 1331490617.298529,
"t_end": 1331490618.89512
}
},
"links": { "links": {
"emobservations": "https://gracedb.ligo.org/api/superevents/TS170101z/emobservations/", "neighbors": "https://gracedb-test.ligo.org/api/events/G194542/neighbors/",
"events": "https://gracedb.ligo.org/api/superevents/TS170101z/events/", "log": "https://gracedb-test.ligo.org/api/events/G194542/log/",
"files": "https://gracedb.ligo.org/api/superevents/TS170101z/files/", "emobservations": "https://gracedb-test.ligo.org/api/events/G194542/emobservation/",
"labels": "https://gracedb.ligo.org/api/superevents/TS170101z/labels/", "files": "https://gracedb-test.ligo.org/api/events/G194542/files/",
"logs": "https://gracedb.ligo.org/api/superevents/TS170101z/logs/", "labels": "https://gracedb-test.ligo.org/api/events/G194542/labels/",
"self": "https://gracedb.ligo.org/api/superevents/TS170101z/", "self": "https://gracedb-test.ligo.org/api/events/G194542",
"voevents": "https://gracedb.ligo.org/api/superevents/TS170101z/voevents/" "tags": "https://gracedb-test.ligo.org/api/events/G194542/tag/"
}, }
"preferred_event": "T0133", }
"submitter": "albert.einstein@LIGO.ORG",
"superevent_id": "TS170101z",
"t_0": 1167264018.0,
"t_end": 1167264025.0,
"t_start": 1167264014.0
} }
...@@ -8,13 +8,13 @@ GraceDB in context ...@@ -8,13 +8,13 @@ GraceDB in context
GraceDB serves as a communications hub and as a database for storing and displaying GraceDB serves as a communications hub and as a database for storing and displaying
information about candidate gravitational-wave events and related electromagnetic events: information about candidate gravitational-wave events and related electromagnetic events:
.. image:: images/annotations_flow_white.png .. image:: images/data_flow_blue.png
The primary responsibilities of GraceDB are to: The primary responsibilities of GraceDB are to:
- ingest and store information about events - ingest and store information about candidate events
- expose that information to users and followup robots - expose that information to users and followup robots
- send alerts about each new piece of information - send alerts about new information and state changes to users
As such, GraceDB curates content from many sources, but does not itself produce As such, GraceDB curates content from many sources, but does not itself produce
any original scientific content. The service is mainly geared toward low latency any original scientific content. The service is mainly geared toward low latency
...@@ -22,42 +22,40 @@ data analysis ...@@ -22,42 +22,40 @@ data analysis
and electromagnetic followup, but need not be used exclusively for those and electromagnetic followup, but need not be used exclusively for those
purposes. The diagram above depicts a typical sequence of events: purposes. The diagram above depicts a typical sequence of events:
#. An LVC data analysis pipeline detects an interesting candidate #. An LVK data analysis pipeline detects an interesting candidate
gravitational wave (GW) event and submits it to GraceDB. gravitational wave (GW) event and submits it to GraceDB.
#. GraceDB sends an LVAlert message which notifies LVC followup #. GraceDB sends an igwn-alert message which notifies LVK followup
robots of the new event. robots of the new event.
#. The followup robots perform analyses and report results back to #. The followup robots perform analyses and report results back to
GraceDB. These results accumulate on the candidate event's page. GraceDB. These results accumulate on the candidate event's page.
#. Eventually, a designated EM approval robot #. Eventually, a designated `EM approval robot <https://rtd.igwn.org/projects/gwcelery/en/latest/index.html>`__
forwards the event to `GCN/TAN <http://gcn.gsfc.nasa.gov>`__. forwards the event to `GCN/TAN <http://gcn.gsfc.nasa.gov>`__.
#. Astronomers receive a GCN Notice for the new event, perform followup #. Astronomers receive a GCN Notice for the new event, perform followup
observations, and report coordinates via GraceDB. observations, and report coordinates via GraceDB.
Overview of components Overview of components
====================== ======================
GraceDB consists of the server (e.g., `gracedb.ligo.org <https://gracedb.ligo.org>`__)
GraceDB consists of the server (`gracedb.ligo.org <https://gracedb.ligo.org>`__)
and a set of client tools. Two user interfaces are available: the web interface and a set of client tools. Two user interfaces are available: the web interface
for browser access (i.e., the one you are using now), and the for browser access, and the
`REST <https://en.wikipedia.org/wiki/Representational_state_transfer>`__ API. `REST <https://en.wikipedia.org/wiki/Representational_state_transfer>`__ API.
These interfaces represent the information in GraceDB in different ways: These interfaces represent the information in GraceDB in different ways:
the web interface naturally represents information as HTML pages, whereas the web interface represents information as human-readable HTML pages, whereas
the REST interface delivers JSON-serialized data. the REST interface delivers JSON-serialized data.
The client tools (available via ``pip``, SL6 or Debian packages, and source The `ligo-gracedb client package <https://ligo-gracedb.readthedocs.io/>`__ provides a convenient way to interact with the REST API.
build, see :ref:`installing_the_client`) provide a way to interact via the REST API. This package includes a Python client class with methods for all common GraceDB operations.
These tools include a Python client class There is also a ``gracedb`` executable for the command line with much of the same functionality.
with methods for all common GraceDB operations.
There is also a ``gracedb`` executable for the command line with much of
the same functionality.
The GraceDB API conforms to the RESTful principles of "uniform interface" and The GraceDB API conforms to the RESTful principles of "uniform interface" and
"resource-oriented architecture". "resource-oriented architecture".
Where can I go for help? Where can I go for help?
================================== ==================================
This documentation is not as great as it could be, but we are working on it.
This documentation is not as great as it could be, but LIGO/Virgo/KAGRA users can join the `GraceDB channel <https://chat.ligo.org/ligo/channels/gracedb>`__ in the collaboration's Mattermost instance or email the Compsoft mailing list for help.
we are working on it. For help with issues not addressed here, please
send mail to uwm-help@ligo.org.
To report a problem, either `post an issue <https://git.ligo.org/lscsoft/gracedb/issues>`__ or email the
`IGWN Computing Helpdesk <mailto:computing-help@ligo.org>`__.
===================================== =========================================
Integration with LVAlert igwn-alert notifications (LVK users only)
===================================== =========================================
Introduction Introduction
=============================================== ============
igwn-alert is a Kafka-based messaging platform used within the LVK.
This document will describe how GraceDB uses igwn-alert, which topics it manages and publishes to, and the content of igwn-alert messages sent by GraceDB. GraceDB uses `igwn-alert <https://igwn-alert.readthedocs.io/>`__ to send alerts to listeners within the LVK when.
GraceDB uses `LVAlert <https://wiki.ligo.org/Computing/DASWG/LVAlert>`__ to send alerts to listeners within the LVC. Some helpful resources for installing and configuring igwn-alert are:
The content of the LVAlert message is designed to convey actionable information about a state change in GraceDB, whether it involves the creation of a new event, or the updating or labeling of an existing one.
- Main `igwn-alert client <https://igwn-alert.readthedocs.io/>`__
- igwn-alert `user guide <https://igwn-alert.readthedocs.io/en/latest/guide.html>`__
- `Tutorial <https://igwn-alert.readthedocs.io/en/latest/guide.html#responding-to-igwn-alert-messages>`__ on setting up igwn-alert and configuring your listener.
igwn-alert and GraceDB
======================
Generally speaking, GraceDB uses igwn-alert to send "push" notifications about different actions that may be taken on the service.
Users can subscribe to different topics (more below) to receive these notifications, filter their content, and optionally trigger follow-up processes, like data quality checks, parameter estimation, and more.
The content of an igwn-alert message is designed to convey actionable information about a state change in GraceDB, including event creation, annotation, and other actions.
.. NOTE:: .. NOTE::
An LVAlert message is sent out for *any* new event or annotation that arrives in the GraceDB database. An igwn-alert message is sent out for *any* new event or annotation that arrives in the GraceDB database.
This means that message volumes may be very high under certain circumstances, and appropriate filtering is required in order for LVAlert to be useful. This means that message volumes may be very high under certain circumstances, and listeners should be constructed to appropriately filter the messages.
igwn-alert topics managed by GraceDB
====================================
By running the ``igwn-alert`` command-line tool, you will receive messages over all **topics** to which you have a listen permission, analogous to a subscription.
There are two types of topics to which GraceDB broadcasts alerts: event topics and superevent topics.
Instance Groups
---------------
Listening to specific event streams The following topic names are universal across each instance of GraceDB
============================================== (production, playground, test). However, each instance's topics names are
prepended by the instance name (gracedb, gracedb-playground, gracedb-test) and a
".". For example, the ``cbc_gstlal`` topic for GraceDB Playground is listed in
the subscription interface as:
By running ``lvalert_listen``, you will receive messages over all **nodes** to which you are subscribed. ``gracedb-playground.cbc_gstlal``
There are two types of nodes to which GraceDB broadcasts alerts: event nodes and superevent nodes.
Event node names consist of at least two elements:: And can be evoked in the command line tool by specifying the instance with the
optional ``group`` flag as in the following command:
``igwn-alert -g gracedb-playground listen cbc_gstlal``
Event topics
------------
Event topic names consist of at least two elements::
<group_name>_<pipeline_name> <group_name>_<pipeline_name>
In other words, the (lower-cased) names of the Group and Pipeline separated by an underscore. In other words, the (lower-cased) names of the Group and Pipeline separated by an underscore.
For example, the node ``burst_cwb`` would catch all messages relating to events in the Burst group from the cWB pipeline. For example, the topic ``cbc_gstlal`` would catch all messages relating to events in the CBC group from the gstlal pipeline.
One can also specify the search name:: One can also specify the search name::
<group_name>_<pipeline_name>_<search_name> <group_name>_<pipeline_name>_<search_name>
which has the effect of narrowing down the messages to only those related to a specific search. which has the effect of narrowing down the messages to only those related to a specific search.
For example, the node ``burst_cwb_allsky`` will contain messages relating to the AllSky search, but not the MDC search. For example, the topic ``cbc_gstlal_allsky`` will contain messages relating to the AllSky search, but not the MDC search.
Note that GraceDB tries to send a message to all applicable nodes.
Thus, a message sent to the node ``burst_cwb_allsky`` will *also* be sent to the more generic node ``burst_cwb``. It is important to note that GraceDB will send an igwn-alert to all topics which match the parameters of the event in question.
This property allows the user to filter according to search by specifying different LVAlert processing scripts for different nodes. For example, the creation of a Burst-cWB-AllSky event will result in messages being sent to the ``burst_cwb_allsky`` topic, as well as the more generic ``burst_cwb`` topic.
This feature allows the user to filter according to search by specifying different igwn-alert processing scripts for different topics.
There are only three superevent nodes; one for each category of superevent:
Superevent topics
-----------------
There are only three superevent topics; one for each category of superevent:
- ``superevent`` - ``superevent``
- ``test_superevent`` - ``test_superevent``
- ``mdc_superevent`` - ``mdc_superevent``
To see the names of all available nodes, simply execute:: Most users will be interested in the ``superevent`` topic in order to receive igwn-alerts about real GW candidates.
lvalert_admin -a username -i
For more information on how to receive and react to LVAlert messages, see :ref:`responding_to_lvalert`.
LVAlert message contents Contents of igwn-alerts sent by GraceDB
================================================ =======================================
GraceDB sends igwn-alert messages as a JSON-encoded dictionary.
GraceDB sends messages as a JSON-encoded dictionary.
This dictionary contains the following keys: This dictionary contains the following keys:
- ``alert_type``: short string representing the. Examples: ``new``, ``update``, ``label_added``, etc. All alert types are shown in the tables below. - ``alert_type``: short string representing the action which triggered the alert. Examples: ``new``, ``update``, ``label_added``, etc. All alert types are shown in the tables below.
- ``data``: a dictionary representing the relevant object (label, log message, etc.) - ``data``: a dictionary representing the relevant object (label, log message, etc.)
- ``object``: a dictionary representing the corresponding "parent" object - ``object``: a dictionary representing the corresponding "parent" object (i.e., the event or superevent which a log, label, etc. is attached to).
- ``uid``: the unique ID of the relevant event or superevent - ``uid``: the unique ID of the relevant event or superevent
Below, we describe the alert contents in more detail. Below, we describe the alert contents in more detail.
Examples of the various ``data``/``object`` dictionaries are available in :ref:`models`. Examples of the various ``data``/``object`` dictionaries are available in :ref:`models`.
See :ref:`below<example_permissions_list>` for one additional example (list of permissions). See :ref:`below<example_permissions_list>` for one additional example (list of permissions).
Event alerts Event alerts
------------ ------------
For alerts related to events, the following things are always true: For alerts related to events, the following things are always true:
- ``uid`` is always the event's ``graceid`` (example: G123456). - ``uid`` is always the event's ``graceid`` (example: G123456).
- ``object`` is always a dictionary corresponding to the event which is affected by the label, log, VOEvent, etc. - ``object`` is always a dictionary corresponding to the event which is affected by the label, log, VOEvent, etc.
The following table shows the ``alert_type`` and ``data`` for different actions: The following table shows the ``alert_type`` and ``data`` for different actions:
+-------------------------+---------------------------------+---------------------------------------------------------+ +-------------------------+---------------------------------+---------------------------------------------------------+
...@@ -113,7 +144,6 @@ The following table shows the ``alert_type`` and ``data`` for different actions: ...@@ -113,7 +144,6 @@ The following table shows the ``alert_type`` and ``data`` for different actions:
Superevent alerts Superevent alerts
----------------- -----------------
For alerts related to superevents, the following things are always true: For alerts related to superevents, the following things are always true:
- ``uid`` is always the superevent's ``superevent_id`` (example: S800106D). - ``uid`` is always the superevent's ``superevent_id`` (example: S800106D).
...@@ -162,14 +192,5 @@ The following table shows the ``alert_type`` and ``data`` for different actions: ...@@ -162,14 +192,5 @@ The following table shows the ``alert_type`` and ``data`` for different actions:
Example: list of permission dictionaries Example: list of permission dictionaries
---------------------------------------- ----------------------------------------
.. literalinclude:: dicts/permissions.list .. literalinclude:: dicts/permissions.list
:language: JSON :language: JSON
Further reading on LVAlert
=====================================================
Further information on using LVAlert can be found on the
`LVAlert Project Page <https://wiki.ligo.org/Computing/DASWG/LVAlert>`__
and the `LVAlert Howto <https://wiki.ligo.org/Computing/DASWG/LVAlertHowto>`__.
File deleted
docs/user_docs/source/images/annotations_flow_white.png

15.1 KiB

docs/user_docs/source/images/data_flow_blue.png

135 KiB

...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
You can adapt this file completely to your liking, but it should at least You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive. contain the root `toctree` directive.
Welcome to GraceDB's documentation! ===================================
GraceDB Documentation
=================================== ===================================
Contents: Contents:
...@@ -11,14 +12,9 @@ Contents: ...@@ -11,14 +12,9 @@ Contents:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
ref_manual ref_manual
tutorials Documentation for the ligo-gracedb client package <https://ligo-gracedb.readthedocs.io/>
LIGO/Virgo Public Alert Guide <https://emfollow.docs.ligo.org/userguide/>
Report a bug (LVK users) <https://git.ligo.org/computing/gracedb/server/-/issues>
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
This diff is collapsed.