| @@ 214-268 (lines=55) @@ | ||
| 211 | y_base = y_fitted_line(m, b, x) |
|
| 212 | return y_base |
|
| 213 | ||
| 214 | def peak_detection_fxn(data_y): |
|
| 215 | """The function takes an input of the column containing the y variables in the dataframe, |
|
| 216 | associated with the current. The function calls the split function, which splits the |
|
| 217 | column into two arrays, one of the positive and one of the negative values. |
|
| 218 | This is because cyclic voltammetry delivers negative peaks, but the peakutils function works |
|
| 219 | better with positive peaks. The function also runs on the middle 80% of data to eliminate |
|
| 220 | unnecessary noise and messy values associated with pseudo-peaks.The vectors are then imported |
|
| 221 | into the peakutils.indexes function to determine the significant peak for each array. |
|
| 222 | The values are stored in a list, with the first index corresponding to the top peak and the |
|
| 223 | second corresponding to the bottom peak. |
|
| 224 | Parameters |
|
| 225 | ______________ |
|
| 226 | y column: must be a column from a pandas dataframe |
|
| 227 | ||
| 228 | Returns |
|
| 229 | _____________ |
|
| 230 | A list with the index of the peaks from the top curve and bottom curve. |
|
| 231 | """ |
|
| 232 | ||
| 233 | # initialize storage list |
|
| 234 | index_list = [] |
|
| 235 | ||
| 236 | # split data into above and below the baseline |
|
| 237 | col_y1, col_y2 = split(data_y) # removed main. head. |
|
| 238 | ||
| 239 | # detemine length of data and what 10% of the data is |
|
| 240 | len_y = len(col_y1) |
|
| 241 | ten_percent = int(np.around(0.1*len_y)) |
|
| 242 | ||
| 243 | # adjust both input columns to be the middle 80% of data |
|
| 244 | # (take of the first and last 10% of data) |
|
| 245 | # this avoid detecting peaks from electrolysis |
|
| 246 | # (from water splitting and not the molecule itself, |
|
| 247 | # which can form random "peaks") |
|
| 248 | mod_col_y2 = col_y2[ten_percent:len_y-ten_percent] |
|
| 249 | mod_col_y1 = col_y1[ten_percent:len_y-ten_percent] |
|
| 250 | ||
| 251 | # run peakutils package to detect the peaks for both top and bottom |
|
| 252 | peak_top = peakutils.indexes(mod_col_y2, thres=0.99, min_dist=20) |
|
| 253 | peak_bottom = peakutils.indexes(abs(mod_col_y1), thres=0.99, min_dist=20) |
|
| 254 | ||
| 255 | # detemine length of both halves of data |
|
| 256 | len_top = len(peak_top) |
|
| 257 | len_bot = len(peak_bottom) |
|
| 258 | ||
| 259 | # append the values to the storage list |
|
| 260 | # manipulate values by adding the ten_percent value back |
|
| 261 | # (as the indecies have moved) |
|
| 262 | # to detect the actual peaks and not the modified values |
|
| 263 | index_list.append(peak_top[int(len_top/2)]+ten_percent) |
|
| 264 | index_list.append(peak_bottom[int(len_bot/2)]+ten_percent) |
|
| 265 | ||
| 266 | # return storage list |
|
| 267 | # first value is the top, second value is the bottom |
|
| 268 | return index_list |
|
| 269 | ||
| 270 | ||
| 271 | def peak_values(DataFrame_x, DataFrame_y): |
|
| @@ 12-65 (lines=54) @@ | ||
| 9 | import main |
|
| 10 | ||
| 11 | ||
| 12 | def peak_detection_fxn(data_y): |
|
| 13 | """The function takes an input of the column containing the y variables in the dataframe, |
|
| 14 | associated with the current. The function calls the split function, which splits the |
|
| 15 | column into two arrays, one of the positive and one of the negative values. |
|
| 16 | This is because cyclic voltammetry delivers negative peaks, but the peakutils function works |
|
| 17 | better with positive peaks. The function also runs on the middle 80% of data to eliminate |
|
| 18 | unnecessary noise and messy values associated with pseudo-peaks.The vectors are then imported |
|
| 19 | into the peakutils.indexes function to determine the significant peak for each array. |
|
| 20 | The values are stored in a list, with the first index corresponding to the top peak and the |
|
| 21 | second corresponding to the bottom peak. |
|
| 22 | Parameters |
|
| 23 | ______________ |
|
| 24 | y column: must be a column from a pandas dataframe |
|
| 25 | Returns |
|
| 26 | _____________ |
|
| 27 | A list with the index of the peaks from the top curve and bottom curve. |
|
| 28 | """ |
|
| 29 | ||
| 30 | # initialize storage list |
|
| 31 | index_list = [] |
|
| 32 | ||
| 33 | # split data into above and below the baseline |
|
| 34 | col_y1, col_y2 = main.split(data_y) |
|
| 35 | ||
| 36 | # detemine length of data and what 10% of the data is |
|
| 37 | len_y = len(col_y1) |
|
| 38 | ten_percent = int(np.around(0.1*len_y)) |
|
| 39 | ||
| 40 | # adjust both input columns to be the middle 80% of data |
|
| 41 | # (take of the first and last 10% of data) |
|
| 42 | # this avoid detecting peaks from electrolysis |
|
| 43 | # (from water splitting and not the molecule itself, |
|
| 44 | # which can form random "peaks") |
|
| 45 | mod_col_y2 = col_y2[ten_percent:len_y-ten_percent] |
|
| 46 | mod_col_y1 = col_y1[ten_percent:len_y-ten_percent] |
|
| 47 | ||
| 48 | # run peakutils package to detect the peaks for both top and bottom |
|
| 49 | peak_top = peakutils.indexes(mod_col_y2, thres=0.99, min_dist=20) |
|
| 50 | peak_bottom = peakutils.indexes(abs(mod_col_y1), thres=0.99, min_dist=20) |
|
| 51 | ||
| 52 | # detemine length of both halves of data |
|
| 53 | len_top = len(peak_top) |
|
| 54 | len_bot = len(peak_bottom) |
|
| 55 | ||
| 56 | # append the values to the storage list |
|
| 57 | # manipulate values by adding the ten_percent value back |
|
| 58 | # (as the indecies have moved) |
|
| 59 | # to detect the actual peaks and not the modified values |
|
| 60 | index_list.append(peak_top[int(len_top/2)]+ten_percent) |
|
| 61 | index_list.append(peak_bottom[int(len_bot/2)]+ten_percent) |
|
| 62 | ||
| 63 | # return storage list |
|
| 64 | # first value is the top, second value is the bottom |
|
| 65 | return index_list |
|