3from optparse
import OptionParser
7from lalinspiral.thinca
import InspiralCoincDef
10from igwn_ligolw
import lsctables
11from igwn_ligolw
import utils
as ligolw_utils
15 parser = OptionParser(
17 parser.add_option(
"-v",
"--verbose", action =
"store_true", help =
"Be verbose.")
19 options, filenames = parser.parse_args()
21 if len(filenames) != 2:
22 raise ValueError(
"exactly two filenames are required")
24 return options, filenames
32 coinc_def_id = lsctables.CoincDefTable.get_table(xmldoc).get_coinc_def_id(search = InspiralCoincDef.search, search_coinc_type = InspiralCoincDef.search_coinc_type, create_new =
False)
34 self.
sngls = dict((row.event_id, row)
for row
in lsctables.SnglInspiralTable.get_table(xmldoc))
35 print(
"document contains %d duplicate sngl_inspiral rows" % (len(lsctables.SnglInspiralTable.get_table(xmldoc)) - len(self.
sngls)))
36 self.
coincs = dict((row.coinc_event_id, row)
for row
in lsctables.CoincTable.get_table(xmldoc)
if row.coinc_def_id == coinc_def_id)
37 self.
offsetvectors = lsctables.TimeSlideTable.get_table(xmldoc).as_dict()
39 coinc_event_ids = frozenset(self.
coincs)
40 coinc_map = [row
for row
in lsctables.CoincMapTable.get_table(xmldoc)
if row.table_name ==
"sngl_inspiral" and row.coinc_event_id
in coinc_event_ids]
41 coinc_map.sort(key =
lambda row: row.coinc_event_id)
42 print(
"document is missing %d sngl_inspiral rows that appear in coincs" % (len(set(row.event_id
for row
in coinc_map) - set(self.
sngls))))
43 print(
"document has %d sngl_inspiral rows that do not appear in coincs" % (len(set(self.
sngls) - set(row.event_id
for row
in coinc_map))))
46 self.
coinc_map[time_slide_id] = dict((frozenset(row.event_id
for row
in rows), coinc_event_id)
for coinc_event_id, rows
in itertools.groupby(coinc_map, key =
lambda row: row.coinc_event_id)
if self.
coincs[coinc_event_id].time_slide_id == time_slide_id)
49 return tuple(self.
sngls[event_id]
for event_id
in event_ids)
53 return min(sngl.end + offsetvector[sngl.ifo]
for sngl
in self.
get_sngls(event_ids))
59 for sngl
in sorted(sngls, key =
lambda row: row.ifo):
60 end_times.append(sngl.end + offsetvector[sngl.ifo])
61 print(
"\tevent ID %d: %s: %s + %g s = %s" % (sngl.event_id, sngl.ifo, sngl.end, offsetvector[sngl.ifo], sngl.end + offsetvector[sngl.ifo]))
62 print(
"\tmax Delta t = %g s" % float(max(end_times) - min(end_times)))
65indexes = [
index(ligolw_utils.load_filename(filename, verbose = options.verbose))
for filename
in filenames]
67if indexes[0].offsetvectors != indexes[1].offsetvectors:
68 raise ValueError(
"documents do not contain identical offset vectors, or their IDs are not equivalent")
71print(
"\ncoincs in document 1 that are not in document 2:")
73for time_slide_id
in indexes[0].offsetvectors:
74 for n, event_ids
in enumerate(sorted(set(indexes[0].coinc_map[time_slide_id]) - set(indexes[1].coinc_map[time_slide_id]), key =
lambda event_ids: indexes[0].min_time(time_slide_id, event_ids)), start = n):
76 indexes[0].print_summary(time_slide_id, event_ids)
78print(
"\ncoincs in document 2 that are not in document 1:")
80for time_slide_id
in indexes[0].offsetvectors:
81 for n, event_ids
in enumerate(sorted(set(indexes[1].coinc_map[time_slide_id]) - set(indexes[0].coinc_map[time_slide_id]), key =
lambda event_ids: indexes[1].min_time(time_slide_id, event_ids)), start = n):
83 indexes[1].print_summary(time_slide_id, event_ids)
def print_summary(self, time_slide_id, event_ids)
def min_time(self, time_slide_id, event_ids)
def __init__(self, xmldoc)
def get_sngls(self, event_ids)