Skip to content
Snippets Groups Projects
Commit 638510a5 authored by ChiWai Chan's avatar ChiWai Chan
Browse files

svd_bank_snr.py: change drop snr data -> select snr data

parent b9d63f8f
No related branches found
No related tags found
No related merge requests found
......@@ -136,8 +136,8 @@ def parse_command_line():
group.add_option("--outdir", metavar = "directory", type = "str", help = "Output directory for SNR(s) (requires).")
group.add_option("--mode", metavar = "method", type = "int", default = 0, help = "The method (0 = LLOID / 1 = FIR) that is used to calculate SNR (default = 0).")
group.add_option("--complex", action = "store_true", help = "Choose whether to output the complex snr or not.")
group.add_option("--drop-first", metavar = "seconds", type = "int", default = 0, help = "Dropping the initital '--drop-first' seconds of SNR data (default = 0).")
group.add_option("--drop-last", metavar = "seconds", type = "int", default = 0, help = "Dropping the last '--drop-last' seconds of SNR data (default = 0).")
group.add_option("--start", metavar = "seconds", type = "int", help = "Start SNR time series at GPS time '--start'.")
group.add_option("--end", metavar = "seconds", type = "int", help = "End SNR time series at GPS time '--end'.")
group.add_option("--output-width", metavar = "bits", type = "int", default = 32, help = "The size of the output data, can only be 32 or 64 bits (default = 32 bits).")
group.add_option("--instrument", metavar = "name", help = "The detector from which the --reference-psd and --frame-cache are loaded (require).")
parser.add_option_group(group)
......@@ -146,6 +146,10 @@ def parse_command_line():
options, args = parser.parse_args()
# Check SNR series output
if options.start >= options.end:
raise ValueError("--start must less than --end.")
# Setting up GW data
gw_data_source_info = datasource.GWDataSourceInfo(options)
if options.instrument not in gw_data_source_info.channel_dict.keys():
......@@ -247,15 +251,14 @@ if options.mode == 0:
verbose = options.verbose
)
for index, snr in enumerate(lloid_snr(COMPLEX = options.complex, row_number = options.row_number, drop_first = options.drop_first, drop_last = options.drop_last)):
for index, snr in enumerate(lloid_snr(COMPLEX = options.complex, row_number = options.row_number, start = options.start, end = options.end)):
snrdict = {options.instrument: [snr]}
svd_bank_snr.write_url(svd_bank_snr.make_xmldoc(snrdict), os.path.join(options.outdir, "%s-SNR_%d-%d-%d.xml.gz" % (options.instrument, index, int(snr.epoch), int(snr.data.length * snr.deltaT))), verbose = options.verbose)
#
# uncomment to save all snrs in one single XML
#
#snrdict = {options.instrument : lloid_snr(COMPLEX = options.complex, row_number = options.row_number, drop_first = options.drop_first, drop_last = options.drop_last)}
#tempsnr =
#svd_bank_snr.write_url(svd_bank_snr.make_xmldoc(snrdict), os.path.join(options.outdir, "%s-SNR-%d-%d.xml.gz" % (options.instrument, int(snrdict.values()[0].epoch), int(snrdict.values()[0].data.length * snrdict.values()[0].deltaT))), verbose = options.verbose)
#svd_bank_snr.write_url(svd_bank_snr.make_xmldoc(snrdict), os.path.join(options.outdir, "%s-SNR-%d-%d.xml.gz" % (options.instrument, int(snrdict.[options.instrument][0].epoch), int(snrdict[options.instrument][0].data.length * snrdict[options.instrument][0].deltaT))), verbose = options.verbose)
elif options.mode == 1:
#FIXME: proper handle for latency
......@@ -272,5 +275,5 @@ elif options.mode == 1:
verbose = options.verbose
)
snrdict = {options.instrument : fir_snr(COMPLEX = options.complex, drop_first = options.drop_first, drop_last = options.drop_last)}
svd_bank_snr.write_url(svd_bank_snr.make_xmldoc(snrdict),os.path.join(options.outdir, "%s-SNR-%d-%d.xml.gz" % (options.instrument, int(snrdict.values()[0].epoch), int(snrdict.values()[0].data.length * snrdict.values()[0].deltaT))), verbose = options.verbose)
snrdict = {options.instrument : fir_snr(COMPLEX = options.complex, start = options.start, end = options.end)}
svd_bank_snr.write_url(svd_bank_snr.make_xmldoc(snrdict),os.path.join(options.outdir, "%s-SNR-%d-%d.xml.gz" % (options.instrument, int(snrdict[options.instrument][0].epoch), int(snrdict[options.instrument][0].data.length * snrdict[options.instrument][0].deltaT))), verbose = options.verbose)
......@@ -119,14 +119,25 @@ class SNR_Pipeline(object):
return tseries
def get_snr_series(self, COMPLEX = False, row_number = None, drop_first = 0, drop_last = 0):
assert drop_first >= 0, "must drop positive number of data"
assert drop_last >= 0, "must drop positive number of data"
bps = drop_first * int(round(1 / self.snr_info["deltaT"]))
bpe = -drop_last * int(round(1 / self.snr_info["deltaT"])) if drop_last != 0 else None
def get_snr_series(self, COMPLEX = False, row_number = None, start = None, end = None):
gps_start = self.snr_info["epoch"].gpsSeconds + self.snr_info["epoch"].gpsNanoSeconds * 10.**-9
gps = gps_start + numpy.arange(len(self.snr_info["data"])) * self.snr_info["deltaT"]
self.snr_info["epoch"] += drop_first
self.snr_info["data"] = self.snr_info["data"][bps:bpe].T
if start >= end:
raise ValueError("Start time must be less than end time.")
if start - gps[0] >= 0 and start - gps[-1] <= 0:
s = abs(gps - start).argmin()
else:
raise ValueError("Invalid choice of start time %f." % start)
if end - gps[0] >= 0 and end - gps[-1] <= 0:
e = abs(gps - end).argmin()
else:
raise ValueError("Invalid choice of end time %f." % end)
self.snr_info["epoch"] = gps[s]
self.snr_info["data"] = self.snr_info["data"][s:e].T
if row_number is None:
temp = []
......@@ -136,7 +147,7 @@ class SNR_Pipeline(object):
return temp
else:
for data in self.snr_info["data"]:
temp.append(numpy.abs(self.make_series(data)))
temp.append(self.make_series(numpy.abs(data)))
return temp
else:
self.snr_info["data"] = self.snr_info["data"][row_number]
......@@ -233,8 +244,8 @@ class LLOID_SNR(SNR_Pipeline):
self.run(gw_data_source_info.seg)
self.snr_info["data"] = numpy.concatenate(numpy.array(self.snr_info["data"]), axis = 0)
def __call__(self, COMPLEX = False, row_number = 0, drop_first = 0, drop_last = 0):
return self.get_snr_series(COMPLEX, row_number, drop_first, drop_last)
def __call__(self, COMPLEX = False, row_number = 0, start = None, end = None):
return self.get_snr_series(COMPLEX, row_number, start, end)
class FIR_SNR(SNR_Pipeline):
def __init__(self, gw_data_source_info, template, instrument, rate, latency, psd = None, psd_fft_length = 32, ht_gate_threshold = float("inf"), veto_segments = None, width = 32, track_psd = False, verbose = False):
......@@ -282,8 +293,8 @@ class FIR_SNR(SNR_Pipeline):
self.snr_info["data"] = numpy.vectorize(complex)(self.snr_info["data"][:,0], self.snr_info["data"][:,1])
self.snr_info["data"].shape = len(self.snr_info["data"]), 1
def __call__(self, COMPLEX = False, row_number = 0 , drop_first = 0, drop_last = 0):
return self.get_snr_series(COMPLEX, row_number, drop_first, drop_last)
def __call__(self, COMPLEX = False, row_number = 0 , start = None, end = None):
return self.get_snr_series(COMPLEX, row_number, start, end)
#=============================================================================================
#
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment