Finding the full width half maximum of a peak

后端 未结 5 1997
野的像风
野的像风 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-07 23:39

    You can use spline to fit the [blue curve - peak/2], and then find it's roots:

    import numpy as np
    from scipy.interpolate import UnivariateSpline
    
    def make_norm_dist(x, mean, sd):
        return 1.0/(sd*np.sqrt(2*np.pi))*np.exp(-(x - mean)**2/(2*sd**2))
    
    x = np.linspace(10, 110, 1000)
    green = make_norm_dist(x, 50, 10)
    pink = make_norm_dist(x, 60, 10)
    
    blue = green + pink   
    
    # create a spline of x and blue-np.max(blue)/2 
    spline = UnivariateSpline(x, blue-np.max(blue)/2, s=0)
    r1, r2 = spline.roots() # find the roots
    
    import pylab as pl
    pl.plot(x, blue)
    pl.axvspan(r1, r2, facecolor='g', alpha=0.5)
    pl.show()
    

    Here is the result:

    enter image description here

提交回复
热议问题