From a8216f1fc1487a79572f62ba1ecab74cbc988477 Mon Sep 17 00:00:00 2001 From: kipp <kipp> Date: Sat, 13 Jun 2009 07:46:58 +0000 Subject: [PATCH] First step in re-organizing template bank layout to allow for multiple banks --- src/utilities/lloid_gui | 87 ++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/src/utilities/lloid_gui b/src/utilities/lloid_gui index cf7bed8dd9..6216b007ea 100755 --- a/src/utilities/lloid_gui +++ b/src/utilities/lloid_gui @@ -43,30 +43,34 @@ import gst # -class Banks(list): - class Bank(object): - def __init__(self, rate, start, end, length, blocksize = None, gate_threshold = 5.0): - self.filt_length = length +class Banks(object): + class BankFragment(object): + def __init__(self, rate, start, end, blocksize = None): self.rate = rate self.start = start self.end = end if blocksize is not None: self.blocksize = blocksize else: + # 1 second self.blocksize = rate - self.gate_threshold = gate_threshold + + def __init__(self, template_bank_filename, bank_fragments, length, gate_threshold): + self.template_bank_filename = template_bank_filename + self.bank_fragments = bank_fragments + self.filter_length = length + self.gate_threshold = gate_threshold def get_rates(self): - return tuple(sorted(set(bank.rate for bank in self), reverse = True)) + return tuple(sorted(set(bank_fragment.rate for bank_fragment in self.bank_fragments), reverse = True)) class Detectors(dict): class DetectorData(object): - def __init__(self, frame_cache, channel, psd, template_bank_file_name, snr_threshold, injection_file = None): + def __init__(self, frame_cache, channel, psd, snr_threshold, injection_file = None): self.frame_cache = frame_cache self.channel = channel self.psd = psd - self.template_bank_file_name = template_bank_file_name self.snr_threshold = snr_threshold self.injection_file = injection_file @@ -173,14 +177,14 @@ def mkqueue(pipeline, src, pad_name = None, **properties): src.link_pads(pad_name, elem, "sink") return elem -def mkbank(pipeline, src, detectordata, bank, control_snk, control_src): +def mkbank(pipeline, src, reference_psd_filename, banks, bank, control_snk, control_src): elem = gst.element_factory_make("lal_templatebank") elem.set_property("t-start", bank.start) elem.set_property("t-end", bank.end) - elem.set_property("t-total-duration", bank.filt_length) + elem.set_property("t-total-duration", banks.filter_length) elem.set_property("snr-length", bank.blocksize) - elem.set_property("template-bank", detectordata.template_bank_file_name) - elem.set_property("reference-psd", detectordata.psd) + elem.set_property("template-bank", banks.template_bank_filename) + elem.set_property("reference-psd", reference_psd_filename) pipeline.add(elem) src.link(elem) @@ -191,7 +195,7 @@ def mkbank(pipeline, src, detectordata, bank, control_snk, control_src): #mknxydumpsink(pipeline, mkqueue(pipeline, orthosnr), "orthosnr_%s.txt" % elem.get_name()) gate = gst.element_factory_make("lal_gate") - gate.set_property("threshold", bank.gate_threshold) + gate.set_property("threshold", banks.gate_threshold) pipeline.add(gate) mkqueue(pipeline, control_src).link_pads("src", gate, "control") mkqueue(pipeline, orthosnr).link(gate) @@ -248,10 +252,10 @@ def mknxydumpsink(pipeline, src, filename): src.link(elem) mkfilesink(pipeline, elem, filename) -def mktriggergen(pipeline, snr, chisq, detectordata): +def mktriggergen(pipeline, snr, chisq, template_bank_filename, snr_threshold): elem = gst.element_factory_make("lal_triggergen") - elem.set_property("bank-filename", detectordata.template_bank_file_name) - elem.set_property("snr-thresh", detectordata.snr_threshold) + elem.set_property("bank-filename", template_bank_filename) + elem.set_property("snr-thresh", snr_threshold) pipeline.add(elem) snr.link_pads("src", elem, "snr") chisq.link(elem) @@ -340,9 +344,17 @@ def mkLLOIDsingle(pipeline, instrument, detectors, banks, trigger_filename = Non chisq.set_property("sync", True) pipeline.add(chisq) - for bank in banks: - head = mkqueue(pipeline, hoft[bank.rate], max_size_time = int(max(bank.filt_length for bank in banks)) * 2 * 1000000000) - bank_snr, bank_chisq = mkbank(pipeline, head, detectors[instrument], bank, control_snk, control_src) + for bank_fragment in banks.bank_fragments: + head = mkqueue(pipeline, hoft[bank_fragment.rate], max_size_time = int(banks.filter_length) * 2 * 1000000000) + bank_snr, bank_chisq = mkbank( + pipeline, + head, + detectors[instrument].psd, + banks, + bank_fragment, + control_snk, + control_src + ) mkqueue(pipeline, mkresample(pipeline, bank_snr, quality = 0)).link(snr) mkqueue(pipeline, mkresample(pipeline, bank_chisq, quality = 0)).link(chisq) @@ -358,7 +370,7 @@ def mkLLOIDsingle(pipeline, instrument, detectors, banks, trigger_filename = Non mknxydumpsink(pipeline, mkqueue(pipeline, chisq), "chisquare_%s.txt" % instrument) if trigger_filename is not None: - head = mktriggergen(pipeline, mkqueue(pipeline, snr), mkqueue(pipeline, chisq), detectors[instrument]) + head = mktriggergen(pipeline, mkqueue(pipeline, snr), mkqueue(pipeline, chisq), banks.template_bank_filename, detectors[instrument].snr_threshold) if progress_report: head = mkprogressreport(pipeline, head, "progress_xml_%s" % instrument) mktriggerxmlwritersink(pipeline, head, trigger_filename) @@ -412,18 +424,6 @@ class LLOIDHandler(object): self.mainloop = mainloop self.pipeline = pipeline - banks = Banks([ - Banks.Bank(2048, 0.0, 1.0, 29.0, gate_threshold = 4.5), - Banks.Bank(512, 1.0, 5.0, 29.0, gate_threshold = 4.5), - Banks.Bank(256, 5.0, 13.0, 29.0, gate_threshold = 4.5), - Banks.Bank(128, 13.0, 29.0, 29.0, gate_threshold = 4.5) - ]) - detectors = Detectors({ - "L1": Detectors.DetectorData("/home/channa/scratch/frames/S5/strain-L2/LLO/L-L1_RDS_C03_L2-8741/L.cache", "LSC-STRAIN", "/home/channa/cvs/lsware/gstlal/examples/reference_psd.txt", "/home/channa/cvs/lsware/gstlal/examples/H1-TMPLTBANK_09_1.207-874000000-2048.xml", snr_threshold = 5.5, injection_file = "/home/channa/cvs/lsware/gstlal/examples/bns_injections.xml") - }, start = 874106000000000000, end = 874120000000000000) - - mkLLOIDsingle(pipeline, "L1", detectors, banks, trigger_filename = "output.xml", do_injections = False, progress_report = True) - bus = pipeline.get_bus() bus.add_signal_watch() bus.connect("message", self.on_message) @@ -445,6 +445,29 @@ gobject.threads_init() pipeline = gst.Pipeline("lloid") mainloop = gobject.MainLoop() + +mkLLOIDsingle( + pipeline, + "L1", + detectors = Detectors({ + "L1": Detectors.DetectorData("/home/channa/scratch/frames/S5/strain-L2/LLO/L-L1_RDS_C03_L2-8741/L.cache", "LSC-STRAIN", "/home/channa/cvs/lsware/gstlal/examples/reference_psd.txt", snr_threshold = 5.5, injection_file = "/home/channa/cvs/lsware/gstlal/examples/bns_injections.xml") + }, start = 874106000000000000, end = 874120000000000000), + banks = Banks( + "/home/channa/cvs/lsware/gstlal/examples/H1-TMPLTBANK_09_1.207-874000000-2048.xml", + [ + Banks.BankFragment(2048, 0.0, 1.0), + Banks.BankFragment(512, 1.0, 5.0), + Banks.BankFragment(256, 5.0, 13.0), + Banks.BankFragment(128, 13.0, 29.0) + ], + length = 29.0, + gate_threshold = 4.5 + ), + trigger_filename = "output.xml", + do_injections = False, + progress_report = True +) + handler = LLOIDHandler(mainloop, pipeline) pipeline.set_state(gst.STATE_PLAYING) -- GitLab