Skip to content

Commit 720c8f6

Browse files
author
Stefano Moia
authored
Merge pull request #1 from rmarkello/fix/add_peaks
[FIX] Fixes add_peaks() functionality
2 parents f5d0c53 + b147d7b commit 720c8f6

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

peakdet/editor.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ def __init__(self, data):
3535
self.fig.canvas.mpl_connect('scroll_event', self.on_wheel)
3636
self.fig.canvas.mpl_connect('key_press_event', self.on_key)
3737

38-
# three selectors for rejection (left mouse), addition (central mouse), and deletion (right mouse)
38+
# three selectors for:
39+
# 1. rejection (left mouse),
40+
# 2. addition (central mouse), and
41+
# 3. deletion (right mouse)
3942
reject = functools.partial(self.on_edit, reject=True)
4043
delete = functools.partial(self.on_edit, reject=False)
4144
include = functools.partial(self.on_edit, reject=False, insert=True)
@@ -98,19 +101,21 @@ def on_edit(self, xmin, xmax, *, reject=False, insert=False):
98101
"""
99102

100103
if reject and insert:
101-
raise Exception('Selected to both reject and insert! Program goes kaput.')
104+
raise ValueError('Cannot select both reject and insert!')
102105

103106
tmin, tmax = np.searchsorted(self.time, (xmin, xmax))
104107
pmin, pmax = np.searchsorted(self.data.peaks, (tmin, tmax))
105108

106109
if insert:
107-
temp_peak = np.argmax(self.data.data[tmin:tmax])
108-
if temp_peak == 0:
110+
tmp = np.argmax(self.data.data[tmin:tmax]) if tmin != tmax else 0
111+
newpeak = tmin + tmp
112+
if newpeak == tmin:
113+
self.plot_signals()
109114
return
110-
newpeak = [tmin + temp_peak]
111115
else:
112116
bad = np.arange(pmin, pmax, dtype=int)
113117
if len(bad) == 0:
118+
self.plot_signals()
114119
return
115120

116121
if reject:
@@ -121,7 +126,7 @@ def on_edit(self, xmin, xmax, *, reject=False, insert=False):
121126
# store edits in local history & call function
122127
if insert:
123128
self.included.add(newpeak)
124-
self.data = operations.add_peaks(self.data, newpeak, pmin)
129+
self.data = operations.add_peaks(self.data, newpeak)
125130
else:
126131
rej.update(self.data.peaks[bad].tolist())
127132
self.data = fcn(self.data, self.data.peaks[bad])
@@ -131,7 +136,8 @@ def on_edit(self, xmin, xmax, *, reject=False, insert=False):
131136
def undo(self):
132137
""" Resets last span select peak removal """
133138
# check if last history entry was a manual reject / delete
134-
if self.data._history[-1][0] not in ['reject_peaks', 'delete_peaks']:
139+
relevant = ['reject_peaks', 'delete_peaks', 'add_peaks']
140+
if self.data._history[-1][0] not in relevant:
135141
return
136142

137143
# pop off last edit and delete
@@ -149,7 +155,12 @@ def undo(self):
149155
peaks['remove']
150156
)
151157
self.deleted.difference_update(peaks['remove'])
152-
158+
elif func == 'add_peaks':
159+
self.data._metadata['peaks'] = np.delete(
160+
self.data._metadata['peaks'],
161+
np.searchsorted(self.data._metadata['peaks'], peaks['add']),
162+
)
163+
self.included.remove(peaks['add'])
153164
self.data._metadata['troughs'] = utils.check_troughs(self.data,
154165
self.data.peaks)
155166
self.plot_signals()

peakdet/operations.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,22 +183,24 @@ def reject_peaks(data, remove):
183183

184184

185185
@utils.make_operation()
186-
def add_peaks(data, newpeak, pins):
186+
def add_peaks(data, add):
187187
"""
188188
Add `newpeak` to add them in `data`
189189
190190
Parameters
191191
----------
192192
data : Physio_like
193193
newpeak : int
194+
pins : int
194195
195196
Returns
196197
-------
197198
data : Physio_like
198199
"""
199200

200201
data = utils.check_physio(data, ensure_fs=False, copy=True)
201-
data._metadata['peaks'] = np.insert(data._metadata['peaks'], pins, newpeak)
202+
idx = np.searchsorted(data._metadata['peaks'], add)
203+
data._metadata['peaks'] = np.insert(data._metadata['peaks'], idx, add)
202204
data._metadata['troughs'] = utils.check_troughs(data, data.peaks)
203205

204206
return data
@@ -228,13 +230,14 @@ def edit_physio(data):
228230
# perform manual editing
229231
edits = editor._PhysioEditor(data)
230232
plt.show(block=True)
231-
delete, reject = sorted(edits.deleted), sorted(edits.rejected)
232233

233234
# replay editing on original provided data object
234-
if reject is not None:
235-
data = reject_peaks(data, remove=reject)
236-
if delete is not None:
237-
data = delete_peaks(data, remove=delete)
235+
if len(edits.rejected) > 0:
236+
data = reject_peaks(data, remove=sorted(edits.rejected))
237+
if len(edits.deleted) > 0:
238+
data = delete_peaks(data, remove=sorted(edits.deleted))
239+
if len(edits.included) > 0:
240+
data = add_peaks(data, add=sorted(edits.included))
238241

239242
return data
240243

0 commit comments

Comments
 (0)