From f905f9951dbfdf0aac700dc66cbab67fd32f05e2 Mon Sep 17 00:00:00 2001 From: xiaoguangbin Date: Mon, 29 Jul 2024 19:34:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=EF=BC=9Abeta=20energy=20calibration?= =?UTF-8?q?=E9=80=9A=E8=BF=87b=5Fenergy=E6=95=B0=E6=8D=AE=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=8B=9F=E5=90=88=E4=B8=80=E6=9D=A1=E5=88=9D=E5=A7=8B?= =?UTF-8?q?beta=E6=9B=B2=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SelfStationServiceImpl.java | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) 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 e4e1d028..072d3d9e 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 @@ -1778,7 +1778,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); @@ -1804,28 +1804,38 @@ public class SelfStationServiceImpl implements ISelfStationService { // 高斯函数拟合得到拟合的中心道址,显示Energy vs. Channel //页面展示的表单数据数组 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; + // todo 需要换成gamma公式 + Double gc = 1.51421142654972 + 3.018099280336795 * ge + 2.6690095368611742E-6 * 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); @@ -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 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; From c6ea38f2d32c38f3a7019664c72926470970049f Mon Sep 17 00:00:00 2001 From: xiaoguangbin Date: Tue, 30 Jul 2024 10:44:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat=EF=BC=9AviewBeta=20calibration?= =?UTF-8?q?=E8=A1=A5=E5=85=85gamma=20energy=20=E8=BD=AC=E5=8C=96=20channel?= =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/service/impl/SelfStationServiceImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 8b5a973a..29266874 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 @@ -1844,6 +1844,8 @@ 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<>(); List> gammaEnergy = (List>) map.get("gammaEnergy"); @@ -1854,8 +1856,8 @@ public class SelfStationServiceImpl implements ISelfStationService { 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 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_β )]右 @@ -1872,7 +1874,7 @@ public class SelfStationServiceImpl implements ISelfStationService { // GaussianCurveFitter fitter = GaussianCurveFitter.create(); // fitter.fit(points.toList()); // todo 高斯拟合有问题,暂时使用平均值 - double v = sum / (right - left); + Double v = sum / (right - left); //表单数据信息 TableWidget tableWidget = new TableWidget(); tableWidget.setRowCount(i+1);