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.
1、寻峰
在寻峰前先进行sinp去除本底处理, 再寻峰;
使用SnipRemoveBackground::Snip去除本底处理,
有能量刻度和分辨率刻度参数时示例参考TestCase中的TestSnipRemoveBackground1。
没有能量刻度和分辨率刻度参数时示例参考TestCase中的TestSnipRemoveBackground2。
使用SnipRemoveBackground::Snip得到谱本底数据, 用谱数据减去本底数据为, 为寻峰谱数据。
使用FindPeaksBySvd寻峰;
// 峰值结构体,存储峰值特征
typedef struct {
int left = 0.0f; // 峰所在数据区域的左边位置
int width = 0.0f; // 峰所在数据区域的宽度
double height = 0.0f; // 峰所在数据区域的高度
int pos = 0.0f; // 峰所在位置
} PeakInfo;
成员函数FindPeaks进行寻峰, 入参const arma::vec spec_data是数据的y值。
示例参考TestCase中的TestFindPeaksBySvd。
2、高斯多项式拟合
使用GaussPolyCoe多项式拟合;
适用于能量刻度,一次拟合和二次拟合,同时支持三次拟合;
在下式中:
x为通道地址道数, y为刻度能量;
一次拟合: GaussPolyCoe::PolynomialFit(x, y, 1);
二次拟合: GaussPolyCoe::PolynomialFit(x, y, 2);
拟合结果返回系数 [a0, a1, ..., an] 表示 y = a0 + a1*x + ... + an*x^n;
根据拟合结果返回的参数带入相应的数学模型中可将道地址道数转为能量(如下):
一次拟合后转换函数: MathModelDefine中的一次函数LinearFunction(x为道址, 结果为能量);
二次拟合后转换函数: MathModelDefine中的一次函数QuadraticPolynomial(x为道址, 结果为能量);
示例参考TestCase中的TestGaussPolyCoe。
3、分辨率/半高宽拟合
使用NolinearLeastSquaresCurveFit::Lsqcurvefit
初始猜测系数使用如下参数:
vec p0 = { 1.0, 1.0 }; // 初始猜测: a≈1, b≈1
在下式中: x为能量, y为半高宽FWHM;
NolinearLeastSquaresCurveFit::Lsqcurvefit(FwhmModel, x, y, p0);
拟合结果返回系数[k, c]
示例参考TestCase中的TestLsqcurvefit_FwhmModel。
4、光子峰模型
使用NolinearLeastSquaresCurveFit::Lsqcurvefit
初始猜测系数使用如下函数计算:
EstimatePhotonPeakModelInitialParams(x, y);
还可使用客户提供的初始参数:待定
在下式中: x为峰数据区域能量数据, y为粒子计数;
NolinearLeastSquaresCurveFit::Lsqcurvefit(PhotonPeakModel, x, y, p0);
拟合结果返回系数[A, delt, H, W, C, P]其中参数意义如下:
A为峰高; P为峰位; delt*2.355为半高宽FWHM;
示例参考TestCase中的TestLsqcurvefit_PhotonPeakModel。
5、粒子数据符合
使用ConformitySpectrum::EventFilter符合事件筛选处理;
在下式中: raw_spec_data为原始粒子谱数据, conformity_event_time_win符合时间窗默认50ns
ConformitySpectrum::EventFilter(raw_spec_data, conformity_event_time_win)
示例参考TestCase中的TestConformitySpectrumEventFilter。
6、效率刻度
使用EnergyEfficiencyFit::SemiEmpiricalFit
在下式中: E 能量数据( keV) eps 效率数据(需>0) , 拟合结果系数coeff为a0~...a_order
vec coeff = EnergyEfficiencyFit::SemiEmpiricalFit(E, eps, order);
拟合结果返回系数[a0, a1, a2, ...]对应:
ln(ε) = a0 + a1*lnE + a2*(lnE)^2 + a3*(lnE)^3 + ... + ai*(lnE)^i
示例参考TestCase中的TestEnergyEfficiencyFit。
在实际使用时注意, 数据要求: 一次拟合需至少2个标准源数据点, 二次拟合需至少3个标准源数据点, 数据点数必须大于多项式阶数,
数据点越多拟合越稳定效率值需通过实验计算ε=N/(A*P*t)即, 确保准确性: N为净峰计数, A为活度, P为分支比, t为测量时间
7、2-9次能谱符合处理
CoincidenceSpectrum::F2t9Order::ProcessCoincidence
示例参考TestCase中的TesCoincidenceSpectrumF2t9Order。
8、峰面积( 积分计算)
AdaptiveSimpsonIntegrate::integrate
示例参考TestCase中的TestAdaptiveSimpsonIntegrate
将光子峰拟合结果返回系数[A, delt, H, W, C, P]灌入AdaptiveSimpsonIntegrate::integrate参入;
积分范围下限是P - 3 * delt, 上限是P + 3 * delt;