@@ -12,10 +12,11 @@ def local_peak_at(x, signal, wlen):
1212
1313
1414class PeakMatcher :
15- def add_peak (self , x : int , trace : Trace , manual_remove : list [int ], wlen : int = 5 ):
16- """Adds a new peak in the vicinity of `x`.
15+ def add_peak (self , x : int , trace : Trace , manual_remove : list [int ], wlen : int = 2 ):
16+ """Add a new peak in the vicinity of `x`.
1717
18- The new peak is calculated as the local maximum near `x`, in a window of 2*wlen points.
18+ The new peak is calculated as the local maximum of a window centered at `x`,
19+ that ranges `wlen` in each direction.
1920
2021 Parameters:
2122 x (int):
@@ -37,19 +38,18 @@ def add_peak(self, x: int, trace: Trace, manual_remove: list[int], wlen: int = 5
3738 """
3839 window = slice (x - wlen , x + wlen )
3940 new_peak = local_peak_at (x , trace .dff [window ], wlen )
41+ if new_peak in trace .peak_idxes :
42+ return new_peak , trace .peak_idxes , None
4043 new_arr = np .append (trace .peak_idxes , new_peak )
4144 new_arr .sort ()
4245
4346 # if we add a peak in a place where there's a manually removed peak,
4447 # that manually removed entry must be erased:
4548 to_remove = None
4649 if manual_remove :
47- try :
48- peak = next (p for p in manual_remove if x - wlen <= p <= x + wlen )
49- i = manual_remove .index (peak )
50+ if new_peak in manual_remove :
51+ i = manual_remove .index (new_peak )
5052 to_remove = manual_remove [:i ] + manual_remove [i + 1 :]
51- except StopIteration :
52- pass
5353
5454 return new_peak , new_arr , to_remove
5555
@@ -59,9 +59,9 @@ def remove_peak(
5959 trace : Trace ,
6060 manual_add : list [int ],
6161 manual_widths : dict [str , Any ],
62- wlen = 10 ,
62+ wlen = 2 ,
6363 ):
64- """Removes peaks that are within `wlen` of `x`.
64+ """Remove all peaks that are within ± `wlen` of `x`.
6565
6666 Parameters:
6767 x (int):
@@ -82,8 +82,8 @@ def remove_peak(
8282 Updated list with all peaks.
8383 to_add (list[int]):
8484 Updated list of manually added peaks.
85- peak_width_to_remove (int):
86- Key that should be removed from manual widths dict .
85+ filtered_peak_widths (int):
86+ Updated manual widhts dict without the peaks that were removed .
8787 """
8888 target = (trace .peak_idxes >= x - wlen ) & (trace .peak_idxes <= x + wlen )
8989 removed = trace .peak_idxes [target ].tolist ()
@@ -93,20 +93,17 @@ def remove_peak(
9393 # that manually added peak entry must be erased
9494 to_add = None
9595 if manual_add :
96- try :
97- # FIXME: if you remove more than one element, this update method fails
98- peak = next (p for p in manual_add if x - wlen <= p <= x + wlen )
99- i = manual_add .index (peak )
100- to_add = manual_add [:i ] + manual_add [i + 1 :]
101- except StopIteration :
102- pass
103- peak_width_to_remove = None
96+ filtered_manual_add = [
97+ p for p in manual_add if p < x - wlen or p > x + wlen
98+ ]
99+ to_add = filtered_manual_add
100+
101+ filtered_peak_widths = None
104102 if manual_widths :
105- try :
106- peak_width_to_remove = next (
107- int (p ) for p in manual_widths if x - wlen <= int (p ) <= x + wlen
108- )
109- except StopIteration :
110- pass
111-
112- return removed , new_arr , to_add , peak_width_to_remove
103+ filtered_peak_widths = {
104+ p : data
105+ for p , data in manual_widths .items ()
106+ if int (p ) < x - wlen or int (p ) > x + wlen
107+ }
108+
109+ return removed , new_arr , to_add , filtered_peak_widths
0 commit comments