From 727a03f4ef02d5ff7c9d912df717f2bc28dc7469 Mon Sep 17 00:00:00 2001 From: Wanting Niu <wanting.niu@ligo.org> Date: Thu, 8 Dec 2022 05:42:47 +0000 Subject: [PATCH 1/5] svd_bank.py: document the template_duration in svd_bank to match the actual time of waveform and fix the calculation of spin1 & spin2 --- gstlal-inspiral/python/svd_bank.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/gstlal-inspiral/python/svd_bank.py b/gstlal-inspiral/python/svd_bank.py index d968def644..08a9857f48 100644 --- a/gstlal-inspiral/python/svd_bank.py +++ b/gstlal-inspiral/python/svd_bank.py @@ -292,24 +292,15 @@ def cal_higher_f_low(template_bank_url, bank_xmldoc, flow, max_duration): for row in bank_sngl_table: m1_SI = lal.MSUN_SI * row.mass1 m2_SI = lal.MSUN_SI * row.mass2 - spin1 = (row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5 - spin2 = (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5 - f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max((row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco')) + spin1 = numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5 + spin2 = numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5 + f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max(spin1, spin2))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco')) time_constrained_f_low.append(scipy.optimize.fsolve(time_freq_bound, x0 = flow, args = (max_duration, m1_SI, m2_SI, spin1, spin2, f_max))) f_low = float(max(flow, max(time_constrained_f_low))) if f_high is not None and f_high < f_low: raise ValueError("Lower frequency must be lower than higher frequency cut off! Input max_duration is too short.") - for row in bank_sngl_table: - row.template_duration = chirptime.imr_time(f_low, - lal.MSUN_SI * row.mass1, - lal.MSUN_SI * row.mass2, - (row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, - (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5, - f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max((row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco'))) - # save the overwrite - ligolw_utils.write_filename(bank_xmldoc, template_bank_url) return f_low def build_bank(template_bank_url, psd, flow, max_duration, ortho_gate_fap, snr_threshold, svd_tolerance, clipleft = None, clipright = None, padding = 1.5, identity_transform = False, bank_type = "signal_model", verbose = False, autocorrelation_length = 201, samples_min = 1024, samples_max_256 = 1024, samples_max_64 = 2048, samples_max = 4096, bank_id = None, contenthandler = None, sample_rate = None, instrument_override = None): @@ -413,9 +404,10 @@ def write_bank(filename, banks, psd_input, process_param_dict = None, verbose = # set up root for this sub bank root = lw.appendChild(ligolw.LIGO_LW(Attributes({u"Name": u"gstlal_svd_bank_Bank"}))) - # make non-signal model templates have an invalid template id - if bank.bank_type != "signal_model": - for row in bank.sngl_inspiral_table: + for row in bank.sngl_inspiral_table: + row.template_duration = [frag.end for frag in bank.bank_fragments][-1] + # make non-signal model templates have an invalid template id + if bank.bank_type != "signal_model": row.template_id = -row.template_id if verbose: print("computing lambda/eta parameters for templates...") -- GitLab From c29102cd34ee28090040c1ba41d836aff33e58b1 Mon Sep 17 00:00:00 2001 From: Wanting Niu <wanting.niu@ligo.org> Date: Thu, 8 Dec 2022 05:44:36 +0000 Subject: [PATCH 2/5] gstlal_inspiral_bank_splitter: fix the calculation of spin1 and spin2 using numpy.dot --- gstlal-inspiral/bin/gstlal_inspiral_bank_splitter | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter b/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter index 58c11fbbc8..7c9bdad854 100755 --- a/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter +++ b/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter @@ -276,9 +276,9 @@ for outputrows in banks_subbins: row.template_duration = chirptime.imr_time(options.f_low, lal.MSUN_SI * row.mass1, lal.MSUN_SI * row.mass2, - (row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, - (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5, - f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max((row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, (row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco'))) + numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, + numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5, + f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max(numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco'))) # template_duration may be overwritten by svd_bank if the flow is increased in order to satisfy the target maximum duration outputrows[ind] = (approximant, rows) num_banks += len(outputrows) -- GitLab From d9bced776c8e0a209af9a6a25eedf6aeef4594a7 Mon Sep 17 00:00:00 2001 From: Wanting Niu <wanting.niu@ligo.org> Date: Fri, 9 Dec 2022 04:16:27 +0000 Subject: [PATCH 3/5] better coding --- gstlal-inspiral/python/svd_bank.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gstlal-inspiral/python/svd_bank.py b/gstlal-inspiral/python/svd_bank.py index 08a9857f48..cbb34fb109 100644 --- a/gstlal-inspiral/python/svd_bank.py +++ b/gstlal-inspiral/python/svd_bank.py @@ -405,7 +405,7 @@ def write_bank(filename, banks, psd_input, process_param_dict = None, verbose = root = lw.appendChild(ligolw.LIGO_LW(Attributes({u"Name": u"gstlal_svd_bank_Bank"}))) for row in bank.sngl_inspiral_table: - row.template_duration = [frag.end for frag in bank.bank_fragments][-1] + row.template_duration = bank.bank_fragments[-1].end # make non-signal model templates have an invalid template id if bank.bank_type != "signal_model": row.template_id = -row.template_id -- GitLab From 966ad8ca3199346620800bc74334853e54eadfa4 Mon Sep 17 00:00:00 2001 From: Wanting Niu <wanting.niu@ligo.org> Date: Fri, 9 Dec 2022 04:17:46 +0000 Subject: [PATCH 4/5] directly read spin1 and spin2 from sngl_inspiral_table --- gstlal-inspiral/python/svd_bank.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gstlal-inspiral/python/svd_bank.py b/gstlal-inspiral/python/svd_bank.py index cbb34fb109..2e970d362b 100644 --- a/gstlal-inspiral/python/svd_bank.py +++ b/gstlal-inspiral/python/svd_bank.py @@ -292,8 +292,8 @@ def cal_higher_f_low(template_bank_url, bank_xmldoc, flow, max_duration): for row in bank_sngl_table: m1_SI = lal.MSUN_SI * row.mass1 m2_SI = lal.MSUN_SI * row.mass2 - spin1 = numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5 - spin2 = numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5 + spin1 = numpy.dot(row.spin1, row.spin1)**.5 + spin2 = numpy.dot(row.spin2, row.spin2)**.5 f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max(spin1, spin2))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco')) time_constrained_f_low.append(scipy.optimize.fsolve(time_freq_bound, x0 = flow, args = (max_duration, m1_SI, m2_SI, spin1, spin2, f_max))) -- GitLab From 58ff77ffe545e8fd23b51b42af5d67d16093a9f8 Mon Sep 17 00:00:00 2001 From: Wanting Niu <wanting.niu@ligo.org> Date: Fri, 9 Dec 2022 04:20:26 +0000 Subject: [PATCH 5/5] directly read spin1 and spin2 from sgnl_inspiral_table --- gstlal-inspiral/bin/gstlal_inspiral_bank_splitter | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter b/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter index 7c9bdad854..21da1df794 100755 --- a/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter +++ b/gstlal-inspiral/bin/gstlal_inspiral_bank_splitter @@ -276,9 +276,9 @@ for outputrows in banks_subbins: row.template_duration = chirptime.imr_time(options.f_low, lal.MSUN_SI * row.mass1, lal.MSUN_SI * row.mass2, - numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, - numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5, - f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max(numpy.dot(row.spin1x**2 + row.spin1y**2 + row.spin1z**2, row.spin1x**2 + row.spin1y**2 + row.spin1z**2)**.5, numpy.dot(row.spin2x**2 + row.spin2y**2 + row.spin2z**2, row.spin2x**2 + row.spin2y**2 + row.spin2z**2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco'))) + numpy.dot(row.spin1, row.spin1)**.5, + numpy.dot(row.spin2, row.spin2)**.5, + f_max = min(row.f_final, 2 * chirptime.ringf(lal.MSUN_SI * row.mass1 + lal.MSUN_SI * row.mass2, chirptime.overestimate_j_from_chi(max(numpy.dot(row.spin1, row.spin1)**.5, numpy.dot(row.spin2, row.spin2)**.5))) if approximant in templates.gstlal_IMR_approximants else spawaveform.ffinal(row.mass1, row.mass2, 'bkl_isco'))) # template_duration may be overwritten by svd_bank if the flow is increased in order to satisfy the target maximum duration outputrows[ind] = (approximant, rows) num_banks += len(outputrows) -- GitLab