feat:beta energy calibration通过b_energy数据重新拟合一条初始beta曲线
This commit is contained in:
parent
cf369218da
commit
f905f9951d
|
@ -1778,7 +1778,7 @@ public class SelfStationServiceImpl implements ISelfStationService {
|
|||
}
|
||||
map.put("CToE", fittingParaStr);
|
||||
List<Double> channel = new LinkedList<>();
|
||||
for (int i=0; i<255; ++i) {
|
||||
for (int i=0; i<511; ++i) {
|
||||
channel.add(Double.valueOf(i));
|
||||
}
|
||||
List<Double> energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara);
|
||||
|
@ -1804,28 +1804,38 @@ public class SelfStationServiceImpl implements ISelfStationService {
|
|||
// 高斯函数拟合得到拟合的中心道址,显示Energy vs. Channel
|
||||
//页面展示的表单数据数组
|
||||
List<TableWidget> table = new LinkedList<>();
|
||||
for (int i = 0; i < oldScatterSeries.size(); i++) {
|
||||
SeriseData data = oldScatterSeries.get(i);
|
||||
List<List<Double>> gammaEnergy = (List<List<Double>>) map.get("gammaEnergy");
|
||||
for (int i = 0; i < bElectronEnergy.size(); i++) {
|
||||
// 获取beta energy
|
||||
Double be = bElectronEnergy.get(i);
|
||||
// energy 转化为 channel
|
||||
Double bc = fittingParaToUi.get(0) + fittingParaToUi.get(1) * be + fittingParaToUi.get(2) * Math.sqrt(be);
|
||||
// 计算得到gamma energy
|
||||
Double ge = 661.656 - be;
|
||||
// todo 需要换成gamma公式
|
||||
Double gc = 1.51421142654972 + 3.018099280336795 * ge + 2.6690095368611742E-6 * Math.sqrt(ge);
|
||||
// 通过gamma channel获取gammaGate数据
|
||||
List<SeriseData> seriseDatas = getGateGamma(5, 4096, gc.intValue(), betaDataFile);
|
||||
// 开始计算中心道址, 范围:左[C_β-3√(C_β ), C_β+3√(C_β )]右
|
||||
WeightedObservedPoints points = new WeightedObservedPoints();
|
||||
// 通过散点图gamma的channel拿到当前beta横向数据
|
||||
List<SeriseData> seriseDatas = this.getGateGamma(5, 256, (int) data.getX(), betaDataFile);
|
||||
seriseDatas.forEach(f->{
|
||||
// x = beta channel, y = beta energy
|
||||
double x = f.getX();
|
||||
double left = x - Math.cbrt(x);
|
||||
double right = x + Math.cbrt(x);
|
||||
points.add(x, left, right);
|
||||
});
|
||||
// 使用高斯曲线拟合观测点
|
||||
GaussianCurveFitter fitter = GaussianCurveFitter.create();
|
||||
|
||||
double[] parameters = fitter.fit(points.toList());
|
||||
double left = bc - Math.cbrt(bc);
|
||||
double right = bc + Math.cbrt(bc);
|
||||
int sum = 0;
|
||||
for (SeriseData f : seriseDatas) {
|
||||
if(left < f.getX() && right > f.getX()){
|
||||
points.add(f.getX(), f.getY());
|
||||
sum += f.getX();
|
||||
}
|
||||
}
|
||||
// GaussianCurveFitter fitter = GaussianCurveFitter.create();
|
||||
// fitter.fit(points.toList());
|
||||
// todo 高斯拟合有问题,暂时使用平均值
|
||||
double v = sum / (right - left);
|
||||
//表单数据信息
|
||||
TableWidget tableWidget = new TableWidget();
|
||||
tableWidget.setRowCount(i+1);
|
||||
tableWidget.setChannel(parameters[0]);
|
||||
tableWidget.setEnergy(parameters[0]);
|
||||
System.out.println("table:" + parameters[0]);
|
||||
tableWidget.setChannel(v);
|
||||
tableWidget.setEnergy(be);
|
||||
table.add(tableWidget);
|
||||
}
|
||||
map.put("tableWidgets", table);
|
||||
|
@ -3336,7 +3346,7 @@ public class SelfStationServiceImpl implements ISelfStationService {
|
|||
}
|
||||
map.put("CToE", fittingParaStr);
|
||||
//填充道值数组的数据
|
||||
for (int i=0; i<255; i++) {
|
||||
for (int i=0; i<512; i++) {
|
||||
channels.add(Double.valueOf(i));
|
||||
}
|
||||
//计算道值的能量
|
||||
|
@ -3556,7 +3566,7 @@ public class SelfStationServiceImpl implements ISelfStationService {
|
|||
private List<SeriseData> getGateGamma(int channelWidth, int chartHeight, int gammaChannel, SelfStationData betaDataFile){
|
||||
List<SeriseData> serise_data = new LinkedList<>();
|
||||
//选择矩形框高度
|
||||
Integer flagHeight = channelWidth * (chartHeight/256);
|
||||
Integer flagHeight = channelWidth * (chartHeight/512);
|
||||
int value = Double.valueOf(flagHeight / 2).intValue();
|
||||
//计算得到最高值
|
||||
int up = gammaChannel - value;
|
||||
|
|
Loading…
Reference in New Issue
Block a user