Geometric helper function

gwmemory.angles.analytic_gamma(lm1: Tuple[int, int], lm2: Tuple[int, int], ell: int) float

Analytic function to compute gamma_lmlm_l Eq. (8) of arXiv:1807.0090

The primary component is taken from https://github.com/moble/spherical/blob/c3fe00ab6d79732fe1cbc6d56574ea94702d89ae/spherical/multiplication.py.

Parameters:
lm1: tuple

tuple of first spherical harmonic mode

lm2: tuple

tuple of second spherical harmonic mode

ell: int

The degree of the output spherical harmonic

Returns:
float: the gamma coefficient
gwmemory.angles.cross_tensor(wx: ndarray, wy: ndarray) ndarray

Calculate the cross polarization tensor for some basis. c.f., eq. 2 of https://arxiv.org/pdf/1710.03794.pdf

gwmemory.angles.gamma(lm1: str, lm2: str, incs: ndarray = None, theta: ndarray = None, phi: ndarray = None, y_lmlm_factor: ndarray = None) list

Coefficients mapping the spherical harmonic components of the oscillatory strain to the memory.

Computed according to equation 8 of Talbot et al. (2018), arXiv:1807.00990. Output modes with l=range(2, 20), m=m1-m2.

Parameters:
lm1: str

first input spherical harmonic mode

lm2: str

second input spherical haromonic mode

incs: array, optional

observer inclination values over which to compute the final integral

theta: array, optional

1d array of binary inclination values, over which to compute first integral

phi: array, optional

1d array of binary polarisation values, over which to compute the first integral

y_lmlm_factor: array, optional

Array over of spherical harmonic factor evaluated on meshgrid of theta, phi

Returns:
gammas: list

List of coefficients for output modes, l=range(2, 20), m=m1-m2

Notes

I recommend using analytic_gamma instead, it is much more precise.

gwmemory.angles.lambda_lmlm(inc: float, phase: float, lm1: str, lm2: str, theta: ndarray = None, phi: ndarray = None, y_lmlm_factor: ndarray = None) complex

Angular integral for a specific ll’mm’ as given by equation 7 of Talbot et al. (2018), arXiv:1807.00990.

The transverse traceless part of the integral over all binary orientations is returned.

The integral is given by: frac{1}{2} int_{S^{2}} dOmega’ Y^{-2}_{ell_1 m_1}(Omega’) bar{Y}^{-2}_{ell_2 m_2}(Omega’) times \ left[frac{n_jn_k}{1-n_{l}N_{l}} right]^{TT} (e^{+}_{jk} - i e^{times}_{jk})

Parameters:
inc: float

binary inclination

phase: float

binary phase at coalescence

lm1: str

first lm value format is e.g., ‘22’

lm2: str

second lm value format is e.g., ‘22’

theta: array, optional

1d array of binary inclination values, over which to integrate

phi: array, optional

1d array of binary polarisation values, over which to integrate

y_lmlm_factor: array, optional

Array over of spherical harmonic factor evaluated on meshgrid of theta, phi

Returns:
lambda_lmlm: float, complex

lambda_plus - i lambda_cross

gwmemory.angles.lambda_matrix(inc: float, phase: float, lm1: str, lm2: str, theta: ndarray = None, phi: ndarray = None, y_lmlm_factor: ndarray = None) ndarray

Angular integral for a specific ll’mm’ as given by equation 7 of Talbot et al. (2018), arXiv:1807.00990.

The transverse traceless part of the integral over all binary orientations is returned.

The integral is given by: int_{S^{2}} dOmega’ Y^{-2}_{ell_1 m_1}(Omega’) bar{Y}^{-2}_{ell_2 m_2}(Omega’) times \ left[frac{n_jn_k}{1-n_{l}N_{l}} right]^{TT}

Parameters:
inc: float

binary inclination

phase: float

binary phase at coalescence

lm1: str

first lm value format is e.g., ‘22’

lm2: str

second lm value format is e.g., ‘22’

theta: array, optional

1d array of binary inclination values, over which to integrate

phi: array, optional

1d array of binary polarisation values, over which to integrate

y_lmlm_factor: array, optional

Array over of spherical harmonic factor evaluated on meshgrid of theta, phi

Returns:
lambda_mat: array

three by three transverse traceless matrix of the appropriate integral

gwmemory.angles.memory_correction(ell: int, ss: int = 0) float

Correction to the Gamma function for the operator in Eq. (12) of arXiv:2011.01309

Parameters:
ell: int

degree of the spherical harmonic

ss: int

spin-weight of the waveform being adjusted, ss=0 for out purpose

Returns:
int: the correction
gwmemory.angles.omega_ij_to_omega_pol(omega_ij: ndarray, inc: float, phase: float) Tuple[ndarray, ndarray]

Map from strain tensor to plus and cross modes.

We assume that only plus and cross are present.

Parameters:
omega_ij: array

3x3 matrix describing strain or a proxy for strain

inc: float

inclination of source

phase: float

phase at coalescence of source

Returns:
hp: float

Magnitude of plus mode.

hx: float

Magnitude of cross mode.

gwmemory.angles.plus_tensor(wx: ndarray, wy: ndarray) ndarray

Calculate the plus polarization tensor for some basis. c.f., eq. 2 of https://arxiv.org/pdf/1710.03794.pdf

gwmemory.angles.wave_frame(theta: float, phi: float, psi: float = 0) Tuple[ndarray, ndarray]

Generate wave-frame basis from three angles, see Nishizawa et al. (2009)