Skip to content

Commit a96dd70

Browse files
committed
irfft: Warn about asymmetric apodization and don't change default behaviour.
1 parent 93bb8ac commit a96dd70

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

orangecontrib/spectroscopy/irfft.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from enum import IntEnum
2+
import warnings
23

34
import numpy as np
45

@@ -220,11 +221,19 @@ class IRFFT():
220221
def __init__(self, dx,
221222
apod_func=ApodFunc.BLACKMAN_HARRIS_3, zff=2,
222223
phase_res=None, phase_corr=PhaseCorrection.MERTZ,
223-
peak_search=PeakSearch.MAXIMUM, apod_asym=False,
224+
peak_search=PeakSearch.MAXIMUM, apod_asym=None,
224225
):
225226
self.dx = dx
226227
self.apod_func = apod_func
227-
self.apod_asym = apod_asym
228+
if apod_asym is None:
229+
warnings.warn(
230+
"Apodization symmetry must now be specified.\n"
231+
"Defaulting to previous asymmetric behaviour, which is not appropriate for symmetric interferometers (FT-IR).\n"
232+
"See Quasars/orange-spectroscopy#641 for details.",
233+
category=FutureWarning)
234+
self.apod_asym = True
235+
else:
236+
self.apod_asym = apod_asym
228237
self.zff = zff
229238
self.phase_res = phase_res
230239
self.phase_corr = phase_corr
@@ -247,7 +256,7 @@ def __call__(self, ifg, zpd=None, phase=None):
247256
# Calculate phase on interferogram of specified size 2*L
248257
L = self.phase_ifg_size(ifg.shape[0])
249258
if L == 0: # Use full ifg for phase
250-
ifg = apodize(ifg, self.zpd, self.apod_func)
259+
ifg = apodize(ifg, self.zpd, self.apod_func, self.apod_asym)
251260
ifg = zero_fill(ifg, self.zff)
252261
# Rotate the Complete IFG so that the centerburst is at edges.
253262
ifg = np.hstack((ifg[self.zpd:], ifg[0:self.zpd]))

orangecontrib/spectroscopy/tests/test_irfft.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from orangecontrib.spectroscopy.data import getx
77

8-
from orangecontrib.spectroscopy.irfft import (IRFFT, zero_fill, PhaseCorrection,
8+
from orangecontrib.spectroscopy.irfft import (IRFFT, ComplexFFT, zero_fill, PhaseCorrection,
99
find_zpd, PeakSearch, ApodFunc,
1010
MultiIRFFT, apodize,
1111
)
@@ -78,6 +78,7 @@ def test_agilent_fft_sc(self):
7878
dx_ag = (1 / 1.57980039e+04 / 2) * 4
7979
fft = IRFFT(dx=dx_ag,
8080
apod_func=ApodFunc.BLACKMAN_HARRIS_4,
81+
apod_asym=False,
8182
zff=1,
8283
phase_res=None,
8384
phase_corr=PhaseCorrection.MERTZ,
@@ -120,6 +121,7 @@ def test_multi(self):
120121
dx_ag = (1 / 1.57980039e+04 / 2) * 4
121122
fft = MultiIRFFT(dx=dx_ag,
122123
apod_func=ApodFunc.BLACKMAN_HARRIS_4,
124+
apod_asym=False,
123125
zff=1,
124126
phase_res=None,
125127
phase_corr=PhaseCorrection.MERTZ,
@@ -177,3 +179,9 @@ def test_apodization(self):
177179
# Apodization should not change value at zpd
178180
# Ramp should reduce zpd value by half
179181
self.assertAlmostEqual(ifg[zpd] * ramp_value, out[zpd])
182+
183+
def test_apod_asym_warning(self):
184+
for FFT in IRFFT, MultiIRFFT, ComplexFFT:
185+
with self.assertWarns(FutureWarning):
186+
fft = FFT(dx=dx)
187+
self.assertTrue(fft.apod_asym)

0 commit comments

Comments
 (0)