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