def parse_ligo_lw(file_contents, graceid):
"""Parse LIGO_LW XML and extract fields to store in the database."""
fileobj = file_contents
xmldoc = ligolw_utils.load_fileobj(fileobj, contenthandler=LIGOLWContentHandler)
coinc_table_row = lsctables.CoincTable.get_table(xmldoc)[0]
coinc_inspiral_row = lsctables.CoincInspiralTable.get_table(xmldoc)[0]
sngl_inspiral_table = lsctables.SnglInspiralTable.get_table(xmldoc)
extra_event_info = {
k: getattr(coinc_table_row, k) for k in ("instruments", "likelihood")
}
extra_event_info.update(
{
k: getattr(coinc_inspiral_row, k)
for k in ("combined_far", "ifos", "snr", "mchirp", "mass")
}
)
fields = []
for n, row in enumerate(sngl_inspiral_table):
if n == 0:
fields.append((graceid, "mass1", row.mass1))
fields.append((graceid, "mass2", row.mass2))
fields.append((graceid, "spin1z", row.spin1z))
fields.append((graceid, "spin2z", row.spin2z))
fields.append((graceid, "%s snr" % row.ifo, row.snr))
fields.append((graceid, "%s chisq" % row.ifo, row.chisq))
fields.append((graceid, "%s time" % row.ifo, float(row.end)))
return fields, extra_event_info, xmldoc