From 44ada1c526080d21bf8b75bc67f24c44b5dc776c Mon Sep 17 00:00:00 2001 From: Colm Talbot <colm.talbot@ligo.org> Date: Fri, 21 Sep 2018 13:30:20 +1000 Subject: [PATCH] update example syntax --- examples/injection_examples/basic_tutorial.py | 16 ++++++------ .../change_sampled_parameters.py | 1 - .../create_your_own_source_model.py | 14 +++++------ ...reate_your_own_time_domain_source_model.py | 25 ++++++------------- .../injection_examples/eccentric_inspiral.py | 19 +++++++------- .../how_to_specify_the_prior.py | 12 +++++---- .../marginalized_likelihood.py | 16 ++++++------ .../plot_time_domain_data.py | 2 +- .../sine_gaussian_example.py | 12 +++++---- .../supernova_example/supernova_example.py | 20 +++++++-------- 10 files changed, 63 insertions(+), 74 deletions(-) diff --git a/examples/injection_examples/basic_tutorial.py b/examples/injection_examples/basic_tutorial.py index a8575e17b..2c18ef1c3 100644 --- a/examples/injection_examples/basic_tutorial.py +++ b/examples/injection_examples/basic_tutorial.py @@ -40,18 +40,16 @@ waveform_generator = tupak.gw.WaveformGenerator( duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.lal_binary_black_hole, parameters=injection_parameters, waveform_arguments=waveform_arguments) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. In this case we'll use two interferometers # (LIGO-Hanford (H1), LIGO-Livingston (L1). These default to their design # sensitivity -IFOs = [] -for name in ["H1", "L1"]: - IFOs.append( - tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, - injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir)) +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time']-3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Set up prior, which is a dictionary # By default we will sample all terms in the signal models. However, this will take a long time for the calculation, @@ -68,7 +66,7 @@ for key in ['a_1', 'a_2', 'tilt_1', 'tilt_2', 'phi_12', 'phi_jl', 'psi', 'ra', ' priors[key] = injection_parameters[key] # Initialise the likelihood by passing in the interferometer data (IFOs) and the waveoform generator -likelihood = tupak.gw.GravitationalWaveTransient(interferometers=IFOs, waveform_generator=waveform_generator, +likelihood = tupak.gw.GravitationalWaveTransient(interferometers=ifos, waveform_generator=waveform_generator, time_marginalization=False, phase_marginalization=False, distance_marginalization=False, prior=priors) diff --git a/examples/injection_examples/change_sampled_parameters.py b/examples/injection_examples/change_sampled_parameters.py index 010e87530..106ace05c 100644 --- a/examples/injection_examples/change_sampled_parameters.py +++ b/examples/injection_examples/change_sampled_parameters.py @@ -35,7 +35,6 @@ waveform_generator = tupak.gw.waveform_generator.WaveformGenerator( parameter_conversion= tupak.gw.conversion.convert_to_lal_binary_black_hole_parameters, waveform_arguments=waveform_arguments) -# hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. ifos = tupak.gw.detector.InterferometerList(['H1', 'L1', 'V1', 'K1']) diff --git a/examples/injection_examples/create_your_own_source_model.py b/examples/injection_examples/create_your_own_source_model.py index 604a513ef..8ee965ab9 100644 --- a/examples/injection_examples/create_your_own_source_model.py +++ b/examples/injection_examples/create_your_own_source_model.py @@ -29,14 +29,14 @@ waveform_generator = tupak.gw.waveform_generator.WaveformGenerator(duration=dura sampling_frequency=sampling_frequency, frequency_domain_source_model=sine_gaussian, parameters=injection_parameters) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. -IFOs = [tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, - injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir) - for name in ['H1', 'L1', 'V1']] +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time'] - 3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Here we define the priors for the search. We use the injection parameters # except for the amplitude, f0, and geocent_time @@ -44,7 +44,7 @@ prior = injection_parameters.copy() prior['A'] = tupak.core.prior.PowerLaw(alpha=-1, minimum=1e-25, maximum=1e-21, name='A') prior['f0'] = tupak.core.prior.Uniform(90, 110, 'f') -likelihood = tupak.gw.likelihood.GravitationalWaveTransient(IFOs, waveform_generator) +likelihood = tupak.gw.likelihood.GravitationalWaveTransient(ifos, waveform_generator) result = tupak.core.sampler.run_sampler( likelihood, prior, sampler='dynesty', outdir=outdir, label=label, diff --git a/examples/injection_examples/create_your_own_time_domain_source_model.py b/examples/injection_examples/create_your_own_time_domain_source_model.py index be48be57a..b1f814c6e 100644 --- a/examples/injection_examples/create_your_own_time_domain_source_model.py +++ b/examples/injection_examples/create_your_own_time_domain_source_model.py @@ -36,23 +36,13 @@ waveform = tupak.gw.waveform_generator.WaveformGenerator(duration=duration, samp time_domain_source_model=time_domain_damped_sinusoid, parameters=injection_parameters) -hf_signal = waveform.frequency_domain_strain() -#note we could plot the time domain signal with the following code -# import matplotlib.pyplot as plt -# plt.plot(waveform.time_array, waveform.time_domain_strain()['plus']) - -# or the frequency-domain signal: -# plt.loglog(waveform.frequency_array, abs(waveform.frequency_domain_strain()['plus'])) - - - # inject the signal into three interferometers -IFOs = [tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, - injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir) - for name in ['H1', 'L1']] - +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time'] - 3) +ifos.inject_signal(waveform_generator=waveform, + parameters=injection_parameters) # create the priors prior = injection_parameters.copy() @@ -61,9 +51,8 @@ prior['damping_time'] = tupak.core.prior.Uniform(0, 1, r'damping time') prior['frequency'] = tupak.core.prior.Uniform(0, 200, r'frequency') prior['phase'] = tupak.core.prior.Uniform(-np.pi / 2, np.pi / 2, r'$\phi$') - # define likelihood -likelihood = tupak.gw.likelihood.GravitationalWaveTransient(IFOs, waveform) +likelihood = tupak.gw.likelihood.GravitationalWaveTransient(ifos, waveform) # launch sampler result = tupak.core.sampler.run_sampler(likelihood, prior, sampler='dynesty', npoints=1000, diff --git a/examples/injection_examples/eccentric_inspiral.py b/examples/injection_examples/eccentric_inspiral.py index 79bdf8088..f4077b640 100644 --- a/examples/injection_examples/eccentric_inspiral.py +++ b/examples/injection_examples/eccentric_inspiral.py @@ -40,7 +40,6 @@ waveform_generator = tupak.gw.WaveformGenerator( frequency_domain_source_model=tupak.gw.source.lal_eccentric_binary_black_hole_no_spins, parameters=injection_parameters, waveform_arguments=waveform_arguments) -hf_signal = waveform_generator.frequency_domain_strain() # Setting up three interferometers (LIGO-Hanford (H1), LIGO-Livingston (L1), and # Virgo (V1)) at their design sensitivities. The maximum frequency is set just @@ -49,13 +48,15 @@ hf_signal = waveform_generator.frequency_domain_strain() minimum_frequency = 10. maximum_frequency = 128. -IFOs = tupak.gw.detector.InterferometerList(['H1', 'L1', 'V1']) -for IFO in IFOs: - IFO.minimum_frequency = minimum_frequency - IFO.maximum_frequency = maximum_frequency - -IFOs.set_strain_data_from_power_spectral_densities(sampling_frequency, duration) -IFOs.inject_signal(waveform_generator=waveform_generator, parameters=injection_parameters) +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +for ifo in ifos: + ifo.minimum_frequency = minimum_frequency + ifo.maximum_frequency = maximum_frequency +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time'] - 3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Now we set up the priors on each of the binary parameters. priors = dict() @@ -71,7 +72,7 @@ priors["phase"] = tupak.core.prior.Uniform(name='phase', minimum=0, maximum=2 * priors["geocent_time"] = tupak.core.prior.Uniform(1180002600.9, 1180002601.1, name='geocent_time') # Initialising the likelihood function. -likelihood = tupak.gw.likelihood.GravitationalWaveTransient(interferometers=IFOs, +likelihood = tupak.gw.likelihood.GravitationalWaveTransient(interferometers=ifos, waveform_generator=waveform_generator, time_marginalization=False, phase_marginalization=False, distance_marginalization=False, prior=priors) diff --git a/examples/injection_examples/how_to_specify_the_prior.py b/examples/injection_examples/how_to_specify_the_prior.py index 450250db6..51b7877dd 100644 --- a/examples/injection_examples/how_to_specify_the_prior.py +++ b/examples/injection_examples/how_to_specify_the_prior.py @@ -27,12 +27,14 @@ waveform_generator = tupak.gw.WaveformGenerator( duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.lal_binary_black_hole, parameters=injection_parameters, waveform_arguments=waveform_arguments) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. -IFOs = [tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir) for name in ['H1', 'L1', 'V1']] +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time'] - 3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Set up prior # This loads in a predefined set of priors for BBHs. @@ -56,7 +58,7 @@ priors['a_2'] = tupak.core.prior.Interped(name='a_2', xx=a_2, yy=p_a_2, minimum= # Enjoy. # Initialise GravitationalWaveTransient -likelihood = tupak.GravitationalWaveTransient(interferometers=IFOs, waveform_generator=waveform_generator) +likelihood = tupak.GravitationalWaveTransient(interferometers=ifos, waveform_generator=waveform_generator) # Run sampler result = tupak.run_sampler(likelihood=likelihood, priors=priors, sampler='dynesty', diff --git a/examples/injection_examples/marginalized_likelihood.py b/examples/injection_examples/marginalized_likelihood.py index b91cee3e1..8c05d0f97 100644 --- a/examples/injection_examples/marginalized_likelihood.py +++ b/examples/injection_examples/marginalized_likelihood.py @@ -26,16 +26,14 @@ waveform_generator = tupak.gw.WaveformGenerator( duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.lal_binary_black_hole, parameters=injection_parameters, waveform_arguments=waveform_arguments) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. -IFOs = [] -for name in ["H1", "L1", "V1"]: - IFOs.append( - tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, - injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir)) +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time'] - 3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Set up prior priors = tupak.gw.prior.BBHPriorSet() @@ -47,7 +45,7 @@ for key in ['a_1', 'a_2', 'tilt_1', 'tilt_2', 'phi_12', 'phi_jl', 'iota', 'ra', # Note that we now need to pass the: priors and flags for each thing that's being marginalised. # This is still under development so care should be taken with the marginalised likelihood. likelihood = tupak.gw.GravitationalWaveTransient( - interferometers=IFOs, waveform_generator=waveform_generator, prior=priors, + interferometers=ifos, waveform_generator=waveform_generator, prior=priors, distance_marginalization=False, phase_marginalization=True, time_marginalization=False) diff --git a/examples/injection_examples/plot_time_domain_data.py b/examples/injection_examples/plot_time_domain_data.py index a0b1a61a8..37a0868c8 100644 --- a/examples/injection_examples/plot_time_domain_data.py +++ b/examples/injection_examples/plot_time_domain_data.py @@ -25,7 +25,7 @@ waveform_generator = tupak.gw.WaveformGenerator( duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.lal_binary_black_hole, parameters=injection_parameters, waveform_arguments=waveform_arguments) -hf_signal = waveform_generator.frequency_domain_strain() +hf_signal = waveform_generator.frequency_domain_strain(injection_parameters) H1 = tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( 'H1', injection_polarizations=hf_signal, diff --git a/examples/injection_examples/sine_gaussian_example.py b/examples/injection_examples/sine_gaussian_example.py index 8761cf6b3..aba408184 100644 --- a/examples/injection_examples/sine_gaussian_example.py +++ b/examples/injection_examples/sine_gaussian_example.py @@ -29,13 +29,15 @@ waveform_generator = tupak.gw.waveform_generator.WaveformGenerator(duration=dura sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.sinegaussian, parameters=injection_parameters) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. In this case we'll use three interferometers (LIGO-Hanford (H1), LIGO-Livingston (L1), # and Virgo (V1)). These default to their design sensitivity -IFOs = [tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, injection_parameters=injection_parameters, duration=duration, - sampling_frequency=sampling_frequency, outdir=outdir) for name in ['H1', 'L1', 'V1']] +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1', 'V1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time']-3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # Set up prior, which is a dictionary priors = dict() @@ -55,7 +57,7 @@ priors['frequency'] = tupak.core.prior.Uniform(30, 1000, 'frequency') priors['hrss'] = tupak.core.prior.Uniform(1e-23, 1e-21, 'hrss') # Initialise the likelihood by passing in the interferometer data (IFOs) and the waveoform generator -likelihood = tupak.gw.likelihood.GravitationalWaveTransient(interferometers=IFOs, waveform_generator=waveform_generator) +likelihood = tupak.gw.likelihood.GravitationalWaveTransient(interferometers=ifos, waveform_generator=waveform_generator) # Run sampler. In this case we're going to use the `dynesty` sampler result = tupak.core.sampler.run_sampler(likelihood=likelihood, priors=priors, sampler='dynesty', npoints=1000, diff --git a/examples/supernova_example/supernova_example.py b/examples/supernova_example/supernova_example.py index 86ba46c80..2365bd55e 100644 --- a/examples/supernova_example/supernova_example.py +++ b/examples/supernova_example/supernova_example.py @@ -13,7 +13,7 @@ import numpy as np # Set the duration and sampling frequency of the data segment that we're going to inject the signal into import tupak.gw.likelihood -time_duration = 3. +duration = 3. sampling_frequency = 4096. # Specify the output directory and the name of the simulation. @@ -35,19 +35,19 @@ injection_parameters = dict(file_path='MuellerL15_example_inj.txt', # Create the waveform_generator using a supernova source function waveform_generator = tupak.gw.waveform_generator.WaveformGenerator( - time_duration=time_duration, sampling_frequency=sampling_frequency, + duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.supernova, parameters=injection_parameters) -hf_signal = waveform_generator.frequency_domain_strain() # Set up interferometers. In this case we'll use three interferometers # (LIGO-Hanford (H1), LIGO-Livingston (L1), and Virgo (V1)). These default to # their design sensitivity -IFOs = [tupak.gw.detector.get_interferometer_with_fake_noise_and_injection( - name, injection_polarizations=hf_signal, - injection_parameters=injection_parameters, time_duration=time_duration, - sampling_frequency=sampling_frequency, outdir=outdir) - for name in ['H1', 'L1', 'V1']] +ifos = tupak.gw.detector.InterferometerList(['H1', 'L1']) +ifos.set_strain_data_from_power_spectral_densities( + sampling_frequency=sampling_frequency, duration=duration, + start_time=injection_parameters['geocent_time']-3) +ifos.inject_signal(waveform_generator=waveform_generator, + parameters=injection_parameters) # read in from a file the PCs used to create the signal model. realPCs = np.loadtxt('SupernovaRealPCs.txt') @@ -59,7 +59,7 @@ simulation_parameters = dict( realPCs=realPCs, imagPCs=imagPCs) search_waveform_generator = tupak.gw.waveform_generator.WaveformGenerator( - time_duration=time_duration, sampling_frequency=sampling_frequency, + duration=duration, sampling_frequency=sampling_frequency, frequency_domain_source_model=tupak.gw.source.supernova_pca_model, waveform_arguments=simulation_parameters) @@ -85,7 +85,7 @@ priors['geocent_time'] = tupak.core.prior.Uniform( # Initialise the likelihood by passing in the interferometer data (IFOs) and # the waveoform generator likelihood = tupak.gw.likelihood.GravitationalWaveTransient( - interferometers=IFOs, waveform_generator=search_waveform_generator) + interferometers=ifos, waveform_generator=search_waveform_generator) # Run sampler. result = tupak.run_sampler( -- GitLab