Skip to content

Added frequency and time dependent effects for detector responses and polarization functions

Jacob Golomb requested to merge jacob.golomb/bilby-cython:long_wavelength into main

This MR contains several additions to allow for efficient evaluation of the detector response and polarization tensors that correct for a few effects:

Arm length: frequency_dependent_detector_tensor calculates the detector tensor (which reduces to 1/2 in the static DC limit, appropriate in the long wavelength approximation) for a list of frequencies. This follows the frequency-dependent expression in Essick et al (2017) arXiv:1708.06843, which is isolated in the function frequency_dependent_projected_detector_function. I believe that I have optimized this such that it adds minimal overhead.

  • calculate_n is its own function which calculates the line-of-sight vector n given a geocentric time, ra, and dec. The components of this vector are computed in its own function calculate_n_components. This is useful to isolate for when time dependent effects are included.

Time dependent effects:

Changing detector position:

  • time_and_frequency_dependent_detector_tensor_given_gmst assumes the user has supplied a list of gmsts, with each gmst corresponding to the gmst at each frequency in the list of frequencies, and computes the line-of-sight vector n for each gmst in this list. It then does a similar calculation as frequency_dependent_detector_tensor, but each frequency has a different corresponding n vector.
  • time_delay_from_geocenter_given_gmst computes the time delay from the geocenter assuming the user has supplied a list of gmsts.
  • get_time_dependent_polarization_tensor_given_gmst essentially loops over the same computation as get_polarization_tensor given an array of gmsts
  • the reason the above functions assume the user has supplied a list of gmsts is because otherwise the actual call to greenwich_mean_sidereal_time for each time/frequency point becomes a bottleneck. So it is more efficient to pre-compute an array of gmsts and interpolate in the interferometer object, and feed these interpolated gmst values to time_delay_from_geocenter_given_gmst.
  • I also added a few functions to Doppler shift the frequencies, but I quickly realized this is probably not necessary to include since (1 + \frac{\mathbf{v}.\mathbf{n}}{c}) for Earth's rotation frequency \omega = 7.29e-5 \rm rad/s gives a maximum correction on the order of \mathcal{O}(10^{-6}) in the \mathcal{v} parallel to \mathcal{n} configuration. Nevertheless I put in the functions as well as corresponding property in bilby's interferometer object to store the tangential rotation velocity at the site of the interferometer. I can remove these if they are unnecessary and not used.

Merge request reports