Skip to content

Commit 9661b0d

Browse files
committed
Computing registry mechanism: a step further, still a lot to do
1 parent f18446e commit 9661b0d

14 files changed

Lines changed: 1156 additions & 2212 deletions

File tree

cdl/computation/base.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ class FFTParam(gds.DataSet):
157157

158158
shift = gds.BoolItem(_("Shift"), help=_("Shift zero frequency to center"))
159159

160+
def __init__(self, *args, **kwargs):
161+
super().__init__(*args, **kwargs)
162+
self.shift = Conf.proc.fft_shift_enabled.get()
163+
160164

161165
class SpectrumParam(gds.DataSet):
162166
"""Spectrum parameters"""
@@ -235,14 +239,14 @@ def dst_n_to_1(
235239
"""
236240
if not isinstance(src_list, list) or len(src_list) <= 1:
237241
raise ValueError("src_list must be a list of at least 2 objects")
238-
all_sigs = all([isinstance(obj, SignalObj) for obj in src_list])
239-
all_imgs = all([isinstance(obj, ImageObj) for obj in src_list])
242+
all_sigs = all(isinstance(obj, SignalObj) for obj in src_list)
243+
all_imgs = all(isinstance(obj, ImageObj) for obj in src_list)
240244
if not (all_sigs or all_imgs):
241245
raise ValueError("src_list must be a list of SignalObj or ImageObj objects")
242246
title = f"{name}({', '.join([obj.short_id for obj in src_list])})"
243247
if suffix: # suffix may be None or an empty string
244248
title += "|" + suffix
245-
if any([is_complex_dtype(obj.data.dtype) for obj in src_list]):
249+
if any(is_complex_dtype(obj.data.dtype) for obj in src_list):
246250
dst_dtype = complex
247251
else:
248252
dst_dtype = float

cdl/computation/image/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,10 @@ class FlatFieldParam(BaseProcParam):
389389

390390
threshold = gds.FloatItem(_("Threshold"), default=0.0)
391391

392+
def update_from_obj(self, obj: ImageObj) -> None:
393+
"""Update parameters from image"""
394+
self.set_from_datatype(obj.data.dtype)
395+
392396

393397
def compute_flatfield(src1: ImageObj, src2: ImageObj, p: FlatFieldParam) -> ImageObj:
394398
"""Compute flat field correction with :py:func:`cdl.algorithms.image.flatfield`
@@ -951,7 +955,7 @@ def __init__(self, *args, **kwargs) -> None:
951955
super().__init__(*args, **kwargs)
952956
self.__obj: ImageObj | None = None
953957

954-
def update_from_image(self, obj: ImageObj) -> None:
958+
def update_from_obj(self, obj: ImageObj) -> None:
955959
"""Update parameters from image"""
956960
self.__obj = obj
957961
self.x0 = obj.xc
@@ -1260,7 +1264,7 @@ def __init__(self, *args, **kwargs) -> None:
12601264
super().__init__(*args, **kwargs)
12611265
self.__obj: ImageObj | None = None
12621266

1263-
def update_from_image(self, obj: ImageObj) -> None:
1267+
def update_from_obj(self, obj: ImageObj) -> None:
12641268
"""Update parameters from image"""
12651269
self.__obj = obj
12661270
self.choice_callback(None, self.strategy)

cdl/computation/signal.py

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ def get_nyquist_frequency(obj: SignalObj) -> float:
828828
fs = float(obj.x.size - 1) / (obj.x[-1] - obj.x[0])
829829
return fs / 2.0
830830

831-
def update_from_signal(self, obj: SignalObj) -> None:
831+
def update_from_obj(self, obj: SignalObj) -> None:
832832
"""Update the filter parameters from a signal object
833833
834834
Args:
@@ -919,19 +919,71 @@ def compute_filter(src: SignalObj, p: BaseHighLowBandParam) -> SignalObj:
919919
return dst
920920

921921

922+
def compute_lowpass(src: SignalObj, p: LowPassFilterParam) -> SignalObj:
923+
"""Compute low-pass filter with :py:func:`scipy.signal.filtfilt`
924+
925+
Args:
926+
src: source signal
927+
p: parameters
928+
929+
Returns:
930+
Result signal object
931+
"""
932+
return compute_filter(src, p)
933+
934+
935+
def compute_highpass(src: SignalObj, p: HighPassFilterParam) -> SignalObj:
936+
"""Compute high-pass filter with :py:func:`scipy.signal.filtfilt`
937+
938+
Args:
939+
src: source signal
940+
p: parameters
941+
942+
Returns:
943+
Result signal object
944+
"""
945+
return compute_filter(src, p)
946+
947+
948+
def compute_bandpass(src: SignalObj, p: BandPassFilterParam) -> SignalObj:
949+
"""Compute band-pass filter with :py:func:`scipy.signal.filtfilt`
950+
951+
Args:
952+
src: source signal
953+
p: parameters
954+
955+
Returns:
956+
Result signal object
957+
"""
958+
return compute_filter(src, p)
959+
960+
961+
def compute_bandstop(src: SignalObj, p: BandStopFilterParam) -> SignalObj:
962+
"""Compute band-stop filter with :py:func:`scipy.signal.filtfilt`
963+
964+
Args:
965+
src: source signal
966+
p: parameters
967+
968+
Returns:
969+
Result signal object
970+
"""
971+
return compute_filter(src, p)
972+
973+
922974
class ZeroPadding1DParam(gds.DataSet):
923975
"""Zero padding parameters"""
924976

925977
def __init__(self, *args, **kwargs) -> None:
926978
super().__init__(*args, **kwargs)
927979
self.__obj: SignalObj | None = None
928980

929-
def update_from_signal(self, obj: SignalObj) -> None:
981+
def update_from_obj(self, obj: SignalObj) -> None:
930982
"""Update parameters from signal"""
931983
self.__obj = obj
932984
self.choice_callback(None, self.strategy)
933985

934-
def choice_callback(self, item, value):
986+
def choice_callback(self, item, value): # pylint: disable=unused-argument
935987
"""Callback for choice item"""
936988
size = self.__obj.x.size
937989
if value == "next_pow2":
@@ -1176,6 +1228,17 @@ class ResamplingParam(InterpolationParam):
11761228
"display", active=gds.FuncProp(_prop, lambda x: x == "nbpts")
11771229
)
11781230

1231+
def update_from_obj(self, obj: SignalObj) -> None:
1232+
"""Update parameters from a signal object."""
1233+
if self.xmin is None:
1234+
self.xmin = obj.x[0]
1235+
if self.xmax is None:
1236+
self.xmax = obj.x[-1]
1237+
if self.dx is None:
1238+
self.dx = obj.x[1] - obj.x[0]
1239+
if self.nbpts is None:
1240+
self.nbpts = len(obj.x)
1241+
11791242

11801243
def compute_resampling(src: SignalObj, p: ResamplingParam) -> SignalObj:
11811244
"""Resample data with :py:func:`cdl.algorithms.signal.interpolate`
@@ -1229,7 +1292,7 @@ def compute_detrending(src: SignalObj, p: DetrendingParam) -> SignalObj:
12291292
return dst
12301293

12311294

1232-
def compute_XY_mode(src1: SignalObj, src2: SignalObj) -> SignalObj:
1295+
def compute_xy_mode(src1: SignalObj, src2: SignalObj) -> SignalObj:
12331296
"""Simulate the X-Y mode of an oscilloscope.
12341297
12351298
Use the first signal as the X-axis and the second signal as the Y-axis.

0 commit comments

Comments
 (0)