diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java index 5f58b33d..14344381 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java @@ -1818,7 +1818,7 @@ public class SelfStationServiceImpl implements ISelfStationService { } map.put("CToE", fittingParaStr); List channel = new LinkedList<>(); - for (int i=0; i<255; ++i) { + for (int i=0; i<511; ++i) { channel.add(Double.valueOf(i)); } List energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara); @@ -1842,30 +1842,42 @@ public class SelfStationServiceImpl implements ISelfStationService { // E_β=661.6-E_γ,E_γ=F(C) //中心:C_β=F(E_β),范围:左[C_β-3√(C_β ), C_β+3√(C_β )]右 // 高斯函数拟合得到拟合的中心道址,显示Energy vs. Channel + // 得到gamma谱 e2c公式 + List gFittingPara = EnergySpectrumHandler.GetFileFittingPara(gEnergy, gCentroidChannel); //页面展示的表单数据数组 List table = new LinkedList<>(); - for (int i = 0; i < oldScatterSeries.size(); i++) { - SeriseData data = oldScatterSeries.get(i); + List> gammaEnergy = (List>) 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; + // gamma energy 转化 channel + Double gc = gFittingPara.get(0) + gFittingPara.get(1) * ge + gFittingPara.get(2) * Math.sqrt(ge); + // 通过gamma channel获取gammaGate数据 + List seriseDatas = getGateGamma(5, 4096, gc.intValue(), betaDataFile); + // 开始计算中心道址, 范围:左[C_β-3√(C_β ), C_β+3√(C_β )]右 WeightedObservedPoints points = new WeightedObservedPoints(); - // 通过散点图gamma的channel拿到当前beta横向数据 - List 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); @@ -3377,7 +3389,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)); } //计算道值的能量 @@ -3597,7 +3609,7 @@ public class SelfStationServiceImpl implements ISelfStationService { private List getGateGamma(int channelWidth, int chartHeight, int gammaChannel, SelfStationData betaDataFile){ List 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;