Multibanding

seglen_from_freq(f_0: float, m_tot: float = 2.8, maximum_mass_ratio: float = 4.0, power_of_two=True, margin_percent=5.0) float[source]

The seglen has a closed-form expression in the Newtonian limit, see e.g. Maggiore (2007), eq. 4.21:

\(t = 5/256 (\pi f)^{-8/3} (G M \eta ^{3/5} / c^3)^{-5/3}\)

for which we compute the highest possible value, with the smallest possible \(\eta\); since \(t \propto \eta^{-1}\) this gives us a upper bound on the seglen.

Parameters
  • f_0 (float) – Initial frequency from which the waveform starts, in Hz.

  • m_tot (float, optional) – Total mass of the binary, in solar masses. Defaults to 2.8.

    Default: 2.8

  • maximum_mass_ratio (float, optional) – Maximum allowed mass ratio in the dataset; this is used to give an upper bound on the seglen. Defaults to 2.

    Default: 4.0

  • power_of_two (bool, optional) – whether to return a frequency spacing which is a round power of two. Defaults to True.

    Default: True

  • margin_percent (float, optional) –

    percent of margin to be added to the seglen, so that \(\Delta f < 1 / (T + \delta T)\) holds for \(\delta T \leq T (\text{margin} / 100)\).

    Default: 5.0

    This should not be too low, since varying the waveform parameters can perturb the seglen and make it a bit higher than the Newtonian approximation used in this formula.

Returns

seglen – Approximate duration of the CBC waveform, in seconds.

Return type

float

reduced_frequency_array(f_min: float, f_max: float, f_pivot: float) numpy.ndarray[source]

Compute an array of frequencies which are a good guess to represent a gravitational waveform starting at a given minimum frequency.

Above f_pivot a uniform spacing is used; below it a non-uniform spacing is used, which follows the rule \(dN / df \sim T(f)\), where \(T(f)\) is the seglen (time-domain length) of a waveform which would start at that point, and which can be computed by

Parameters
  • f_min (float) – Minimum frequency of the array, in Hz.

  • f_max (float) – Maximum frequency of the array, in Hz.

  • f_pivot (float) – Frequency at which to switch from the non-uniform to the uniform array, in Hz.

Returns

frequencies – Frequency array, in Hz.

Return type

np.ndrray

high_frequency_grid(f_min: float, f_max: float)[source]

Uniform grid for the high-frequency regime.

Parameters
  • f_min (float) – Minimum frequency of the array, in Hz.

  • f_max (float) – Maximum frequency of the array, in Hz.

Returns

frequencies – Frequency array, in Hz.

Return type

np.ndrray

low_frequency_grid(f_min: float, f_max: float)[source]

Non-uniform grid for the low-frequency regime.

This is achieved by generating points uniformly in \(f^{-8/3+1}\)-space, and then transforming back. The normalization is computed by integrating \(dN/df = t(f)\) in the frequency range of interest, where \(t(f) = t_0 (f/f_0)^{-8/3}\) (as implemented in seglen_from_freq()): this yields \(N(f_1, f_2) = f_0^{8/3} t_0 (f_1^{-5/3} - f_2^{-5/3})\).

Since we are already working in \(f^{-5/3}\) space, to achieve this it is sufficient to use a step of \(1/(f_0^{8/3} t_0)\); this is easily computed by looking at \(t(1)\) (since the function \(t(f)\) is already implemented).

Parameters
  • f_min (float) – Minimum frequency of the array, in Hz.

  • f_max (float) – Maximum frequency of the array, in Hz.

Returns

frequencies – Frequency array, in Hz.

Return type

np.ndrray