From b2f9ffb7c07dcd49503af65b8592e36607bed64c Mon Sep 17 00:00:00 2001 From: Soichiro Morisaki <soichiro.morisaki@ligo.org> Date: Sun, 18 Jul 2021 14:38:18 -0500 Subject: [PATCH] test/gw/source_test.py: add test for binary_black_hole_frequency_sequence and binary_neutron_star_frequency_sequence --- test/gw/source_test.py | 176 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) diff --git a/test/gw/source_test.py b/test/gw/source_test.py index 24c7346d6..627278a33 100644 --- a/test/gw/source_test.py +++ b/test/gw/source_test.py @@ -4,6 +4,8 @@ import numpy as np from copy import copy import bilby +import lal +import lalsimulation class TestLalBBH(unittest.TestCase): @@ -247,5 +249,179 @@ class TestROQBBH(unittest.TestCase): bilby.gw.source.binary_black_hole_roq(self.frequency_array, **self.parameters) +class TestBBHfreqseq(unittest.TestCase): + def setUp(self): + self.parameters = dict( + mass_1=30.0, + mass_2=30.0, + luminosity_distance=400.0, + a_1=0.4, + tilt_1=0., + phi_12=0., + a_2=0.8, + tilt_2=0., + phi_jl=0., + theta_jn=0.3, + phase=0.0 + ) + minimum_frequency = 20.0 + self.frequency_array = bilby.core.utils.create_frequency_series(2048, 8) + self.full_frequencies_to_sequence = self.frequency_array >= minimum_frequency + self.waveform_kwargs = dict( + waveform_approximant="IMRPhenomHM", + reference_frequency=50.0, + minimum_frequency=minimum_frequency, + catch_waveform_errors=True, + frequencies=self.frequency_array[self.full_frequencies_to_sequence] + ) + self.bad_parameters = copy(self.parameters) + self.bad_parameters["mass_1"] = -30.0 + + def tearDown(self): + del self.parameters + del self.waveform_kwargs + del self.frequency_array + del self.bad_parameters + + def test_valid_parameters(self): + self.parameters.update(self.waveform_kwargs) + self.assertIsInstance( + bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **self.parameters + ), + dict + ) + + def test_waveform_error_catching(self): + self.bad_parameters.update(self.waveform_kwargs) + self.assertIsNone( + bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **self.bad_parameters + ) + ) + + def test_waveform_error_raising(self): + raise_error_parameters = copy(self.bad_parameters) + raise_error_parameters.update(self.waveform_kwargs) + raise_error_parameters["catch_waveform_errors"] = False + with self.assertRaises(Exception): + bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **raise_error_parameters + ) + + def test_match_LalBBH(self): + self.parameters.update(self.waveform_kwargs) + freqseq = bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **self.parameters + ) + lalbbh = bilby.gw.source.lal_binary_black_hole( + self.frequency_array, **self.parameters + ) + self.assertEqual(freqseq.keys(), lalbbh.keys()) + for mode in freqseq: + diff = np.sum(np.abs(freqseq[mode] - lalbbh[mode][self.full_frequencies_to_sequence])**2.) + norm = np.sum(np.abs(freqseq[mode])**2.) + self.assertLess(diff / norm, 1e-15) + + def test_match_LalBBH_specify_modes(self): + parameters = copy(self.parameters) + parameters.update(self.waveform_kwargs) + parameters['mode_array'] = [[2, 2]] + freqseq = bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **parameters + ) + lalbbh = bilby.gw.source.lal_binary_black_hole( + self.frequency_array, **parameters + ) + self.assertEqual(freqseq.keys(), lalbbh.keys()) + for mode in freqseq: + diff = np.sum(np.abs(freqseq[mode] - lalbbh[mode][self.full_frequencies_to_sequence])**2.) + norm = np.sum(np.abs(freqseq[mode])**2.) + self.assertLess(diff / norm, 1e-15) + + def test_match_LalBBH_nonGR(self): + parameters = copy(self.parameters) + parameters.update(self.waveform_kwargs) + wf_dict = lal.CreateDict() + lalsimulation.SimInspiralWaveformParamsInsertNonGRDChi0(wf_dict, 1.) + parameters['lal_waveform_dictionary'] = wf_dict + freqseq = bilby.gw.source.binary_black_hole_frequency_sequence( + self.frequency_array, **parameters + ) + lalbbh = bilby.gw.source.lal_binary_black_hole( + self.frequency_array, **parameters + ) + self.assertEqual(freqseq.keys(), lalbbh.keys()) + for mode in freqseq: + diff = np.sum(np.abs(freqseq[mode] - lalbbh[mode][self.full_frequencies_to_sequence])**2.) + norm = np.sum(np.abs(freqseq[mode])**2.) + self.assertLess(diff / norm, 1e-15) + + +class TestBNSfreqseq(unittest.TestCase): + def setUp(self): + self.parameters = dict( + mass_1=1.4, + mass_2=1.4, + luminosity_distance=400.0, + a_1=0.4, + a_2=0.3, + tilt_1=0.2, + tilt_2=1.7, + phi_jl=0.2, + phi_12=0.9, + theta_jn=1.7, + phase=0.0, + lambda_1=1000.0, + lambda_2=1000.0 + ) + minimum_frequency = 50.0 + self.frequency_array = bilby.core.utils.create_frequency_series(2048, 16) + self.full_frequencies_to_sequence = self.frequency_array >= minimum_frequency + self.waveform_kwargs = dict( + waveform_approximant="IMRPhenomPv2_NRTidal", + reference_frequency=50.0, + minimum_frequency=minimum_frequency, + frequencies=self.frequency_array[self.full_frequencies_to_sequence] + ) + + def tearDown(self): + del self.parameters + del self.waveform_kwargs + del self.frequency_array + + def test_with_valid_parameters(self): + self.parameters.update(self.waveform_kwargs) + self.assertIsInstance( + bilby.gw.source.binary_neutron_star_frequency_sequence( + self.frequency_array, **self.parameters + ), + dict + ) + + def test_fails_without_tidal_parameters(self): + self.parameters.pop("lambda_1") + self.parameters.pop("lambda_2") + self.parameters.update(self.waveform_kwargs) + with self.assertRaises(TypeError): + bilby.gw.source.binary_neutron_star_frequency_sequence( + self.frequency_array, **self.parameters + ) + + def test_match_LalBNS(self): + self.parameters.update(self.waveform_kwargs) + freqseq = bilby.gw.source.binary_neutron_star_frequency_sequence( + self.frequency_array, **self.parameters + ) + lalbns = bilby.gw.source.lal_binary_neutron_star( + self.frequency_array, **self.parameters + ) + self.assertEqual(freqseq.keys(), lalbns.keys()) + for mode in freqseq: + diff = np.sum(np.abs(freqseq[mode] - lalbns[mode][self.full_frequencies_to_sequence])**2.) + norm = np.sum(np.abs(freqseq[mode])**2.) + self.assertLess(diff / norm, 1e-5) + + if __name__ == "__main__": unittest.main() -- GitLab