python - 如何找到连续体并删除它?
问题描述
我正在设置一个代码,该代码遍历光谱数据并找到连续谱并将其删除,以便正常通量为 0,并且我可以正确计算发射线的通量。
问题是这个连续体并不是一个真正的常数,而且大多数时候看起来像一个根函数(并非总是如此)。我怎样才能让它找到连续体?
这是我的光谱数据,这就是我找到峰的方式
光谱数据:
m1 = modeling.models.Gaussian1D(amplitude=10, mean=3726, stddev=8)
m2 = modeling.models.Gaussian1D(amplitude=10, mean=3126, stddev=8)
x = np.linspace(3000, 4500, 1000)
continuum_sqrt = np.sqrt(x)*0.2
mock_spectrum = continuum_sqrt + m1(x) + m2(x)
mock_spectrum = mock_spectrum + np.sqrt(mock_spectrum) * np.random.random(x.size) - 0.5
mock_spectrum -= mock_spectrum.min()
这是高斯的发现:
def gaussfcn(x, *p):
""" gauss function to be used for fits to the data"""
A, mu, sigma = p
return A*np.exp(-(x-mu)**2/(2.*sigma**2))
class Gauss:
"""A class to hold coefficients for Gaussian distributions"""
def __init__(self, A, mu, sigma):
self.A = A
self.mu = mu
self.sigma = sigma
def value(self, x):
return gaussfcn(x, self.A, self.mu, self.sigma)
def as_string(self, ndigits=4):
return str("A: {}, mu: {}, sigma: {}".format(round(self.A, ndigits),
round(self.mu, ndigits),
round(self.sigma, ndigits)))
## set up a new plot
fig, axes = plt.subplots() # makes new plot
plt.grid(True)
plt.title('test')
## plot the data
plt.plot(x, mock_spectrum, linestyle='steps')
## Initial guess A, mu, sigma
P0 = [12,3127,1]
coeff, var_matrix = scipy.optimize.curve_fit(gaussfcn,
x,
mock_spectrum,
P0)
## create a Gauss object with the fitted coefficients for better code readability
g = Gauss(*coeff)
perr = np.sqrt(np.diag(var_matrix))
print("Fit result: {}".format(g.as_string()))
print("Fit uncertainties [%]: {}".format(100*perr/coeff))
## plot the result
axes.plot(x, g.value(x),
label = r'Gaussian fit, $\mu={}$, $\sigma={}$'.format(round(g.mu),round(g.sigma)))
plt.show()
解决方案
推荐阅读
- php - 如何创建管理页面以向下拉列表添加/删除元素?
- swift - 如何更改此行以消除 for 循环?
- javascript - 如何将字体真棒图标附加到 vueJS / Vuetify 中新创建的元素?
- linux - 如何检查 stash 上是否存在本地不再存在的未跟踪/忽略文件?(混帐,Linux)
- docker - 如何从另一台机器访问 docker 容器?
- scroll - 在 Safari 上处理滚动动画的正确方法是什么
- java - JavaFX 多个动画矩形
- c++ - 在 nana cmake 上找不到 x11
- sql - 触发自动将元组添加到关系
- docker - ERR_ADDRESS_INVALID 试图连接到 docker 容器