diff --git a/tupak/detector.py b/tupak/detector.py index ee794189ec425121b0a2df6412c4addc8dee484d..6976844a83ae7f33c021c3687a462f4644576e03 100644 --- a/tupak/detector.py +++ b/tupak/detector.py @@ -398,7 +398,7 @@ class PowerSpectralDensity: def __init__(self, asd_file=None, psd_file='aLIGO_ZERO_DET_high_P_psd.txt'): """ - Instantiate a new PSD object. + Instantiate a new PowerSpectralDensity object. Only one of the asd_file or psd_file needs to be specified. If multiple are given, the first will be used. @@ -498,15 +498,16 @@ def get_empty_interferometer(name): The available instruments are: H1, L1, V1, GEO600 - Detector positions taken from LIGO-T980044-10 for L1/H1 and from arXiv:gr-qc/0008066 [45] for V1/GEO600 + Detector positions taken from LIGO-T980044-10 for L1/H1 and from + arXiv:gr-qc/0008066 [45] for V1/GEO600 Parameters ---------- name: str Interferometer identifier. - Return - ------ + Returns + ------- interferometer: Interferometer Interferometer instance """ @@ -546,7 +547,7 @@ def get_interferometer_with_open_data( raw_data_file=None, **kwargs): """ Helper function to obtain an Interferometer instance with appropriate - PSD and data, given an center_time + PSD and data, given an center_time. Parameters ---------- @@ -576,6 +577,7 @@ def get_interferometer_with_open_data( ------- interferometer: `tupak.detector.Interferometer` An Interferometer instance with a PSD and frequency-domain strain data. + """ utils.check_directory_exists_and_if_not_mkdir(outdir) @@ -647,14 +649,15 @@ def get_interferometer_with_fake_noise_and_injection( save=True): """ Helper function to obtain an Interferometer instance with appropriate - PSD and data, given an center_time + power spectral density and data, given an center_time. Parameters ---------- name: str Detector name, e.g., 'H1'. injection_polarizations: dict - polarizations of waveform to inject, output of waveform_generator.get_frequency_domain_signal + polarizations of waveform to inject, output of + `waveform_generator.get_frequency_domain_signal` injection_parameters: dict injection parameters, needed for sky position and timing sampling_frequency: float @@ -672,6 +675,7 @@ def get_interferometer_with_fake_noise_and_injection( ------- interferometer: `tupak.detector.Interferometer` An Interferometer instance with a PSD and frequency-domain strain data. + """ utils.check_directory_exists_and_if_not_mkdir(outdir) @@ -716,9 +720,6 @@ def get_event_data( """ Get open data for a specified event. - We currently know about: - GW150914 - Parameters ---------- event: str diff --git a/tupak/likelihood.py b/tupak/likelihood.py index 9372cc6ad10db127a8f42b4f307464f297ad8033..4de7b91686e8ecb0f7186d6da136c59ca3a9f5c5 100644 --- a/tupak/likelihood.py +++ b/tupak/likelihood.py @@ -12,6 +12,36 @@ import logging class GravitationalWaveTransient(object): + """ A gravitational-wave transient likelihood object + + This is the usual likelihood object to use for transient gravitational + wave parameter estimation. It computes the log-likelihood in the frequency + domain assuming a colored Gaussian noise model described by a power + spectral density + + + Parameters + ---------- + interferometers: list + A list of `tupak.detector.Interferometer` instances - contains the + detector data and power spectral densities + waveform_generator: `tupak.waveform_generator.WaveformGenerator` + An object which computes the frequency-domain strain of the signal, + given some set of parameters + distance_marginalization: bool + If true, analytic distance marginalization + phase_marginalization: bool + If true, analytic phase marginalization + prior: dict + If given, used in the distance and phase marginalization. + + Returns + ------- + Likelihood: `tupak.likelihood.Likelihood` + A likehood object, able to compute the likelihood of the data given + some model parameters + + """ def __init__(self, interferometers, waveform_generator, distance_marginalization=False, phase_marginalization=False, prior=None): # GravitationalWaveTransient.__init__(self, interferometers, waveform_generator) @@ -148,7 +178,9 @@ def get_binary_black_hole_likelihood(interferometers): A list of `tupak.detector.Interferometer` instances, typically the output of either `tupak.detector.get_interferometer_with_open_data` or `tupak.detector.get_interferometer_with_fake_noise_and_injection` + Returns + ------- likelihood: tupak.likelihood.GravitationalWaveTransient The likelihood to pass to `run_sampler` """ diff --git a/tupak/waveform_generator.py b/tupak/waveform_generator.py index 843ae839d3e9c9953efda399fc0f4621022265e0..30667d84050c34500034fbd736ceb6c49fce8f88 100644 --- a/tupak/waveform_generator.py +++ b/tupak/waveform_generator.py @@ -1,9 +1,9 @@ import inspect -import tupak from . import utils import numpy as np + class WaveformGenerator(object): """ A waveform generator @@ -24,13 +24,15 @@ class WaveformGenerator(object): parameters: dict Initial values for the parameters parameter_conversion: func - Function to convert from sampled parameters to parameters of the waveform generator + Function to convert from sampled parameters to parameters of the + waveform generator non_standard_sampling_parameter_keys: list List of parameter name for *non-standard* sampling parameters. - Note: the arguments of frequency_domain_source_model (except the first, which is the - frequencies at which to compute the strain) will be added to the - WaveformGenerator object and initialised to `None`. + Note: the arguments of frequency_domain_source_model (except the first, + which is the frequencies at which to compute the strain) will be added to + the WaveformGenerator object and initialised to `None`. + """ def __init__(self, time_duration, sampling_frequency, frequency_domain_source_model=None, @@ -52,7 +54,7 @@ class WaveformGenerator(object): """ Wrapper to source_model """ if self.parameter_conversion is not None: added_keys = self.parameter_conversion(self.parameters, self.non_standard_sampling_parameter_keys) - + if self.frequency_domain_source_model is not None: model_frequency_strain = self.frequency_domain_source_model(self.frequency_array, **self.parameters) elif self.time_domain_source_model is not None: