From 032fd485fe7d6bfe1731602cd94c61ee5afb6b4d Mon Sep 17 00:00:00 2001
From: Colm Talbot <colm.talbot@ligo.org>
Date: Wed, 20 Feb 2019 10:44:18 +1100
Subject: [PATCH] change lal source function

---
 bilby/gw/source.py | 49 ++++++++++++++++++++++++++--------------------
 bilby/gw/utils.py  |  4 ++--
 2 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/bilby/gw/source.py b/bilby/gw/source.py
index a7ffa1473..94db4f66d 100644
--- a/bilby/gw/source.py
+++ b/bilby/gw/source.py
@@ -6,7 +6,7 @@ from ..core import utils
 from ..core.utils import logger
 from .utils import (lalsim_SimInspiralTransformPrecessingNewInitialConditions,
                     lalsim_GetApproximantFromString,
-                    lalsim_SimInspiralChooseFDWaveform,
+                    lalsim_SimInspiralFD,
                     lalsim_SimInspiralWaveformParamsInsertTidalLambda1,
                     lalsim_SimInspiralWaveformParamsInsertTidalLambda2)
 
@@ -57,12 +57,18 @@ def lal_binary_black_hole(
     dict: A dictionary with the plus and cross polarisation strain modes
     """
 
-    waveform_kwargs = dict(waveform_approximant='IMRPhenomPv2', reference_frequency=50.0,
-                           minimum_frequency=20.0)
+    waveform_kwargs = dict(
+        waveform_approximant='IMRPhenomPv2', reference_frequency=50.0,
+        minimum_frequency=20.0, maximum_frequency=frequency_array[-1])
     waveform_kwargs.update(kwargs)
     waveform_approximant = waveform_kwargs['waveform_approximant']
     reference_frequency = waveform_kwargs['reference_frequency']
     minimum_frequency = waveform_kwargs['minimum_frequency']
+    maximum_frequency = waveform_kwargs['maximum_frequency']
+    delta_frequency = frequency_array[1] - frequency_array[0]
+
+    frequency_bounds = ((frequency_array >= minimum_frequency) *
+                        (frequency_array <= maximum_frequency))
 
     if mass_2 > mass_1:
         return None
@@ -92,10 +98,7 @@ def lal_binary_black_hole(
 
     approximant = lalsim_GetApproximantFromString(waveform_approximant)
 
-    maximum_frequency = frequency_array[-1]
-    delta_frequency = frequency_array[1] - frequency_array[0]
-
-    hplus, hcross = lalsim_SimInspiralChooseFDWaveform(
+    hplus, hcross = lalsim_SimInspiralFD(
         mass_1, mass_2, spin_1x, spin_1y, spin_1z, spin_2x, spin_2y,
         spin_2z, luminosity_distance, iota, phase,
         longitude_ascending_nodes, eccentricity, mean_per_ano, delta_frequency,
@@ -105,8 +108,8 @@ def lal_binary_black_hole(
     h_plus = hplus.data.data
     h_cross = hcross.data.data
 
-    h_plus = h_plus[:len(frequency_array)]
-    h_cross = h_cross[:len(frequency_array)]
+    h_plus = h_plus[:len(frequency_array)] * frequency_bounds
+    h_cross = h_cross[:len(frequency_array)] * frequency_bounds
 
     return {'plus': h_plus, 'cross': h_cross}
 
@@ -145,6 +148,11 @@ def lal_eccentric_binary_black_hole_no_spins(
     waveform_approximant = waveform_kwargs['waveform_approximant']
     reference_frequency = waveform_kwargs['reference_frequency']
     minimum_frequency = waveform_kwargs['minimum_frequency']
+    maximum_frequency = waveform_kwargs['maximum_frequency']
+    delta_frequency = frequency_array[1] - frequency_array[0]
+
+    frequency_bounds = ((frequency_array >= minimum_frequency) *
+                        (frequency_array <= maximum_frequency))
 
     if mass_2 > mass_1:
         return None
@@ -167,18 +175,15 @@ def lal_eccentric_binary_black_hole_no_spins(
 
     approximant = lalsim_GetApproximantFromString(waveform_approximant)
 
-    maximum_frequency = frequency_array[-1]
-    delta_frequency = frequency_array[1] - frequency_array[0]
-
-    hplus, hcross = lalsim_SimInspiralChooseFDWaveform(
+    hplus, hcross = lalsim_SimInspiralFD(
         mass_1, mass_2, spin_1x, spin_1y, spin_1z, spin_2x, spin_2y,
         spin_2z, luminosity_distance, iota, phase,
         longitude_ascending_nodes, eccentricity, mean_per_ano, delta_frequency,
         minimum_frequency, maximum_frequency, reference_frequency,
         waveform_dictionary, approximant)
 
-    h_plus = hplus.data.data
-    h_cross = hcross.data.data
+    h_plus = hplus.data.data * frequency_bounds
+    h_cross = hcross.data.data * frequency_bounds
 
     return {'plus': h_plus, 'cross': h_cross}
 
@@ -292,6 +297,11 @@ def lal_binary_neutron_star(
     waveform_approximant = waveform_kwargs['waveform_approximant']
     reference_frequency = waveform_kwargs['reference_frequency']
     minimum_frequency = waveform_kwargs['minimum_frequency']
+    maximum_frequency = waveform_kwargs['maximum_frequency']
+    delta_frequency = frequency_array[1] - frequency_array[0]
+
+    frequency_bounds = ((frequency_array >= minimum_frequency) *
+                        (frequency_array <= maximum_frequency))
 
     if mass_2 > mass_1:
         return None
@@ -317,18 +327,15 @@ def lal_binary_neutron_star(
 
     approximant = lalsim_GetApproximantFromString(waveform_approximant)
 
-    maximum_frequency = frequency_array[-1]
-    delta_frequency = frequency_array[1] - frequency_array[0]
-
-    hplus, hcross = lalsim_SimInspiralChooseFDWaveform(
+    hplus, hcross = lalsim_SimInspiralFD(
         mass_1, mass_2, spin_1x, spin_1y, spin_1z, spin_2x, spin_2y,
         spin_2z, luminosity_distance, iota, phase,
         longitude_ascending_nodes, eccentricity, mean_per_ano, delta_frequency,
         minimum_frequency, maximum_frequency, reference_frequency,
         waveform_dictionary, approximant)
 
-    h_plus = hplus.data.data
-    h_cross = hcross.data.data
+    h_plus = hplus.data.data * frequency_bounds
+    h_cross = hcross.data.data * frequency_bounds
 
     h_plus = h_plus[:len(frequency_array)]
     h_cross = h_cross[:len(frequency_array)]
diff --git a/bilby/gw/utils.py b/bilby/gw/utils.py
index 69b78cc69..b903117e1 100644
--- a/bilby/gw/utils.py
+++ b/bilby/gw/utils.py
@@ -741,7 +741,7 @@ def lalsim_GetApproximantFromString(waveform_approximant):
         raise ValueError("waveform_approximant must be of type str")
 
 
-def lalsim_SimInspiralChooseFDWaveform(
+def lalsim_SimInspiralFD(
         mass_1, mass_2, spin_1x, spin_1y, spin_1z, spin_2x, spin_2y,
         spin_2z, luminosity_distance, iota, phase,
         longitude_ascending_nodes, eccentricity, mean_per_ano, delta_frequency,
@@ -762,7 +762,7 @@ def lalsim_SimInspiralChooseFDWaveform(
     if isinstance(approximant, int) is False:
         raise ValueError("approximant not an int")
 
-    return lalsim.SimInspiralChooseFDWaveform(
+    return lalsim.SimInspiralFD(
         mass_1, mass_2, spin_1x, spin_1y, spin_1z, spin_2x, spin_2y,
         spin_2z, luminosity_distance, iota, phase,
         longitude_ascending_nodes, eccentricity, mean_per_ano, delta_frequency,
-- 
GitLab