1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import sys
26
27 from lalburst import snglcluster
28
29 from glue.ligolw import table
30 from glue.ligolw import lsctables
31 from glue.ligolw.utils import process as ligolw_process
32 from glue.ligolw.utils import search_summary as ligolw_search_summary
33 from pylal import git_version
34 from pylal import SnglInspiralUtils
35
36 __author__ = "Duncan Brown <dbrown@ligo.caltech.edu>"
37
38
39
40
41
42
43
44
45
46
48 snglinspiraltable = lsctables.SnglInspiralTable.get_table(doc)
49
50 input_times = None
51 output_times = None
52 try:
53 searchsummtable = lsctables.SearchSummaryTable.get_table(doc)
54 input_times = searchsummtable.get_inlist().extent()
55 output_times = searchsummtable.get_outlist().extent()
56 except ValueError:
57 pass
58
59 return input_times, output_times, snglinspiraltable
60
61
62
63
64
65
66
67
68
69
71 process = ligolw_process.append_process(
72 doc, program = "ligolw_sicluster", version = git_version.verbose_msg,
73 cvs_repository = "lscsoft", cvs_entry_time = git_version.date,
74 comment = kwargs["comment"])
75
76 ligolw_process.append_process_params(doc, process,
77 [("--cluster-window", "lstring", kwargs["cluster_window"])])
78 if kwargs["snr_threshold"] > 0:
79 ligolw_process.append_process_params(doc, process,
80 [("--snr-threshold", "lstring", kwargs["snr_threshold"])])
81 if kwargs["sort_descending_snr"]:
82 ligolw_process.append_process_params(doc, process,
83 [("--sort-descending-snr", "lstring", " ")])
84 if kwargs["sort_ascending_snr"]:
85 ligolw_process.append_process_params(doc, process,
86 [("--sort-ascending-snr", "lstring", " ")])
87
88 return process
89
90
91
92
93
94
95
96
97
98
100 """
101 Replace a with a cluster constructed from a and b.
102 """
103 if b.snr >= a.snr:
104 return b
105 else:
106 return a
107
108
109
110
111
112
113
114
115
117
118 inseg, outseg, snglinspiraltable = get_tables(doc)
119
120
121 try:
122 process = append_process(doc, **kwargs)
123 except ValueError:
124 process = None
125
126
127 if kwargs["snr_threshold"] > 0:
128 thresh = float(kwargs["snr_threshold"])
129 if kwargs["verbose"]:
130 print >>sys.stderr, "discarding triggers with snr < %f ..." % \
131 kwargs["snr_threshold"]
132 for i in range(len(snglinspiraltable) - 1, -1, -1):
133 if snglinspiraltable[i].snr <= thresh:
134 del snglinspiraltable[i]
135
136
137 snglcluster.cluster_events(
138 snglinspiraltable,
139 testfunc = lambda a, b: SnglInspiralUtils.CompareSnglInspiral(a, b, twindow = kwargs["cluster_window"]),
140 clusterfunc = SnglInspiralCluster,
141 sortfunc = SnglInspiralUtils.CompareSnglInspiralByEndTime,
142 bailoutfunc = lambda a, b: SnglInspiralUtils.CompareSnglInspiral(a, b, twindow = kwargs["cluster_window"]),
143 verbose = kwargs["verbose"]
144 )
145
146
147 if kwargs["sort_ascending_snr"] or kwargs["sort_descending_snr"]:
148 if kwargs["verbose"]:
149 print >>sys.stderr, "sorting by snr ..."
150 snglinspiraltable.sort(SnglInspiralUtils.CompareSnglInspiralBySnr)
151 if kwargs["sort_descending_snr"]:
152 snglinspiraltable.reverse()
153
154
155 if process and inseg and outseg:
156 ligolw_search_summary.append_search_summary(doc, process, inseg = inseg, outseg = outseg,
157 nevents = len(snglinspiraltable))
158 if process:
159 ligolw_process.set_process_end_time(process)
160
161 return doc
162