From 57e710d4a65f1464e2f285ff5134523bf654f819 Mon Sep 17 00:00:00 2001
From: Colm Talbot <colm.talbot@ligo.org>
Date: Thu, 7 May 2020 10:37:25 -0400
Subject: [PATCH] Add testing of likelihood sampling frame

---
 test/gw_likelihood_test.py | 48 ++++++++++++++++++++++++++++++++++++++
 test/gw_utils_test.py      | 31 ++++++++++++++++++++++++
 2 files changed, 79 insertions(+)

diff --git a/test/gw_likelihood_test.py b/test/gw_likelihood_test.py
index 9c50c0f73..962829bbd 100644
--- a/test/gw_likelihood_test.py
+++ b/test/gw_likelihood_test.py
@@ -219,10 +219,58 @@ class TestGWTransient(unittest.TestCase):
             sampling_frequency=self.waveform_generator.sampling_frequency,
             duration=self.waveform_generator.duration,
             start_time=self.waveform_generator.start_time,
+            time_reference="geocent",
+            reference_frame="sky",
             lal_version=self.likelihood.lal_version,
         )
         self.assertDictEqual(expected, self.likelihood.meta_data)
 
+    def test_reference_frame_agrees_with_default(self):
+        new_likelihood = bilby.gw.likelihood.GravitationalWaveTransient(
+            interferometers=self.interferometers,
+            waveform_generator=self.waveform_generator,
+            priors=self.prior.copy(),
+            reference_frame="H1L1"
+        )
+        parameters = self.parameters.copy()
+        del parameters["ra"], parameters["dec"]
+        parameters["kappa"] = 1.0
+        parameters["eta"] = 1.0
+        parameters["ra"], parameters["dec"] = bilby.gw.utils.kappa_eta_to_ra_dec(
+            kappa=parameters["kappa"],
+            eta=parameters["eta"],
+            geocent_time=parameters["geocent_time"],
+            ifos=bilby.gw.detector.InterferometerList(["H1", "L1"])
+        )
+        new_likelihood.parameters.update(parameters)
+        self.likelihood.parameters.update(parameters)
+        self.assertEqual(
+            new_likelihood.log_likelihood_ratio(),
+            self.likelihood.log_likelihood_ratio()
+        )
+
+    def test_time_reference_agrees_with_default(self):
+        new_likelihood = bilby.gw.likelihood.GravitationalWaveTransient(
+            interferometers=self.interferometers,
+            waveform_generator=self.waveform_generator,
+            priors=self.prior.copy(),
+            time_reference="H1"
+        )
+        ifo = bilby.gw.detector.get_empty_interferometer("H1")
+        time_delay = ifo.time_delay_from_geocenter(
+            ra=self.parameters["ra"],
+            dec=self.parameters["dec"],
+            time=self.parameters["geocent_time"]
+        )
+        parameters = self.parameters.copy()
+        parameters["H1_time"] = parameters["geocent_time"] + time_delay
+        new_likelihood.parameters.update(parameters)
+        self.likelihood.parameters.update(parameters)
+        self.assertEqual(
+            new_likelihood.log_likelihood_ratio(),
+            self.likelihood.log_likelihood_ratio()
+        )
+
 
 class TestTimeMarginalization(unittest.TestCase):
     def setUp(self):
diff --git a/test/gw_utils_test.py b/test/gw_utils_test.py
index c44a65cd2..f41e7ca93 100644
--- a/test/gw_utils_test.py
+++ b/test/gw_utils_test.py
@@ -8,6 +8,7 @@ import numpy as np
 import gwpy
 import lal
 import lalsimulation as lalsim
+from scipy.stats import ks_2samp
 
 import bilby
 from bilby.gw import utils as gwutils
@@ -258,5 +259,35 @@ class TestGWUtils(unittest.TestCase):
             )
 
 
+class TestSkyFrameConversion(unittest.TestCase):
+
+    def setUp(self) -> None:
+        self.priors = bilby.core.prior.PriorDict()
+        self.priors["ra"] = bilby.core.prior.Uniform(0, 2 * np.pi)
+        self.priors["dec"] = bilby.core.prior.Cosine()
+        self.priors["eta"] = bilby.core.prior.Uniform(0, 2 * np.pi)
+        self.priors["kappa"] = bilby.core.prior.Sine()
+        self.priors["time"] = bilby.core.prior.Uniform(-0.1, 0.1)
+        self.ifos = bilby.gw.detector.InterferometerList(["H1", "L1"])
+        self.samples = self.priors.sample(10000)
+
+    def tearDown(self) -> None:
+        del self.priors
+        del self.ifos
+        del self.samples
+
+    def test_conversion_gives_correct_prior(self) -> None:
+        kappas = self.samples["kappa"]
+        etas = self.samples["eta"]
+        times = self.samples["time"]
+        args = zip(*[
+            (kappa, eta, time, self.ifos)
+            for kappa, eta, time in zip(kappas, etas, times)
+        ])
+        ras, decs = zip(*map(bilby.gw.utils.kappa_eta_to_ra_dec, *args))
+        self.assertGreaterEqual(ks_2samp(self.samples["ra"], ras).pvalue, 0.01)
+        self.assertGreaterEqual(ks_2samp(self.samples["dec"], decs).pvalue, 0.01)
+
+
 if __name__ == "__main__":
     unittest.main()
-- 
GitLab