33import numpy as np
44import scipy .interpolate
55import scipy .signal
6- from scipy .optimize import curve_fit
76
87
98def get_mins_from_ffdata (ffdata : np .ndarray ) -> list [float ]:
109 """Find the positions of minimums in form factor data."""
11- sg_window_q = 0.03 # Savitsky-Golay window (in Q)
10+ sg_window_q = 0.05 # Savitsky-Golay window (in Q)
1211 delta_q = ffdata [1 , 0 ] - ffdata [0 , 0 ] # Q step in FF data
1312 sg_window_n = int (np .ceil (sg_window_q / delta_q )) # S-G window (in num frames)
1413 try :
@@ -19,7 +18,8 @@ def get_mins_from_ffdata(ffdata: np.ndarray) -> list[float]:
1918
2019 min_q_distance = 0.01 # Min distance btw peaks (in Q)
2120 mqd_n = int (np .ceil (min_q_distance / delta_q )) # same in num frames
22- peak_ind = scipy .signal .find_peaks (- filtered , distance = mqd_n )
21+ peak_prominence = (filtered .max () - filtered .min ()) * 0.1
22+ peak_ind = scipy .signal .find_peaks (- filtered , distance = mqd_n , prominence = peak_prominence )
2323 min_peak_q = 0.1
2424
2525 return [ffdata [i , 0 ] for i in peak_ind [0 ] if ffdata [i , 0 ] > min_peak_q ]
@@ -77,5 +77,9 @@ def calc_minpos_with_error(ffdata: np.ndarray) -> (float, float):
7777 )
7878 a , b , _c = popt
7979 min_x = - b / 2 / a
80- delta_minx = (- 1 / 2 / a )** 2 * pcov [0 , 0 ] + (b / 2 / a ** 2 )** 2 * pcov [1 , 1 ] + 2 * (- 1 / 2 / a )* (b / 2 / a ** 2 )* pcov [0 , 1 ]
80+ delta_minx = (
81+ (- 1 / 2 / a ) ** 2 * pcov [0 , 0 ]
82+ + (b / 2 / a ** 2 ) ** 2 * pcov [1 , 1 ]
83+ + 2 * (- 1 / 2 / a ) * (b / 2 / a ** 2 ) * pcov [0 , 1 ]
84+ )
8185 return min_x , np .sqrt (delta_minx )
0 commit comments