cosmotool/python_sample/icgen/borgadaptor.py

21 lines
501 B
Python
Raw Normal View History

2014-06-01 18:07:44 +02:00
import numpy as np
def fourier_analysis(borg_vol):
L = (borg_vol.ranges[1]-borg_vol.ranges[0])
N = borg_vol.density.shape[0]
return np.fft.rfftn(borg_vol.density)*(L/N)**3, L, N
2014-06-04 09:13:34 +02:00
def half_pixel_shift(borg, doshift=False):
2014-06-01 18:07:44 +02:00
dhat,L,N = fourier_analysis(borg)
2014-06-04 09:13:34 +02:00
if not doshift:
return dhat, L
2014-06-01 18:07:44 +02:00
ik = np.fft.fftfreq(N,d=L/N)*2*np.pi
phi = 0.5*L/N*(ik[:,None,None]+ik[None,:,None]+ik[None,None,:(N/2+1)])
phase = np.cos(phi)+1j*np.sin(phi)
return dhat*phase, L