Add Time and Frequency Dependent Effects to Interferometer
This MR adds time-dependent and frequency-dependent corrections to bilby's interferometer objects which will be important for parameter estimation with next-generation detectors.
This creates a new object FrequencyDependentInterferometer
(inheritance structure suggested by @colm.talbot). I've added several necessary functions in an MR in bilby-cython as well.
For just the frequency corrections (i.e. arm length corrections), the object now stores the free spectral range and computes an array of detector tensors with a new function in bilby-cython frequency_dependent_detector_tensor
, where each layer is the detector tensor at a given frequency in the detector's frequency array. The contraction with the polarization tensor
is done via einsum in the antenna_response
.
I've confirmed that the response differs from bilby's current response in the expected way: this is a high-frequency effect and reduces to bilby's current implementation in the limit of f->0 or arm length -> 0.
If the user enables the flag time_dependent
, the response will also account for the fact that i) the sensitivity changes over the duration of the signal and ii) the time lag from geocenter to the detector site changes over the duration of the signal.
The first thing that needs to be done is to construct an array of GMSTs for observation times, which can be interpolated on the fly. This is to avoid calling greenwich_mean_sidereal_time
for each time point, as this becomes a slowdown. After this gets pre-computed, it is interpolated and given to the appropriate new functions in bilby-cython which accept an array of GMSTs.
In order to account for these, we need the time at each frequency of the signal. To estimate this, I've implemented a new function get_times_to_merger_15PN
to approximate the time to merger at 1.5PN for the array of frequencies in the interferometer object. I think 1.5PN should be sufficient; the effect of rotation should become negligible before the PN approximation breaks down. In order to avoid having to calculate the time_dependent effects on the entire array of times, I'm finding it is much faster to only calculate the time-dependent effects up to a time_buffer
(on the order of seconds) before the merger time. Note that if time_buffer is \mathcal{O}(1 \rm s)
, then the rest of the signal is essentially too short to be affected by rotation effects. For the time-dependent bins, it interpolates to get the GMSTs and gets the detector tensor with time_and_frequency_dependent_detector_tensor_given_gmst
and the polarization tensor with get_time_dependent_polarization_tensor_given_gmst
(both in the MR in bilby-cython). The rest of the bins corresponding to times after the time_buffer
before merger use a fixed time and just include the frequency-dependent effects.
I also edited antenna_response
to allow an input for time_shifts
. So the interferometer computes time_delay_from_geocenter_given_gmst
on the array of estimated times at each frequency, so each time in the frequency-domain strain can be shifted independently due to the Earth's rotation. Currently, in bilby this is fixed to the delay time at geocent_time
.
I also added some functions in the bilby-cython MR that can shift the frequencies due to the Doppler shift from Earth's rotation with respect to the line-of-sight to the source, but I think this effect is super small (I'm getting a shift of \mathcal{O}(10^{-6}
at most), so I don't think this MR should contain thee corrections.
These were the only important effects I could think of that are necessary to use bilby for parameter estimation on long-duration signals with 3G detectors. As @derek.davis noted to me, this will allow users to run parameter estimation with Cosmic Explorer for arbitrary orientations, as the current default CE PSD is only valid for sources at 15 degrees. This will require replacing the CE PSD in bilby with one that does not assume a source position.
I have a bunch of timing tests and showing how the response differs from the current response across frequency space, which I can add to this MR thread.