def peak_finder(spectrum, energy):
'''
PEAK_FINDER will search for peaks within a certain range determined by the
Energy given. It takes a Spectra file and an Energy value as input. The
energy range to look in is given by the Full-Width-Half-Maximum (FWHM).
If more than one peak is found in the given range, the peak with the
highest amount of counts will be used.
'''
e0 = spectrum.energy_cal[0]
eslope = spectrum.energy_cal[1]
energy_axis = e0 + eslope*spectrum.channel
peak_energy = []
# rough estimate of fwhm.
fwhm = 0.05*energy**0.5
fwhm_range = 1
# peak search area
start_region = np.flatnonzero(energy_axis > energy - fwhm_range * fwhm)[0]
end_region = np.flatnonzero(energy_axis > energy + fwhm_range * fwhm)[0]
y = spectrum.data[start_region:end_region]
indexes = peakutils.indexes(y, thres=0.5, min_dist=4)
tallest_peak = []
if indexes.size == 0:
peak_energy.append(int((end_region - start_region) / 2) + start_region)
else:
for i in range(indexes.size):
spot = spectrum.data[indexes[i]+start_region]
tallest_peak.append(spot)
indexes = indexes[np.argmax(tallest_peak)]
peak_energy.append(int(indexes+start_region))
peak_energy = float(energy_axis[peak_energy])
return(peak_energy)
评论列表
文章目录