diff --git a/bilby/gw/likelihood/base.py b/bilby/gw/likelihood/base.py index 53621643b6d68b1fef504f0ff89b56b92ac74a4c..4fedef7717dfccc44e74d0f4a0c089c8f7b7af39 100644 --- a/bilby/gw/likelihood/base.py +++ b/bilby/gw/likelihood/base.py @@ -1112,21 +1112,55 @@ class GravitationalWaveTransient(Likelihood): else: raise ValueError("Unable to parse reference frame {}".format(frame)) - def get_sky_frame_parameters(self): - time = self.parameters['{}_time'.format(self.time_reference)] + def get_sky_frame_parameters(self, parameters=None): + """ + Generate ra, dec, and geocenter time for :code:`parameters` + + This method will attempt to convert from the reference time and sky + parameters, but if they are not present it will fall back to ra and dec. + + Parameters + ========== + parameters: dict, optional + The parameters to be converted. + If not specified :code:`self.parameters` will be used. + + Returns + ======= + dict: dictionary containing ra, dec, and geocent_time + """ + if parameters is None: + parameters = self.parameters + time = parameters.get(f'{self.time_reference}_time', None) + if time is None and "geocent_time" in parameters: + logger.warning( + f"Cannot find {self.time_reference}_time in parameters. " + "Falling back to geocent time" + ) if not self.reference_frame == "sky": - ra, dec = zenith_azimuth_to_ra_dec( - self.parameters['zenith'], self.parameters['azimuth'], - time, self.reference_frame) + try: + ra, dec = zenith_azimuth_to_ra_dec( + parameters['zenith'], parameters['azimuth'], + time, self.reference_frame) + except KeyError: + if "ra" in parameters and "dec" in parameters: + ra = parameters["ra"] + dec = parameters["dec"] + logger.warning( + "Cannot convert from zenith/azimuth to ra/dec falling " + "back to provided ra/dec" + ) + else: + raise else: - ra = self.parameters["ra"] - dec = self.parameters["dec"] - if "geocent" not in self.time_reference: + ra = parameters["ra"] + dec = parameters["dec"] + if "geocent" not in self.time_reference and f"{self.time_reference}_time" in parameters: geocent_time = time - self.reference_ifo.time_delay_from_geocenter( ra=ra, dec=dec, time=time ) else: - geocent_time = self.parameters["geocent_time"] + geocent_time = parameters["geocent_time"] return dict(ra=ra, dec=dec, geocent_time=geocent_time) @property diff --git a/bilby/gw/likelihood/relative.py b/bilby/gw/likelihood/relative.py index ddb4d3ee872b3f2c43efb181f4b3fdaba4b3db08..f7506ae7e8257659841a2ac23639fa418ca28409 100644 --- a/bilby/gw/likelihood/relative.py +++ b/bilby/gw/likelihood/relative.py @@ -216,8 +216,9 @@ class RelativeBinningGravitationalWaveTransient(GravitationalWaveTransient): ) def set_fiducial_waveforms(self, parameters): - _fiducial = parameters["fiducial"] + parameters = parameters.copy() parameters["fiducial"] = 1 + parameters.update(self.get_sky_frame_parameters(parameters=parameters)) self.fiducial_polarizations = self.waveform_generator.frequency_domain_strain( parameters) @@ -236,8 +237,6 @@ class RelativeBinningGravitationalWaveTransient(GravitationalWaveTransient): wf[interferometer.frequency_array > self.maximum_frequency] = 0 self.per_detector_fiducial_waveforms[interferometer.name] = wf - parameters["fiducial"] = _fiducial - def find_maximum_likelihood_parameters(self, parameter_bounds, iterations=5, maximization_kwargs=None): if maximization_kwargs is None: