예제 #1
0
    def test_wrong_inputs(self):
        """
        Test that exceptions are raised for incorrect inputs to the
        TargetedPulsarLikelihood.
        """

        with pytest.raises(TypeError):
            TargetedPulsarLikelihood(None, None)

        # create HeterodynedData object (no par file)
        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector)

        priors = dict()
        priors["h0"] = Uniform(0.0, 1.0e-23, "h0")

        # error with no par file
        with pytest.raises(ValueError):
            TargetedPulsarLikelihood(het, PriorDict(priors))

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)
        mhet = MultiHeterodynedData(het)  # multihet object for testing

        with pytest.raises(TypeError):
            TargetedPulsarLikelihood(het, None)

        with pytest.raises(TypeError):
            TargetedPulsarLikelihood(mhet, None)
예제 #2
0
    def test_includephase_likelihood(self):
        """
        Test the likelihood when include phase is set to True.
        """

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)

        priors = dict()
        priors["h0"] = Uniform(0.0, 1.0e-23, "h0")

        # run with includephase as False
        like1 = TargetedPulsarLikelihood(het,
                                         PriorDict(priors),
                                         likelihood="studentst")
        like1.parameters = {"h0": 1e-24}

        logl1 = like1.log_likelihood()

        # set includephase to True
        like2 = TargetedPulsarLikelihood(het,
                                         PriorDict(priors),
                                         likelihood="studentst")
        like2.parameters = {"h0": 1e-24}
        like2.include_phase = True

        logl2 = like2.log_likelihood()

        print(f"{logl1:.15f} {logl2:.15f}")

        assert np.allclose([logl1], [logl2], atol=1e-10, rtol=0.0)
예제 #3
0
    def test_numba_likelihood(self):
        """
        Test likelihood using numba against the standard likelihood.
        """

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)

        priors = dict()
        priors["h0"] = Uniform(0.0, 1.0e-23, "h0")

        for likelihood in ["gaussian", "studentst"]:
            like1 = TargetedPulsarLikelihood(het,
                                             PriorDict(priors),
                                             likelihood=likelihood)
            like1.parameters = {"h0": 1e-24}

            like2 = TargetedPulsarLikelihood(het,
                                             PriorDict(priors),
                                             likelihood=likelihood,
                                             numba=True)
            like2.parameters = {"h0": 1e-24}

            assert like1.log_likelihood() == like2.log_likelihood()
예제 #4
0
    def test_likelihood_null_likelihood(self):
        """
        Test likelihood and null likelihood.
        """

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)

        priors = dict()
        priors["h0"] = Uniform(0.0, 1.0e-23, "h0")

        for likelihood in ["gaussian", "studentst"]:
            like = TargetedPulsarLikelihood(het,
                                            PriorDict(priors),
                                            likelihood=likelihood)
            like.parameters = {"h0": 0.0}

            assert like.log_likelihood() == like.noise_log_likelihood()
예제 #5
0
    def test_wrong_likelihood(self):
        """
        Test with a bad likelihood name.
        """

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)

        priors = dict()
        priors["h0"] = Uniform(0.0, 1.0e-23, "h0")

        with pytest.raises(ValueError):
            _ = TargetedPulsarLikelihood(het,
                                         PriorDict(priors),
                                         likelihood="blah")
예제 #6
0
    def test_priors(self):
        """
        Test the parsed priors.
        """

        # bad priors (unexpected parameter names)
        priors = dict()
        priors["a"] = Uniform(0.0, 1.0, "blah")
        priors["b"] = 2.0

        het = HeterodynedData(self.data,
                              times=self.times,
                              detector=self.detector,
                              par=self.parfile)

        with pytest.raises(ValueError):
            _ = TargetedPulsarLikelihood(het, PriorDict(priors))
예제 #7
0
priors["q22"] = Uniform(q22range[0], q22range[1], "q22", latex_label=r"$Q_{22}$")
priors["phi0"] = Uniform(
    phi0range[0], phi0range[1], "phi0", latex_label=r"$\phi_0$", unit="rad"
)
priors["psi"] = Uniform(
    psirange[0], psirange[1], "psi", latex_label=r"$\psi$", unit="rad"
)
priors["cosiota"] = Uniform(
    cosiotarange[0], cosiotarange[1], "cosiota", latex_label=r"$\cos{\iota}$"
)

Nlive = 1024  # number of nested sampling live points

# run bilby
for i, het in enumerate(hets):
    # set the likelihood for bilby
    likelihood = TargetedPulsarLikelihood(het, PriorDict(priors))

    thislabel = "{}_{}".format(label, i)

    # run bilby
    result = bilby.run_sampler(
        likelihood=likelihood,
        priors=priors,
        sampler="cpnest",
        nlive=Nlive,
        outdir=outdir,
        label=thislabel,
        use_ratio=False,
    )
# create some fake heterodyned data
detector = "H1"  # the detector to use
times = np.linspace(1000000000.0, 1000086340.0, 1440)  # times
het = HeterodynedData(
    times=times,
    inject=True,
    par=parfile,
    injpar=parfile,
    fakeasd=1e-24,
    detector=detector,
)

# set prior on h0
priors = dict()
priors["h0"] = Uniform(0.0, 1e-24, "h0")

like = TargetedPulsarLikelihood(het, PriorDict(priors))

N = 500
h0s = np.linspace(0.0, 1e-24, N)
post = np.zeros(N)

for i, h0 in enumerate(h0s):
    params = {"h0": h0}
    like.parameters = params
    post[i] = like.log_likelihood() + priors["h0"].ln_prob(h0)

pl.plot(h0s, np.exp(post - np.max(post)), "b")
pl.axvline(het.injpar["H0"])
pl.show()