@@ -259,12 +259,15 @@ def get_max_similarity(self, b, window, resolution=2):
259259
260260 return M [argmax_sim ], max_sim , monoisotopic_mass , charge_state
261261
262- def find_isotope_patterns (self , frame : TimsFrame , min_intensity = 100 , min_peaks = 5 , overlapping = True ):
262+ def find_isotope_patterns (self , frame : TimsFrame , min_intensity = 100 , min_peaks = 5 , overlapping = True ,
263+ window_length = 4 , min_cosim = 0.6 ):
263264 """
264265 :param frame:
265266 :param min_intensity:
266267 :param min_peaks:
267268 :param overlapping:
269+ :param window_length:
270+ :param min_cosim:
268271 :return:
269272 """
270273
@@ -281,7 +284,8 @@ def find_isotope_patterns(self, frame: TimsFrame, min_intensity=100, min_peaks=5
281284 r_list = []
282285
283286 for scan , mz_bin , keys , vectors in zip (s , b , WK , F ):
284- r_list .append (self .calculate_window_collision (scan , np .abs (mz_bin ), keys , vectors ))
287+ r_list .append (self .calculate_window_collision (scan , mz_bin , keys , vectors , window_length = window_length ,
288+ min_cosim = min_cosim ))
285289
286290 A = np .hstack ([np .expand_dims (s , axis = 1 ), np .expand_dims (b , axis = 1 ), np .array (r_list )])
287291 patterns = pd .DataFrame (A [A [:, 4 ] != - 1 ], columns = ['scan' , 'bin' , 'cosim' , 'mz_mono' , 'charge' ])
@@ -309,7 +313,20 @@ def find_isotope_patterns(self, frame: TimsFrame, min_intensity=100, min_peaks=5
309313
310314 return patterns
311315
312- def calculate_window_collision (self , scan , mz_bin , keys , dense_vector , min_cosim = 0.6 ):
316+ def calculate_window_collision (self , scan , mz_bin , keys , dense_vector , window_length = 4 , min_cosim : float = 0.6 ):
317+ """
318+
319+ :param scan:
320+ :param mz_bin:
321+ :param keys:
322+ :param dense_vector:
323+ :param window_length:
324+ :param min_cosim:
325+ :return:
326+ """
327+
328+ is_overlapping = int (((np .sign (mz_bin ) - 1 ) / - 2 ))
329+ mz_bin = np .abs (mz_bin )
313330
314331 if mz_bin in self .key_dict :
315332
@@ -324,7 +341,7 @@ def calculate_window_collision(self, scan, mz_bin, keys, dense_vector, min_cosim
324341
325342 argmax_cosim = np .argmax (real_cosim )
326343 max_cosim = np .round (real_cosim [argmax_cosim ][0 ], 2 )
327- max_m_c = m_c [argmax_cosim ]
344+ max_m_c = m_c [argmax_cosim ] - is_overlapping * ( window_length / 2 )
328345 max_c_c = c_c [argmax_cosim ]
329346
330347 if max_cosim > min_cosim :
0 commit comments