Skip to content
Snippets Groups Projects
Commit 83d78704 authored by Patrick Godwin's avatar Patrick Godwin
Browse files

gstlal_inspiral_bank_splitter: allow --psd-xml to be optional by generating less SVD metadata

parent 299c6a0a
No related branches found
No related tags found
1 merge request!41DAG Workflow Overhaul + OSG DAG support
......@@ -103,14 +103,14 @@ def parse_command_line():
parser.add_option("--f-final", metavar = "float", type="float", help = "f_final to populate table with")
parser.add_option("--instrument", metavar = "ifo", type="string", help = "override the instrument, required")
parser.add_option("-v", "--verbose", action = "store_true", help = "Be verbose.")
parser.add_option("--psd-xml", type = "string", help = "Specify a PSD to use for computing template bandwidth. Required.")
parser.add_option("--psd-xml", type = "string", help = "Specify a PSD to use for computing template bandwidth. Required if --sort-by=bandwidth or needing bandwidth and/or horizon distance metadata.")
parser.add_option("--approximant", type = "string", action = "append", help = "Must specify an approximant given as mchirp_min:mchirp_max:string")
parser.add_option("--f-low", type = "float", metavar = "frequency", help = "Lower frequency cutoff. Required")
parser.add_option("--group-by-chi", type = "int", metavar = "N", default = 1, help = "group templates into N groups of chi - helps with SVD. Default 1")
parser.add_option("--num-banks", metavar = "str", help = "The number of parallel subbanks per SVD bank. can be given as a list like 1,2,3,4 then it will split up the bank into N groups with M banks each. (required)") # FIXME The second half of this help message is incomprehensible
options, filenames = parser.parse_args()
required_options = ("n", "instrument", "sort_by", "approximant", "f_low", "num_banks", "stats_file", "psd_xml")
required_options = ("n", "instrument", "sort_by", "approximant", "f_low", "num_banks", "stats_file")
missing_options = [option for option in required_options if getattr(options, option) is None]
if missing_options:
raise ValueError("missing required option(s) %s" % ", ".join("--%s" % option.replace("_", "-") for option in missing_options))
......@@ -181,8 +181,9 @@ sngl_inspiral_table = lsctables.SnglInspiralTable.get_table(xmldoc)
for count, row in enumerate(sngl_inspiral_table):
# FIXME don't hard code
row.f_final = options.f_final
row.bandwidth = templates.bandwidth(row.mass1, row.mass2, row.spin1z, row.spin2z, f_min = options.f_low, f_max = row.f_final, delta_f = 0.25, psd = psdinterp)
row.horizon = reference_psd.HorizonDistance(options.f_low, row.f_final, 0.25, row.mass1, row.mass2, (0.,0.,row.spin1z), (0.,0.,row.spin2z))(psd)[0]
if options.psd_xml:
row.bandwidth = templates.bandwidth(row.mass1, row.mass2, row.spin1z, row.spin2z, f_min = options.f_low, f_max = row.f_final, delta_f = 0.25, psd = psdinterp)
row.horizon = reference_psd.HorizonDistance(options.f_low, row.f_final, 0.25, row.mass1, row.mass2, (0.,0.,row.spin1z), (0.,0.,row.spin2z))(psd)[0]
# FIXME
#process = ligolw_process.register_to_xmldoc(xmldoc, program = "gstlal_bank_splitter", paramdict = options.__dict__, comment = "Assign template IDs")
......@@ -267,7 +268,8 @@ for n, svd in enumerate(svd_groups, start=svd_bin_start):
for m, split_file in enumerate(svd, start=split_bin_start):
svd_mchirps.extend([r.mchirp for r in metadata[split_file][clipleft:-clipright]])
svd_durs.extend([r.template_duration for r in metadata[split_file][clipleft:-clipright]])
svd_bw.extend([r.bandwidth for r in metadata[split_file][clipleft:-clipright]])
if options.psd_xml:
svd_bw.extend([r.bandwidth for r in metadata[split_file][clipleft:-clipright]])
outfile = datafind.T050017_filename(options.instrument, f"{n:04d}_GSTLAL_SPLIT_BANK_{m:04d}", (0, 0), ".xml.gz", path = options.output_path)
shutil.move(split_file, outfile)
xmldoc = ligolw_utils.load_url(outfile, contenthandler = LIGOLWContentHandler, verbose = options.verbose)
......@@ -283,8 +285,10 @@ for n, svd in enumerate(svd_groups, start=svd_bin_start):
def __init__(self, sngl_inspiral_table = rows):
self.sngl_inspiral_table = sngl_inspiral_table
fb = fakebank()
tid,_,_,_,_ = svd_bank.preferred_horizon_distance_template([fb])
ref_hd = [r.horizon for split_file in svd for r in metadata[split_file][clipleft:-clipright] if r.template_id == tid][0]
if options.psd_xml:
tid,_,_,_,_ = svd_bank.preferred_horizon_distance_template([fb])
ref_hd = [r.horizon for split_file in svd for r in metadata[split_file][clipleft:-clipright] if r.template_id == tid][0]
bin_metadata = {
"mean_mchirp": numpy.mean(svd_mchirps),
"median_mchirp": numpy.median(svd_mchirps),
......@@ -294,10 +298,11 @@ for n, svd in enumerate(svd_groups, start=svd_bin_start):
"median_dur": numpy.median(svd_durs),
"min_dur": numpy.min(svd_durs),
"max_dur": numpy.max(svd_durs),
"min_bw": numpy.min(svd_bw),
"max_bw": numpy.max(svd_bw),
"horizon_factors": dict((r.template_id, r.horizon/ref_hd) for m, split_file in enumerate(svd) for r in metadata[split_file][clipleft:-clipright])
}
if options.psd_xml:
bin_metadata["min_bw"] = numpy.min(svd_bw)
bin_metadata["max_bw"] = numpy.max(svd_bw)
bin_metadata["horizon_factors"] = dict((r.template_id, r.horizon/ref_hd) for m, split_file in enumerate(svd) for r in metadata[split_file][clipleft:-clipright])
if options.bank_name:
bin_metadata["bank_name"] = options.bank_name
......
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