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 548 additions and 162 deletions
......@@ -170,12 +170,12 @@ On the new server, as yourself, import the database using the ``gracedb`` user's
Note that files related to the events aren't part of the database and won't exist on the new server unless you copy them over, too (see :ref:`copying_event_data` for more information).
Next, become the ``gracedb`` user, enter the Django manager shell, and delete all Contacts and Triggers so that people don't get phone or email alerts from this instance without signing up for them::
Next, become the ``gracedb`` user, enter the Django manager shell, and delete all Contacts and Notifications so that people don't get phone or email alerts from this instance without signing up for them::
from userprofile.models import Contact, Trigger
for c in Contacts.objects.iterator():
from alerts.models import Contact, Notification
for c in Contact.objects.iterator():
c.delete()
for t in Trigger.objects.iterator():
for t in Notification.objects.iterator():
t.delete()
You might want to delete the Events, too, especially if you copy the production database.
......
......@@ -81,7 +81,7 @@ Most of the relevant code is in ``gracedb/events/alerts.py``, including the foll
- ``issueAlertForLabel``
- ``issueEmailAlert``
There is also some relevant code in ``gracedb/userprofile/models.py``, which defines a ``PhoneNumberField`` for the ``Contact`` model and validates the phone number when a user signs up for this service.
There is also some relevant code in ``gracedb/alerts/fields.py``, which defines a ``PhoneNumberField`` for the ``Contact`` model and validates the phone number when a user signs up for this service.
The TwiML bin SIDs are used in ``make_twilio_calls`` to generate the URLs and make the POST request.
These SIDs, along with the Account SID and Auth Token should **NOT** be saved in the git repository.
......
......@@ -114,7 +114,7 @@ example, here is how to grant ``view`` permissions to ``public``::
group_name = 'public'
perm_shortname = 'view'
url = g.service_url + urllib.quote('events/%s/%s/%s' % (graceid, group_name, perm_codename))
url = g.service_url + urllib.parse.quote('events/%s/%s/%s' % (graceid, group_name, perm_codename))
r = g.put(url)
Templates
......
......@@ -103,13 +103,14 @@ Edit the migration to do what you want it to do. You could use this as a templat
]
def create_robots(apps, schema_editor):
LocalUser = apps.get_model('ligoauth', 'LocalUser')
User = apps.get_model('auth', 'User')
X509Cert = apps.get_model('ligoauth', 'X509Cert')
Group = apps.get_model('auth', 'Group')
lvc_group = Group.objects.get(name=settings.LVC_GROUP)
AuthGroup = apps.get_model('ligoauth', 'AuthGroup')
lvc_group = AuthGroup.objects.get(name=settings.LVC_GROUP)
robot_group = AuthGroup.objects.get(name='robot_accounts')
for entry in ROBOTS:
user, created = LocalUser.objects.get_or_create(username=entry['username'])
user, created = User.objects.get_or_create(username=entry['username'])
if created:
user.first_name = entry['first_name']
user.last_name = entry['last_name']
......@@ -121,10 +122,8 @@ Edit the migration to do what you want it to do. You could use this as a templat
# Create the cert objects and link them to our user.
for dn in entry['dns']:
cert, created = X509Cert.objects.get_or_create(subject=dn)
if created:
cert.save()
cert.users.add(user)
cert, created = X509Cert.objects.get_or_create(subject=dn,
user=user)
# Add our user to the LVC group. This permission is required to
# do most things, but may *NOT* always be appropriate. It may
......@@ -132,14 +131,17 @@ Edit the migration to do what you want it to do. You could use this as a templat
# a particular pipeline.
lvc_group.user_set.add(user)
# Add user to robot accounts
robot_group.user_set.add(user)
def delete_robots(apps, schema_editor):
LocalUser = apps.get_model('ligoauth', 'LocalUser')
User = apps.get_model('auth', 'User')
X509Cert = apps.get_model('ligoauth', 'X509Cert')
for entry in ROBOTS:
for dn in entry['dns']:
X509Cert.objects.get(subject=dn).delete()
LocalUser.objects.get(username=entry['username']).delete()
User.objects.get(username=entry['username']).delete()
class Migration(migrations.Migration):
......
......@@ -181,6 +181,6 @@ See :ref:`sql_tips` for how to do this.
A few things that you may want to do after copying the database, but before beginning your debugging:
* Turn off phone alerts! Obviously the Contact and Trigger instances are part of the database you just copied and will trigger and annoy people if you submit events for testing. The easiest solution is probably to just delete all of the Contact and/or Trigger objects (in the copied database) through the Django shell.
* Turn off phone alerts! Obviously the Contact and Notification instances are part of the database you just copied and will trigger and annoy people if you submit events for testing. The easiest solution is probably to just delete all of the Contact and/or Notification objects (in the copied database) through the Django shell.
* You may want to turn off XMPP alerts just to be safe.
......@@ -62,7 +62,7 @@ in real life (from inside the Django shell)::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> 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
make this easier::
......@@ -72,7 +72,7 @@ make this easier::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> 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
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
>>> perms = Permission.objects.filter(codename__startswith='view')
>>> for p in perms:
...: print p.codename
...: print(p.codename)
...:
view_coincinspiralevent
view_event
......@@ -314,7 +314,7 @@ can be done by adding the permission by hand::
>>> u = User.objects.get(username='albert.einstein@LIGO.ORG')
>>> u.user_permissions.add(p):
...: print "Albert can add events!"
...: print("Albert can add events!")
Granting permission to populate a pipeline
------------------------------------------
......
.highlight .err {
border: inherit;
box-sizing: inherit;
}
......@@ -65,9 +65,9 @@ h1.docnav {
/* text-shadow: 2px 2px 2px #555; */
}
#nav #nav-login
{
#nav #nav-login, #nav #nav-logout {
float: right;
border-left: 1px solid black;
}
#nav li {
......@@ -102,16 +102,17 @@ h1.docnav {
}
#home #nav-home a,
#create #nav-create a,
#public #nav-public a,
#search #nav-search a,
#pipelines #nav-pipelines a,
#alerts #nav-alerts a,
#password #nav-password a,
#doc #nav-doc a,
#reports #nav-reports a,
#feeds #nav-feeds a,
#other #nav-other a,
#about #nav-about a,
#archive #nav-archive a,
#lab #nav-lab a,
#reviews #nav-reviews a,
#userprofile #nav-userprofile a,
#latest #nav-latest a,
#contact #nav-contact a {
background: #a9b0ba; /* Nav selected color */
......@@ -119,16 +120,17 @@ h1.docnav {
/* text-shadow:none; */
}
#home #nav-home a:hover,
#create #nav-create a,
#public #nav-public a,
#search #nav-search a,
#pipelines #nav-pipelines a,
#alerts #nav-alerts a,
#password #nav-password a,
#doc #nav-doc a,
#reports #nav-reports a,
#feeds #nav-feeds a,
#other #nav-other a,
#about #nav-about a:hover,
#archive #nav-archive a:hover,
#lab #nav-lab a:hover,
#reviews #nav-reviews a:hover,
#userprofile #nav-userprofile a:hover,
#latest #nav-latest a:hover,
#contact #nav-contact a:hover {
/* 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.")
}
);
// All the rest of this is to get the silly subclass information table in place.
{% if pagename == 'models' %}
var tableNode = dom.byId("subclasses_table");
var SubclassInfo = new Object();
// You know, there is probably a better way of getting at this information.
SubclassInfo['CoincInspiralEvent'] = ["ifos","end_time","end_time_ns","mass","mchirp","minimum_duration","snr","false_alarm_rate","combined_far"];
SubclassInfo['MultiBurstEvent'] = ["ifos","start_time","start_time_ns","duration","peak_time","peak_time_ns","central_freq","bandwidth","amplitude","snr","confidence","false_alarm_rate","ligo_axis_ra","ligo_axis_dec","ligo_angle","ligo_angle_sig"];
SubclassInfo['SimInspiralEvent'] = ["mass1","mass2","eta","amp_order","coa_phase","mchirp","spin1x","spin1y","spin1z","spin2x","spin2y","spin2z","geocent_end_time","geocent_end_time_ns","end_time_gmst","f_lower","f_final","distance","latitude","longitude","polarization","inclination","theta0","phi0","waveform","numrel_mode_min","numrel_mode_max","numrel_data","source","taper","bandpass","alpha","beta","psi0","psi3","alpha1","alpha2","alpha3","alpha4","alpha5","alpha6","g_end_time","g_end_time_ns","h_end_time","h_end_time_ns","l_end_time","l_end_time_ns","t_end_time","t_end_time_ns","v_end_time","v_end_time_ns","eff_dist_g","eff_dist_h","eff_dist_l","eff_dist_t","eff_dist_v","source_channel","destination_channel"];
SubclassInfo['GrbEvent'] = ["ivorn","author_ivorn","author_shortname","observatory_location_id","coord_system","ra","dec","error_radius","how_description","how_reference_url","trigger_duration","t90","designation","redshift","trigger_id"]
SubclassInfo['LalInferenceBurstEvent'] = ["bci","quality_mean","quality_median","bsn","omicron_snr_network","omicron_snr_H1","omicron_snr_L1","omicron_snr_V1","hrss_mean","hrss_median","frequency_mean","frequency_mean"]
var mainTable = put(tableNode, 'table.subclasses_main');
headerRow = put(mainTable, 'tr');
for (var key in SubclassInfo) {
put(headerRow, 'th', key);
}
contentsRow = put(mainTable, 'tr');
for (var key in SubclassInfo) {
var subTable = put(contentsRow, 'td.subclasses_row table');
for (var ind in SubclassInfo[key]) {
put(subTable, 'tr', SubclassInfo[key][ind]);
}
}
{% endif %}
});
</script>
{% endblock %}
{% block header %}
<div id="gracedb-nav-header"></div>
{% endblock %}
......@@ -7,21 +7,17 @@ Authentication and Authorization
Authentication methods
========================================
GraceDB supports three different types of authentication methods depending
on the entry point:
GraceDB supports three different types of authentication methods depending on the entry point:
- **Web Interface**: ``gracedb.ligo.org/`` supports Shibboleth with
- **Web interface**: ``gracedb.ligo.org/`` supports Shibboleth with
federated identities.
- **REST API**: The API has three entry points:
- **X509**: ``gracedb.ligo.org/api/``
- **Shibboleth**: ``gracedb.ligo.org/apiweb/``
- **Basic**: ``gracedb.ligo.org/apibasic/``
- **REST API**: The API has a single entry point which can handle the following types of authentication:
- **Shibboleth**
- **Scitokens**
- **X509**
The X509 URL listed above is the default for the Python client. But users
with robot Kerberos keytabs will want to point to the Shibboleth URL.
(The same URL can also be accessed with a web browser to browse the API.)
Similarly, LV-EM users accessing the API will want to point to the URL
for basic auth.
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.
GraceDB permissions
=========================================
......@@ -30,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
or modify a particular resource. These permissions apply at the level of
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
(and, in the future,
other external users) have permissions only on events that have
......@@ -45,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
permissions are set at the user (rather than group) level and are
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
=====================
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
available
`here <https://wiki.ligo.org/AuthProject/LIGOCARobotCertificate>`__. When you
......@@ -72,17 +69,16 @@ Shibbolized client as follows::
from ligo.gracedb.rest import GraceDb, HTTPError
SERVICE = "https://gracedb.ligo.org/apiweb/"
SERVICE = "https://gracedb.ligo.org/api/"
SHIB_SESSION_ENDPOINT = "https://gracedb.ligo.org/Shibboleth.sso/Session"
client = GraceDb(SERVICE, SHIB_SESSION_ENDPOINT)
client.initialize()
try:
r = client.ping()
except HTTPError, e:
print e.message
except HTTPError as e:
print(e.message)
print "Response code: %d" % r.status
print "Response content: %s" % r.json()
print("Response code: %d" % r.status)
print("Response content: %s" % r.json())
......@@ -16,6 +16,9 @@ import sys
import os
import shlex
# Import bootstrap theme:
import sphinx_rtd_theme
# 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
# documentation root, use os.path.abspath to make it absolute, like shown here.
......@@ -30,12 +33,13 @@ import shlex
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
"sphinx_rtd_theme",
'sphinx.ext.autodoc',
'sphinx.ext.todo',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
#templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
......@@ -50,17 +54,17 @@ master_doc = 'index'
# General information about the project.
project = u'GraceDB'
copyright = u'2015, Brian Moe, Branson Stephens, Patrick Brady'
author = u'Brian Moe, Branson Stephens, Patrick Brady'
copyright = u'2020, Tanner Prestegard, Alexander Pace, 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
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '1.19.dev0'
#version = '1.19.dev0'
# 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
# for a list of supported languages.
......@@ -111,15 +115,20 @@ todo_include_todos = True
# The theme to use for HTML and HTML Help pages. See the documentation for
# 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
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
#html_theme_options = {
# 'navbar_site_name': "Documentation Contents",
#}
# 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
# "<project> v<release> documentation".
......@@ -142,6 +151,12 @@ html_theme = 'alabaster'
# so a file named "default.css" will overwrite the builtin "default.css".
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
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
......
{
"N": 1,
"comment": "message",
"created": "2018-09-19 18:28:57 UTC",
"dec": 6.5,
"decWidth": 3.6999999999999993,
"footprint_count": 4,
"footprints": [
{
"N": 4,
"dec": 8.0,
"decWidth": 0.7,
"exposure_time": 1,
"ra": 4.0,
"raWidth": 0.5,
"start_time": "2018-09-19 13:29:00 UTC"
},
{
"N": 3,
"dec": 7.0,
"decWidth": 0.7,
"exposure_time": 1,
"ra": 3.0,
"raWidth": 0.5,
"start_time": "2018-09-19 13:28:59 UTC"
},
{
"N": 2,
"dec": 6.0,
"decWidth": 0.7,
"exposure_time": 1,
"ra": 2.0,
"raWidth": 0.5,
"start_time": "2018-09-19 13:28:58 UTC"
},
{
"N": 1,
"dec": 5.0,
"decWidth": 0.7,
"exposure_time": 1,
"ra": 1.0,
"raWidth": 0.5,
"start_time": "2018-09-19 13:28:57 UTC"
}
],
"group": "ARI LJMU",
"ra": 2.5,
"raWidth": 3.5,
"submitter": "albert.einstein@LIGO.ORG"
}
{
"submitter": "albert.einstein@LIGO.ORG",
"created": "2022-03-16 16:24:22 UTC",
"group": "CBC",
"graceid": "G194533",
"pipeline": "gstlal",
"gpstime": 1331483080.381693,
"instruments": "H1,L1",
"nevents": 2,
"offline": true,
"search": "AllSky",
"far": 9.838364843405464e-07,
"far_is_upper_limit": false,
"likelihood": 7.102756279364618,
"labels": [],
"extra_attributes": {
"CoincInspiral": {
"ifos": "H1,L1",
"end_time": 1331483080,
"end_time_ns": 381693272,
"mass": 33.25822162628174,
"mchirp": 8.482876777648926,
"minimum_duration": 10.69916749000549,
"snr": 8.132830463379912,
"false_alarm_rate": 1.0,
"combined_far": 9.838364843405464e-07
},
"SingleInspiral": [
{
"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.84257615,
"ttotal": 0.0,
"Gamma5": 0.0,
"Gamma2": 0.0,
"Gamma7": 0.0,
"ifo": "H1",
"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/"
}
}
{
"graceid": "G194536",
"gpstime": 1042312876.509,
"pipeline": "CWB",
"labels": [],
"group": "Burst",
"extra_attributes": {
"MultiBurst": {
"central_freq": 1392.169556,
"false_alarm_rate": null,
"confidence": null,
"start_time_ns": 500000000,
"start_time": 1042312876,
"ligo_angle_sig": null,
"bandwidth": 256.0,
"single_ifo_times": "1042312876.5073,1042312876.5090",
"snr": 7.298671111921677,
"ligo_angle": null,
"amplitude": 5.017162,
"ligo_axis_ra": 201.224625,
"duration": 0.023438,
"ligo_axis_dec": 69.422546,
"peak_time_ns": null,
"peak_time": null,
"ifos": "H1,L1"
}
},
"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,
"instruments": "H1,L1",
"warnings": [],
"search": "AllSky",
"nevents": null,
"superevent": null,
"submitter": "albert.einstein@LIGO.ORG",
"superevent_neighbours": {},
"offline": false,
"likelihood": 53.2706,
"far_is_upper_limit": false
}
{
"graceid": "E194539",
"gpstime": 1238065339.32,
"pipeline": "Fermi",
"labels": [],
"group": "External",
"extra_attributes": {
"GRB": {
"author_ivorn": "ivo://nasa.gsfc.tan/gcn",
"dec": -67.8274,
"designation": null,
"redshift": null,
"how_description": "Fermi Satellite, GBM Instrument",
"coord_system": "UTC-FK5-GEO",
"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,
"author_shortname": "Fermi (via VO-GCN)",
"T90": null,
"observatory_location_id": "GEOLUN"
}
},
"links": {
"neighbors": "https://gracedb-test.ligo.org/api/events/E194539/neighbors/",
"files": "https://gracedb-test.ligo.org/api/events/E194539/files/",
"log": "https://gracedb-test.ligo.org/api/events/E194539/log/",
"tags": "https://gracedb-test.ligo.org/api/events/E194539/tag/",
"self": "https://gracedb-test.ligo.org/api/events/E194539",
"labels": "https://gracedb-test.ligo.org/api/events/E194539/labels/",
"emobservations": "https://gracedb-test.ligo.org/api/events/E194539/emobservation/"
},
"created": "2022-03-16 18:25:37 UTC",
"far": null,
"instruments": "",
"warnings": [],
"search": null,
"nevents": null,
"superevent": null,
"submitter": "enrico.fermi@LIGO.ORG",
"superevent_neighbours": {},
"offline": false,
"likelihood": null,
"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/"
}
}
{
"graceid": "G194537",
"gpstime": 1216336200.66,
"pipeline": "oLIB",
"labels": [],
"group": "Burst",
"extra_attributes": {
"LalInferenceBurst": {
"omicron_snr_H1": 4.98,
"omicron_snr_L1": 4.99,
"hrss_mean": 8.12e-23,
"frequency_median": 718.03,
"hrss_median": 2.19e-23,
"omicron_snr_network": 6.91,
"quality_mean": 15.2,
"bsn": 7.19,
"frequency_mean": 721.23,
"quality_median": 15.1,
"omicron_snr_V1": null,
"bci": 1.111
}
},
"links": {
"neighbors": "https://gracedb-test.ligo.org/api/events/G194537/neighbors/",
"files": "https://gracedb-test.ligo.org/api/events/G194537/files/",
"log": "https://gracedb-test.ligo.org/api/events/G194537/log/",
"tags": "https://gracedb-test.ligo.org/api/events/G194537/tag/",
"self": "https://gracedb-test.ligo.org/api/events/G194537",
"labels": "https://gracedb-test.ligo.org/api/events/G194537/labels/",
"emobservations": "https://gracedb-test.ligo.org/api/events/G194537/emobservation/"
},
"created": "2022-03-16 18:21:37 UTC",
"far": 7.22e-06,
"instruments": "H1,L1",
"warnings": [],
"search": "AllSky",
"nevents": 1,
"superevent": null,
"submitter": "albert.einstein@LIGO.ORG",
"superevent_neighbours": {},
"offline": false,
"likelihood": null,
"far_is_upper_limit": false
}
{
"created": "2018-09-19 18:29:24 UTC",
"creator": "albert.einstein@LIGO.ORG",
"name": "DQV",
"self": "https://gracedb.ligo.org/api/events/T0140/labels/DQV"
}
{
"N": 1,
"comment": "Initial data upload",
"created": "2018-09-19 18:29:01 UTC",
"file": "https://gracedb.ligo.org/api/events/T0140/files/upload.data.gz,0",
"file_version": 0,
"filename": "upload_data.gz",
"issuer": "albert.einstein@LIGO.ORG",
"self": "https://gracedb.ligo.org/api/events/T0140/logs/1/",
"tag_names": ["em_follow", "sky_loc"]
}