From a23ffe6672d67f56fce7fc1991259d32159e1805 Mon Sep 17 00:00:00 2001 From: hapipapijuris <“yamanaka.juri.h0@s.mail.nagoya-u.ac.jp”> Date: Wed, 21 Aug 2024 03:03:54 +0000 Subject: [PATCH 1/2] #150 Add signal spike removal --- decode/qlook.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/decode/qlook.py b/decode/qlook.py index 35c2311..f835ffd 100644 --- a/decode/qlook.py +++ b/decode/qlook.py @@ -303,6 +303,21 @@ def daisy( return save_qlook(fig, file, overwrite=overwrite, **options) +def flag_spike(index: xr.DataArray, /) -> xr.DataArray: + index[:1] = index[-1:] = True + return index + + +def despike(dems: xr.DataArray) -> xr.DataArray: + is_spike = ( + xr.zeros_like(dems.time, bool) + .reset_coords(drop=True) + .groupby(utils.phaseof(dems.beam)) + .map(flag_spike) + ) + return dems.where(~is_spike, drop=True) + + def pswsc( dems: Path, /, @@ -364,8 +379,10 @@ def pswsc( frequency_units=frequency_units, ) + da_despiked = despike(da) + # make spectrum - da_scan = select.by(da, "state", ["ON", "OFF"]) + da_scan = select.by(da_despiked, "state", ["ON", "OFF"]) da_sub = da_scan.groupby("scan").map(subtract_per_scan) spec = da_sub.mean("scan") @@ -379,7 +396,7 @@ def pswsc( fig, axes = plt.subplots(1, 2, figsize=DEFAULT_FIGSIZE) ax = axes[0] # type: ignore - plot.data(da.scan, ax=ax) + plot.data(da_despiked.scan, ax=ax) ax = axes[1] # type: ignore plot.data(spec, x="frequency", s=5, hue=None, ax=ax) From 77c85a633c2dbd154092c016ec0c20e353db6859 Mon Sep 17 00:00:00 2001 From: hapipapijuris <“yamanaka.juri.h0@s.mail.nagoya-u.ac.jp”> Date: Wed, 21 Aug 2024 05:16:11 +0000 Subject: [PATCH 2/2] change function positions for spike --- decode/qlook.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/decode/qlook.py b/decode/qlook.py index f835ffd..815e1a7 100644 --- a/decode/qlook.py +++ b/decode/qlook.py @@ -303,21 +303,6 @@ def daisy( return save_qlook(fig, file, overwrite=overwrite, **options) -def flag_spike(index: xr.DataArray, /) -> xr.DataArray: - index[:1] = index[-1:] = True - return index - - -def despike(dems: xr.DataArray) -> xr.DataArray: - is_spike = ( - xr.zeros_like(dems.time, bool) - .reset_coords(drop=True) - .groupby(utils.phaseof(dems.beam)) - .map(flag_spike) - ) - return dems.where(~is_spike, drop=True) - - def pswsc( dems: Path, /, @@ -1111,6 +1096,21 @@ def _scan( return save_qlook(fig, file, overwrite=overwrite, **options) +def despike(dems: xr.DataArray, /) -> xr.DataArray: + is_spike = ( + xr.zeros_like(dems.time, bool) + .reset_coords(drop=True) + .groupby(utils.phaseof(dems.beam)) + .map(flag_spike) + ) + return dems.where(~is_spike, drop=True) + + +def flag_spike(index: xr.DataArray, /) -> xr.DataArray: + index[:1] = index[-1:] = True + return index + + def mean_in_time(dems: xr.DataArray) -> xr.DataArray: """Similar to DataArray.mean but keeps middle time.""" middle = dems[len(dems) // 2 : len(dems) // 2 + 1]