diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java index f34fffec..08d144b6 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java @@ -1,5 +1,10 @@ package org.jeecg.modules.controller; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.vo.Result; @@ -15,6 +20,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.List; @RestController @@ -51,8 +58,12 @@ public class SelfStationController { @PutMapping("updateROI") @ApiOperation(value = "更新ROI范围", notes = "更新ROI范围") - public Result updateROI(@RequestBody List roiParams, @RequestParam String sampleFileName, HttpServletRequest request) { - return selfStationService.updateROI(roiParams, sampleFileName, request); + public Result updateROI(@RequestParam String roiParams, @RequestParam String sampleFileName, HttpServletRequest request) { + if (StrUtil.isBlank(roiParams)) { + return Result.error("roiParams cannot be empty!"); + } + List roiParamList = JSONArray.parseArray(roiParams, ROIParam.class); + return selfStationService.updateROI(roiParamList, sampleFileName, request); } @GetMapping("energyCalibration") @@ -281,6 +292,12 @@ public class SelfStationController { return selfStationService.fitting(fittingBody.getParamA(), fittingBody.getParamB(), fittingBody.getParamC(), fittingBody.getTempPoints(), fittingBody.getCount(), fittingBody.getSampleFileName(), fittingBody.getTabName(), fittingBody.isFittingBtn(), request); } + @GetMapping("getGammaGated") + @ApiOperation(value = "获取gamma对应count数据", notes = "获取gamma对应count数据") + public Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId, String qcFileName, String sampleFileName, HttpServletRequest request) { + return selfStationService.getGammaGated(chartHeight, channelWidth, gammaChannel, sampleId, qcFileName, sampleFileName, request); + } + @GetMapping("NuclideLibrary") @ApiOperation(value = "查看Nuclide Library页面数据", notes = "查看Nuclide Library页面数据") public Result NuclideLibrary(Integer sampleId, String fileName, String editEnergy, double err, String libraryName, String nuclideName, HttpServletRequest request) { diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java index dbecb3b0..39b0d5d9 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java @@ -95,6 +95,8 @@ public interface ISelfStationService { Result fitting(Double paramA, Double paramB, Double paramC, List tempPointsArray, Integer count, String sampleFileName, String tabName, boolean fittingBtn, HttpServletRequest request); + Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId, String qcFileName, String sampleFileName, HttpServletRequest request); + Result NuclideLibrary(Integer sampleId, String fileName, String editEnergy, double err, String libraryName, String nuclideName, HttpServletRequest request); Result configUserLibrary(Integer sampleId, String fileName, HttpServletRequest request); 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 6cd40c25..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())) { //存储计算参数道值 @@ -2944,6 +2980,89 @@ public class SelfStationServiceImpl implements ISelfStationService { return result; } + @Override + public Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId, String qcFileName, String sampleFileName, HttpServletRequest request) { + Result result = new Result(); + Map map = new HashMap<>(); + //获取用户名称 + String userName = JwtUtil.getUserNameByToken(request); + //获取自建台站缓存信息 + Cache selfCache = selfStationCache.getSelfCache(); + SelfStationData betaDataFile = selfCache.getIfPresent(sampleFileName + StringPool.DASH + userName); +// Cache cache = betaCache.getBetaCache(); +// BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName); + if (Objects.isNull(betaDataFile)) { + result.error500("Load basic file information first!"); + return result; + } + //选择矩形框高度 + 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; + List serise_data = new LinkedList<>(); + for ( int i=0; i 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