From 1af60c50e382cd1b2f8cbd0aca91b0e300dedf65 Mon Sep 17 00:00:00 2001 From: Egor Sobolev <egor.sobolev@xfel.eu> Date: Tue, 12 Sep 2023 19:34:42 +0200 Subject: [PATCH] Use rfft2 (fft for real input) instead of fftconvolve --- src/calng/correction_addons/autocorrelation.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/calng/correction_addons/autocorrelation.py b/src/calng/correction_addons/autocorrelation.py index e22c64e3..8b013778 100644 --- a/src/calng/correction_addons/autocorrelation.py +++ b/src/calng/correction_addons/autocorrelation.py @@ -44,14 +44,21 @@ class Autocorrelation(BaseCorrectionAddon): def post_correction(self, processed_data, cell_table, pulse_table, output_hash): """Called directly after correction has happened. Processed data will still be on GPU if the correction device is generally running in GPU mode.""" - from cupyx.scipy.signal import fftconvolve + #from cupyx.scipy.signal import fftconvolve data = processed_data.copy() data[np.isnan(data)] = 0.0 - autocorr_sum = fftconvolve( - data, data[:, ::-1, ::-1], 'same', axes=(-2, -1) - ).sum(axis=0) + # autocorr_sum = fftconvolve( + # data, data[:, ::-1, ::-1], 'same', axes=(-2, -1) + # ).sum(axis=0) + + nf, nx, ny = data.shape + g = np.fft.rfft2(data, s=(2 * nx, 2 * ny)) + autocorr_sum = np.fft.irfft2( + ((g * g.conj()).real).sum(axis=0), + s=(nx, ny) + ).real frames_sum = data.sum(axis=0) -- GitLab