Python 如何找到连续体并将其删除?

Python 如何找到连续体并将其删除?,python,data-modeling,Python,Data Modeling,我正在建立一个代码,该代码遍历光谱数据,找到连续体并删除它,这样正常通量为0,我可以正确计算发射线的通量 问题是这个连续体并不是一个常数,而且大多数时候看起来像根函数(不总是)。我怎样才能让它找到连续体 这是我的光谱数据,这是我如何找到峰的 光谱数据: m1 = modeling.models.Gaussian1D(amplitude=10, mean=3726, stddev=8) m2 = modeling.models.Gaussian1D(amplitude=10, mean=3126,

我正在建立一个代码,该代码遍历光谱数据,找到连续体并删除它,这样正常通量为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()
这是guassian的发现:

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()

这更多的是数据分析,而不是编程,这可能是离题的。也许是正确的地方。根据你的要求,我也把它放在了数据科学上,但在那里它被删除了,因为它不是关于数据科学的。所以如果你能帮我的话,那将是令人惊讶的,我在谱线拟合方面不是很在行。但在理论上,你不应该删除连续体,你应该把连续体和直线都放在一起。模型应该是这样的:标准化常数+连续统+每条发射线一个高斯分布。连续介质成分可以是斜率、平方根或任何合适的东西。一旦拟合良好,你就可以估计每一条线的通量,积分相应的高斯分布。这更多的是数据分析,而不是编程,可能在这里是离题的。也许是正确的地方。根据你的要求,我也把它放在了数据科学上,但在那里它被删除了,因为它不是关于数据科学的。所以如果你能帮我的话,那将是令人惊讶的,我在谱线拟合方面不是很在行。但在理论上,你不应该删除连续体,你应该把连续体和直线都放在一起。模型应该是这样的:标准化常数+连续统+每条发射线一个高斯分布。连续介质成分可以是斜率、平方根或任何合适的东西。一旦拟合良好,您就可以估计每一条线的通量,积分相应的高斯分布。