EnergySpectrumAnalyer/src/DataCalcProcess/MathModelDefine.h

57 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MATHMODELDEFINE_H
#define MATHMODELDEFINE_H
#ifndef ARMA_WARN_LEVEL
#define ARMA_WARN_LEVEL 1
#endif
#include <armadillo>
// 一次函数 y = a0 + a1*x
double LinearFunction(double x, double a0, double a1);
arma::vec LinearFunction(const arma::vec& x, double a0, double a1);
// 二次函数 y = a0 + a1*x + a2*x^2
double QuadraticPolynomial(double x, double a0, double a1, double a2);
arma::vec QuadraticPolynomial(const arma::vec& x, double a0, double a1, double a2);
// 定义模型函数y = a*exp(b*x)
double ExpModel(double x, const arma::vec& p);
// 能量分辨率模型FWHM = sqrt(a² + b²·E)
// double FwhmModel(double E, const arma::vec& p);
// 能量分辨率模型FWHM = k * sqrt(E) + c
double FwhmModel(double E, const arma::vec& p);
// 高斯模型: y = A * exp(-pow(x - mu, 2) / (2 * pow(sigma, 2)))
double GaussianModel(double x, const arma::vec& p);
// 预估GaussianModel初始参数估计值
arma::vec EstimateGaussianModelInitialParams(const arma::vec& x, const arma::vec& y);
// 高斯峰+阶跃背景+常数背景模型: y=A*exp(-pow(x-P,2)/(2*pow(delt,2))) + H/(1+exp((x-P)/W)) + C
double PhotonPeakModel(double x, const arma::vec& p);
arma::vec PhotonPeakModel(const arma::vec& x, const arma::vec& p);
// 拖尾: y= H/(1+exp((x-P)/W)) + C
arma::vec PhotonPeakModelTuowei(const arma::vec& x, const arma::vec& p);
// 预估PhotonPeakModel初始参数估计值
arma::vec EstimatePhotonPeakModelInitialParams(const arma::vec& x, const arma::vec& y);
// 电子峰模型: y=Bg + A * pow((1 + pow(x/a, 2)), -m) * exp(-delt*atan(x/a));
double ElectronPeakModel(double x, const arma::vec& p);
arma::vec ElectronPeakModel(const arma::vec& x, const arma::vec& p);
// 预估ElectronPeakModel初始参数估计值
arma::vec EstimateElectronPeakModelInitialParams(const arma::vec& x, const arma::vec& y);
// 效率值实验计算N为净峰计数A为活度P为分支比t为测量时间s
double EfficiencyExperimentalCalc(int N, double A, double P, double t);
// 光子能量探测效率
// ln(ε) = a0 + a1*lnE + a2*(lnE)^2 + a3*(lnE)^3 + ... + ai*(lnE)^i
double EnergyEfficiency(double E, const arma::vec& coeffs) ;
#endif // MATHMODELDEFINE_H