| Conditions | 1 |
| Total Lines | 54 |
| Code Lines | 14 |
| Lines | 54 |
| Ratio | 100 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | """This module contains a function to determine the peaks in the specified dataset, |
||
| 12 | View Code Duplication | 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 = core.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 |
||
| 66 |