Finding the full width half maximum of a peak

后端 未结 5 1998
野的像风
野的像风 2020-12-07 23:28

I have been trying to figure out the full width half maximum (FWHM) of the the blue peak (see image). The green peak and the magenta peak combined make up the blue peak. I h

5条回答
  •  伪装坚强ぢ
    2020-12-08 00:00

    This worked for me in iPython (quick and dirty, can be reduced to 3 lines):

    def FWHM(X,Y):
        half_max = max(Y) / 2.
        #find when function crosses line half_max (when sign of diff flips)
        #take the 'derivative' of signum(half_max - Y[])
        d = sign(half_max - array(Y[0:-1])) - sign(half_max - array(Y[1:]))
        #plot(X[0:len(d)],d) #if you are interested
        #find the left and right most indexes
        left_idx = find(d > 0)[0]
        right_idx = find(d < 0)[-1]
        return X[right_idx] - X[left_idx] #return the difference (full width)
    

    Some additions can be made to make the resolution more accurate, but in the limit that there are many samples along the X axis and the data is not too noisy, this works great.

    Even when the data are not Gaussian and a little noisy, it worked for me (I just take the first and last time half max crosses the data).

提交回复
热议问题