From 566657c339d0d1b5b609bdb1571d1faf698fc51d Mon Sep 17 00:00:00 2001 From: xiaoguangbin Date: Thu, 25 Jul 2024 14:24:51 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9Abeta=20calibration=20table=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SelfStationServiceImpl.java | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 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 5d3d35a3..f8d110b5 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 @@ -13,12 +13,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.cache.Cache; -import com.google.common.collect.Maps; import org.apache.commons.io.FileUtils; +import org.apache.commons.math3.fitting.GaussianCurveFitter; +import org.apache.commons.math3.fitting.WeightedObservedPoints; import org.jeecg.common.api.vo.Result; import org.jeecg.common.cache.LocalCache; import org.jeecg.common.cache.SelfCache; -import org.jeecg.common.constant.DateConstant; import org.jeecg.common.properties.ParameterProperties; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.system.util.JwtUtil; @@ -1742,6 +1742,9 @@ public class SelfStationServiceImpl implements ISelfStationService { } //Beta-Gamma Spectrum: QC 散点图相关数据 List histogramDataList = new LinkedList<>(); + // todo 减少数量 暂时写512 + gChannels = 512; + bChannels = 512; for (int column=0; column table = new LinkedList<>(); + for (int i = 0; i < oldScatterSeries.size(); i++) { + SeriseData data = oldScatterSeries.get(i); + 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()); + //表单数据信息 + TableWidget tableWidget = new TableWidget(); + tableWidget.setRowCount(i+1); + tableWidget.setChannel(parameters[0]); + tableWidget.setEnergy(parameters[0]); + System.out.println("table:" + parameters[0]); + table.add(tableWidget); + } + map.put("tableWidgets", table); + //判断人工交互的道值与能量对应参数数组是否为空 if (Objects.nonNull(betaDataFile.getBgPara()) && CollectionUtils.isNotEmpty(betaDataFile.getBetaList())) { @@ -2998,6 +3029,39 @@ public class SelfStationServiceImpl implements ISelfStationService { return result; } + private List getGateGamma(int channelWidth, int chartHeight, int gammaChannel, SelfStationData betaDataFile){ + List serise_data = new LinkedList<>(); + //选择矩形框高度 + Integer flagHeight = channelWidth * (chartHeight/256); + int value = Double.valueOf(flagHeight / 2).intValue(); + //计算得到最高值 + int up = gammaChannel - value; + if (up<0){ + up = 0; + } + //计算得到最低值 + int down = up + value; + EnergySpectrumStruct struct = betaDataFile.getQcStruct(); + if (Objects.nonNull(struct)) { + //Beta-Gamma Spectrum: QC + long bChannels = struct.b_channels; + List hCounts = struct.h_counts; + + for ( int i=0; i