1
2
3
4 from glue.ligolw import ligolw
5 from glue.ligolw import lsctables
6 from glue.ligolw import table
7 from glue.ligolw import utils
8 from glue.ligolw.utils import process
9 from glue import segmentsUtils
10 from glue import segments, git_version
11 from glue.lal import LIGOTimeGPS
12 import glob
13 import optparse
14 import sys
15
16 -class DefaultContentHandler(ligolw.LIGOLWContentHandler):
18 lsctables.use_in(DefaultContentHandler)
19
21 """ Return a segmentlist of every segment in an XML file with a
22 segments table.
23 """
24
25
26 seg_xml = utils.load_filename(filename, contenthandler=DefaultContentHandler)
27
28
29 seg_table = lsctables.SegmentTable.get_table(seg_xml)
30
31
32 segs = segments.segmentlist()
33 for seg in seg_table:
34 segs.append(segments.segment(seg.start_time, seg.end_time))
35
36 return segs
37
39 """ Return a list(s) of single inspiral triggers that are above the
40 new snr threshold for every combination of file in the file list
41 and application of veto in the veto file list.
42 """
43 trigs = lsctables.New(lsctables.SnglInspiralTable)
44 searched_segs = segments.segmentlist()
45 for fname in fList:
46 xmldoc = utils.load_filename(fname, gz=True, contenthandler=DefaultContentHandler)
47 tbl = lsctables.SnglInspiralTable.get_table(xmldoc)
48 trigs.extend([tbl[i] for i in (tbl.get_new_snr() > new_snr_cut).nonzero()[0]])
49 search_summary = lsctables.SearchSummaryTable.get_table(xmldoc)
50 searched_segs += search_summary.get_outlist()
51
52 if isinstance(veto_file, list):
53
54 lt = []
55 tg = []
56 for vf in veto_file:
57 veto_segs = get_segments_from_xml(vf)
58 segs_after_veto = searched_segs - veto_segs
59 print vf, 'livetime', abs(segs_after_veto)
60 tg.append(trigs.veto(veto_segs))
61 lt.append(abs(segs_after_veto))
62 return tg, lt
63 else:
64 veto_segs = get_segments_from_xml(veto_file)
65 segs_after_veto = searched_segs - veto_segs
66 print veto_file, 'livetime', abs(segs_after_veto)
67 return trigs.veto(veto_segs), abs(segs_after_veto)
68
69
70 if __name__ == "__main__":
71 parser = optparse.OptionParser()
72
73 parser.add_option("-I","--input-glob",action="store",type="string",\
74 default=None,metavar=" INPUT_GLOB",\
75 help="GLOB of input inspiral xml files")
76
77 parser.add_option("-c","--new-snr-cut",action="store",type="float",\
78 default="6.0", help="new snr threshold to retain triggers")
79
80 parser.add_option("--output-file",action="store",type="string",\
81 default=None, help="Name of output file")
82
83 parser.add_option("--veto-file",action="store",type="string",\
84 default=None, help="Name of veto file")
85
86 (opts,args) = parser.parse_args()
87
88 if opts.input_glob:
89 fList = glob.glob(opts.input_glob)
90 else:
91 print >>sys.stderr, "Must specify a GLOB of input files "
92 sys.exit(1)
93
94 if not opts.output_file:
95 print >>sys.stderr, "Must specify an output file"
96 sys.exit(1)
97
98 if not opts.veto_file:
99 print >>sys.stderr, "Must specify a veto file"
100 sys.exit(1)
101
102 trigs, livetime = get_loud_trigs(fList, opts.veto_file, opts.new_snr_cut)
103
104 output_doc=ligolw.Document()
105 output_doc.appendChild(ligolw.LIGO_LW())
106
107 proc_id = process.register_to_xmldoc(output_doc,
108 "get_loud_trigs", opts.__dict__, comment="", ifos=[""],
109 version=git_version.id, cvs_repository=git_version.branch,
110 cvs_entry_time=git_version.date).process_id
111
112 vartable = lsctables.New(lsctables.SearchSummVarsTable)
113 var = lsctables.SearchSummVars()
114 var.process_id = proc_id
115 var.value = livetime
116 var.name = "livetime"
117 var.string = "Single detector trigger collection time in seconds."
118 var.search_summvar_id = vartable.next_id
119 vartable.append(var)
120
121 output_doc.childNodes[0].appendChild(vartable)
122 output_doc.childNodes[0].appendChild(trigs)
123
124 utils.write_filename(output_doc, opts.output_file, gz=opts.output_file.endswith("gz"))
125