39 gobject.threads_init()
45 from glue
import iterutils
46 from glue
import segments
47 from glue.ligolw
import ligolw
48 from glue.ligolw
import lsctables
49 from glue.ligolw
import utils
as ligolw_utils
50 from glue.ligolw.utils
import segments
as ligolw_segments
51 from glue.ligolw.utils
import process
as ligolw_process
52 from gstlal
import bottle
53 from gstlal
import datasource
54 from gstlal
import multirate_datasource
55 from gstlal
import pipeio
56 from gstlal
import pipeparts
57 from gstlal
import simplehandler
58 from gstlal
import simulation
59 from pylal.datatypes
import LIGOTimeGPS
66 def mkSPIIRmulti(pipeline, detectors, banks, psd, psd_fft_length = 8, ht_gate_threshold = None, veto_segments = None, verbose = False, nxydump_segment = None, chisq_type = 'autochisq', track_psd = False, block_duration = gst.SECOND, blind_injections = None):
71 if chisq_type
not in [
'autochisq']:
72 raise ValueError(
"chisq_type must be either 'autochisq', given %s" % chisq_type)
78 if detectors.injection_filename
is not None:
79 inj_seg_list = simulation.sim_inspiral_to_segment_list(injection_filename)
88 detectors.injection_filename = blind_injections
96 for instrument
in detectors.channel_dict:
97 rates = set(rate
for bank
in banks[instrument]
for rate
in bank.get_rates())
98 src = datasource.mkbasicsrc(pipeline, detectors, instrument, verbose)
99 if veto_segments
is not None:
100 hoftdicts[instrument] = multirate_datasource.mkwhitened_multirate_src(pipeline, src, rates, instrument, psd = psd[instrument], psd_fft_length = psd_fft_length, ht_gate_threshold = ht_gate_threshold, veto_segments = veto_segments[instrument], seekevent = detectors.seekevent, nxydump_segment = nxydump_segment, track_psd = track_psd, zero_pad = 0, width = 32)
102 hoftdicts[instrument] = multirate_datasource.mkwhitened_multirate_src(pipeline, src, rates, instrument, psd = psd[instrument], psd_fft_length = psd_fft_length, ht_gate_threshold = ht_gate_threshold, veto_segments =
None, seekevent = detectors.seekevent, nxydump_segment = nxydump_segment, track_psd = track_psd, zero_pad = 0, width = 32)
108 triggersrcs = dict((instrument, set())
for instrument
in hoftdicts)
109 for instrument, bank
in [(instrument, bank)
for instrument, banklist
in banks.items()
for bank
in banklist]:
110 suffix =
"%s%s" % (instrument, (bank.logname
and "_%s" % bank.logname
or ""))
112 snr = mkSPIIRhoftToSnrSlices(
114 hoftdicts[instrument],
118 nxydump_segment = nxydump_segment,
121 snr = pipeparts.mkchecktimestamps(pipeline, snr,
"timestamps_%s_snr" % suffix)
123 snr = pipeparts.mktogglecomplex(pipeline, snr)
124 snr = pipeparts.mktee(pipeline, snr)
126 if chisq_type ==
'autochisq':
129 head = pipeparts.mkitac(pipeline, snr, max(rates), bank.template_bank_filename, autocorrelation_matrix = bank.autocorrelation_bank, mask_matrix = bank.autocorrelation_mask, snr_thresh = bank.snr_threshold, sigmasq = bank.sigmasq)
131 head = pipeparts.mkprogressreport(pipeline, head,
"progress_xml_%s" % suffix)
132 triggersrcs[instrument].add(head)
134 del bank.autocorrelation_bank
142 assert any(triggersrcs.values())
146 def mkSPIIRhoftToSnrSlices(pipeline, src, bank, instrument, verbose = None, nxydump_segment = None, quality = 4, sample_rates = None, max_rate = None):
147 if sample_rates
is None:
148 sample_rates = sorted(bank.get_rates())
150 sample_rates = sorted(sample_rates)
153 max_rate = max(sample_rates)
156 for sr
in sample_rates:
157 head = pipeparts.mkqueue(pipeline, src[sr], max_size_time=gst.SECOND * 10, max_size_buffers=0, max_size_bytes=0)
158 head = pipeparts.mkreblock(pipeline, head)
159 head = pipeparts.mkiirbank(pipeline, head, a1 = bank.A[sr], b0 = bank.B[sr], delay = bank.D[sr], name =
"gstlaliirbank_%d_%s_%s" % (sr, instrument, bank.logname))
160 head = pipeparts.mkqueue(pipeline, head, max_size_time=gst.SECOND * 10, max_size_buffers=0, max_size_bytes=0)
161 if prehead
is not None:
162 head = pipeparts.mkadder(pipeline, (head, prehead))
164 head = pipeparts.mkresample(pipeline, head, quality = quality)
166 head = pipeparts.mkcapsfilter(pipeline, head,
"audio/x-raw-float, rate=%d" % max_rate)
168 head = pipeparts.mkcapsfilter(pipeline, head,
"audio/x-raw-float, rate=%d" % (2 * sr))