def detect_burr(data, pv, left=None, right=None, method=0, minimum_peak_distance=100): titles = data.columns titleList = titles.values.tolist() if pv in titleList: pvn = titleList.index(pv) sta = DisplayData.showStatistic(data) print("statistic data:") print(sta) # use boxplot define threshold iqr = sta.loc['75%'][titles[pvn]] - sta.loc['25%'][titles[pvn]] if left is None: left = sta.loc['25%'][titles[pvn]] - 1.5 * iqr if right is None: right = sta.loc['75%'][titles[pvn]] + 1.5 * iqr print('min edge:', left, 'max edge:', right) burrdata = data[((data[titles[pvn]]) < left) | ((data[titles[pvn]]) > right)] LoadData.df2other(burrdata, 'csv', 'newfile.csv') y = data[titles[pvn]].values if method == 0: # find_peaks by scipy signal peaks, _ = signal.find_peaks(y, height=right) plt.plot(y, 'b', lw=1) plt.plot(peaks, y[peaks], "+", mec='r', mew=2, ms=8) plt.plot(np.zeros_like(y) + right, "--", color="gray") plt.title("find_peaks min_height:%7f" % right) plt.show() if method == 1: detect_peaks(y, mph=right, mpd=minimum_peak_distance, show=True) if method == 2: print('Detect peaks with minimum height and distance filters.') # thres=right/max(y) indexes = peakutils.peak.indexes(np.array(y), thres=right / max(y), min_dist=minimum_peak_distance) print('Peaks are: %s' % (indexes)) plt.plot(y, 'b', lw=1) for i in indexes: plt.plot(i, y[i], "+", mec='r', mew=2, ms=8) plt.plot(np.zeros_like(y) + right, "--", color="gray") plt.title("peakutils.peak thres:%f ,minimum_peak_distance:%d" % (right, minimum_peak_distance)) plt.show() else: print("Wrong PV name, not in ", titleList)