From 954eec68e32ee86bfd79456c694b1f56b5dc3cc6 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Wed, 20 Dec 2023 13:42:26 +0800 Subject: [PATCH] =?UTF-8?q?gamma=E4=B8=BB=E9=A1=B5=E9=9D=A2=E9=80=89?= =?UTF-8?q?=E6=8B=A9channel=E5=8A=A0=E8=BD=BD=E5=AF=B9=E5=BA=94=E6=A0=B8?= =?UTF-8?q?=E7=B4=A0=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=E9=81=93=E5=80=BC?= =?UTF-8?q?=E9=94=99=E4=BD=8D=E5=AF=BC=E8=87=B4=E7=BB=93=E6=9E=9C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9=20=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E5=88=86=E6=9E=90=E6=A8=A1=E5=9D=97gamma=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=9F=A5=E7=9C=8Bmdc=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5halflifeView?= =?UTF-8?q?=E5=B1=95=E7=A4=BAhalflife=E7=9A=84=E5=80=BC=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=8E=A5=E5=8F=A3gamma=E4=B8=BB=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E9=80=89=E6=8B=A9Nuclide=20Review=E4=BF=A1=E6=81=AF=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3gamma=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2Nuclide=20Review=E9=A1=B5=E9=9D=A2=E5=88=87=E6=8D=A2nu?= =?UTF-8?q?clide=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/modules/entity/vo/CalMDCInfo.java | 7 +- .../modules/controller/GammaController.java | 22 +- .../jeecg/modules/service/IGammaService.java | 8 +- .../service/impl/GammaServiceImpl.java | 220 +++++++++++++++++- 4 files changed, 250 insertions(+), 7 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/CalMDCInfo.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/CalMDCInfo.java index 4c9c1513..d835bbf9 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/CalMDCInfo.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/CalMDCInfo.java @@ -34,10 +34,15 @@ public class CalMDCInfo implements Serializable { private Double mdcErr; /** - * 半衰期(单位-秒) + * 半衰期(单位-天) */ private Double halflife; + /** + * 半衰期(单位-天) + */ + private String halflifeView; + /** * 分支比 */ diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java index 74fbe3eb..df17007a 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java @@ -132,8 +132,8 @@ public class GammaController { @GetMapping("getGammaSelPosNuclide") @ApiOperation(value = "gamma主页面选择channel加载对应核素信息接口", notes = "gamma主页面选择channel加载对应核素信息接口") - public Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request) { - return gammaService.getGammaSelPosNuclide(sampleId, fileName, channel, request); + public Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, double energy, HttpServletRequest request) { + return gammaService.getGammaSelPosNuclide(sampleId, fileName, channel, energy, request); } @GetMapping("getSelPosNuclide") @@ -178,12 +178,24 @@ public class GammaController { return gammaService.addGeneralComment(commentsInfo.getFileName(), commentsInfo.getComments(), request); } + @GetMapping("nuclideReviewGamma") + @ApiOperation(value = "gamma主页面选择Nuclide Review信息接口", notes = "gamma主页面选择Nuclide Review信息接口") + public Result nuclideReviewGamma(Integer sampleId, String fileName, Double channel, HttpServletRequest request) { + return gammaService.nuclideReviewGamma(sampleId, fileName, channel, request); + } + @GetMapping("nuclideReview") @ApiOperation(value = "InteractiveTool页面选择Nuclide Review信息接口", notes = "InteractiveTool页面选择Nuclide Review信息接口") public Result nuclideReview(Integer sampleId, String fileName, Double channel, HttpServletRequest request) { return gammaService.nuclideReview(sampleId, fileName, channel, request); } + @GetMapping("changeNuclideGamma") + @ApiOperation(value = "gamma主页面Nuclide Review页面切换nuclide数据", notes = "gamma主页面Nuclide Review页面切换nuclide数据") + public Result changeNuclideGamma(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request) { + return gammaService.changeNuclideGamma(sampleId, fileName, nuclideName, request); + } + @GetMapping("changeNuclide") @ApiOperation(value = "Nuclide Review页面切换nuclide数据", notes = "Nuclide Review页面切换nuclide数据") public Result changeNuclide(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request) { @@ -468,6 +480,12 @@ public class GammaController { gammaService.exportRLR(gammaRLR, response); } + @GetMapping("viewMDC") + @ApiOperation(value = "查看MDC计算结果", notes = "查看MDC计算结果") + public Result viewMDC(String fileName, HttpServletRequest request) { + return gammaService.viewMDC(fileName, request); + } + @GetMapping("viewAutomaticAnalysisLog") @ApiOperation(value = "查看Automatic Analysis Log页面数据", notes = "查看Automatic Analysis Log页面数据") public void viewAutomaticAnalysisLog(Integer sampleId, HttpServletResponse response) { diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java index 99a78444..dca1b9c4 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java @@ -51,7 +51,7 @@ public interface IGammaService{ Result fitPeak(int left, int right, String fileName, HttpServletRequest request); - Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request); + Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, double energy, HttpServletRequest request); Result getSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request); @@ -67,8 +67,12 @@ public interface IGammaService{ Result addGeneralComment(String fileName, String comments, HttpServletRequest request); + Result nuclideReviewGamma(Integer sampleId, String fileName, Double channel, HttpServletRequest request); + Result nuclideReview(Integer sampleId, String fileName, Double channel, HttpServletRequest request); + Result changeNuclideGamma(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request); + Result changeNuclide(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request); Result searchNuclide(Integer sampleId, String fileName, Double energy, Double tolerance, HttpServletRequest request); @@ -165,6 +169,8 @@ public interface IGammaService{ void exportRLR(GammaRLR gammaRLR, HttpServletResponse response); + Result viewMDC(String fileName, HttpServletRequest request); + void viewAutomaticAnalysisLog(Integer sampleId, HttpServletResponse response); Result viewGammaviewerLog(Integer sampleId, String fileName, HttpServletRequest request); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java index ed986eb9..efdb43b5 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java @@ -1871,7 +1871,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } @Override - public Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request) { + public Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, double energy, HttpServletRequest request) { Result result = new Result(); Map map = new HashMap<>(); String userName = JwtUtil.getUserNameByToken(request); @@ -1884,15 +1884,20 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi if (phd.getVPeak().size() < 1) { return result; } +// if (energy > 0) { +// channel = (int) gammaFileUtil.GetEnergyByFloatChan(phd, (int) energy); +// } else if (channel > 0){ +// energy = gammaFileUtil.GetEnergyByFloatChan(phd, channel); +// } int index = gammaFileUtil.FindNearPeak(phd.getVPeak(), channel, false); //获取缓存的核素信息 Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); Map nuclCoincidenceSumMap = (Map) redisUtil.get("nuclCoincidenceSumMap"); //计算核素范围的最小能量值 - double min = phd.getVPeak().get(index).energy - phd.getSetting().getEnergyTolerance(); + double min = energy - phd.getSetting().getEnergyTolerance(); //计算核素范围的最大能量值 - double max = phd.getVPeak().get(index).energy + phd.getSetting().getEnergyTolerance(); + double max = energy + phd.getSetting().getEnergyTolerance(); //声明返回的数组内容 List list_possible = new LinkedList<>(); //判断缓存的核素信息是否为空 @@ -2186,6 +2191,88 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi return Result.ok(); } + @Override + public Result nuclideReviewGamma(Integer sampleId, String fileName, Double channel, HttpServletRequest request) { + Result result = new Result(); + if (Objects.isNull(channel) || channel <= 0) { + return result; + } + Map map = new HashMap<>(); + String userName = JwtUtil.getUserNameByToken(request); + Cache phdCache = localCache.getPHDCache(); + PHDFile phd = phdCache.getIfPresent(fileName + StringPool.DASH + userName); + if (Objects.isNull(phd)) { + result.error500("Please select the parse file first!"); + return result; + } + Map colorMap = sysUserColorService.initColor(userName); + double value = gammaFileUtil.GetEnergyByFloatChan(phd, channel.intValue()-1); + BigDecimal bigDecimal = BigDecimal.valueOf(value); + bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP); + map.put("energy", bigDecimal); + //返回的核素列信息 + List nuclideList = new LinkedList<>(); + double min = bigDecimal.doubleValue() - 0.5; + double max = bigDecimal.doubleValue() + 0.5; + //获取缓存的核素信息 + Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + Map nuclCoincidenceSumMap = (Map) redisUtil.get("nuclCoincidenceSumMap"); + //判断缓存的核素信息是否为空 + if (CollectionUtils.isNotEmpty(nuclideMap)) { + //遍历核素信息 + for (Map.Entry entry:nuclideMap.entrySet()) { + //获取核素的关联信息 + NuclideLines nuclideLines = entry.getValue(); + //获取核素关联的全部能量信息 + List venergy = nuclideLines.getVenergy(); + //遍历能量 + for (int i=0; i min && venergy.get(i) < max) { + nuclideList.add(entry.getKey()); + break; + } + } + } + } + if (phd.getHeader().getSystem_type().equals("P")) { + if (CollectionUtils.isNotEmpty(nuclCoincidenceSumMap)) { + //遍历核素信息 + for (Map.Entry entry:nuclCoincidenceSumMap.entrySet()) { + //获取核素的关联信息 + NuclideLines nuclideLines = entry.getValue(); + //获取核素关联的全部能量信息 + List venergy = nuclideLines.getVenergy(); + //遍历能量 + for (int i=0; i min && venergy.get(i) < max) { + nuclideList.add(entry.getKey()); + break; + } + } + } + } + } + nuclideList = nuclideList.stream().distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(nuclideList)) { + map.put("list", nuclideList); + String name = nuclideList.get(0); + InitTable(name, map, phd, colorMap, nuclideMap); + } else { + map.put("list", nuclideList); + map.put("chart", new LinkedList<>()); + map.put("table", new LinkedList<>()); + map.put("name", ""); + map.put("lines", ""); + map.put("halfLife", ""); + map.put("halfLifeErr", ""); + } + result.setSuccess(true); + result.setResult(map); + return result; + } + @Override public Result nuclideReview(Integer sampleId, String fileName, Double channel, HttpServletRequest request) { Result result = new Result(); @@ -2323,6 +2410,76 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } } + @Override + public Result changeNuclideGamma(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request) { + Result result = new Result(); + String userName = JwtUtil.getUserNameByToken(request); + Map map = new HashMap<>(); + Cache phdCache = localCache.getPHDCache(); + PHDFile phd = phdCache.getIfPresent(fileName + StringPool.DASH + userName); + if (Objects.isNull(phd)) { + result.error500("Please select the parse file first!"); + return result; + } + Map colorMap = sysUserColorService.initColor(userName); + //获取缓存的核素信息 + Map nuclideLinesMap = new HashMap<>(); + Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + Map nuclCoincidenceSumMap = (Map) redisUtil.get("nuclCoincidenceSumMap"); + if (phd.getHeader().getSystem_type().equals("P")) { + NuclideLines newNuclideLines = new NuclideLines(); + List fullNames = new LinkedList<>(); + List vEnergy = new LinkedList<>(); + List vEnergyUncert = new LinkedList<>(); + List vYield = new LinkedList<>(); + List vYieldUncert = new LinkedList<>(); + if (CollectionUtils.isNotEmpty(nuclideMap)) { + for (Map.Entry entry:nuclideMap.entrySet()) { + NuclideLines nuclideLines = entry.getValue(); + if (nuclideLines.fullNames.contains(nuclideName)) { + nuclideName = entry.getKey(); + } + } + } + if (CollectionUtils.isNotEmpty(nuclCoincidenceSumMap)) { + for (Map.Entry entry:nuclCoincidenceSumMap.entrySet()) { + NuclideLines nuclideLines = entry.getValue(); + if (nuclideLines.fullNames.contains(nuclideName)) { + nuclideName = entry.getKey(); + } + } + } + NuclideLines nuclideLines = nuclideMap.get(nuclideName); + if (Objects.nonNull(nuclideLines)) { + fullNames.addAll(nuclideLines.fullNames); + vEnergy.addAll(nuclideLines.venergy); + vEnergyUncert.addAll(nuclideLines.vuncertE); + vYield.addAll(nuclideLines.vyield); + vYieldUncert.addAll(nuclideLines.vuncertY); + } + NuclideLines nuclideSumLines = nuclCoincidenceSumMap.get(nuclideName); + if (Objects.nonNull(nuclideSumLines)) { + fullNames.addAll(nuclideSumLines.fullNames); + vEnergy.addAll(nuclideSumLines.venergy); + vEnergyUncert.addAll(nuclideSumLines.vuncertE); + vYield.addAll(nuclideSumLines.vyield); + vYieldUncert.addAll(nuclideSumLines.vuncertY); + } + newNuclideLines.fullNames = fullNames; + newNuclideLines.venergy = vEnergy; + newNuclideLines.vuncertE = vEnergyUncert; + newNuclideLines.vyield = vYield; + newNuclideLines.vuncertY = vYieldUncert; + nuclideLinesMap.put(nuclideName, newNuclideLines); + } else { + nuclideLinesMap = nuclideMap; + } + InitTable(nuclideName, map, phd, colorMap, nuclideLinesMap); + result.setSuccess(true); + result.setResult(map); + return result; + } + @Override public Result changeNuclide(Integer sampleId, String fileName, String nuclideName, HttpServletRequest request) { Result result = new Result(); @@ -2337,6 +2494,23 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi Map colorMap = sysUserColorService.initColor(userName); //获取缓存的核素信息 Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + if (CollectionUtils.isNotEmpty(nuclideMap)) { + for (Map.Entry entry:nuclideMap.entrySet()) { + NuclideLines nuclideLines = entry.getValue(); + if (nuclideLines.fullNames.contains(nuclideName)) { + nuclideName = entry.getKey(); + } + } + } + Map nuclCoincidenceSumMap = (Map) redisUtil.get("nuclCoincidenceSumMap"); + if (phd.getHeader().getSystem_type().equals("P") && CollectionUtils.isNotEmpty(nuclCoincidenceSumMap)) { + for (Map.Entry entry:nuclCoincidenceSumMap.entrySet()) { + NuclideLines nuclideLines = entry.getValue(); + if (nuclideLines.fullNames.contains(nuclideName)) { + nuclideName = entry.getKey(); + } + } + } InitTable(nuclideName, map, phd, colorMap, nuclideMap); result.setSuccess(true); result.setResult(map); @@ -4649,6 +4823,46 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } } + @Override + public Result viewMDC(String fileName, HttpServletRequest request) { + Result result = new Result(); + String userName = JwtUtil.getUserNameByToken(request); + Cache phdCache = localCache.getPHDCache(); + PHDFile phd = phdCache.getIfPresent(fileName + StringPool.DASH + userName); + if (Objects.isNull(phd)) { + result.error500("Please select the parse file first!"); + return result; + } + List mdcInfoList = new LinkedList<>(); + Map mdcInfoMap = phd.getMdcInfoMap(); + if (CollectionUtils.isNotEmpty(mdcInfoMap) && phd.isBAnalyed()) { + for (String key:mdcInfoMap.keySet()) { + CalMDCInfo mdcInfo = mdcInfoMap.get(key); + CalMDCInfo calMDCInfo = new CalMDCInfo(); + calMDCInfo.setNuclideName(mdcInfo.getNuclideName()); + if (Objects.nonNull(mdcInfo.getMdc()) && Double.isFinite(mdcInfo.getMdc())) { + calMDCInfo.setMdc( Double.parseDouble(NumberFormatUtil.numberFormat(String.valueOf(mdcInfo.getMdc()))) ); + } + if (Objects.nonNull(mdcInfo.getEnergy()) && Double.isFinite(mdcInfo.getEnergy())) { + calMDCInfo.setEnergy( Double.parseDouble(NumberFormatUtil.numberFormat(String.valueOf(mdcInfo.getEnergy()))) ); + } + if (Objects.nonNull(mdcInfo.getEfficiency()) && Double.isFinite(mdcInfo.getEfficiency())) { + calMDCInfo.setEfficiency( Double.parseDouble(NumberFormatUtil.numberFormat(String.valueOf(mdcInfo.getEfficiency()))) ); + } + if (Objects.nonNull(mdcInfo.getYield()) && Double.isFinite(mdcInfo.getYield())) { + calMDCInfo.setYield( Double.parseDouble(NumberFormatUtil.numberFormat(String.valueOf(mdcInfo.getYield()))) ); + } + if (Objects.nonNull(mdcInfo.getHalflife()) && Double.isFinite(mdcInfo.getHalflife())) { + calMDCInfo.setHalflifeView(mdcInfo.getHalflife()+"D"); + } + mdcInfoList.add(calMDCInfo); + } + } + result.setSuccess(true); + result.setResult(mdcInfoList); + return result; + } + @Override public void viewAutomaticAnalysisLog(Integer sampleId, HttpServletResponse response) { String logPath = spectrumAnalysisMapper.findAutomaticLogPath(sampleId);